📄 preproc.y
字号:
default_list: default_list ',' default_expr { $$ = cat3_str($1, make1_str(","), $3); } | default_expr { $$ = $1; } ;/* The Postgres default column value is NULL. * Rather than carrying DEFAULT NULL forward as a clause, * let's just have it be a no-op. | NULL_P { $$ = make1_str("null"); } * - thomas 1998-09-13 */default_expr: AexprConst { $$ = $1; } | '-' default_expr %prec UMINUS { $$ = cat2_str(make1_str("-"), $2); } | default_expr '+' default_expr { $$ = cat3_str($1, make1_str("+"), $3); } | default_expr '-' default_expr { $$ = cat3_str($1, make1_str("-"), $3); } | default_expr '/' default_expr { $$ = cat3_str($1, make1_str("/"), $3); } | default_expr '%' default_expr { $$ = cat3_str($1, make1_str("%"), $3); } | default_expr '*' default_expr { $$ = cat3_str($1, make1_str("*"), $3); } | default_expr '=' default_expr { yyerror("boolean expressions not supported in DEFAULT"); } | default_expr '<' default_expr { yyerror("boolean expressions not supported in DEFAULT"); } | default_expr '>' default_expr { yyerror("boolean expressions not supported in DEFAULT"); }/* not possible in embedded sql | ':' default_expr { $$ = cat2_str(make1_str(":"), $2); }*/ | ';' default_expr { $$ = cat2_str(make1_str(";"), $2); } | '|' default_expr { $$ = cat2_str(make1_str("|"), $2); } | default_expr TYPECAST Typename { $$ = cat3_str($1, make1_str("::"), $3); } | CAST '(' default_expr AS Typename ')' { $$ = cat3_str(make2_str(make1_str("cast("), $3) , make1_str("as"), make2_str($5, make1_str(")"))); } | '(' default_expr ')' { $$ = make3_str(make1_str("("), $2, make1_str(")")); } | func_name '(' ')' { $$ = cat2_str($1, make1_str("()")); } | func_name '(' default_list ')' { $$ = cat2_str($1, make3_str(make1_str("("), $3, make1_str(")"))); } | default_expr Op default_expr { if (!strcmp("<=", $2) || !strcmp(">=", $2)) yyerror("boolean expressions not supported in DEFAULT"); $$ = cat3_str($1, $2, $3); } | Op default_expr { $$ = cat2_str($1, $2); } | default_expr Op { $$ = cat2_str($1, $2); } /* XXX - thomas 1997-10-07 v6.2 function-specific code to be changed */ | CURRENT_DATE { $$ = make1_str("current_date"); } | CURRENT_TIME { $$ = make1_str("current_time"); } | CURRENT_TIME '(' Iconst ')' { if ($3 != 0) fprintf(stderr, "CURRENT_TIME(%s) precision not implemented; zero used instead",$3); $$ = "current_time"; } | CURRENT_TIMESTAMP { $$ = make1_str("current_timestamp"); } | CURRENT_TIMESTAMP '(' Iconst ')' { if ($3 != 0) fprintf(stderr, "CURRENT_TIMESTAMP(%s) precision not implemented; zero used instead",$3); $$ = "current_timestamp"; } | CURRENT_USER { $$ = make1_str("current_user"); } | USER { $$ = make1_str("user"); } ;/* 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 { $$ = cat3_str(make1_str("constraint"), $2, $3); } | ConstraintElem { $$ = $1; } ;ConstraintElem: CHECK '(' constraint_expr ')' { $$ = make3_str(make1_str("check("), $3, make1_str(")")); } | UNIQUE '(' columnList ')' { $$ = make3_str(make1_str("unique("), $3, make1_str(")")); } | PRIMARY KEY '(' columnList ')' { $$ = make3_str(make1_str("primary key("), $4, make1_str(")")); } | FOREIGN KEY '(' columnList ')' REFERENCES ColId opt_column_list key_match key_actions { fprintf(stderr, "CREATE TABLE/FOREIGN KEY clause ignored; not yet implemented"); $$ = ""; } ;constraint_list: constraint_list ',' constraint_expr { $$ = cat3_str($1, make1_str(","), $3); } | constraint_expr { $$ = $1; } ;constraint_expr: AexprConst { $$ = $1; } | NULL_P { $$ = make1_str("null"); } | ColId { $$ = $1; } | '-' constraint_expr %prec UMINUS { $$ = cat2_str(make1_str("-"), $2); } | constraint_expr '+' constraint_expr { $$ = cat3_str($1, make1_str("+"), $3); } | constraint_expr '-' constraint_expr { $$ = cat3_str($1, make1_str("-"), $3); } | constraint_expr '/' constraint_expr { $$ = cat3_str($1, make1_str("/"), $3); } | constraint_expr '%' constraint_expr { $$ = cat3_str($1, make1_str("%"), $3); } | constraint_expr '*' constraint_expr { $$ = cat3_str($1, make1_str("*"), $3); } | constraint_expr '=' constraint_expr { $$ = cat3_str($1, make1_str("="), $3); } | constraint_expr '<' constraint_expr { $$ = cat3_str($1, make1_str("<"), $3); } | constraint_expr '>' constraint_expr { $$ = cat3_str($1, make1_str(">"), $3); }/* this one doesn't work with embedded sql anyway | ':' constraint_expr { $$ = cat2_str(make1_str(":"), $2); }*/ | ';' constraint_expr { $$ = cat2_str(make1_str(";"), $2); } | '|' constraint_expr { $$ = cat2_str(make1_str("|"), $2); } | constraint_expr TYPECAST Typename { $$ = cat3_str($1, make1_str("::"), $3); } | CAST '(' constraint_expr AS Typename ')' { $$ = cat3_str(make2_str(make1_str("cast("), $3), make1_str("as"), make2_str($5, make1_str(")"))); } | '(' constraint_expr ')' { $$ = make3_str(make1_str("("), $2, make1_str(")")); } | func_name '(' ')' { { $$ = cat2_str($1, make1_str("()")); } } | func_name '(' constraint_list ')' { $$ = cat2_str($1, make3_str(make1_str("("), $3, make1_str(")"))); } | constraint_expr Op constraint_expr { $$ = cat3_str($1, $2, $3); } | constraint_expr LIKE constraint_expr { $$ = cat3_str($1, make1_str("like"), $3); } | constraint_expr NOT LIKE constraint_expr { $$ = cat3_str($1, make1_str("not like"), $4); } | constraint_expr AND constraint_expr { $$ = cat3_str($1, make1_str("and"), $3); } | constraint_expr OR constraint_expr { $$ = cat3_str($1, make1_str("or"), $3); } | NOT constraint_expr { $$ = cat2_str(make1_str("not"), $2); } | Op constraint_expr { $$ = cat2_str($1, $2); } | constraint_expr Op { $$ = cat2_str($1, $2); } | constraint_expr ISNULL { $$ = cat2_str($1, make1_str("isnull")); } | constraint_expr IS NULL_P { $$ = cat2_str($1, make1_str("is null")); } | constraint_expr NOTNULL { $$ = cat2_str($1, make1_str("notnull")); } | constraint_expr IS NOT NULL_P { $$ = cat2_str($1, make1_str("is not null")); } | constraint_expr IS TRUE_P { $$ = cat2_str($1, make1_str("is true")); } | constraint_expr IS FALSE_P { $$ = cat2_str($1, make1_str("is false")); } | constraint_expr IS NOT TRUE_P { $$ = cat2_str($1, make1_str("is not true")); } | constraint_expr IS NOT FALSE_P { $$ = cat2_str($1, make1_str("is not false")); } | constraint_expr IN '(' c_list ')' { $$ = cat4_str($1, make1_str("in ("), $4, make1_str(")")); } | constraint_expr NOT IN '(' c_list ')' { $$ = cat4_str($1, make1_str("not in ("), $5, make1_str(")")); } | constraint_expr BETWEEN c_expr AND c_expr { $$ = cat5_str($1, make1_str("between"), $3, make1_str("and"), $5); } | constraint_expr NOT BETWEEN c_expr AND c_expr { $$ = cat5_str($1, make1_str("not between"), $4, make1_str("and"), $6); } ;c_list: c_list ',' c_expr { $$ = make3_str($1, make1_str(", "), $3); } | c_expr { $$ = $1; }c_expr: AexprConst { $$ = $1; }key_match: MATCH FULL { $$ = make1_str("match full"); } | MATCH PARTIAL { $$ = make1_str("match partial"); } | /*EMPTY*/ { $$ = make1_str(""); } ;key_actions: key_action key_action { $$ = cat2_str($1, $2); } | key_action { $$ = $1; } | /*EMPTY*/ { $$ = make1_str(""); } ;key_action: ON DELETE key_reference { $$ = cat2_str(make1_str("on delete"), $3); } | ON UPDATE key_reference { $$ = cat2_str(make1_str("on update"), $3); } ;key_reference: NO ACTION { $$ = make1_str("no action"); } | CASCADE { $$ = make1_str("cascade"); } | SET DEFAULT { $$ = make1_str("set default"); } | SET NULL_P { $$ = make1_str("set null"); } ;OptInherit: INHERITS '(' relation_name_list ')' { $$ = make3_str(make1_str("inherits ("), $3, make1_str(")")); } | /*EMPTY*/ { $$ = make1_str(""); } ;CreateAsStmt: CREATE OptTemp TABLE relation_name OptCreateAs AS SubSelect { $$ = cat5_str(cat3_str(make1_str("create"), $2, make1_str("table")), $4, $5, make1_str("as"), $7); } ;OptCreateAs: '(' CreateAsList ')' { $$ = make3_str(make1_str("("), $2, make1_str(")")); } | /*EMPTY*/ { $$ = make1_str(""); } ;CreateAsList: CreateAsList ',' CreateAsElement { $$ = cat3_str($1, make1_str(","), $3); } | CreateAsElement { $$ = $1; } ;CreateAsElement: ColId { $$ = $1; } ;/***************************************************************************** * * QUERY : * CREATE SEQUENCE seqname * *****************************************************************************/CreateSeqStmt: CREATE SEQUENCE relation_name OptSeqList { $$ = cat3_str(make1_str("create sequence"), $3, $4); } ;OptSeqList: OptSeqList OptSeqElem { $$ = cat2_str($1, $2); } | { $$ = make1_str(""); } ;OptSeqElem: CACHE IntegerOnly { $$ = cat2_str(make1_str("cache"), $2); } | CYCLE { $$ = make1_str("cycle"); } | INCREMENT IntegerOnly { $$ = cat2_str(make1_str("increment"), $2); } | MAXVALUE IntegerOnly { $$ = cat2_str(make1_str("maxvalue"), $2); } | MINVALUE IntegerOnly { $$ = cat2_str(make1_str("minvalue"), $2); } | START IntegerOnly { $$ = cat2_str(make1_str("start"), $2); } ;NumericOnly: FloatOnly { $$ = $1; } | IntegerOnly { $$ = $1; }FloatOnly: Fconst { $$ = $1; } | '-' Fconst { $$ = cat2_str(make1_str("-"), $2); } ;IntegerOnly: Iconst { $$ = $1; } | '-' Iconst { $$ = cat2_str(make1_str("-"), $2); } ;/***************************************************************************** * * QUERIES : * CREATE PROCEDURAL LANGUAGE ... * DROP PROCEDURAL LANGUAGE ... * *****************************************************************************/CreatePLangStmt: CREATE PLangTrusted PROCEDURAL LANGUAGE Sconst HANDLER def_name LANCOMPILER Sconst { $$ = cat4_str(cat5_str(make1_str("create"), $2, make1_str("precedural language"), $5, make1_str("handler")), $7, make1_str("langcompiler"), $9); } ;PLangTrusted: TRUSTED { $$ = make1_str("trusted"); } | { $$ = make1_str(""); }DropPLangStmt: DROP PROCEDURAL LANGUAGE Sconst { $$ = cat2_str(make1_str("drop procedural language"), $4); } ;/***************************************************************************** * * QUERIES : * CREATE TRIGGER ... * DROP TRIGGER ... * *****************************************************************************/CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON relation_name TriggerForSpec EXECUTE PROCEDURE name '(' TriggerFuncArgs ')' { $$ = cat2_str(cat5_str(cat5_str(make1_str("create trigger"), $3, $4, $5, make1_str("on")), $7, $8, make1_str("execute procedure"), $11), make3_str(make1_str("("), $13, make1_str(")"))); } ;TriggerActionTime: BEFORE { $$ = make1_str("before"); } | AFTER { $$ = make1_str("after"); } ;TriggerEvents: TriggerOneEvent { $$ = $1; } | TriggerOneEvent OR TriggerOneEvent { $$ = cat3_str($1, make1_str("or"), $3); } | TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent { $$ = cat5_str($1, make1_str("or"), $3, make1_str("or"), $5); } ;TriggerOneEvent: INSERT { $$ = make1_str("insert"); } | DELETE { $$ = make1_str("delete"); } | UPDATE { $$ = make1_str("update"); } ;TriggerForSpec: FOR TriggerForOpt TriggerForType { $$ = cat3_str(make1_str("for"), $2, $3); } ;TriggerForOpt: EACH { $$ = make1_str("each"); } | /*EMPTY*/ { $$ = make1_str(""); } ;TriggerForType: ROW { $$ = make1_str("row"); } | STATEMENT { $$ = make1_str("statement"); } ;TriggerFuncArgs: TriggerFuncArg { $$ = $1; } | TriggerFuncArgs ',' TriggerFuncArg { $$ = cat3_str($1, make1_str(","), $3); } | /*EMPTY*/ { $$ = make1_str(""); } ;TriggerFuncArg: Iconst { $$ = $1; } | Fconst { $$ = $1; } | Sconst { $$ = $1; } | ident { $$ = $1; } ;DropTrigStmt: DROP TRIGGER name ON relation_name { $$ = cat4_str(make1_str("drop trigger"), $3, make1_str("on"), $5); } ;/***************************************************************************** * * QUERY : * define (type,operator,aggregate) * *****************************************************************************/DefineStmt: CREATE def_type def_rest { $$ = cat3_str(make1_str("create"), $2, $3); } ;def_rest: def_name definition { $$ = cat2_str($1, $2); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -