Skip to content

Commit 2f35577

Browse files
author
Kusto Build System
committed
Auto-sync from Azure-Kusto-Service
1 parent 702073c commit 2f35577

File tree

8 files changed

+186
-14
lines changed

8 files changed

+186
-14
lines changed

src/Kusto.Language/Binder/Binder_NodeBinder.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1780,14 +1780,20 @@ public override SemanticInfo VisitRowSchema(RowSchema node)
17801780
return null;
17811781
}
17821782

1783+
public override SemanticInfo VisitEvaluateRowSchema(EvaluateRowSchema node)
1784+
{
1785+
// handled by parent node
1786+
return null;
1787+
}
1788+
17831789
public override SemanticInfo VisitDataTableExpression(DataTableExpression node)
17841790
{
17851791
var diagnostics = s_diagnosticListPool.AllocateFromPool();
17861792
var columns = s_columnListPool.AllocateFromPool();
17871793
try
17881794
{
17891795
_binder.CheckQueryOperatorParameters(node.Parameters, QueryOperatorParameters.DataTableParameters, diagnostics);
1790-
CreateColumnsFromRowSchema(node.Schema, columns, diagnostics);
1796+
CreateColumnsFromRowSchema(node.Schema.Columns, columns, diagnostics);
17911797
_binder.CheckDataValueTypes(node.Values, columns, diagnostics);
17921798
return new SemanticInfo(new TableSymbol(columns), diagnostics);
17931799
}
@@ -1804,7 +1810,7 @@ public override SemanticInfo VisitContextualDataTableExpression(ContextualDataTa
18041810
var columns = s_columnListPool.AllocateFromPool();
18051811
try
18061812
{
1807-
CreateColumnsFromRowSchema(node.Schema, columns, diagnostics);
1813+
CreateColumnsFromRowSchema(node.Schema.Columns, columns, diagnostics);
18081814

18091815
if (node.Id != null)
18101816
{
@@ -1827,7 +1833,7 @@ public override SemanticInfo VisitExternalDataExpression(ExternalDataExpression
18271833
var columns = s_columnListPool.AllocateFromPool();
18281834
try
18291835
{
1830-
CreateColumnsFromRowSchema(node.Schema, columns, diagnostics);
1836+
CreateColumnsFromRowSchema(node.Schema.Columns, columns, diagnostics);
18311837

18321838
node.URIs.Select(item => _binder.CheckIsExactType(item.Element, ScalarTypes.String, diagnostics));
18331839

@@ -3297,7 +3303,7 @@ public override SemanticInfo VisitParseKvOperator(ParseKvOperator node)
32973303
_binder.GetDeclaredAndInferredColumns(RowScopeOrEmpty, columns);
32983304
_binder.CheckIsScalar(node.Expression, diagnostics);
32993305

3300-
CreateColumnsFromRowSchema(node.Keys, columns, diagnostics);
3306+
CreateColumnsFromRowSchema(node.Keys.Columns, columns, diagnostics);
33013307

33023308
if (node.WithClause != null)
33033309
{
@@ -3343,7 +3349,7 @@ public override SemanticInfo VisitEvaluateOperator(EvaluateOperator node)
33433349

33443350
if (node.Schema != null)
33453351
{
3346-
CreateColumnsFromRowSchema(node.Schema.Schema, columns);
3352+
CreateColumnsFromRowSchema(node.Schema.Schema.Columns, columns);
33473353
return new SemanticInfo(new TableSymbol(columns), diagnostics);
33483354
}
33493355
else

src/Kusto.Language/Binder/Binder_TablesAndColumns.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -488,14 +488,14 @@ private static ColumnSymbol GetUniqueColumn(ColumnSymbol column, UniqueNameTable
488488
/// <summary>
489489
/// Creates column symbols for all the columns declared in the schema.
490490
/// </summary>
491-
public static void CreateColumnsFromRowSchema(RowSchema schema, List<ColumnSymbol> columns, List<Diagnostic> diagnostics = null)
491+
public static void CreateColumnsFromRowSchema(SyntaxList<SeparatedElement<NameAndTypeDeclaration>> schemaColumns, List<ColumnSymbol> columns, List<Diagnostic> diagnostics = null)
492492
{
493493
var declaredNames = s_stringSetPool.AllocateFromPool();
494494
try
495495
{
496-
for (int i = 0, n = schema.Columns.Count; i < n; i++)
496+
for (int i = 0, n = schemaColumns.Count; i < n; i++)
497497
{
498-
var nat = schema.Columns[i].Element;
498+
var nat = schemaColumns[i].Element;
499499

500500
switch (nat.Type)
501501
{

src/Kusto.Language/Parser/QueryGrammar.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,20 @@ Parser<LexicalToken, SyntaxToken> InToken(SyntaxKind inKind)
15451545
(openParen, leadingComma, columns, closeParen) =>
15461546
new RowSchema(openParen, leadingComma, columns, closeParen));
15471547

1548+
var EvaluateRowSchema =
1549+
Rule(
1550+
Token(SyntaxKind.OpenParenToken),
1551+
Optional(Token(SyntaxKind.CommaToken)),
1552+
Optional(Token(SyntaxKind.AsteriskToken)),
1553+
Optional(Token(SyntaxKind.CommaToken)),
1554+
CommaList<NameAndTypeDeclaration>(
1555+
NameAndTypeDeclaration,
1556+
CreateMissingNameAndTypeDeclaration,
1557+
allowTrailingComma: true),
1558+
RequiredToken(SyntaxKind.CloseParenToken),
1559+
(openParen, leadingComma, asteriskToken, asteriskTokenComma, columns, closeParen) =>
1560+
new EvaluateRowSchema(openParen, leadingComma, asteriskToken, asteriskTokenComma, columns, closeParen));
1561+
15481562
var DataTableExpression =
15491563
Rule(
15501564
Token(SyntaxKind.DataTableKeyword, CompletionKind.QueryPrefix),
@@ -2074,7 +2088,7 @@ Parser<LexicalToken, DataScopeClause> DataScopeClause(CompletionKind ckind) =>
20742088
var EvaluateSchemaClause =
20752089
Rule(
20762090
Token(SyntaxKind.ColonToken),
2077-
Required(RowSchema, CreateMissingRowSchema),
2091+
Required(EvaluateRowSchema, CreateMissingEvaluateRowSchema),
20782092
(keyword, expr) =>
20792093
new EvaluateSchemaClause(keyword, expr));
20802094

@@ -3457,6 +3471,16 @@ public static RowSchema CreateMissingRowSchema(Source<LexicalToken> source, int
34573471
SyntaxToken.Missing(SyntaxKind.CloseParenToken),
34583472
new[] { DiagnosticFacts.GetMissingSchemaDeclaration() });
34593473

3474+
public static EvaluateRowSchema CreateMissingEvaluateRowSchema(Source<LexicalToken> source, int start) =>
3475+
new EvaluateRowSchema(
3476+
SyntaxToken.Missing(SyntaxKind.OpenParenToken),
3477+
null,
3478+
null,
3479+
null,
3480+
SyntaxList<SeparatedElement<NameAndTypeDeclaration>>.Empty(),
3481+
SyntaxToken.Missing(SyntaxKind.CloseParenToken),
3482+
new[] { DiagnosticFacts.GetMissingSchemaDeclaration() });
3483+
34603484
public static QueryOperator CreateMissingQueryOperator(Source<LexicalToken> source, int start) =>
34613485
new BadQueryOperator(SyntaxToken.Missing(SyntaxKind.IdentifierToken), new[] { DiagnosticFacts.GetQueryOperatorExpected() });
34623486

src/Kusto.Language/Parser/QueryParser.cs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,16 @@ private Expression CreateMissingExpression()
540540
SyntaxToken.Missing(SyntaxKind.CloseParenToken),
541541
new[] { DiagnosticFacts.GetMissingSchemaDeclaration() });
542542

543+
private static readonly Func<EvaluateRowSchema> CreateMissingEvaluateRowSchema = () =>
544+
new EvaluateRowSchema(
545+
SyntaxToken.Missing(SyntaxKind.OpenParenToken),
546+
null,
547+
null,
548+
null,
549+
SyntaxList<SeparatedElement<NameAndTypeDeclaration>>.Empty(),
550+
SyntaxToken.Missing(SyntaxKind.CloseParenToken),
551+
new[] { DiagnosticFacts.GetMissingSchemaDeclaration() });
552+
543553
private static readonly Func<NamedParameter> CreateMissingNamedParameter = () =>
544554
new NamedParameter(
545555
new NameDeclaration(SyntaxToken.Missing(SyntaxKind.IdentifierToken)),
@@ -1745,6 +1755,22 @@ private RowSchema ParseRowSchema()
17451755
return null;
17461756
}
17471757

1758+
private EvaluateRowSchema ParseEvaluateRowSchema()
1759+
{
1760+
if (PeekToken().Kind == SyntaxKind.OpenParenToken)
1761+
{
1762+
var open = ParseToken();
1763+
var leadingComma = ParseToken(SyntaxKind.CommaToken);
1764+
var asteriskToken = ParseToken(SyntaxKind.AsteriskToken);
1765+
var asteriskTokenComma = ParseToken(SyntaxKind.CommaToken);
1766+
var list = ParseCommaList(FnParseNameAndTypeDeclaration, CreateMissingNameAndTypeDeclaration, FnScanCommonListEnd, allowTrailingComma: true);
1767+
var close = ParseRequiredToken(SyntaxKind.CloseParenToken);
1768+
return new EvaluateRowSchema(open, leadingComma, asteriskToken, asteriskTokenComma, list, close);
1769+
}
1770+
1771+
return null;
1772+
}
1773+
17481774
#endregion
17491775

17501776
#region Non-Query Expressions
@@ -4357,7 +4383,7 @@ private EvaluateSchemaClause ParseEvaluateSchemaClause()
43574383
var colon = ParseToken(SyntaxKind.ColonToken);
43584384
if (colon != null)
43594385
{
4360-
var schema = ParseRowSchema() ?? CreateMissingRowSchema();
4386+
var schema = ParseEvaluateRowSchema() ?? CreateMissingEvaluateRowSchema();
43614387
return new EvaluateSchemaClause(colon, schema);
43624388
}
43634389

src/Kusto.Language/Symbols/TableSymbol.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public static TableSymbol From(string schema)
9797
}
9898

9999
var columns = new List<ColumnSymbol>();
100-
Binding.Binder.CreateColumnsFromRowSchema(rowSchema, columns);
100+
Binding.Binder.CreateColumnsFromRowSchema(rowSchema.Columns, columns);
101101
return new TableSymbol(columns);
102102
}
103103

src/Kusto.Language/Syntax/CodeGen/GeneratedSyntaxNodes.cs

Lines changed: 117 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6741,12 +6741,12 @@ public sealed partial class EvaluateSchemaClause : SyntaxNode
67416741

67426742
public SyntaxToken ColonToken { get; }
67436743

6744-
public RowSchema Schema { get; }
6744+
public EvaluateRowSchema Schema { get; }
67456745

67466746
/// <summary>
67476747
/// Constructs a new instance of <see cref="EvaluateSchemaClause"/>.
67486748
/// </summary>
6749-
internal EvaluateSchemaClause(SyntaxToken colonToken, RowSchema schema, IReadOnlyList<Diagnostic> diagnostics = null) : base(diagnostics)
6749+
internal EvaluateSchemaClause(SyntaxToken colonToken, EvaluateRowSchema schema, IReadOnlyList<Diagnostic> diagnostics = null) : base(diagnostics)
67506750
{
67516751
this.ColonToken = Attach(colonToken);
67526752
this.Schema = Attach(schema, optional: true);
@@ -6807,7 +6807,7 @@ public override TResult Accept<TResult>(SyntaxVisitor<TResult> visitor)
68076807

68086808
protected override SyntaxElement CloneCore(bool includeDiagnostics)
68096809
{
6810-
return new EvaluateSchemaClause((SyntaxToken)ColonToken?.Clone(includeDiagnostics), (RowSchema)Schema?.Clone(includeDiagnostics), (includeDiagnostics ? this.SyntaxDiagnostics : null));
6810+
return new EvaluateSchemaClause((SyntaxToken)ColonToken?.Clone(includeDiagnostics), (EvaluateRowSchema)Schema?.Clone(includeDiagnostics), (includeDiagnostics ? this.SyntaxDiagnostics : null));
68116811
}
68126812
}
68136813
#endregion /* class EvaluateSchemaClause */
@@ -13099,6 +13099,110 @@ protected override SyntaxElement CloneCore(bool includeDiagnostics)
1309913099
}
1310013100
#endregion /* class RowSchema */
1310113101

13102+
#region class EvaluateRowSchema
13103+
public sealed partial class EvaluateRowSchema : SyntaxNode
13104+
{
13105+
public override SyntaxKind Kind => SyntaxKind.EvaluateRowSchema;
13106+
13107+
public SyntaxToken OpenParen { get; }
13108+
13109+
public SyntaxToken LeadingComma { get; }
13110+
13111+
public SyntaxToken AsteriskToken { get; }
13112+
13113+
public SyntaxToken AsteriskTokenComma { get; }
13114+
13115+
public SyntaxList<SeparatedElement<NameAndTypeDeclaration>> Columns { get; }
13116+
13117+
public SyntaxToken CloseParen { get; }
13118+
13119+
/// <summary>
13120+
/// Constructs a new instance of <see cref="EvaluateRowSchema"/>.
13121+
/// </summary>
13122+
internal EvaluateRowSchema(SyntaxToken openParen, SyntaxToken leadingComma, SyntaxToken asteriskToken, SyntaxToken asteriskTokenComma, SyntaxList<SeparatedElement<NameAndTypeDeclaration>> columns, SyntaxToken closeParen, IReadOnlyList<Diagnostic> diagnostics = null) : base(diagnostics)
13123+
{
13124+
this.OpenParen = Attach(openParen);
13125+
this.LeadingComma = Attach(leadingComma, optional: true);
13126+
this.AsteriskToken = Attach(asteriskToken, optional: true);
13127+
this.AsteriskTokenComma = Attach(asteriskTokenComma, optional: true);
13128+
this.Columns = Attach(columns);
13129+
this.CloseParen = Attach(closeParen);
13130+
this.Init();
13131+
}
13132+
13133+
public override int ChildCount => 6;
13134+
13135+
public override SyntaxElement GetChild(int index)
13136+
{
13137+
switch (index)
13138+
{
13139+
case 0: return OpenParen;
13140+
case 1: return LeadingComma;
13141+
case 2: return AsteriskToken;
13142+
case 3: return AsteriskTokenComma;
13143+
case 4: return Columns;
13144+
case 5: return CloseParen;
13145+
default: throw new ArgumentOutOfRangeException();
13146+
}
13147+
}
13148+
13149+
public override string GetName(int index)
13150+
{
13151+
switch (index)
13152+
{
13153+
case 0: return nameof(OpenParen);
13154+
case 1: return nameof(LeadingComma);
13155+
case 2: return nameof(AsteriskToken);
13156+
case 3: return nameof(AsteriskTokenComma);
13157+
case 4: return nameof(Columns);
13158+
case 5: return nameof(CloseParen);
13159+
default: throw new ArgumentOutOfRangeException();
13160+
}
13161+
}
13162+
13163+
public override bool IsOptional(int index)
13164+
{
13165+
switch (index)
13166+
{
13167+
case 1:
13168+
case 2:
13169+
case 3:
13170+
return true;
13171+
default:
13172+
return false;
13173+
}
13174+
}
13175+
13176+
protected override CompletionHint GetCompletionHintCore(int index)
13177+
{
13178+
switch (index)
13179+
{
13180+
case 0: return CompletionHint.Syntax;
13181+
case 1: return CompletionHint.Syntax;
13182+
case 2: return CompletionHint.Syntax;
13183+
case 3: return CompletionHint.Syntax;
13184+
case 4: return CompletionHint.Declaration;
13185+
case 5: return CompletionHint.Syntax;
13186+
default: return CompletionHint.Inherit;
13187+
}
13188+
}
13189+
13190+
public override void Accept(SyntaxVisitor visitor)
13191+
{
13192+
visitor.VisitEvaluateRowSchema(this);
13193+
}
13194+
public override TResult Accept<TResult>(SyntaxVisitor<TResult> visitor)
13195+
{
13196+
return visitor.VisitEvaluateRowSchema(this);
13197+
}
13198+
13199+
protected override SyntaxElement CloneCore(bool includeDiagnostics)
13200+
{
13201+
return new EvaluateRowSchema((SyntaxToken)OpenParen?.Clone(includeDiagnostics), (SyntaxToken)LeadingComma?.Clone(includeDiagnostics), (SyntaxToken)AsteriskToken?.Clone(includeDiagnostics), (SyntaxToken)AsteriskTokenComma?.Clone(includeDiagnostics), (SyntaxList<SeparatedElement<NameAndTypeDeclaration>>)Columns?.Clone(includeDiagnostics), (SyntaxToken)CloseParen?.Clone(includeDiagnostics), (includeDiagnostics ? this.SyntaxDiagnostics : null));
13202+
}
13203+
}
13204+
#endregion /* class EvaluateRowSchema */
13205+
1310213206
#region class ExternalDataExpression
1310313207
public sealed partial class ExternalDataExpression : Expression
1310413208
{
@@ -15305,6 +15409,7 @@ public partial class SyntaxVisitor
1530515409
public abstract void VisitDataScopeExpression(DataScopeExpression node);
1530615410
public abstract void VisitDataTableExpression(DataTableExpression node);
1530715411
public abstract void VisitRowSchema(RowSchema node);
15412+
public abstract void VisitEvaluateRowSchema(EvaluateRowSchema node);
1530815413
public abstract void VisitExternalDataExpression(ExternalDataExpression node);
1530915414
public abstract void VisitContextualDataTableExpression(ContextualDataTableExpression node);
1531015415
public abstract void VisitExternalDataWithClause(ExternalDataWithClause node);
@@ -15995,6 +16100,10 @@ public override void VisitRowSchema(RowSchema node)
1599516100
{
1599616101
this.DefaultVisit(node);
1599716102
}
16103+
public override void VisitEvaluateRowSchema(EvaluateRowSchema node)
16104+
{
16105+
this.DefaultVisit(node);
16106+
}
1599816107
public override void VisitExternalDataExpression(ExternalDataExpression node)
1599916108
{
1600016109
this.DefaultVisit(node);
@@ -16266,6 +16375,7 @@ public partial class SyntaxVisitor<TResult>
1626616375
public abstract TResult VisitDataScopeExpression(DataScopeExpression node);
1626716376
public abstract TResult VisitDataTableExpression(DataTableExpression node);
1626816377
public abstract TResult VisitRowSchema(RowSchema node);
16378+
public abstract TResult VisitEvaluateRowSchema(EvaluateRowSchema node);
1626916379
public abstract TResult VisitExternalDataExpression(ExternalDataExpression node);
1627016380
public abstract TResult VisitContextualDataTableExpression(ContextualDataTableExpression node);
1627116381
public abstract TResult VisitExternalDataWithClause(ExternalDataWithClause node);
@@ -16956,6 +17066,10 @@ public override TResult VisitRowSchema(RowSchema node)
1695617066
{
1695717067
return this.DefaultVisit(node);
1695817068
}
17069+
public override TResult VisitEvaluateRowSchema(EvaluateRowSchema node)
17070+
{
17071+
return this.DefaultVisit(node);
17072+
}
1695917073
public override TResult VisitExternalDataExpression(ExternalDataExpression node)
1696017074
{
1696117075
return this.DefaultVisit(node);

src/Kusto.Language/Syntax/SyntaxFacts.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ static SyntaxFacts()
539539
new SyntaxData(SyntaxKind.DefaultExpressionClause, "", SyntaxCategory.Node),
540540
new SyntaxData(SyntaxKind.EvaluateSchemaClause, "", SyntaxCategory.Node),
541541
new SyntaxData(SyntaxKind.RowSchema, "", SyntaxCategory.Node),
542+
new SyntaxData(SyntaxKind.EvaluateRowSchema, "", SyntaxCategory.Node),
542543
new SyntaxData(SyntaxKind.EntityGroupExpression, "", SyntaxCategory.Node),
543544

544545
// query operators

src/Kusto.Language/Syntax/SyntaxKind.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ public enum SyntaxKind : short
509509
ToTypeOfClause,
510510
EvaluateSchemaClause,
511511
RowSchema,
512+
EvaluateRowSchema,
512513
EntityGroupExpression,
513514

514515
// query operators

0 commit comments

Comments
 (0)