📄 preproc.y
字号:
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 { $$ = cat2_str(make_str("show"), $2); } | SHOW TIME ZONE { $$ = make_str("show time zone"); } | SHOW TRANSACTION ISOLATION LEVEL { $$ = make_str("show transaction isolation level"); } | SHOW SESSION AUTHORIZATION { $$ = make_str("show session authorization"); } | SHOW ALL { $$ = make_str("show all"); } ;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"); } ;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"); } | name_list { $$ = $1; } ;constraints_set_mode: DEFERRED { $$ = make_str("deferred"); } | IMMEDIATE { $$ = make_str("immediate"); } ;/* * Checkpoint statement */CheckPointStmt: CHECKPOINT { $$= make_str("checkpoint"); } ;/***************************************************************************** * * 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 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 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> CREATE TOAST TABLE */ | CREATE TOAST TABLE { $$ = make_str("create toast table"); }/* 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 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_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 { $$ = cat_str(2, make_str("owner to"), $3); } /* ALTER [TABLE|INDEX] <name> SET TABLESPACE <tablespacename> */ | SET TABLESPACE name { $$ = cat_str(2, make_str("set tablespace"), $3); } ;alter_column_default: SET DEFAULT a_expr { $$ = cat2_str(make_str("set default"), $3); } | DROP DEFAULT { $$ = make_str("drop default"); } ;opt_drop_behavior: CASCADE { $$ = make_str("cascade"); } | RESTRICT { $$ = make_str("restrict"); } | /* EMPTY */ { $$ = EMPTY; } ;alter_using: USING a_expr { $$ = cat2_str(make_str("using"), $2); } | /* EMPTY */ { $$ = EMPTY; } ; /***************************************************************************** * * QUERY : * close <portalname> * *****************************************************************************/ClosePortalStmt: CLOSE name { $$ = cat2_str(make_str("close"), $2); } ;/***************************************************************************** * * QUERY : * COPY [BINARY] <relname> FROM/TO * [USING DELIMITERS <delimiter>] * *****************************************************************************/CopyStmt: COPY opt_binary qualified_name opt_oids copy_from copy_file_name copy_delimiter opt_with copy_opt_list { $$ = cat_str(9, make_str("copy"), $2, $3, $4, $5, $6, $7, $8, $9); } ;copy_from: TO { $$ = make_str("to"); } | FROM { $$ = make_str("from"); } ;/* * copy_file_name NULL indicates stdio is used. Whether stdin or stdout is * used depends on the direction. (It really doesn't make sense to copy from * stdout. We silently correct the "typo". - AY 9/94 */copy_file_name: StringConst { $$ = $1; } | STDIN { $$ = make_str("stdin"); } | STDOUT { $$ = make_str("stdout"); } ;copy_opt_list: copy_opt_list copy_opt_item { $$ = cat2_str($1, $2); } | /* EMPTY */ { $$ = EMPTY; } ;copy_opt_item: BINARY { $$ = make_str("binary"); } | OIDS { $$ = make_str("oids"); } | DELIMITER opt_as StringConst { $$ = cat_str(3, make_str("delimiter"), $2, $3); } | NULL_P opt_as StringConst { $$ = cat_str(3, make_str("null"), $2, $3); } | CSV { $$ = make_str("csv"); } | HEADER { $$ = make_str("header"); } | QUOTE opt_as Sconst { $$ = cat_str(3, make_str("quote"), $2, $3); } | ESCAPE opt_as Sconst { $$ = cat_str(3, make_str("escape"), $2, $3); } | FORCE QUOTE columnList { $$ = cat2_str(make_str("force quote"), $3); } | FORCE NOT NULL_P columnList { $$ = cat2_str(make_str("force not null"), $4); } ;opt_binary: BINARY { $$ = make_str("binary"); } | /* EMPTY */ { $$ = EMPTY; } ;opt_oids: WITH OIDS { $$ = make_str("with oids"); } | /* EMPTY */ { $$ = EMPTY; } ;/* * the default copy delimiter is tab but the user can configure it */copy_delimiter: opt_using DELIMITERS StringConst { $$ = cat_str(3, $1, make_str("delimiters"), $3); } | /*EMPTY*/ { $$ = EMPTY; } ;opt_using: USING { $$ = make_str("using"); } | /* EMPTY */ { $$ = EMPTY; } ;/***************************************************************************** * * QUERY : * CREATE TABLE relname * *****************************************************************************/CreateStmt: CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptInherit OptWithOids OnCommitOption OptTableSpace { $$ = cat_str(11, make_str("create"), $2, make_str("table"), $4, make_str("("), $6, make_str(")"), $8, $9, $10, $11); } | CREATE OptTemp TABLE qualified_name OF qualified_name '(' OptTableElementList ')' OptWithOids OnCommitOption OptTableSpace { $$ = cat_str(12, make_str("create"), $2, make_str("table"), $4, make_str("of"), $6, make_str("("), $8, make_str(")"), $10, $11, $12); } ;/* * Redundancy here is needed to avoid shift/reduce conflicts, * since TEMP is not a reserved word. See also OptTempTableName. */OptTemp: TEMPORARY { $$ = make_str("temporary"); } | TEMP { $$ = make_str("temp"); } | LOCAL TEMPORARY { $$ = make_str("local temporary"); } | LOCAL TEMP { $$ = make_str("local temp"); } | GLOBAL TEMPORARY { $$ = make_str("global temporary"); } | GLOBAL TEMP { $$ = make_str("global temp"); } | /*EMPTY*/ { $$ = EMPTY; } ;OptTableElementList: TableElementList { $$ = $1; } | /*EMPTY*/ { $$ = EMPTY; } ;TableElementList: TableElement { $$ = $1; } | TableElementList ',' TableElement { $$ = cat_str(3, $1, make_str(","), $3); } ;TableElement: columnDef { $$ = $1; } | TableLikeClause { $$ = $1; } | TableConstraint { $$ = $1; } ;columnDef: ColId Typename ColQualList { $$ = cat_str(3, $1, $2, $3); } ;ColQualList: ColQualList ColConstraint { $$ = cat2_str($1,$2); } | /*EMPTY*/ { $$ = EMPTY; } ;ColConstraint: CONSTRAINT name ColConstraintElem { $$ = cat_str(3, make_str("constraint"), $2, $3); } | ColConstraintElem { $$ = $1; } | ConstraintAttr { $$ = $1; } ;/* DEFAULT NULL is already the default for Postgres. * But define it here and carry it forward into the system * to make it explicit. * - thomas 1998-09-13 * * WITH NULL and NULL are not SQL92-standard syntax elements, * so leave them out. Use DEFAULT NULL to explicitly indicate * that a column may have that value. WITH NULL leads to * shift/reduce conflicts with WITH TIME ZONE anyway. * - thomas 1999-01-08 */ColConstraintElem: NOT NULL_P { $$ = make_str("not null"); } | NULL_P { $$ = make_str("null"); } | UNIQUE OptConsTableSpace { $$ = cat2_str(make_str("unique"), $2); } | PRIMARY KEY OptConsTableSpace { $$ = cat2_str(make_str("primary key"), $3); } | CHECK '(' a_expr ')' { $$ = cat_str(3, make_str("check ("), $3, make_str(")")); } | DEFAULT b_expr { $$ = cat2_str(make_str("default"), $2); } | REFERENCES qualified_name opt_column_list key_match key_actions { $$ = cat_str(5, make_str("references"), $2, $3, $4, $5); } ;/* * ConstraintAttr represents constraint attributes, which we parse as if * they were independent constraint clauses, in order to avoid shift/reduce * conflicts (since NOT might start either an independent NOT NULL clause * or an attribute). analyze.c is responsible for attaching the attribute * information to the preceding "real" constraint node, and for complaining * if attribute clauses appear in the wrong place or wrong combinations. * * See also ConstraintAttributeSpec, which can be used in places where * there is no parsing conflict. */ConstraintAttr: DEFERRABLE { $$ = make_str("deferrable"); } | NOT DEFERRABLE { $$ = make_str("not deferrable"); } | INITIALLY DEFERRED { $$ = make_str("initially deferred"); } | INITIALLY IMMEDIATE { $$ = make_str("initially immediate"); } ;TableLikeClause: LIKE qualified_name like_including_defaults
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -