@@ -2573,6 +2573,9 @@ func tableReferenceToJSON(ref ast.TableReference) jsonNode {
25732573 if r.SchemaObject != nil {
25742574 node["SchemaObject"] = schemaObjectNameToJSON(r.SchemaObject)
25752575 }
2576+ if r.TableSampleClause != nil {
2577+ node["TableSampleClause"] = tableSampleClauseToJSON(r.TableSampleClause)
2578+ }
25762579 if len(r.TableHints) > 0 {
25772580 hints := make([]jsonNode, len(r.TableHints))
25782581 for i, h := range r.TableHints {
@@ -2621,6 +2624,14 @@ func tableReferenceToJSON(ref ast.TableReference) jsonNode {
26212624 node["SecondTableReference"] = tableReferenceToJSON(r.SecondTableReference)
26222625 }
26232626 return node
2627+ case *ast.JoinParenthesisTableReference:
2628+ node := jsonNode{
2629+ "$type": "JoinParenthesisTableReference",
2630+ }
2631+ if r.Join != nil {
2632+ node["Join"] = tableReferenceToJSON(r.Join)
2633+ }
2634+ return node
26242635 case *ast.VariableTableReference:
26252636 node := jsonNode{
26262637 "$type": "VariableTableReference",
@@ -2630,6 +2641,35 @@ func tableReferenceToJSON(ref ast.TableReference) jsonNode {
26302641 }
26312642 node["ForPath"] = r.ForPath
26322643 return node
2644+ case *ast.VariableMethodCallTableReference:
2645+ node := jsonNode{
2646+ "$type": "VariableMethodCallTableReference",
2647+ }
2648+ if r.Variable != nil {
2649+ node["Variable"] = scalarExpressionToJSON(r.Variable)
2650+ }
2651+ if r.MethodName != nil {
2652+ node["MethodName"] = identifierToJSON(r.MethodName)
2653+ }
2654+ if len(r.Parameters) > 0 {
2655+ params := make([]jsonNode, len(r.Parameters))
2656+ for i, p := range r.Parameters {
2657+ params[i] = scalarExpressionToJSON(p)
2658+ }
2659+ node["Parameters"] = params
2660+ }
2661+ if len(r.Columns) > 0 {
2662+ cols := make([]jsonNode, len(r.Columns))
2663+ for i, c := range r.Columns {
2664+ cols[i] = identifierToJSON(c)
2665+ }
2666+ node["Columns"] = cols
2667+ }
2668+ if r.Alias != nil {
2669+ node["Alias"] = identifierToJSON(r.Alias)
2670+ }
2671+ node["ForPath"] = r.ForPath
2672+ return node
26332673 case *ast.SchemaObjectFunctionTableReference:
26342674 node := jsonNode{
26352675 "$type": "SchemaObjectFunctionTableReference",
@@ -2682,6 +2722,32 @@ func tableReferenceToJSON(ref ast.TableReference) jsonNode {
26822722 }
26832723 node["ForPath"] = r.ForPath
26842724 return node
2725+ case *ast.BuiltInFunctionTableReference:
2726+ node := jsonNode{
2727+ "$type": "BuiltInFunctionTableReference",
2728+ }
2729+ if r.Name != nil {
2730+ node["Name"] = identifierToJSON(r.Name)
2731+ }
2732+ if len(r.Parameters) > 0 {
2733+ params := make([]jsonNode, len(r.Parameters))
2734+ for i, p := range r.Parameters {
2735+ params[i] = scalarExpressionToJSON(p)
2736+ }
2737+ node["Parameters"] = params
2738+ }
2739+ if r.Alias != nil {
2740+ node["Alias"] = identifierToJSON(r.Alias)
2741+ }
2742+ if len(r.Columns) > 0 {
2743+ cols := make([]jsonNode, len(r.Columns))
2744+ for i, c := range r.Columns {
2745+ cols[i] = identifierToJSON(c)
2746+ }
2747+ node["Columns"] = cols
2748+ }
2749+ node["ForPath"] = r.ForPath
2750+ return node
26852751 case *ast.InlineDerivedTable:
26862752 node := jsonNode{
26872753 "$type": "InlineDerivedTable",
@@ -2917,14 +2983,6 @@ func tableReferenceToJSON(ref ast.TableReference) jsonNode {
29172983 }
29182984 node["ForPath"] = r.ForPath
29192985 return node
2920- case *ast.JoinParenthesisTableReference:
2921- node := jsonNode{
2922- "$type": "JoinParenthesisTableReference",
2923- }
2924- if r.Join != nil {
2925- node["Join"] = tableReferenceToJSON(r.Join)
2926- }
2927- return node
29282986 case *ast.PivotedTableReference:
29292987 node := jsonNode{
29302988 "$type": "PivotedTableReference",
@@ -2974,8 +3032,8 @@ func tableReferenceToJSON(ref ast.TableReference) jsonNode {
29743032 if r.PivotColumn != nil {
29753033 node["PivotColumn"] = identifierToJSON(r.PivotColumn)
29763034 }
2977- if r.PivotValue != nil {
2978- node["PivotValue "] = identifierToJSON(r.PivotValue )
3035+ if r.ValueColumn != nil {
3036+ node["ValueColumn "] = identifierToJSON(r.ValueColumn )
29793037 }
29803038 if r.NullHandling != "" && r.NullHandling != "None" {
29813039 node["NullHandling"] = r.NullHandling
@@ -2992,6 +3050,13 @@ func tableReferenceToJSON(ref ast.TableReference) jsonNode {
29923050 if r.QueryExpression != nil {
29933051 node["QueryExpression"] = queryExpressionToJSON(r.QueryExpression)
29943052 }
3053+ if len(r.Columns) > 0 {
3054+ cols := make([]jsonNode, len(r.Columns))
3055+ for i, c := range r.Columns {
3056+ cols[i] = identifierToJSON(c)
3057+ }
3058+ node["Columns"] = cols
3059+ }
29953060 if r.Alias != nil {
29963061 node["Alias"] = identifierToJSON(r.Alias)
29973062 }
@@ -3561,6 +3626,21 @@ func windowDelimiterToJSON(wd *ast.WindowDelimiter) jsonNode {
35613626
35623627// ======================= New Statement JSON Functions =======================
35633628
3629+ func tableSampleClauseToJSON(tsc *ast.TableSampleClause) jsonNode {
3630+ node := jsonNode{
3631+ "$type": "TableSampleClause",
3632+ "System": tsc.System,
3633+ }
3634+ if tsc.SampleNumber != nil {
3635+ node["SampleNumber"] = scalarExpressionToJSON(tsc.SampleNumber)
3636+ }
3637+ node["TableSampleClauseOption"] = tsc.TableSampleClauseOption
3638+ if tsc.RepeatSeed != nil {
3639+ node["RepeatSeed"] = scalarExpressionToJSON(tsc.RepeatSeed)
3640+ }
3641+ return node
3642+ }
3643+
35643644func tableHintToJSON(h ast.TableHintType) jsonNode {
35653645 switch th := h.(type) {
35663646 case *ast.TableHint:
0 commit comments