Skip to content

Commit 71377a1

Browse files
Added keywords for 'left' and 'right' and respective function calls
1 parent c29296c commit 71377a1

File tree

8 files changed

+1322
-1128
lines changed

8 files changed

+1322
-1128
lines changed

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

+26-2
Original file line numberDiff line numberDiff line change
@@ -571,10 +571,34 @@ public override SqlObject VisitExistsScalarExpression([NotNull] sqlParser.Exists
571571
public override SqlObject VisitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context)
572572
{
573573
Contract.Requires(context != null);
574-
// (K_UDF '.')? identifier '(' scalar_expression_list? ')'
574+
Contract.Requires(context.function_call_scalar_expression != null);
575+
576+
return this.Visit(context.function_call_scalar_expression());
577+
}
578+
579+
public override SqlObject VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context)
580+
{
581+
Contract.Requires(context != null);
582+
// : (K_UDF '.')? identifier '(' scalar_expression_list ? ')'
583+
// | K_LEFT '(' scalar_expression_list ? ')'
584+
// | K_RIGHT '(' scalar_expression_list ? ')'
575585

576586
bool udf = context.K_UDF() != null;
577-
SqlIdentifier identifier = SqlIdentifier.Create(context.identifier().GetText());
587+
SqlIdentifier identifier;
588+
589+
if (context.identifier() != null)
590+
{
591+
identifier = SqlIdentifier.Create(context.identifier().GetText());
592+
}
593+
else if (context.K_LEFT() != null)
594+
{
595+
identifier = SqlIdentifier.Create(context.K_LEFT().GetText());
596+
}
597+
else
598+
{
599+
identifier = SqlIdentifier.Create(context.K_RIGHT().GetText());
600+
}
601+
578602
List<SqlScalarExpression> arguments = new List<SqlScalarExpression>();
579603
if (context.scalar_expression_list() != null)
580604
{

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

+10
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,16 @@ internal interface IsqlListener : IParseTreeListener {
682682
/// <param name="context">The parse tree.</param>
683683
void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context);
684684
/// <summary>
685+
/// Enter a parse tree produced by <see cref="sqlParser.function_call_scalar_expression"/>.
686+
/// </summary>
687+
/// <param name="context">The parse tree.</param>
688+
void EnterFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context);
689+
/// <summary>
690+
/// Exit a parse tree produced by <see cref="sqlParser.function_call_scalar_expression"/>.
691+
/// </summary>
692+
/// <param name="context">The parse tree.</param>
693+
void ExitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context);
694+
/// <summary>
685695
/// Enter a parse tree produced by <see cref="sqlParser.scalar_expression_list"/>.
686696
/// </summary>
687697
/// <param name="context">The parse tree.</param>

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

+6
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,12 @@ internal interface IsqlVisitor<Result> : IParseTreeVisitor<Result> {
417417
/// <return>The visitor result.</return>
418418
Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context);
419419
/// <summary>
420+
/// Visit a parse tree produced by <see cref="sqlParser.function_call_scalar_expression"/>.
421+
/// </summary>
422+
/// <param name="context">The parse tree.</param>
423+
/// <return>The visitor result.</return>
424+
Result VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context);
425+
/// <summary>
420426
/// Visit a parse tree produced by <see cref="sqlParser.scalar_expression_list"/>.
421427
/// </summary>
422428
/// <param name="context">The parse tree.</param>

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

+10-3
Original file line numberDiff line numberDiff line change
@@ -166,16 +166,22 @@ primary_expression
166166
| literal #LiteralScalarExpression
167167
| '[' scalar_expression_list? ']' #ArrayCreateScalarExpression
168168
| '{' object_property_list? '}' #ObjectCreateScalarExpression
169-
| (K_UDF '.')? identifier '(' scalar_expression_list? ')' #FunctionCallScalarExpression
170169
| '(' scalar_expression ')' #ParenthesizedScalarExperession
171170
| '(' sql_query ')' #SubqueryScalarExpression
172171
| primary_expression '.' identifier #PropertyRefScalarExpressionRecursive
173172
| primary_expression '[' scalar_expression ']' #MemberIndexerScalarExpression
174173
| K_EXISTS '(' sql_query ')' #ExistsScalarExpression
175174
| K_ARRAY '(' sql_query ')' #ArrayScalarExpression
176175
| K_ALL '(' sql_query ')' #AllScalarExpression
176+
| function_call_scalar_expression #FunctionCallScalarExpression
177177
;
178178

179+
function_call_scalar_expression
180+
: (K_UDF '.')? identifier '(' scalar_expression_list? ')'
181+
| K_LEFT '(' scalar_expression_list? ')'
182+
| K_RIGHT '(' scalar_expression_list? ')'
183+
;
184+
179185
scalar_expression_list : scalar_expression (',' scalar_expression)*;
180186

181187
object_property_list : object_property (',' object_property)* ;
@@ -207,13 +213,15 @@ K_FROM : F R O M;
207213
K_GROUP : G R O U P;
208214
K_IN : I N ;
209215
K_JOIN : J O I N;
216+
K_LEFT : L E F T;
210217
K_LIKE : L I K E;
211218
K_LIMIT : L I M I T;
212219
K_NOT : N O T;
213220
K_NULL : 'null';
214221
K_OFFSET : O F F S E T;
215222
K_OR : O R;
216223
K_ORDER : O R D E R;
224+
K_RIGHT : R I G H T;
217225
K_SELECT : S E L E C T;
218226
K_TOP : T O P;
219227
K_TRUE : 'true';
@@ -270,8 +278,7 @@ fragment SAFECODEPOINTWITHDOUBLEQUOTATION
270278
;
271279

272280
LEX_IDENTIFIER
273-
:
274-
| [a-zA-Z_]([a-zA-Z_]|DIGIT)*
281+
: [a-zA-Z_]([a-zA-Z_]|DIGIT)*
275282
;
276283

277284
PARAMETER

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

+12
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,18 @@ public virtual void EnterPropertyRefScalarExpressionRecursive([NotNull] sqlParse
806806
/// <param name="context">The parse tree.</param>
807807
public virtual void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { }
808808
/// <summary>
809+
/// Enter a parse tree produced by <see cref="sqlParser.function_call_scalar_expression"/>.
810+
/// <para>The default implementation does nothing.</para>
811+
/// </summary>
812+
/// <param name="context">The parse tree.</param>
813+
public virtual void EnterFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) { }
814+
/// <summary>
815+
/// Exit a parse tree produced by <see cref="sqlParser.function_call_scalar_expression"/>.
816+
/// <para>The default implementation does nothing.</para>
817+
/// </summary>
818+
/// <param name="context">The parse tree.</param>
819+
public virtual void ExitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) { }
820+
/// <summary>
809821
/// Enter a parse tree produced by <see cref="sqlParser.scalar_expression_list"/>.
810822
/// <para>The default implementation does nothing.</para>
811823
/// </summary>

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

+10
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,16 @@ internal partial class sqlBaseVisitor<Result> : AbstractParseTreeVisitor<Result>
659659
/// <return>The visitor result.</return>
660660
public virtual Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { return VisitChildren(context); }
661661
/// <summary>
662+
/// Visit a parse tree produced by <see cref="sqlParser.function_call_scalar_expression"/>.
663+
/// <para>
664+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
665+
/// on <paramref name="context"/>.
666+
/// </para>
667+
/// </summary>
668+
/// <param name="context">The parse tree.</param>
669+
/// <return>The visitor result.</return>
670+
public virtual Result VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) { return VisitChildren(context); }
671+
/// <summary>
662672
/// Visit a parse tree produced by <see cref="sqlParser.scalar_expression_list"/>.
663673
/// <para>
664674
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>

0 commit comments

Comments
 (0)