📄 preproc.y
字号:
/***************************************************************************** * * Create a postgresql group * * ****************************************************************************/ CreateGroupStmt: CREATE GROUP_P RoleId opt_with OptRoleList { $$ = cat_str(4, make_str("create group"), $3, $4, $5); } ; /***************************************************************************** * * Alter a postgresql group * * *****************************************************************************/ AlterGroupStmt: ALTER GROUP_P RoleId add_drop USER name_list { $$ = cat_str(5, make_str("alter group"), $3, $4, make_str("user"), $6); } ; add_drop: ADD_P { $$ = make_str("add"); } | DROP { $$ = make_str("drop"); } ; /***************************************************************************** * * Drop a postgresql group * * *****************************************************************************/ DropGroupStmt: DROP GROUP_P name_list { $$ = cat2_str(make_str("drop group"), $3); } | DROP GROUP_P IF_P EXISTS name_list { $$ = cat2_str(make_str("drop group if exists"), $5); } ; /***************************************************************************** * * Manipulate a schema * * *****************************************************************************/ CreateSchemaStmt: CREATE SCHEMA OptSchemaName AUTHORIZATION RoleId OptSchemaEltList { $$ = cat_str(5, make_str("create schema"), $3, make_str("authorization"), $5, $6); } | CREATE SCHEMA ColId OptSchemaEltList { $$ = cat_str(3, make_str("create schema"), $3, $4); } ; OptSchemaName: ColId { $$ = $1; } | /* EMPTY */ { $$ = EMPTY; } ;OptSchemaEltList: OptSchemaEltList schema_stmt { $$ = cat2_str($1, $2); } | /* EMPTY */ { $$ = EMPTY; } ;/* * schema_stmt are the ones that can show up inside a CREATE SCHEMA * statement (in addition to by themselves). */schema_stmt: CreateStmt { $$ = $1; } | IndexStmt { $$ = $1; } | CreateSeqStmt { $$ = $1; } | CreateTrigStmt { $$ = $1; } | GrantStmt { $$ = $1; } | ViewStmt { $$ = $1; } ;/***************************************************************************** * * Set PG internal variable * SET name TO 'var_value' * Include SQL92 syntax (thomas 1997-10-22): * SET TIME ZONE 'var_value' * *****************************************************************************/VariableSetStmt: SET set_rest { $$ = cat2_str(make_str("set"), $2 ); } | SET LOCAL set_rest { $$ = cat2_str(make_str("set local"), $3 ); } | SET SESSION set_rest { $$ = cat2_str(make_str("set session"), $3 ); } ;set_rest: /* Generic SET syntaxes: */ var_name TO var_list { $$ = cat_str(3, $1, make_str("to"), $3); } | var_name "=" var_list { $$ = cat_str(3, $1, make_str("="), $3); } | var_name TO DEFAULT { $$ = cat2_str($1, make_str("to default")); } | var_name "=" DEFAULT { $$ = cat2_str($1, make_str("= default")); } | var_name FROM CURRENT_P { $$ = cat2_str($1, make_str("from current")); } /* Special syntaxes mandated by SQL standard: */ | TIME ZONE zone_value { $$ = cat2_str(make_str("time zone"), $3); } | TRANSACTION transaction_mode_list { $$ = cat2_str(make_str("transaction"), $2); } | SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list { $$ = cat2_str(make_str("session characteristics as transaction"), $5); } | NAMES opt_encoding { $$ = cat2_str(make_str("names"), $2); } | ROLE ColId_or_Sconst { $$ = cat2_str(make_str("role"), $2); } | SESSION AUTHORIZATION ColId_or_Sconst { $$ = cat2_str(make_str("session authorization"), $3); } | SESSION AUTHORIZATION DEFAULT { $$ = make_str("session authorization default"); } | XML_P OPTION document_or_content { $$ = cat2_str(make_str("xml option"), $3); } ;var_name: ECPGColId { $$ = $1; } | var_name '.' ColId { $$ = cat_str(3, $1, make_str("."), $3); } ;var_list: var_value { $$ = $1; } | var_list ',' var_value { $$ = cat_str(3, $1, make_str(","), $3); } ;iso_level: READ UNCOMMITTED { $$ = make_str("read uncommitted"); } | READ COMMITTED { $$ = make_str("read committed"); } | REPEATABLE READ { $$ = make_str("repeatable read"); } | SERIALIZABLE { $$ = make_str("serializable"); } ;var_value: opt_boolean { $$ = $1; } | AllConst { /* we have to check for a variable here because it has to be replaced with its value on the client side */ if ($1[1] == '$') { $$ = make_str("$0"); free($1); } else $$ = $1; } | ColId { $$ = $1; } ;opt_boolean: TRUE_P { $$ = make_str("true"); } | FALSE_P { $$ = make_str("false"); } | ON { $$ = make_str("on"); } | OFF { $$ = make_str("off"); } ;/* Timezone values can be: * - a string such as 'pst8pdt' * - a column identifier such as "pst8pdt" * - an integer or floating point number * - a time interval per SQL99 * ConstInterval and ColId give shift/reduce errors, * so use IDENT and reject anything which is a reserved word. */zone_value: AllConst { $$ = $1; } | ident { $$ = $1; } | ConstInterval StringConst opt_interval { $$ = cat_str(3, $1, $2, $3); } | ConstInterval '(' PosIntConst ')' StringConst opt_interval { $$ = cat_str(6, $1, make_str("("), $3, make_str(")"), $5, $6); } | DEFAULT { $$ = make_str("default"); } | LOCAL { $$ = make_str("local"); } ;opt_encoding: StringConst { $$ = $1; } | DEFAULT { $$ = make_str("default"); } | /*EMPTY*/ { $$ = EMPTY; } ;ColId_or_Sconst: ColId { $$ = $1; } | StringConst { $$ = $1; } ;VariableShowStmt: SHOW var_name ecpg_into { $$ = cat2_str(make_str("show"), $2); } | SHOW TIME ZONE ecpg_into { $$ = make_str("show time zone"); } | SHOW TRANSACTION ISOLATION LEVEL ecpg_into { $$ = make_str("show transaction isolation level"); } | SHOW SESSION AUTHORIZATION ecpg_into { $$ = make_str("show session authorization"); } | SHOW ALL { mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL not implemented"); $$ = EMPTY; } ;VariableResetStmt: RESET var_name { $$ = cat2_str(make_str("reset"), $2); } | RESET TIME ZONE { $$ = make_str("reset time zone"); } | RESET TRANSACTION ISOLATION LEVEL { $$ = make_str("reset transaction isolation level"); } | RESET SESSION AUTHORIZATION { $$ = make_str("reset session authorization"); } | RESET ALL { $$ = make_str("reset all"); } ;/* SetResetClause allows SET or RESET without LOCAL */SetResetClause: SET set_rest { $$ = cat2_str(make_str("set"), $2); } | VariableResetStmt { $$ = $1; } ;ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode { $$ = cat_str(3, make_str("set constraints"), $3, $4); } ;constraints_set_list: ALL { $$ = make_str("all"); } | qualified_name_list { $$ = $1; } ;constraints_set_mode: DEFERRED { $$ = make_str("deferred"); } | IMMEDIATE { $$ = make_str("immediate"); } ;/* * Checkpoint statement */CheckPointStmt: CHECKPOINT { $$= make_str("checkpoint"); } ;DiscardStmt: DISCARD ALL { $$ = make_str("discard all"); } | DISCARD TEMP { $$ = make_str("discard temp"); } | DISCARD TEMPORARY { $$ = make_str("discard temporary"); } | DISCARD PLANS { $$ = make_str("discard plans"); } ;/***************************************************************************** * * ALTER [ TABLE | INDEX ] variations * *****************************************************************************/AlterTableStmt: ALTER TABLE relation_expr alter_table_cmds { $$ = cat_str(3, make_str("alter table"), $3, $4); } | ALTER INDEX relation_expr alter_rel_cmds { $$ = cat_str(3, make_str("alter table"), $3, $4); } ;/* Subcommands that are for ALTER TABLE only */alter_table_cmds: alter_table_cmd { $$ = $1; } | alter_table_cmds ',' alter_table_cmd { $$ = cat_str(3, $1, make_str(","), $3); } ;alter_table_cmd: ADD_P opt_column columnDef/* ALTER TABLE <relation> ADD [COLUMN] <coldef> */ { $$ = cat_str(3, make_str("add"), $2, $3); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */ | ALTER opt_column ColId alter_column_default { $$ = cat_str(4, make_str("alter"), $2, $3, $4); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL */ | ALTER opt_column ColId DROP NOT NULL_P { $$ = cat_str(4, make_str("alter"), $2, $3, make_str("drop not null")); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */ | ALTER opt_column ColId SET NOT NULL_P { $$ = cat_str(4, make_str("alter"), $2, $3, make_str("set not null")); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <IntegerOnly> */ | ALTER opt_column ColId SET STATISTICS PosIntConst { $$ = cat_str(5, make_str("alter"), $2, $3, make_str("set statistics"), $6); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */ | ALTER opt_column ColId SET STORAGE ColId { $$ = cat_str(5, make_str("alter"), $2, $3, make_str("set storage"), $6); }/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */ | DROP opt_column ColId opt_drop_behavior { $$ = cat_str(4, make_str("drop"), $2, $3, $4); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> TYPE <typename> [ USING <expression> ] */ | ALTER opt_column ColId TYPE_P Typename alter_using { $$ = cat_str(6, make_str("alter"), $2, $3, make_str("type"), $5, $6); }/* ALTER TABLE <relation> ADD CONSTRAINT ... */ | ADD_P TableConstraint { $$ = cat_str(2, make_str("add"), $2); }/* ALTER TABLE <relation> DROP CONSTRAINT ... */ | DROP CONSTRAINT name opt_drop_behavior { $$ = cat_str(3, make_str("drop constraint"), $3, $4); }/* ALTER TABLE <relation> SET WITHOUT OIDS */ | SET WITHOUT OIDS { $$ = make_str("set without oids"); }/* ALTER TABLE <name> CLUSTER ON <indexname> */ | CLUSTER ON name { $$ = cat_str(2, make_str("cluster on"), $3); }/* ALTER TABLE <name> SET WITHOUT CLUSTER */ | SET WITHOUT CLUSTER { $$ = make_str("set without cluster"); }/* ALTER TABLE <name> ENABLE TRIGGER <trig> */ | ENABLE_P TRIGGER name { $$ = cat2_str(make_str("enable trigger"), $3); }/* ALTER TABLE <name> ENABLE ALWAYS TRIGGER <trig> */ | ENABLE_P ALWAYS TRIGGER name { $$ = cat2_str(make_str("enable always trigger"), $4); }/* ALTER TABLE <name> ENABLE REPLICA TRIGGER <trig> */ | ENABLE_P REPLICA TRIGGER name { $$ = cat2_str(make_str("enable replica trigger"), $4); }/* ALTER TABLE <name> ENABLE TRIGGER ALL */ | ENABLE_P TRIGGER ALL { $$ = make_str("enable trigger all"); }/* ALTER TABLE <name> ENABLE TRIGGER USER */ | ENABLE_P TRIGGER USER { $$ = make_str("enable trigger user"); }/* ALTER TABLE <name> DISABLE TRIGGER <trig> */ | DISABLE_P TRIGGER name { $$ = cat2_str(make_str("disable trigger"), $3); }/* ALTER TABLE <name> DISABLE TRIGGER ALL */ | DISABLE_P TRIGGER ALL { $$ = make_str("disable trigger all"); }/* ALTER TABLE <name> DISABLE TRIGGER USER */ | DISABLE_P TRIGGER USER { $$ = make_str("disable trigger user"); }/* ALTER TABLE <name> ENABLE RULE <rule> */ | ENABLE_P RULE name { $$ = cat2_str(make_str("enable rule"), $3); }/* ALTER TABLE <name> ENABLE ALWAYS RULE <rule> */ | ENABLE_P ALWAYS RULE name { $$ = cat2_str(make_str("enable always rule"), $4); }/* ALTER TABLE <name> ENABLE REPLICA RULE <rule> */ | ENABLE_P REPLICA RULE name { $$ = cat2_str(make_str("enable replica rule"), $4); }/* ALTER TABLE <name> DISABLE RULE <rule> */ | DISABLE_P RULE name { $$ = cat2_str(make_str("disable rule"), $3); }/* ALTER TABLE <name> ALTER INHERITS ADD <parent> */ | INHERIT qualified_name { $$ = cat2_str(make_str("inherit"), $2); }/* ALTER TABLE <name> NO INHERITS <parent> */ | NO INHERIT qualified_name { $$ = cat2_str(make_str("no inherit"), $3); } | alter_rel_cmd { $$ = $1; } ;alter_rel_cmds: alter_rel_cmd { $$ = $1; } | alter_rel_cmds ',' alter_rel_cmd { $$ = cat_str(3, $1, make_str(","), $3); } ;/* Subcommands that are for ALTER TABLE or ALTER INDEX */alter_rel_cmd: /* ALTER [TABLE|INDEX] <name> OWNER TO RoleId */ OWNER TO RoleId { $$ = cat2_str(make_str("owner to"), $3); } /* ALTER [TABLE|INDEX] <name> SET TABLESPACE <tablespacename> */ | SET TABLESPACE name { $$ = cat2_str(make_str("set tablespace"), $3); } | SET definition { $$ = cat2_str(make_str("set"), $2); } | RESET definition { $$ = cat2_str(make_str("reset"), $2); } ;alter_column_default: SET DEFAULT a_expr { $$ = cat2_str(make_str("set default"), $3); } | DROP DEFAULT { $$ = make_str("drop default"); } ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -