📄 gram.y
字号:
n->args = $5; $$ = n; } | NAMES opt_encoding { VariableSetStmt *n = makeNode(VariableSetStmt); n->name = "client_encoding"; if ($2 != NULL) n->args = list_make1(makeStringConst($2, NULL)); $$ = n; } | ROLE ColId_or_Sconst { VariableSetStmt *n = makeNode(VariableSetStmt); n->name = "role"; n->args = list_make1(makeStringConst($2, NULL)); $$ = n; } | SESSION AUTHORIZATION ColId_or_Sconst { VariableSetStmt *n = makeNode(VariableSetStmt); n->name = "session_authorization"; n->args = list_make1(makeStringConst($3, NULL)); $$ = n; } | SESSION AUTHORIZATION DEFAULT { VariableSetStmt *n = makeNode(VariableSetStmt); n->name = "session_authorization"; n->args = NIL; $$ = n; } ;var_name: ColId { $$ = $1; } | var_name '.' ColId { int qLen = strlen($1); char* qualName = palloc(qLen + strlen($3) + 2); strcpy(qualName, $1); qualName[qLen] = '.'; strcpy(qualName + qLen + 1, $3); $$ = qualName; } ;var_list_or_default: var_list { $$ = $1; } | DEFAULT { $$ = NIL; } ;var_list: var_value { $$ = list_make1($1); } | var_list ',' var_value { $$ = lappend($1, $3); } ;var_value: opt_boolean { $$ = makeStringConst($1, NULL); } | ColId_or_Sconst { $$ = makeStringConst($1, NULL); } | NumericOnly { $$ = makeAConst($1); } ;iso_level: READ UNCOMMITTED { $$ = "read uncommitted"; } | READ COMMITTED { $$ = "read committed"; } | REPEATABLE READ { $$ = "repeatable read"; } | SERIALIZABLE { $$ = "serializable"; } ;opt_boolean: TRUE_P { $$ = "true"; } | FALSE_P { $$ = "false"; } | ON { $$ = "on"; } | OFF { $$ = "off"; } ;/* Timezone values can be: * - a string such as 'pst8pdt' * - an identifier such as "pst8pdt" * - an integer or floating point number * - a time interval per SQL99 * ColId gives reduce/reduce errors against ConstInterval and LOCAL, * so use IDENT and reject anything which is a reserved word. */zone_value: Sconst { $$ = makeStringConst($1, NULL); } | IDENT { $$ = makeStringConst($1, NULL); } | ConstInterval Sconst opt_interval { A_Const *n = (A_Const *) makeStringConst($2, $1); if ($3 != INTERVAL_FULL_RANGE) { if (($3 & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("time zone interval must be HOUR or HOUR TO MINUTE"))); n->typename->typmod = INTERVAL_TYPMOD(INTERVAL_FULL_PRECISION, $3); } $$ = (Node *)n; } | ConstInterval '(' Iconst ')' Sconst opt_interval { A_Const *n = (A_Const *) makeStringConst($5, $1); if ($3 < 0) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("INTERVAL(%d) precision must not be negative", $3))); if ($3 > MAX_INTERVAL_PRECISION) { ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("INTERVAL(%d) precision reduced to maximum allowed, %d", $3, MAX_INTERVAL_PRECISION))); $3 = MAX_INTERVAL_PRECISION; } if (($6 != INTERVAL_FULL_RANGE) && (($6 & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("time zone interval must be HOUR or HOUR TO MINUTE"))); n->typename->typmod = INTERVAL_TYPMOD($3, $6); $$ = (Node *)n; } | NumericOnly { $$ = makeAConst($1); } | DEFAULT { $$ = NULL; } | LOCAL { $$ = NULL; } ;opt_encoding: Sconst { $$ = $1; } | DEFAULT { $$ = NULL; } | /*EMPTY*/ { $$ = NULL; } ;ColId_or_Sconst: ColId { $$ = $1; } | SCONST { $$ = $1; } ;VariableShowStmt: SHOW var_name { VariableShowStmt *n = makeNode(VariableShowStmt); n->name = $2; $$ = (Node *) n; } | SHOW TIME ZONE { VariableShowStmt *n = makeNode(VariableShowStmt); n->name = "timezone"; $$ = (Node *) n; } | SHOW TRANSACTION ISOLATION LEVEL { VariableShowStmt *n = makeNode(VariableShowStmt); n->name = "transaction_isolation"; $$ = (Node *) n; } | SHOW SESSION AUTHORIZATION { VariableShowStmt *n = makeNode(VariableShowStmt); n->name = "session_authorization"; $$ = (Node *) n; } | SHOW ALL { VariableShowStmt *n = makeNode(VariableShowStmt); n->name = "all"; $$ = (Node *) n; } ;VariableResetStmt: RESET var_name { VariableResetStmt *n = makeNode(VariableResetStmt); n->name = $2; $$ = (Node *) n; } | RESET TIME ZONE { VariableResetStmt *n = makeNode(VariableResetStmt); n->name = "timezone"; $$ = (Node *) n; } | RESET TRANSACTION ISOLATION LEVEL { VariableResetStmt *n = makeNode(VariableResetStmt); n->name = "transaction_isolation"; $$ = (Node *) n; } | RESET SESSION AUTHORIZATION { VariableResetStmt *n = makeNode(VariableResetStmt); n->name = "session_authorization"; $$ = (Node *) n; } | RESET ALL { VariableResetStmt *n = makeNode(VariableResetStmt); n->name = "all"; $$ = (Node *) n; } ;ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode { ConstraintsSetStmt *n = makeNode(ConstraintsSetStmt); n->constraints = $3; n->deferred = $4; $$ = (Node *) n; } ;constraints_set_list: ALL { $$ = NIL; } | name_list { $$ = $1; } ;constraints_set_mode: DEFERRED { $$ = TRUE; } | IMMEDIATE { $$ = FALSE; } ;/* * Checkpoint statement */CheckPointStmt: CHECKPOINT { CheckPointStmt *n = makeNode(CheckPointStmt); $$ = (Node *)n; } ;/***************************************************************************** * * ALTER [ TABLE | INDEX ] variations * *****************************************************************************/AlterTableStmt: ALTER TABLE relation_expr alter_table_cmds { AlterTableStmt *n = makeNode(AlterTableStmt); n->relation = $3; n->cmds = $4; n->relkind = OBJECT_TABLE; $$ = (Node *)n; } | ALTER INDEX relation_expr alter_rel_cmds { AlterTableStmt *n = makeNode(AlterTableStmt); n->relation = $3; n->cmds = $4; n->relkind = OBJECT_INDEX; $$ = (Node *)n; } ;alter_table_cmds: alter_table_cmd { $$ = list_make1($1); } | alter_table_cmds ',' alter_table_cmd { $$ = lappend($1, $3); } ;/* Subcommands that are for ALTER TABLE only */alter_table_cmd: /* ALTER TABLE <relation> ADD [COLUMN] <coldef> */ ADD opt_column columnDef { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_AddColumn; n->def = $3; $$ = (Node *)n; } /* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */ | ALTER opt_column ColId alter_column_default { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_ColumnDefault; n->name = $3; n->def = $4; $$ = (Node *)n; } /* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL */ | ALTER opt_column ColId DROP NOT NULL_P { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DropNotNull; n->name = $3; $$ = (Node *)n; } /* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */ | ALTER opt_column ColId SET NOT NULL_P { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_SetNotNull; n->name = $3; $$ = (Node *)n; } /* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <IntegerOnly> */ | ALTER opt_column ColId SET STATISTICS IntegerOnly { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_SetStatistics; n->name = $3; n->def = (Node *) $6; $$ = (Node *)n; } /* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */ | ALTER opt_column ColId SET STORAGE ColId { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_SetStorage; n->name = $3; n->def = (Node *) makeString($6); $$ = (Node *)n; } /* ALTER TABLE <relation> DROP [COLUMN] <colname> [RESTRICT|CASCADE] */ | DROP opt_column ColId opt_drop_behavior { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DropColumn; n->name = $3; n->behavior = $4; $$ = (Node *)n; } /* * ALTER TABLE <relation> ALTER [COLUMN] <colname> TYPE <typename> * [ USING <expression> ] */ | ALTER opt_column ColId TYPE_P Typename alter_using { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_AlterColumnType; n->name = $3; n->def = (Node *) $5; n->transform = $6; $$ = (Node *)n; } /* ALTER TABLE <relation> ADD CONSTRAINT ... */ | ADD TableConstraint { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_AddConstraint; n->def = $2; $$ = (Node *)n; } /* ALTER TABLE <relation> DROP CONSTRAINT <name> [RESTRICT|CASCADE] */ | DROP CONSTRAINT name opt_drop_behavior { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DropConstraint; n->name = $3; n->behavior = $4; $$ = (Node *)n; } /* ALTER TABLE <relation> SET WITHOUT OIDS */ | SET WITHOUT OIDS { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DropOids; $$ = (Node *)n; } /* ALTER TABLE <name> CREATE TOAST TABLE -- ONLY */ | CREATE TOAST TABLE { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_ToastTable; $$ = (Node *)n; } /* ALTER TABLE <name> CLUSTER ON <indexname> */ | CLUSTER ON name { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_ClusterOn; n->name = $3; $$ = (Node *)n; } /* ALTER TABLE <name> SET WITHOUT CLUSTER */ | SET WITHOUT CLUSTER { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DropCluster; n->name = NULL; $$ = (Node *)n; } /* ALTER TABLE <name> ENABLE TRIGGER <trig> */ | ENABLE_P TRIGGER name { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_EnableTrig; n->name = $3; $$ = (Node *)n; } /* ALTER TABLE <name> ENABLE TRIGGER ALL */ | ENABLE_P TRIGGER ALL { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_EnableTrigAll; $$ = (Node *)n; } /* ALTER TABLE <name> ENABLE TRIGGER USER */ | ENABLE_P TRIGGER USER { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_EnableTrigUser; $$ = (Node *)n; } /* ALTER TABLE <name> DISABLE TRIGGER <trig> */ | DISABLE_P TRIGGER name { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DisableTrig; n->name = $3; $$ = (Node *)n; } /* ALTER TABLE <name> DISABLE TRIGGER ALL */ | DISABLE_P TRIGGER ALL { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DisableTrigAll; $$ = (Node *)n; } /* ALTER TABLE <name> DISABLE TRIGGER USER */ | DISABLE_P TRIGGER USER { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_DisableTrigUser; $$ = (Node *)n; } | alter_rel_cmd { $$ = $1; } ;alter_rel_cmds: alter_rel_cmd { $$ = list_make1($1); } | alter_rel_cmds ',' alter_rel_cmd { $$ = lappend($1, $3); } ;/* Subcommands that are for ALTER TABLE or ALTER INDEX */alter_rel_cmd: /* ALTER [TABLE|INDEX] <name> OWNER TO RoleId */ OWNER TO RoleId { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_ChangeOwner; n->name = $3; $$ = (Node *)n; } /* ALTER [TABLE|INDEX] <name> SET TABLESPACE <tablespacename> */ | SET TABLESPACE name { AlterTableCmd *n = makeNode(AlterTableCmd); n->subtype = AT_SetTableSpace; n->name = $3; $$ = (Node *)n; } ;alter_column_default: SET DEFAULT a_expr { /* Treat SET DEFAULT NULL the same as DROP DEFAULT */ if (exprIsNullConstant($3)) $$ = NULL; else $$ = $3; } | DROP DEFAULT { $$ = NULL; } ;opt_drop_behavior: CASCADE { $$ = DROP_CASCADE; } | RESTRICT { $$ = DROP_RESTRICT; } | /* EMPTY */ { $$ = DROP_RESTRICT; /* default */ } ;alter_using: USING a_expr { $$ = $2; } | /* EMPTY */ { $$ = NULL; } ;/***************************************************************************** * * QUERY : * close <portalname> *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -