@@ -283,7 +283,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
283
283
AlterGroupStmt
284
284
AlterRoleStmt AlterRoleSetStmt AlterOwnerStmt AlterObjectSchemaStmt AlterOperatorStmt
285
285
AlterTableStmt AlterTblSpcStmt AnalyzeStmt AlterOpFamilyStmt AlterTypeStmt
286
- CreateConversionStmt CreateOpFamilyStmt CallStmt CreateStatsStmt
286
+ CreateConversionStmt CreateOpFamilyStmt CallStmt CreateStatsStmt ClosePortalStmt
287
287
CopyStmt ClusterStmt CreateAsStmt CreateOpClassStmt CreateGroupStmt CreatePolicyStmt
288
288
CreateTransformStmt DefACLAction
289
289
CreateCastStmt CreatedbStmt CreateEventTrigStmt CreateSchemaStmt
@@ -615,6 +615,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
615
615
opt_type_modifiers
616
616
def_list operator_def_list
617
617
execute_param_clause using_clause
618
+ opt_enum_val_list enum_val_list
618
619
indirection opt_indirection
619
620
attrs
620
621
var_list
@@ -900,6 +901,7 @@ stmt:
900
901
| CreateConversionStmt
901
902
| ConstraintsSetStmt
902
903
| CopyStmt
904
+ | ClosePortalStmt
903
905
| ClusterStmt
904
906
| CreateAsStmt
905
907
| CreateCastStmt
@@ -2858,6 +2860,29 @@ opt_nowait_or_skip:
2858
2860
;
2859
2861
2860
2862
2863
+
2864
+ /* ****************************************************************************
2865
+ *
2866
+ * QUERY :
2867
+ * close <portalname>
2868
+ *
2869
+ *****************************************************************************/
2870
+
2871
+ ClosePortalStmt :
2872
+ CLOSE cursor_name
2873
+ {
2874
+ ClosePortalStmt *n = makeNode(ClosePortalStmt);
2875
+ n->portalname = $2 ;
2876
+ $$ = (Node *)n;
2877
+ }
2878
+ | CLOSE ALL
2879
+ {
2880
+ ClosePortalStmt *n = makeNode(ClosePortalStmt);
2881
+ n->portalname = NULL ;
2882
+ $$ = (Node *)n;
2883
+ }
2884
+ ;
2885
+
2861
2886
/* ****************************************************************************
2862
2887
*
2863
2888
* QUERY :
@@ -5252,6 +5277,16 @@ old_aggr_elem: IDENTIFIER '=' def_arg
5252
5277
}
5253
5278
;
5254
5279
5280
+ opt_enum_val_list :
5281
+ enum_val_list { $$ = $1 ; }
5282
+ | /* EMPTY*/ { $$ = NIL; }
5283
+ ;
5284
+
5285
+ enum_val_list : Sconst
5286
+ { $$ = list_make1(makeString($1 )); }
5287
+ | enum_val_list ' ,' Sconst
5288
+ { $$ = lappend($1 , makeString($3 )); }
5289
+ ;
5255
5290
5256
5291
OptInherit : INHERITS ' (' qualified_name_list ' )' { $$ = $3 ; }
5257
5292
| /* EMPTY*/ { $$ = NIL; }
@@ -8435,21 +8470,21 @@ DefineStmt:
8435
8470
n->coldeflist = $6 ;
8436
8471
$$ = (Node *)n;
8437
8472
}
8438
- /* | CREATE TYPE_P any_name AS ENUM_P '(' opt_enum_val_list ')'
8473
+ | CREATE TYPE_P any_name AS ENUM_P ' (' opt_enum_val_list ' )'
8439
8474
{
8440
8475
CreateEnumStmt *n = makeNode(CreateEnumStmt);
8441
8476
n->typeName = $3 ;
8442
8477
n->vals = $7 ;
8443
8478
$$ = (Node *)n;
8444
- }*/
8479
+ }
8445
8480
| CREATE TYPE_P any_name AS RANGE definition
8446
8481
{
8447
8482
CreateRangeStmt *n = makeNode(CreateRangeStmt);
8448
8483
n->typeName = $3 ;
8449
8484
n->params = $6 ;
8450
8485
$$ = (Node *)n;
8451
8486
}
8452
- /* | CREATE TEXT_P SEARCH PARSER any_name definition TODO
8487
+ | CREATE TEXT_P SEARCH PARSER any_name definition
8453
8488
{
8454
8489
DefineStmt *n = makeNode(DefineStmt);
8455
8490
n->kind = OBJECT_TSPARSER;
@@ -8522,7 +8557,7 @@ DefineStmt:
8522
8557
n->definition = list_make1(makeDefElem(" from" , (Node *) $8 , @8 ));
8523
8558
n->if_not_exists = true ;
8524
8559
$$ = (Node *)n;
8525
- }*/
8560
+ }
8526
8561
;
8527
8562
8528
8563
definition : ' (' def_list ' )' { $$ = $2 ; }
0 commit comments