diff options
Diffstat (limited to 'src/interfaces/ecpg/preproc/preproc.y')
-rw-r--r-- | src/interfaces/ecpg/preproc/preproc.y | 206 |
1 files changed, 117 insertions, 89 deletions
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index 17a370aaeb..387ba1e143 100644 --- a/src/interfaces/ecpg/preproc/preproc.y +++ b/src/interfaces/ecpg/preproc/preproc.y @@ -100,7 +100,7 @@ new_variable(const char * name, struct ECPGtype * type) { struct variable * p = (struct variable*) mm_alloc(sizeof(struct variable)); - p->name = strdup(name); + p->name = mm_strdup(name); p->type = type; p->brace_level = braces_open; @@ -528,57 +528,52 @@ output_statement(char * stmt, int mode) %token TYPECAST /* Keywords (in SQL92 reserved words) */ -%token ABSOLUTE, ACTION, ADD, ALL, ALTER, AND, ANY AS, ASC, +%token ABSOLUTE, ACTION, ADD, ALL, ALTER, AND, ANY, AS, ASC, BEGIN_TRANS, BETWEEN, BOTH, BY, CASCADE, CAST, CHAR, CHARACTER, CHECK, CLOSE, COLLATE, COLUMN, COMMIT, CONSTRAINT, CREATE, CROSS, CURRENT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, DAY_P, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISTINCT, DOUBLE, DROP, END_TRANS, EXECUTE, EXISTS, EXTRACT, - FETCH, FLOAT, FOR, FOREIGN, FROM, FULL, + FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL, GRANT, GROUP, HAVING, HOUR_P, IN, INNER_P, INSENSITIVE, INSERT, INTERVAL, INTO, IS, JOIN, KEY, LANGUAGE, LEADING, LEFT, LIKE, LOCAL, MATCH, MINUTE_P, MONTH_P, NAMES, - NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NOTIFY, NULL_P, NUMERIC, + NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULL_P, NUMERIC, OF, ON, ONLY, OPTION, OR, ORDER, OUTER_P, PARTIAL, POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC, READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK, SCROLL, SECOND_P, SELECT, SET, SUBSTRING, TABLE, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, - TO, TRAILING, TRANSACTION, TRIM, + TO, TRAILING, TRANSACTION, TRIM, TRUE_P, UNION, UNIQUE, UPDATE, USER, USING, VALUES, VARCHAR, VARYING, VIEW, WHERE, WITH, WORK, YEAR_P, ZONE /* Keywords (in SQL3 reserved words) */ -%token FALSE_P, TRIGGER, TRUE_P +%token TRIGGER /* Keywords (in SQL92 non-reserved words) */ %token TYPE_P -/* Keywords for Postgres support (not in SQL92 reserved words) */ -%token ABORT_TRANS, AFTER, AGGREGATE, ANALYZE, - BACKWARD, BEFORE, BINARY, CACHE, CLUSTER, COPY, CYCLE, - DATABASE, DELIMITERS, DO, EACH, EXPLAIN, EXTEND, +/* Keywords for Postgres support (not in SQL92 reserved words) + * + * The CREATEDB and CREATEUSER tokens should go away + * when some sort of pg_privileges relation is introduced. + * - Todd A. Brandys 1998-01-01? + */ +%token ABORT_TRANS, AFTER, AGGREGATE, ANALYZE, BACKWARD, BEFORE, BINARY, + CACHE, CLUSTER, COPY, CREATEDB, CREATEUSER, CYCLE, + DATABASE, DELIMITERS, DO, EACH, ENCODING, EXPLAIN, EXTEND, FORWARD, FUNCTION, HANDLER, INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL, - LANCOMPILER, LISTEN, UNLISTEN, LOAD, LOCK_P, LOCATION, MAXVALUE, MINVALUE, MOVE, - NEW, NONE, NOTHING, NOTNULL, OIDS, OPERATOR, PROCEDURAL, + LANCOMPILER, LISTEN, UNLISTEN, LOAD, LOCATION, LOCK_P, MAXVALUE, MINVALUE, MOVE, + NEW, NOCREATEDB, NOCREATEUSER, NONE, NOTHING, NOTIFY, NOTNULL, + OIDS, OPERATOR, PASSWORD, PROCEDURAL, RECIPE, RENAME, RESET, RETURNS, ROW, RULE, SERIAL, SEQUENCE, SETOF, SHOW, START, STATEMENT, STDIN, STDOUT, TRUSTED, - VACUUM, VERBOSE, VERSION, ENCODING - -/* Keywords (obsolete; retain through next version for parser - thomas 1997-12-0 4) */ -%token ARCHIVE - -/* - * Tokens for pg_passwd support. The CREATEDB and CREATEUSER tokens should go a way - * when some sort of pg_privileges relation is introduced. - * - * Todd A. Brandys - */ -%token PASSWORD, CREATEDB, NOCREATEDB, CREATEUSER, NOCREATEUSER, VALID, UNTIL + UNLISTEN, UNTIL, VACUUM, VALID, VERBOSE, VERSION /* Special keywords, not in the query language - see the "lex" file */ %token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE @@ -615,7 +610,7 @@ output_statement(char * stmt, int mode) %type <str> Iconst Fconst Sconst TransactionStmt CreateStmt UserId %type <str> CreateAsElement OptCreateAs CreateAsList CreateAsStmt -%type <str> OptArchiveType OptInherit key_reference key_action +%type <str> OptInherit key_reference key_action %type <str> key_match constraint_expr ColLabel SpecialRuleRelation %type <str> ColId default_expr ColQualifier columnDef ColQualList %type <str> ColConstraint ColConstraintElem default_list NumericOnly FloatOnly @@ -1059,9 +1054,9 @@ copy_delimiter: USING DELIMITERS Sconst { $$ = cat2_str(make1_str("using delim *****************************************************************************/ CreateStmt: CREATE TABLE relation_name '(' OptTableElementList ')' - OptInherit OptArchiveType + OptInherit { - $$ = cat5_str(make1_str("create table"), $3, make3_str(make1_str("("), $5, make1_str(")")), $7, $8); + $$ = cat4_str(make1_str("create table"), $3, make3_str(make1_str("("), $5, make1_str(")")), $7); } ; @@ -1424,14 +1419,6 @@ OptInherit: INHERITS '(' relation_name_list ')' { $$ = make3_str(make1_str("inh | /*EMPTY*/ { $$ = make1_str(""); } ; -/* - * "ARCHIVE" keyword was removed in 6.3, but we keep it for now - * so people can upgrade with old pg_dump scripts. - momjian 1997-11-20(?) - */ -OptArchiveType: ARCHIVE '=' NONE { $$ = make1_str("archive = none"); } - | /*EMPTY*/ { $$ = make1_str(""); } - ; - CreateAsStmt: CREATE TABLE relation_name OptCreateAs AS SubSelect { $$ = cat5_str(make1_str("create table"), $3, $4, make1_str("as"), $6); @@ -2481,14 +2468,14 @@ CursorStmt: DECLARE name opt_cursor CURSOR FOR /* initial definition */ this->next = cur; this->name = $2; - this->command = cat4_str(cat5_str(cat5_str(make1_str("declare"), strdup($2), $3, make1_str("cursor for select"), $7), $8, $9, $10, $11), $12, $13, $14); + this->command = cat4_str(cat5_str(cat5_str(make1_str("declare"), mm_strdup($2), $3, make1_str("cursor for select"), $7), $8, $9, $10, $11), $12, $13, $14); this->argsinsert = argsinsert; this->argsresult = argsresult; argsinsert = argsresult = NULL; cur = this; - $$ = cat3_str(make1_str("/*"), strdup(this->command), make1_str("*/")); + $$ = cat3_str(make1_str("/*"), mm_strdup(this->command), make1_str("*/")); } ; @@ -3847,53 +3834,77 @@ TypeId: ColId * list due to shift/reduce conflicts in yacc. If so, move * down to the ColLabel entity. - thomas 1997-11-06 */ -ColId: ident { $$ = $1; } - | datetime { $$ = $1; } - | ABSOLUTE { $$ = make1_str("absolute"); } - | ACTION { $$ = make1_str("action"); } - | CACHE { $$ = make1_str("cache"); } - | CYCLE { $$ = make1_str("cycle"); } - | DATABASE { $$ = make1_str("database"); } - | DELIMITERS { $$ = make1_str("delimiters"); } - | DOUBLE { $$ = make1_str("double"); } - | EACH { $$ = make1_str("each"); } - | ENCODING { $$ = make1_str("encoding"); } - | FUNCTION { $$ = make1_str("function"); } - | INCREMENT { $$ = make1_str("increment"); } - | INDEX { $$ = make1_str("index"); } - | INSENSITIVE { $$ = make1_str("insensitive"); } - | KEY { $$ = make1_str("key"); } - | LANGUAGE { $$ = make1_str("language"); } - | LOCATION { $$ = make1_str("location"); } - | MATCH { $$ = make1_str("match"); } - | MAXVALUE { $$ = make1_str("maxvalue"); } - | MINVALUE { $$ = make1_str("minvalue"); } - | NEXT { $$ = make1_str("next"); } - | OF { $$ = make1_str("of"); } - | ONLY { $$ = make1_str("only"); } - | OPERATOR { $$ = make1_str("operator"); } - | OPTION { $$ = make1_str("option"); } - | PASSWORD { $$ = make1_str("password"); } - | PRIOR { $$ = make1_str("prior"); } - | PRIVILEGES { $$ = make1_str("privileges"); } - | READ { $$ = make1_str("read"); } - | RECIPE { $$ = make1_str("recipe"); } - | RELATIVE { $$ = make1_str("relative"); } - | ROW { $$ = make1_str("row"); } - | SCROLL { $$ = make1_str("scroll"); } - | SERIAL { $$ = make1_str("serial"); } - | START { $$ = make1_str("start"); } - | STATEMENT { $$ = make1_str("statement"); } - | TIME { $$ = make1_str("time"); } - | TIMEZONE_HOUR { $$ = make1_str("timezone_hour"); } - | TIMEZONE_MINUTE { $$ = make1_str("timezone_minute"); } - | TRIGGER { $$ = make1_str("trigger"); } - | TYPE_P { $$ = make1_str("type"); } - | VALID { $$ = make1_str("valid"); } - | VERSION { $$ = make1_str("version"); } - | ZONE { $$ = make1_str("zone"); } +ColId: ident { $$ = $1; } + | datetime { $$ = $1; } + | ABSOLUTE { $$ = make1_str("absolute"); } + | ACTION { $$ = make1_str("action"); } + | AFTER { $$ = make1_str("after"); } + | AGGREGATE { $$ = make1_str("aggregate"); } + | BACKWARD { $$ = make1_str("backward"); } + | BEFORE { $$ = make1_str("before"); } + | CACHE { $$ = make1_str("cache"); } + | CREATEDB { $$ = make1_str("createdb"); } + | CREATEUSER { $$ = make1_str("createuser"); } + | CYCLE { $$ = make1_str("cycle"); } + | DATABASE { $$ = make1_str("database"); } + | DELIMITERS { $$ = make1_str("delimiters"); } + | DOUBLE { $$ = make1_str("double"); } + | EACH { $$ = make1_str("each"); } + | ENCODING { $$ = make1_str("encoding"); } + | FORWARD { $$ = make1_str("forward"); } + | FUNCTION { $$ = make1_str("function"); } + | HANDLER { $$ = make1_str("handler"); } + | INCREMENT { $$ = make1_str("increment"); } + | INDEX { $$ = make1_str("index"); } + | INHERITS { $$ = make1_str("inherits"); } + | INSENSITIVE { $$ = make1_str("insensitive"); } + | INSTEAD { $$ = make1_str("instead"); } + | ISNULL { $$ = make1_str("isnull"); } + | KEY { $$ = make1_str("key"); } + | LANGUAGE { $$ = make1_str("language"); } + | LANCOMPILER { $$ = make1_str("lancompiler"); } + | LOCATION { $$ = make1_str("location"); } + | MATCH { $$ = make1_str("match"); } + | MAXVALUE { $$ = make1_str("maxvalue"); } + | MINVALUE { $$ = make1_str("minvalue"); } + | NEXT { $$ = make1_str("next"); } + | NOCREATEDB { $$ = make1_str("nocreatedb"); } + | NOCREATEUSER { $$ = make1_str("nocreateuser"); } + | NOTHING { $$ = make1_str("nothing"); } + | NOTNULL { $$ = make1_str("notnull"); } + | OF { $$ = make1_str("of"); } + | OIDS { $$ = make1_str("oids"); } + | ONLY { $$ = make1_str("only"); } + | OPERATOR { $$ = make1_str("operator"); } + | OPTION { $$ = make1_str("option"); } + | PASSWORD { $$ = make1_str("password"); } + | PRIOR { $$ = make1_str("prior"); } + | PRIVILEGES { $$ = make1_str("privileges"); } + | PROCEDURAL { $$ = make1_str("procedural"); } + | READ { $$ = make1_str("read"); } + | RECIPE { $$ = make1_str("recipe"); } + | RELATIVE { $$ = make1_str("relative"); } + | RENAME { $$ = make1_str("rename"); } + | RETURNS { $$ = make1_str("returns"); } + | ROW { $$ = make1_str("row"); } + | RULE { $$ = make1_str("rule"); } + | SCROLL { $$ = make1_str("scroll"); } + | SEQUENCE { $$ = make1_str("sequence"); } + | SERIAL { $$ = make1_str("serial"); } + | START { $$ = make1_str("start"); } + | STATEMENT { $$ = make1_str("statement"); } + | STDIN { $$ = make1_str("stdin"); } + | STDOUT { $$ = make1_str("stdout"); } + | TIME { $$ = make1_str("time"); } + | TIMEZONE_HOUR { $$ = make1_str("timezone_hour"); } + | TIMEZONE_MINUTE { $$ = make1_str("timezone_minute"); } + | TRIGGER { $$ = make1_str("trigger"); } + | TRUSTED { $$ = make1_str("trusted"); } + | TYPE_P { $$ = make1_str("type"); } + | VALID { $$ = make1_str("valid"); } + | VERSION { $$ = make1_str("version"); } + | ZONE { $$ = make1_str("zone"); } ; - /* Column label * Allowed labels in "AS" clauses. * Include TRUE/FALSE SQL3 reserved words for Postgres backward @@ -3905,20 +3916,37 @@ ColId: ident { $$ = $1; } * when used as a full identifier. - thomas 1997-11-06 */ ColLabel: ColId { $$ = $1; } - | ARCHIVE { $$ = make1_str("archive"); } + | ABORT_TRANS { $$ = make1_str("abort"); } + | ANALYZE { $$ = make1_str("analyze"); } + | BINARY { $$ = make1_str("binary"); } | CLUSTER { $$ = make1_str("cluster"); } | CONSTRAINT { $$ = make1_str("constraint"); } + | COPY { $$ = make1_str("copy"); } | CROSS { $$ = make1_str("cross"); } + | CURRENT { $$ = make1_str("current"); } + | DO { $$ = make1_str("do"); } + | EXPLAIN { $$ = make1_str("explain"); } + | EXTEND { $$ = make1_str("extend"); } + | FALSE_P { $$ = make1_str("false"); } | FOREIGN { $$ = make1_str("foreign"); } | GROUP { $$ = make1_str("group"); } + | LISTEN { $$ = make1_str("listen"); } | LOAD { $$ = make1_str("load"); } + | LOCK_P { $$ = make1_str("lock"); } + | MOVE { $$ = make1_str("move"); } + | NEW { $$ = make1_str("new"); } + | NONE { $$ = make1_str("none"); } | ORDER { $$ = make1_str("order"); } | POSITION { $$ = make1_str("position"); } | PRECISION { $$ = make1_str("precision"); } + | RESET { $$ = make1_str("reset"); } + | SETOF { $$ = make1_str("setof"); } + | SHOW { $$ = make1_str("show"); } | TABLE { $$ = make1_str("table"); } | TRANSACTION { $$ = make1_str("transaction"); } | TRUE_P { $$ = make1_str("true"); } - | FALSE_P { $$ = make1_str("false"); } + | VACUUM { $$ = make1_str("vacuum"); } + | VERBOSE { $$ = make1_str("verbose"); } ; SpecialRuleRelation: CURRENT @@ -3980,7 +4008,7 @@ storage_clause : S_EXTERN { $$ = "extern"; } type: simple_type { $$.type_enum = $1; - $$.type_str = strdup(ECPGtype_name($1)); + $$.type_str = mm_strdup(ECPGtype_name($1)); } | struct_type { @@ -4215,7 +4243,7 @@ connection_target: database_name opt_server opt_port } | Sconst { - $$ = strdup($1); + $$ = mm_strdup($1); $$[0] = '\"'; $$[strlen($$) - 1] = '\"'; free($1); @@ -4431,7 +4459,7 @@ action : SQL_CONTINUE { | DO name '(' dotext ')' { $<action>$.code = W_DO; $<action>$.command = make4_str($2, make1_str("("), $4, make1_str(")")); - $<action>$.str = cat2_str(make1_str("do"), strdup($<action>$.command)); + $<action>$.str = cat2_str(make1_str("do"), mm_strdup($<action>$.command)); } | DO SQL_BREAK { $<action>$.code = W_BREAK; @@ -4441,7 +4469,7 @@ action : SQL_CONTINUE { | SQL_CALL name '(' dotext ')' { $<action>$.code = W_DO; $<action>$.command = make4_str($2, make1_str("("), $4, make1_str(")")); - $<action>$.str = cat2_str(make1_str("call"), strdup($<action>$.command)); + $<action>$.str = cat2_str(make1_str("call"), mm_strdup($<action>$.command)); } /* some other stuff for ecpg */ |