@@ -198,15 +198,15 @@ private ColumnDefinition ParseSelectColumnDefinition(SqlToken beginToken, SqlTok
198
198
: alias ;
199
199
200
200
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 ;
202
202
203
203
return new ColumnDefinition ( sqlIndex , sqlLength , name , alias , true ) ;
204
204
}
205
205
206
206
private ColumnDefinition ParseOrderColumnDefinition ( SqlToken beginToken , SqlToken endToken , string alias )
207
207
{
208
208
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 ;
210
210
211
211
return new ColumnDefinition ( sqlIndex , sqlLength , null , alias , false ) ;
212
212
}
@@ -271,30 +271,24 @@ private IEnumerable<OrderDefinition> ParseOrderDefinitions(IEnumerator<SqlToken>
271
271
272
272
private OrderDefinition ParseOrderDefinition ( SqlToken beginToken , SqlToken endToken , SqlToken directionToken )
273
273
{
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 ) ;
278
276
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
291
285
column = ParseOrderColumnDefinition ( beginToken , endToken , "__c" + _nextOrderAliasIndex ++ ) ;
292
286
}
293
287
294
- return new OrderDefinition ( column , isDescending ?? false ) ;
288
+ return new OrderDefinition ( column , isDescending ) ;
295
289
}
296
290
297
- private bool TryGetColumnDefinition ( string columnNameOrIndex , out ColumnDefinition result )
291
+ private bool TryGetColumnDefinition ( string columnNameOrIndex , out ColumnDefinition result , SqlToken beginToken , SqlToken endToken )
298
292
{
299
293
if ( ! string . IsNullOrEmpty ( columnNameOrIndex ) )
300
294
{
@@ -315,6 +309,22 @@ private bool TryGetColumnDefinition(string columnNameOrIndex, out ColumnDefiniti
315
309
}
316
310
}
317
311
}
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
+ }
318
328
319
329
result = null ;
320
330
return false ;
0 commit comments