📄 preproc.y
字号:
lookup_descriptor($1, connection); output_get_descr_header($1); free($1); } | ECPGOpen { struct cursor *ptr; if ((ptr = add_additional_variables($1, true)) != NULL) output_statement(mm_strdup(ptr->command), 0, ptr->connection ? mm_strdup(ptr->connection) : NULL); } | ECPGPrepare { if (connection) mmerror(PARSE_ERROR, ET_ERROR, "no at option for prepare statement.\n"); fprintf(yyout, "{ ECPGprepare(__LINE__, %s);", $1); whenever_action(2); free($1); } | ECPGRelease { /* output already done */ } | ECPGSetAutocommit { fprintf(yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL"); whenever_action(2); free($1); } | ECPGSetConnection { if (connection) mmerror(PARSE_ERROR, ET_ERROR, "no at option for set connection statement.\n"); fprintf(yyout, "{ ECPGsetconn(__LINE__, %s);", $1); whenever_action(2); free($1); } | ECPGTypedef { if (connection) mmerror(PARSE_ERROR, ET_ERROR, "no at option for typedef statement.\n"); fprintf(yyout, "%s", $1); free($1); output_line_number(); } | ECPGVar { if (connection) mmerror(PARSE_ERROR, ET_ERROR, "no at option for var statement.\n"); output_simple_statement($1); } | ECPGWhenever { if (connection) mmerror(PARSE_ERROR, ET_ERROR, "no at option for whenever statement.\n"); output_simple_statement($1); } ;/* * We start with a lot of stuff that's very similar to the backend's parsing *//***************************************************************************** * * Create a new Postgres DBMS user * * *****************************************************************************/CreateUserStmt: CREATE USER UserId opt_with OptUserList { $$ = cat_str(4, make_str("create user"), $3, make_str("with"), $5); } ;opt_with: WITH { $$ = make_str("with"); } | /*EMPTY*/ { $$ = EMPTY; } ;/***************************************************************************** * * Alter a postgresql DBMS user * * *****************************************************************************/AlterUserStmt: ALTER USER UserId OptUserList { $$ = cat_str(3, make_str("alter user"), $3, $4); } | ALTER USER UserId WITH OptUserList { $$ = cat_str(4, make_str("alter user"), $3, make_str("with"), $5); } ;AlterUserSetStmt: ALTER USER UserId SET set_rest { $$ = cat_str(4, make_str("alter user"), $3, make_str("set"), $5); } | ALTER USER UserId VariableResetStmt { $$ = cat_str(3, make_str("alter user"), $3, $4); } ;/***************************************************************************** * * Drop a postgresql DBMS user * * *****************************************************************************/DropUserStmt: DROP USER user_list { $$ = cat2_str(make_str("drop user"), $3);} ;/* * Options for CREATE USER and ALTER USER */OptUserList: OptUserList OptUserElem { $$ = cat2_str($1, $2); } | /* EMPTY */ { $$ = EMPTY; } ;OptUserElem: PASSWORD Sconst { $$ = cat2_str(make_str("password"), $2); } | SYSID PosIntConst { $$ = cat2_str(make_str("sysid"), $2); } | CREATEDB { $$ = make_str("createdb"); } | NOCREATEDB { $$ = make_str("nocreatedb"); } | CREATEUSER { $$ = make_str("createuser"); } | NOCREATEUSER { $$ = make_str("nocreateuser"); } | IN_P GROUP_P user_list { $$ = cat2_str(make_str("in group"), $3); } | VALID UNTIL Sconst { $$ = cat2_str(make_str("valid until"), $3); } ;user_list: user_list ',' UserId { $$ = cat_str(3, $1, make_str(","), $3); } | UserId { $$ = $1; } ;/***************************************************************************** * * Create a postgresql group * * ****************************************************************************/CreateGroupStmt: CREATE GROUP_P UserId OptGroupList { $$ = cat_str(3, make_str("create group"), $3, $4); } | CREATE GROUP_P UserId WITH OptGroupList { $$ = cat_str(4, make_str("create group"), $3, make_str("with"), $5); } ;/* * Options for CREATE GROUP */OptGroupList: OptGroupList OptGroupElem { $$ = cat2_str($1, $2); } | /* EMPTY */ { $$ = EMPTY; } ;OptGroupElem: USER user_list { $$ = cat2_str(make_str("user"), $2); } | SYSID PosIntConst { $$ = cat2_str(make_str("sysid"), $2); } ;/***************************************************************************** * * Alter a postgresql group * * *****************************************************************************/AlterGroupStmt: ALTER GROUP_P UserId ADD USER user_list { $$ = cat_str(4, make_str("alter group"), $3, make_str("add user"), $6); } | ALTER GROUP_P UserId DROP USER user_list { $$ = cat_str(4, make_str("alter group"), $3, make_str("drop user"), $6); } ;/***************************************************************************** * * Drop a postgresql group * * *****************************************************************************/DropGroupStmt: DROP GROUP_P UserId { $$ = cat2_str(make_str("drop group"), $3); } ;/***************************************************************************** * * Manipulate a schema * * *****************************************************************************/CreateSchemaStmt: CREATE SCHEMA UserId OptSchemaName AUTHORIZATION UserId OptSchemaEltList { $$ = cat_str(6, make_str("create schema"), $3, $4, make_str("authorization"), $6, $7); } | 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; } | 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: ColId TO var_list_or_default { $$ = cat_str(3, $1, make_str("to"), $3); } | ColId "=" var_list_or_default { $$ = cat_str(3, $1, make_str("="), $3); } | 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); } | SESSION AUTHORIZATION ColId_or_Sconst { $$ = cat2_str(make_str("session authorization"), $3); } | SESSION AUTHORIZATION DEFAULT { $$ = make_str("session authorization default"); } ;var_list_or_default: var_list { $$ = $1; } | DEFAULT { $$ = make_str("default"); } ;var_list: var_value { $$ = $1; } | var_list ',' var_value { $$ = cat_str(3, $1, make_str(","), $3); } ;iso_level: READ COMMITTED { $$ = make_str("read committed"); } | SERIALIZABLE { $$ = make_str("serializable"); } ;var_value: opt_boolean { $$ = $1; } | AllConst { $$ = $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 ColId { $$ = 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 ColId { $$ = 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 variations * *****************************************************************************/AlterTableStmt:/* ALTER TABLE <relation> ADD [COLUMN] <coldef> */ ALTER TABLE relation_expr ADD opt_column columnDef { $$ = cat_str(5, make_str("alter table"), $3, make_str("add"), $5, $6); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */ | ALTER TABLE relation_expr ALTER opt_column ColId alter_column_default { $$ = cat_str(6, make_str("alter table"), $3, make_str("alter"), $5, $6, $7); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL */ | ALTER TABLE relation_expr ALTER opt_column ColId DROP NOT NULL_P { $$ = cat_str(6, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("drop not null")); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */ | ALTER TABLE relation_expr ALTER opt_column ColId SET NOT NULL_P { $$ = cat_str(6, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set not null")); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <IntegerOnly> */ | ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS PosIntConst { $$ = cat_str(7, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set statistics"), $9); }/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */ | ALTER TABLE relation_expr ALTER opt_column ColId SET STORAGE ColId { $$ = cat_str(7, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set storage"), $9); }/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */ | ALTER TABLE relation_expr DROP opt_column ColId opt_drop_behavior { $$ = cat_str(6, make_str("alter table"), $3, make_str("drop"), $5, $6, $7); }/* ALTER TABLE <relation> ADD CONSTRAINT ... */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -