@@ -198,15 +198,15 @@ private ColumnDefinition ParseSelectColumnDefinition(SqlToken beginToken, SqlTok
198198 : alias ;
199199
200200 var sqlIndex = beginToken . SqlIndex ;
201- var sqlLength = ( endToken != null ? endToken . SqlIndex + endToken . Length : this . Sql . Length ) - beginToken . SqlIndex ;
201+ var sqlLength = ( endToken != null ? endToken . SqlIndex + endToken . Length : Sql . Length ) - beginToken . SqlIndex ;
202202
203203 return new ColumnDefinition ( sqlIndex , sqlLength , name , alias , true ) ;
204204 }
205205
206206 private ColumnDefinition ParseOrderColumnDefinition ( SqlToken beginToken , SqlToken endToken , string alias )
207207 {
208208 var sqlIndex = beginToken . SqlIndex ;
209- var sqlLength = ( endToken != null ? endToken . SqlIndex + endToken . Length : this . Sql . Length ) - beginToken . SqlIndex ;
209+ var sqlLength = ( endToken != null ? endToken . SqlIndex + endToken . Length : Sql . Length ) - beginToken . SqlIndex ;
210210
211211 return new ColumnDefinition ( sqlIndex , sqlLength , null , alias , false ) ;
212212 }
@@ -271,30 +271,24 @@ private IEnumerable<OrderDefinition> ParseOrderDefinitions(IEnumerator<SqlToken>
271271
272272 private OrderDefinition ParseOrderDefinition ( SqlToken beginToken , SqlToken endToken , SqlToken directionToken )
273273 {
274- ColumnDefinition column ;
275- bool ? isDescending = directionToken != null
276- ? directionToken . Equals ( "desc" , StringComparison . InvariantCultureIgnoreCase )
277- : default ( bool ? ) ;
274+ var isDescending = directionToken != null &&
275+ directionToken . Equals ( "desc" , StringComparison . InvariantCultureIgnoreCase ) ;
278276
279- if ( beginToken == endToken )
280- {
281- string columnNameOrIndex = beginToken . Value ;
282- if ( ! TryGetColumnDefinition ( columnNameOrIndex , out column ) )
283- {
284- // Column appears in order by clause, but not in select clause
285- column = ParseOrderColumnDefinition ( beginToken , endToken , "__c" + _nextOrderAliasIndex ++ ) ;
286- }
287- }
288- else
289- {
290- // Calculated sort order
277+ var columnNameOrIndex = beginToken == endToken
278+ ? beginToken . Value
279+ : null ;
280+
281+ ColumnDefinition column ;
282+ if ( ! TryGetColumnDefinition ( columnNameOrIndex , out column , beginToken , endToken ) )
283+ {
284+ // Column appears in order by clause, but not in select clause
291285 column = ParseOrderColumnDefinition ( beginToken , endToken , "__c" + _nextOrderAliasIndex ++ ) ;
292286 }
293287
294- return new OrderDefinition ( column , isDescending ?? false ) ;
288+ return new OrderDefinition ( column , isDescending ) ;
295289 }
296290
297- private bool TryGetColumnDefinition ( string columnNameOrIndex , out ColumnDefinition result )
291+ private bool TryGetColumnDefinition ( string columnNameOrIndex , out ColumnDefinition result , SqlToken beginToken , SqlToken endToken )
298292 {
299293 if ( ! string . IsNullOrEmpty ( columnNameOrIndex ) )
300294 {
@@ -315,6 +309,22 @@ private bool TryGetColumnDefinition(string columnNameOrIndex, out ColumnDefiniti
315309 }
316310 }
317311 }
312+ else
313+ {
314+ var sqlIndex = beginToken . SqlIndex ;
315+ var sqlLength = ( endToken != null ? endToken . SqlIndex + endToken . Length : Sql . Length ) - beginToken . SqlIndex ;
316+ var text = Sql . Substring ( sqlIndex , sqlLength ) . ToString ( ) ;
317+ foreach ( var column in _columns )
318+ {
319+ if ( text . Equals ( column . Name , StringComparison . InvariantCultureIgnoreCase ) ||
320+ text . Equals ( column . Alias , StringComparison . InvariantCultureIgnoreCase ) ||
321+ text . Equals ( Sql . Substring ( column . SqlIndex , column . SqlLength ) . ToString ( ) , StringComparison . InvariantCultureIgnoreCase ) )
322+ {
323+ result = column ;
324+ return true ;
325+ }
326+ }
327+ }
318328
319329 result = null ;
320330 return false ;
0 commit comments