📄 preproc.y
字号:
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); } | CLOSE ALL { $$ = make_str("close all"); } ;CopyStmt: COPY opt_binary qualified_name opt_oids copy_from copy_file_name copy_delimiter opt_with copy_opt_list { if (strcmp($5, "to") == 0 && strcmp($6, "stdin") == 0) mmerror(PARSE_ERROR, ET_ERROR, "copy to stdin not possible.\n"); else if (strcmp($5, "from") == 0 && strcmp($6, "stdout") == 0) mmerror(PARSE_ERROR, ET_ERROR, "copy from stdout not possible.\n"); else if (strcmp($5, "from") == 0 && strcmp($6, "stdin") == 0) mmerror(PARSE_ERROR, ET_WARNING, "copy from stdin not implemented.\n"); $$ = cat_str(9, make_str("copy"), $2, $3, $4, $5, $6, $7, $8, $9); } | COPY select_with_parens TO copy_file_name opt_with copy_opt_list { if (strcmp($4, "stdin") == 0) mmerror(PARSE_ERROR, ET_ERROR, "copy to stdin not possible.\n"); $$ = cat_str(6, make_str("copy"), $2, make_str("to"), $4, $5, $6); } ;copy_from: TO { $$ = make_str("to"); } | FROM { $$ = make_str("from"); } ;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_P { $$ = 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 OptWith 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 ')' OptWith 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 opt_definition OptConsTableSpace { $$ = cat_str(3, make_str("unique"), $2, $3); } | PRIMARY KEY opt_definition OptConsTableSpace { $$ = cat_str(3, make_str("primary key"), $3, $4); } | 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 TableLikeOptionList {$$ = cat_str(3, make_str("like"), $2, $3); } ;TableLikeOptionList: TableLikeOptionList TableLikeOption { $$ = cat2_str($1, $2); } | /* EMPTY */ { $$ = EMPTY; } ;TableLikeOption: INCLUDING DEFAULTS { $$ = make_str("including defaults"); } | EXCLUDING DEFAULTS { $$ = make_str("excluding defaults"); } | INCLUDING CONSTRAINTS { $$ = make_str("including constraints"); } | EXCLUDING CONSTRAINTS { $$ = make_str("excluding constraints"); } | INCLUDING INDEXES { $$ = make_str("including indexes"); } | EXCLUDING INDEXES { $$ = make_str("excluding indexes"); } ;/* ConstraintElem specifies constraint syntax which is not embedded into * a column definition. ColConstraintElem specifies the embedded form. * - thomas 1997-12-03 */TableConstraint: CONSTRAINT name ConstraintElem { $$ = cat_str(3, make_str("constraint"), $2, $3); } | ConstraintElem { $$ = $1; } ;ConstraintElem: CHECK '(' a_expr ')' { $$ = cat_str(3, make_str("check("), $3, make_str(")")); } | UNIQUE '(' columnList ')' opt_definition OptConsTableSpace { $$ = cat_str(5, make_str("unique("), $3, make_str(")"), $5, $6); } | PRIMARY KEY '(' columnList ')' opt_definition OptConsTableSpace { $$ = cat_str(5, make_str("primary key("), $4, make_str(")"), $6, $7); } | FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list key_match key_actions ConstraintAttributeSpec { $$ = cat_str(8, make_str("foreign key("), $4, make_str(") references"), $7, $8, $9, $10, $11); } ;opt_column_list: '(' columnList ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); } | /*EMPTY*/ { $$ = EMPTY; } ;columnList: columnList ',' columnElem { $$ = cat_str(3, $1, make_str(","), $3); } | columnElem { $$ = $1; } ;columnElem: ColId { $$ = $1; } ;key_match: MATCH FULL { $$ = make_str("match full"); } | MATCH PARTIAL { mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported FOREIGN KEY/MATCH PARTIAL will be passed to backend"); $$ = make_str("match partial"); } | /*EMPTY*/ { $$ = EMPTY; } ;key_actions: key_delete { $$ = $1; } | key_update { $$ = $1; } | key_delete key_update { $$ = cat2_str($1, $2); } | key_update key_delete { $$ = cat2_str($1, $2); } | /*EMPTY*/ { $$ = EMPTY; } ;key_delete: ON DELETE_P key_action { $$ = cat2_str(make_str("on delete"), $3); } ;key_update: ON UPDATE key_action { $$ = cat2_str(make_str("on update"), $3); } ;key_action: NO ACTION { $$ = make_str("no action"); } | RESTRICT { $$ = make_str("restrict"); } | CASCADE { $$ = make_str("cascade"); } | SET DEFAULT { $$ = make_str("set default"); } | SET NULL_P { $$ = make_str("set null"); } ;OptInherit: INHERITS '(' qualified_name_list ')' { $$ = cat_str(3, make_str("inherits ("), $3, make_str(")")); } | /*EMPTY*/ { $$ = EMPTY; } ;OptWith: WITH definition { $$ = cat2_str(make_str("with"), $2); } | WITH OIDS { $$ = make_str("with oids"); } | WITHOUT OIDS { $$ = make_str("without oids"); } | /*EMPTY*/ { $$ = EMPTY; } ;OnCommitOption: ON COMMIT DROP { $$ = make_str("on commit drop"); } | ON COMMIT DELETE_P ROWS { $$ = make_str("on commit delete rows"); } | ON COMMIT PRESERVE ROWS { $$ = make_str("on commit preserve rows"); } | /*EMPTY*/ { $$ = EMPTY; } ;OptTableSpace: TABLESPACE name { $$ = cat2_str(make_str("tablespace"), $2); } | /*EMPTY*/ { $$ = EMPTY; } ;OptConsTableSpace: USING INDEX TABLESPACE name { $$ = cat2_str(make_str("using index tablespace"), $4); } | /*EMPTY*/ { $$ = EMPTY; } ;/* * Note: CREATE TABLE ... AS SELECT ... is just another spelling for * SELECT ... INTO. */CreateAsStmt: CREATE OptTemp TABLE create_as_target AS { FoundInto = 0; } SelectStmt { if (FoundInto == 1) mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE / AS SELECT cannot specify INTO"); $$ = cat_str(6, make_str("create"), $2, make_str("table"), $4, make_str("as"), $7); } ;create_as_target: qualified_name OptCreateAs OptWith OnCommitOption OptTableSpace { $$ = cat_str(5, $1, $2, $3, $4, $5); } ;OptCreateAs: '(' CreateAsList ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); } | /*EMPTY*/ { $$ = EMPTY; } ;CreateAsList: CreateAsList ',' CreateAsElement { $$ = cat_str(3, $1, make_str(","), $3); } | CreateAsElement { $$ = $1; } ;CreateAsElement: ColId { $$ = $1; } ;/***************************************************************************** * * QUERY : * CREATE SEQUENCE seqname * ALTER SEQUENCE seqname * *****************************************************************************/CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqList { $$ = cat_str(5, make_str("create"), $2, make_str("sequence"), $4, $5); } ;AlterSeqStmt: ALTER SEQUENCE qualified_name OptSeqList { $$ = cat_str(3,make_str("alter sequence"), $3, $4); } ;OptSeqList: OptSeqList OptSeqElem { $$ = cat2_str($1, $2); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -