Skip to content

Commit a99bec1

Browse files
authored
Merge branch 'master' into users/aavasthy/enable_analyzers_telemetry
2 parents e748163 + b42d117 commit a99bec1

21 files changed

Lines changed: 9886 additions & 9405 deletions

Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -355,15 +355,27 @@ public override SqlObject VisitGroup_by_clause([NotNull] sqlParser.Group_by_clau
355355
public override SqlObject VisitOrder_by_clause([NotNull] sqlParser.Order_by_clauseContext context)
356356
{
357357
Contract.Requires(context != null);
358-
359-
List<SqlOrderByItem> orderByItems = new List<SqlOrderByItem>();
360-
foreach (sqlParser.Order_by_itemContext orderByItemContext in context.order_by_items().order_by_item())
361-
{
362-
SqlOrderByItem orderByItem = (SqlOrderByItem)this.VisitOrder_by_item(orderByItemContext);
363-
orderByItems.Add(orderByItem);
364-
}
365-
366-
return SqlOrderByClause.Create(orderByItems.ToImmutableArray());
358+
359+
bool rank = context.K_RANK() != null;
360+
List<SqlOrderByItem> orderByItems = new List<SqlOrderByItem>();
361+
if (rank)
362+
{
363+
foreach (sqlParser.Score_expression_order_by_itemContext scoreOrderByItemContext in context.score_expression_order_by_items().score_expression_order_by_item())
364+
{
365+
SqlOrderByItem orderByItem = (SqlOrderByItem)this.VisitScore_expression_order_by_item(scoreOrderByItemContext);
366+
orderByItems.Add(orderByItem);
367+
}
368+
}
369+
else
370+
{
371+
foreach (sqlParser.Order_by_itemContext orderByItemContext in context.order_by_items().order_by_item())
372+
{
373+
SqlOrderByItem orderByItem = (SqlOrderByItem)this.VisitOrder_by_item(orderByItemContext);
374+
orderByItems.Add(orderByItem);
375+
}
376+
}
377+
378+
return SqlOrderByClause.Create(rank, orderByItems.ToImmutableArray());
367379
}
368380

369381
public override SqlObject VisitOrder_by_item([NotNull] sqlParser.Order_by_itemContext context)
@@ -388,6 +400,31 @@ public override SqlObject VisitOrder_by_item([NotNull] sqlParser.Order_by_itemCo
388400
}
389401
}
390402

403+
return SqlOrderByItem.Create(expression, isDescending);
404+
}
405+
406+
public override SqlObject VisitScore_expression_order_by_item([NotNull] sqlParser.Score_expression_order_by_itemContext context)
407+
{
408+
Contract.Requires(context != null);
409+
410+
SqlFunctionCallScalarExpression expression = (SqlFunctionCallScalarExpression)this.Visit(context.function_call_scalar_expression());
411+
bool? isDescending = null;
412+
if (context.sort_order() != null)
413+
{
414+
if (context.sort_order().K_ASC() != null)
415+
{
416+
isDescending = false;
417+
}
418+
else if (context.sort_order().K_DESC() != null)
419+
{
420+
isDescending = true;
421+
}
422+
else
423+
{
424+
throw new ArgumentOutOfRangeException($"Unknown sort order : {context.sort_order()}.");
425+
}
426+
}
427+
391428
return SqlOrderByItem.Create(expression, isDescending);
392429
}
393430

Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs

Lines changed: 788 additions & 768 deletions
Large diffs are not rendered by default.

Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs

Lines changed: 481 additions & 469 deletions
Large diffs are not rendered by default.

Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,17 @@ group_by_clause : K_GROUP K_BY scalar_expression_list ;
5858
/*--------------------------------------------------------------------------------*/
5959
/* ORDER BY */
6060
/*--------------------------------------------------------------------------------*/
61-
order_by_clause : K_ORDER K_BY order_by_items ;
61+
order_by_clause
62+
: K_ORDER K_BY order_by_items
63+
| K_ORDER K_BY K_RANK score_expression_order_by_items
64+
;
65+
66+
score_expression_order_by_items : score_expression_order_by_item (',' score_expression_order_by_item)* ;
67+
score_expression_order_by_item : function_call_scalar_expression sort_order? ;
68+
6269
order_by_items : order_by_item (',' order_by_item)* ;
6370
order_by_item : scalar_expression sort_order? ;
71+
6472
sort_order
6573
: K_ASC
6674
| K_DESC
@@ -227,6 +235,7 @@ K_NULL : 'null';
227235
K_OFFSET : O F F S E T;
228236
K_OR : O R;
229237
K_ORDER : O R D E R;
238+
K_RANK : R A N K;
230239
K_RIGHT : R I G H T;
231240
K_SELECT : S E L E C T;
232241
K_TOP : T O P;

0 commit comments

Comments
 (0)