@@ -641,6 +641,18 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
641
641
json_table_formatted_column_definition
642
642
json_table_exists_column_definition
643
643
json_table_nested_columns
644
+ json_table_plan_clause_opt
645
+ json_table_specific_plan
646
+ json_table_plan
647
+ json_table_plan_simple
648
+ json_table_plan_parent_child
649
+ json_table_plan_outer
650
+ json_table_plan_inner
651
+ json_table_plan_sibling
652
+ json_table_plan_union
653
+ json_table_plan_cross
654
+ json_table_plan_primary
655
+ json_table_default_plan
644
656
645
657
%type <list> json_name_and_value_list
646
658
json_value_expr_list
@@ -656,8 +668,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
656
668
657
669
%type <ival> json_encoding
658
670
json_encoding_clause_opt
659
- json_table_plan_clause_opt
660
- json_table_default_plan
661
671
json_table_default_plan_choices
662
672
json_table_default_plan_inner_outer
663
673
json_table_default_plan_union_cross
@@ -15142,7 +15152,7 @@ json_table:
15142
15152
JsonTable *n = makeNode (JsonTable);
15143
15153
n->common = (JsonCommon *) $3 ;
15144
15154
n->columns = $4 ;
15145
- n->join_type = $5 ;
15155
+ n->plan = (JsonTablePlan *) $5 ;
15146
15156
n->on_error = $6 ;
15147
15157
n->location = @1 ;
15148
15158
$$ = (Node *) n;
@@ -15264,12 +15274,15 @@ json_table_formatted_column_definition:
15264
15274
;
15265
15275
15266
15276
json_table_nested_columns:
15267
- NESTED path_opt Sconst json_table_columns_clause
15277
+ NESTED path_opt Sconst
15278
+ json_as_path_name_clause_opt
15279
+ json_table_columns_clause
15268
15280
{
15269
15281
JsonTableColumn *n = makeNode (JsonTableColumn);
15270
15282
n->coltype = JTC_NESTED;
15271
15283
n->pathspec = $3 ;
15272
- n->columns = $4 ;
15284
+ n->pathname = $4 ;
15285
+ n->columns = $5 ;
15273
15286
n->location = @1 ;
15274
15287
$$ = (Node *) n;
15275
15288
}
@@ -15281,12 +15294,84 @@ path_opt:
15281
15294
;
15282
15295
15283
15296
json_table_plan_clause_opt:
15284
- json_table_default_plan { $$ = $1 ; }
15285
- | /* EMPTY */ { $$ = JSTP_OUTER | JSTP_UNION; }
15297
+ json_table_specific_plan { $$ = $1 ; }
15298
+ | json_table_default_plan { $$ = $1 ; }
15299
+ | /* EMPTY */ { $$ = NULL ; }
15300
+ ;
15301
+
15302
+ json_table_specific_plan:
15303
+ PLAN ' (' json_table_plan ' )' { $$ = $3 ; }
15304
+ ;
15305
+
15306
+ json_table_plan:
15307
+ json_table_plan_simple
15308
+ | json_table_plan_parent_child
15309
+ | json_table_plan_sibling
15310
+ ;
15311
+
15312
+ json_table_plan_simple:
15313
+ json_table_path_name
15314
+ {
15315
+ JsonTablePlan *n = makeNode (JsonTablePlan);
15316
+ n->plan_type = JSTP_SIMPLE;
15317
+ n->pathname = $1 ;
15318
+ n->location = @1 ;
15319
+ $$ = (Node *) n;
15320
+ }
15321
+ ;
15322
+
15323
+ json_table_plan_parent_child:
15324
+ json_table_plan_outer
15325
+ | json_table_plan_inner
15326
+ ;
15327
+
15328
+ json_table_plan_outer:
15329
+ json_table_plan_simple OUTER_P json_table_plan_primary
15330
+ { $$ = makeJsonTableJoinedPlan (JSTP_OUTER, $1 , $3 , @1 ); }
15331
+ ;
15332
+
15333
+ json_table_plan_inner:
15334
+ json_table_plan_simple INNER_P json_table_plan_primary
15335
+ { $$ = makeJsonTableJoinedPlan (JSTP_INNER, $1 , $3 , @1 ); }
15336
+ ;
15337
+
15338
+ json_table_plan_sibling:
15339
+ json_table_plan_union
15340
+ | json_table_plan_cross
15341
+ ;
15342
+
15343
+ json_table_plan_union:
15344
+ json_table_plan_primary UNION json_table_plan_primary
15345
+ { $$ = makeJsonTableJoinedPlan (JSTP_UNION, $1 , $3 , @1 ); }
15346
+ | json_table_plan_union UNION json_table_plan_primary
15347
+ { $$ = makeJsonTableJoinedPlan (JSTP_UNION, $1 , $3 , @1 ); }
15348
+ ;
15349
+
15350
+ json_table_plan_cross:
15351
+ json_table_plan_primary CROSS json_table_plan_primary
15352
+ { $$ = makeJsonTableJoinedPlan (JSTP_CROSS, $1 , $3 , @1 ); }
15353
+ | json_table_plan_cross CROSS json_table_plan_primary
15354
+ { $$ = makeJsonTableJoinedPlan (JSTP_CROSS, $1 , $3 , @1 ); }
15355
+ ;
15356
+
15357
+ json_table_plan_primary:
15358
+ json_table_plan_simple { $$ = $1 ; }
15359
+ | ' (' json_table_plan ' )'
15360
+ {
15361
+ castNode (JsonTablePlan, $2 )->location = @1 ;
15362
+ $$ = $2 ;
15363
+ }
15286
15364
;
15287
15365
15288
15366
json_table_default_plan:
15289
- PLAN DEFAULT ' (' json_table_default_plan_choices ' )' { $$ = $4 ; }
15367
+ PLAN DEFAULT ' (' json_table_default_plan_choices ' )'
15368
+ {
15369
+ JsonTablePlan *n = makeNode (JsonTablePlan);
15370
+ n->plan_type = JSTP_DEFAULT;
15371
+ n->join_type = $4 ;
15372
+ n->location = @1 ;
15373
+ $$ = (Node *) n;
15374
+ }
15290
15375
;
15291
15376
15292
15377
json_table_default_plan_choices:
0 commit comments