📄 preproc.y
字号:
;def_type: OPERATOR { $$ = make1_str("operator"); } | TYPE_P { $$ = make1_str("type"); } | AGGREGATE { $$ = make1_str("aggregate"); } ;def_name: PROCEDURE { $$ = make1_str("procedure"); } | JOIN { $$ = make1_str("join"); } | ColId { $$ = $1; } | MathOp { $$ = $1; } | Op { $$ = $1; } ;definition: '(' def_list ')' { $$ = make3_str(make1_str("("), $2, make1_str(")")); } ;def_list: def_elem { $$ = $1; } | def_list ',' def_elem { $$ = cat3_str($1, make1_str(","), $3); } ;def_elem: def_name '=' def_arg { $$ = cat3_str($1, make1_str("="), $3); } | def_name { $$ = $1; } | DEFAULT '=' def_arg { $$ = cat2_str(make1_str("default ="), $3); } ;def_arg: ColId { $$ = $1; } | all_Op { $$ = $1; } | NumericOnly { $$ = $1; } | Sconst { $$ = $1; } | SETOF ColId { $$ = cat2_str(make1_str("setof"), $2); } ;/***************************************************************************** * * QUERY: * destroy <relname1> [, <relname2> .. <relnameN> ] * *****************************************************************************/DestroyStmt: DROP TABLE relation_name_list { $$ = cat2_str(make1_str("drop table"), $3); } | DROP SEQUENCE relation_name_list { $$ = cat2_str(make1_str("drop sequence"), $3); } ;/***************************************************************************** * * QUERY: * fetch/move [forward | backward] [ # | all ] [ in <portalname> ] * fetch [ forward | backward | absolute | relative ] * [ # | all | next | prior ] [ [ in | from ] <portalname> ] * *****************************************************************************/FetchStmt: FETCH opt_direction fetch_how_many opt_portal_name INTO into_list { if (strncmp($2, "relative", strlen("relative")) == 0 && atol($3) == 0L) yyerror("FETCH/RELATIVE at current position is not supported"); $$ = cat4_str(make1_str("fetch"), $2, $3, $4); } | MOVE opt_direction fetch_how_many opt_portal_name { $$ = cat4_str(make1_str("fetch"), $2, $3, $4); } ;opt_direction: FORWARD { $$ = make1_str("forward"); } | BACKWARD { $$ = make1_str("backward"); } | RELATIVE { $$ = make1_str("relative"); } | ABSOLUTE { fprintf(stderr, "FETCH/ABSOLUTE not supported, using RELATIVE"); $$ = make1_str("absolute"); } | /*EMPTY*/ { $$ = make1_str(""); /* default */ } ;fetch_how_many: Iconst { $$ = $1; } | '-' Iconst { $$ = make2_str(make1_str("-"), $2); } | ALL { $$ = make1_str("all"); } | NEXT { $$ = make1_str("next"); } | PRIOR { $$ = make1_str("prior"); } | /*EMPTY*/ { $$ = make1_str(""); /*default*/ } ;opt_portal_name: IN name { $$ = cat2_str(make1_str("in"), $2); } | FROM name { $$ = cat2_str(make1_str("from"), $2); }/* | name { $$ = cat2_str(make1_str("in"), $1); */ | /*EMPTY*/ { $$ = make1_str(""); } ;/***************************************************************************** * * QUERY: * GRANT [privileges] ON [relation_name_list] TO [GROUP] grantee * *****************************************************************************/GrantStmt: GRANT privileges ON relation_name_list TO grantee opt_with_grant { $$ = cat2_str(cat5_str(make1_str("grant"), $2, make1_str("on"), $4, make1_str("to")), $6); } ;privileges: ALL PRIVILEGES { $$ = make1_str("all privileges"); } | ALL { $$ = make1_str("all"); } | operation_commalist { $$ = $1; } ;operation_commalist: operation { $$ = $1; } | operation_commalist ',' operation { $$ = cat3_str($1, make1_str(","), $3); } ;operation: SELECT { $$ = make1_str("select"); } | INSERT { $$ = make1_str("insert"); } | UPDATE { $$ = make1_str("update"); } | DELETE { $$ = make1_str("delete"); } | RULE { $$ = make1_str("rule"); } ;grantee: PUBLIC { $$ = make1_str("public"); } | GROUP ColId { $$ = cat2_str(make1_str("group"), $2); } | ColId { $$ = $1; } ;opt_with_grant: WITH GRANT OPTION { yyerror("WITH GRANT OPTION is not supported. Only relation owners can set privileges"); } | /*EMPTY*/ ;/***************************************************************************** * * QUERY: * REVOKE [privileges] ON [relation_name] FROM [user] * *****************************************************************************/RevokeStmt: REVOKE privileges ON relation_name_list FROM grantee { $$ = cat2_str(cat5_str(make1_str("revoke"), $2, make1_str("on"), $4, make1_str("from")), $6); } ;/***************************************************************************** * * QUERY: * create index <indexname> on <relname> * using <access> "(" (<col> with <op>)+ ")" [with * <target_list>] * * [where <qual>] is not supported anymore *****************************************************************************/IndexStmt: CREATE index_opt_unique INDEX index_name ON relation_name access_method_clause '(' index_params ')' opt_with { /* should check that access_method is valid, etc ... but doesn't */ $$ = cat5_str(cat5_str(make1_str("create"), $2, make1_str("index"), $4, make1_str("on")), $6, $7, make3_str(make1_str("("), $9, make1_str(")")), $11); } ;index_opt_unique: UNIQUE { $$ = make1_str("unique"); } | /*EMPTY*/ { $$ = make1_str(""); } ;access_method_clause: USING access_method { $$ = cat2_str(make1_str("using"), $2); } | /*EMPTY*/ { $$ = make1_str(""); } ;index_params: index_list { $$ = $1; } | func_index { $$ = $1; } ;index_list: index_list ',' index_elem { $$ = cat3_str($1, make1_str(","), $3); } | index_elem { $$ = $1; } ;func_index: func_name '(' name_list ')' opt_type opt_class { $$ = cat4_str($1, make3_str(make1_str("("), $3, ")"), $5, $6); } ;index_elem: attr_name opt_type opt_class { $$ = cat3_str($1, $2, $3); } ;opt_type: ':' Typename { $$ = cat2_str(make1_str(":"), $2); } | FOR Typename { $$ = cat2_str(make1_str("for"), $2); } | /*EMPTY*/ { $$ = make1_str(""); } ;/* opt_class "WITH class" conflicts with preceeding opt_type * for Typename of "TIMESTAMP WITH TIME ZONE" * So, remove "WITH class" from the syntax. OK?? * - thomas 1997-10-12 * | WITH class { $$ = $2; } */opt_class: class { $$ = $1; } | USING class { $$ = cat2_str(make1_str("using"), $2); } | /*EMPTY*/ { $$ = make1_str(""); } ;/***************************************************************************** * * QUERY: * extend index <indexname> [where <qual>] * *****************************************************************************/ExtendStmt: EXTEND INDEX index_name where_clause { $$ = cat3_str(make1_str("extend index"), $3, $4); } ;/***************************************************************************** * * QUERY: * execute recipe <recipeName> * *****************************************************************************//* NOT USEDRecipeStmt: EXECUTE RECIPE recipe_name { $$ = cat2_str(make1_str("execute recipe"), $3); } ;*//***************************************************************************** * * QUERY: * define function <fname> * (language = <lang>, returntype = <typename> * [, arch_pct = <percentage | pre-defined>] * [, disk_pct = <percentage | pre-defined>] * [, byte_pct = <percentage | pre-defined>] * [, perbyte_cpu = <int | pre-defined>] * [, percall_cpu = <int | pre-defined>] * [, iscachable]) * [arg is (<type-1> { , <type-n>})] * as <filename or code in language as appropriate> * *****************************************************************************/ProcedureStmt: CREATE FUNCTION func_name func_args RETURNS func_return opt_with AS Sconst LANGUAGE Sconst { $$ = cat2_str(cat5_str(cat5_str(make1_str("create function"), $3, $4, make1_str("returns"), $6), $7, make1_str("as"), $9, make1_str("language")), $11); }opt_with: WITH definition { $$ = cat2_str(make1_str("with"), $2); } | /*EMPTY*/ { $$ = make1_str(""); } ;func_args: '(' func_args_list ')' { $$ = make3_str(make1_str("("), $2, make1_str(")")); } | '(' ')' { $$ = make1_str("()"); } ;func_args_list: TypeId { $$ = $1; } | func_args_list ',' TypeId { $$ = cat3_str($1, make1_str(","), $3); } ;func_return: set_opt TypeId { $$ = cat2_str($1, $2); } ;set_opt: SETOF { $$ = make1_str("setof"); } | /*EMPTY*/ { $$ = make1_str(""); } ;/***************************************************************************** * * QUERY: * * remove function <funcname> * (REMOVE FUNCTION "funcname" (arg1, arg2, ...)) * remove aggregate <aggname> * (REMOVE AGGREGATE "aggname" "aggtype") * remove operator <opname> * (REMOVE OPERATOR "opname" (leftoperand_typ rightoperand_typ)) * remove type <typename> * (REMOVE TYPE "typename") * remove rule <rulename> * (REMOVE RULE "rulename") * *****************************************************************************/RemoveStmt: DROP remove_type name { $$ = cat3_str(make1_str("drop"), $2, $3); } ;remove_type: TYPE_P { $$ = make1_str("type"); } | INDEX { $$ = make1_str("index"); } | RULE { $$ = make1_str("rule"); } | VIEW { $$ = make1_str("view"); } ;RemoveAggrStmt: DROP AGGREGATE name aggr_argtype { $$ = cat3_str(make1_str("drop aggregate"), $3, $4); } ;aggr_argtype: name { $$ = $1; } | '*' { $$ = make1_str("*"); } ;RemoveFuncStmt: DROP FUNCTION func_name func_args { $$ = cat3_str(make1_str("drop function"), $3, $4); } ;RemoveOperStmt: DROP OPERATOR all_Op '(' oper_argtypes ')' { $$ = cat3_str(make1_str("drop operator"), $3, make3_str(make1_str("("), $5, make1_str(")"))); } ;all_Op: Op | MathOp;MathOp: '+' { $$ = make1_str("+"); } | '-' { $$ = make1_str("-"); } | '*' { $$ = make1_str("*"); } | '%' { $$ = make1_str("%"); } | '/' { $$ = make1_str("/"); } | '<' { $$ = make1_str("<"); } | '>' { $$ = make1_str(">"); } | '=' { $$ = make1_str("="); } ;oper_argtypes: name { yyerror("parser: argument type missing (use NONE for unary operators)"); } | name ',' name { $$ = cat3_str($1, make1_str(","), $3); } | NONE ',' name /* left unary */ { $$ = cat2_str(make1_str("none,"), $3); } | name ',' NONE /* right unary */ { $$ = cat2_str($1, make1_str(", none")); } ;/***************************************************************************** * * QUERY: * rename <attrname1> in <relname> [*] to <attrname2> * rename <relname1> to <relname2> * *****************************************************************************/RenameStmt: ALTER TABLE relation_name opt_inh_star RENAME opt_column opt_name TO name { $$ = cat4_str(cat5_str(make1_str("alter table"), $3, $4, make1_str("rename"), $6), $7, make1_str("to"), $9); } ;opt_name: name { $$ = $1; } | /*EMPTY*/ { $$ = make1_str(""); } ;opt_column: COLUMN { $$ = make1_str("colmunn"); } | /*EMPTY*/ { $$ = make1_str(""); } ;/***************************************************************************** * * QUERY: Define Rewrite Rule , Define Tuple Rule * Define Rule <old rules > * * only rewrite rule is supported -- ay 9/94 * *****************************************************************************/RuleStmt: CREATE RULE name AS { QueryIsRule=1; } ON event TO event_object where_clause DO opt_instead RuleActionList { $$ = cat2_str(cat5_str(cat5_str(make1_str("create rule"), $3, make1_str("as on"), $7, make1_str("to")), $9, $10, make1_str("do"), $12), $13); } ;RuleActionList: NOTHING { $$ = make1_str("nothing"); } | SelectStmt { $$ = $1; } | RuleActionStmt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -