*** empty log message ***

This commit is contained in:
Michael Meskes 2000-03-02 12:13:32 +00:00
parent 0eb5ab8250
commit 9309eac111
5 changed files with 302 additions and 372 deletions

View File

@ -837,5 +837,11 @@ Wed Mar 1 10:49:03 CET 2000
- Synced preproc.y with gram.y.
- Added output of arrays.
Thu Mar 2 11:25:09 CET 2000
- Fixed some parsing problems. A variable can now be a reserved
SQL keyword.
- Made sure double quotes in statements are correctly quoted.
- Set library version to 3.1.0.
- Set ecpg version to 2.7.0.

View File

@ -39,7 +39,7 @@ extern const char *get_dtype(enum ECPGdtype);
extern void lex_init(void);
extern char *make_str(const char *);
extern void output_line_number(void);
extern void output_statement(char *, int, char *);
extern void output_statement(char *, int, char *, char *, struct arguments *, struct arguments *);
extern void output_simple_statement(char *);
extern char *hashline_number(void);
extern int yyparse(void);

View File

@ -13,7 +13,15 @@ output_line_number()
void
output_simple_statement(char *cmd)
{
fputs(cmd, yyout);
int i, j = strlen(cmd);;
/* do this char by char as we have to filter '\"' */
for (i = 0; i < j; i++) {
if (cmd[i] != '"')
fputc(cmd[i], yyout);
else
fputs("\\\"", yyout);
}
output_line_number();
free(cmd);
}
@ -86,19 +94,20 @@ hashline_number(void)
}
void
output_statement(char * stmt, int mode, char *descriptor)
output_statement(char * stmt, int mode, char *descriptor,
char *con, struct arguments *insert, struct arguments *result)
{
int i, j=strlen(stmt);
int i, j = strlen(stmt);
if (descriptor == NULL)
fprintf(yyout, "{ ECPGdo(__LINE__, %s, \"", connection ? connection : "NULL");
fprintf(yyout, "{ ECPGdo(__LINE__, %s, \"", con ? con : "NULL");
else
fprintf(yyout, "{ ECPGdo_descriptor(__LINE__, %s, \"%s\", \"",
connection ? connection : "NULL", descriptor);
con ? con : "NULL", descriptor);
/* do this char by char as we have to filter '\"' */
for (i = 0;i < j; i++) {
if (stmt[i] != '\"')
for (i = 0; i < j; i++) {
if (stmt[i] != '"')
fputc(stmt[i], yyout);
else
fputs("\\\"", yyout);
@ -109,9 +118,9 @@ output_statement(char * stmt, int mode, char *descriptor)
fputs("\", ", yyout);
/* dump variables to C file */
dump_variables(argsinsert, 1);
dump_variables(insert, 1);
fputs("ECPGt_EOIT, ", yyout);
dump_variables(argsresult, 1);
dump_variables(result, 1);
fputs("ECPGt_EORT);", yyout);
}
else
@ -120,7 +129,8 @@ output_statement(char * stmt, int mode, char *descriptor)
mode |= 2;
whenever_action(mode);
free(stmt);
free(descriptor);
if (descriptor != NULL)
free(descriptor);
if (connection != NULL)
free(connection);
}

View File

@ -350,17 +350,18 @@ make_name(void)
%type <str> storage_clause opt_initializer c_anything blockstart
%type <str> blockend variable_list variable c_thing c_term
%type <str> opt_pointer cvariable ECPGDisconnect dis_name storage_modifier
%type <str> stmt symbol opt_symbol ECPGRelease execstring server_name
%type <str> stmt ECPGRelease execstring server_name
%type <str> connection_object opt_server opt_port c_stuff opt_reference
%type <str> user_name opt_user char_variable ora_user ident
%type <str> db_prefix server opt_options opt_connection_name c_list
%type <str> ECPGSetConnection cpp_line ECPGTypedef c_args
%type <str> ECPGSetConnection cpp_line ECPGTypedef c_args ECPGKeywords
%type <str> enum_type civariableonly ECPGCursorStmt ECPGDeallocate
%type <str> ECPGFree ECPGDeclare ECPGVar opt_at enum_definition
%type <str> struct_type s_struct declaration declarations variable_declarations
%type <str> s_struct s_union union_type ECPGSetAutocommit on_off
%type <str> ECPGAllocateDescr ECPGDeallocateDescr
%type <str> ECPGGetDescriptorHeader
%type <str> ECPGAllocateDescr ECPGDeallocateDescr symbol opt_symbol
%type <str> ECPGGetDescriptorHeader ECPGColId ECPGColLabel ECPGTypeName
%type <str> ECPGLabelTypeName
%type <descriptor> ECPGFetchDescStmt ECPGGetDescriptor
@ -391,64 +392,64 @@ statement: ecpgstart opt_at stmt ';' { connection = NULL; }
opt_at: SQL_AT connection_target { connection = $2; }
stmt: AlterTableStmt { output_statement($1, 0, NULL); }
| AlterGroupStmt { output_statement($1, 0, NULL); }
| AlterUserStmt { output_statement($1, 0, NULL); }
| ClosePortalStmt { output_statement($1, 0, NULL); }
| CommentStmt { output_statement($1, 0, NULL); }
| CopyStmt { output_statement($1, 0, NULL); }
| CreateStmt { output_statement($1, 0, NULL); }
| CreateAsStmt { output_statement($1, 0, NULL); }
| CreateGroupStmt { output_statement($1, 0, NULL); }
| CreateSeqStmt { output_statement($1, 0, NULL); }
| CreatePLangStmt { output_statement($1, 0, NULL); }
| CreateTrigStmt { output_statement($1, 0, NULL); }
| CreateUserStmt { output_statement($1, 0, NULL); }
| ClusterStmt { output_statement($1, 0, NULL); }
| DefineStmt { output_statement($1, 0, NULL); }
| DropStmt { output_statement($1, 0, NULL); }
| TruncateStmt { output_statement($1, 0, NULL); }
| DropGroupStmt { output_statement($1, 0, NULL); }
| DropPLangStmt { output_statement($1, 0, NULL); }
| DropTrigStmt { output_statement($1, 0, NULL); }
| DropUserStmt { output_statement($1, 0, NULL); }
| ExtendStmt { output_statement($1, 0, NULL); }
| ExplainStmt { output_statement($1, 0, NULL); }
| FetchStmt { output_statement($1, 1, NULL); }
| GrantStmt { output_statement($1, 0, NULL); }
| IndexStmt { output_statement($1, 0, NULL); }
| ListenStmt { output_statement($1, 0, NULL); }
| UnlistenStmt { output_statement($1, 0, NULL); }
| LockStmt { output_statement($1, 0, NULL); }
| ProcedureStmt { output_statement($1, 0, NULL); }
| ReindexStmt { output_statement($1, 0, NULL); }
| RemoveAggrStmt { output_statement($1, 0, NULL); }
| RemoveOperStmt { output_statement($1, 0, NULL); }
| RemoveFuncStmt { output_statement($1, 0, NULL); }
| RemoveStmt { output_statement($1, 0, NULL); }
| RenameStmt { output_statement($1, 0, NULL); }
| RevokeStmt { output_statement($1, 0, NULL); }
stmt: AlterTableStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| AlterGroupStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| AlterUserStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ClosePortalStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CommentStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CopyStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreateStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreateAsStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreateGroupStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreateSeqStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreatePLangStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreateTrigStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreateUserStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ClusterStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| DefineStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| DropStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| TruncateStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| DropGroupStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| DropPLangStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| DropTrigStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| DropUserStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ExtendStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ExplainStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| FetchStmt { output_statement($1, 1, NULL, connection, argsinsert, argsresult); }
| GrantStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| IndexStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ListenStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| UnlistenStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| LockStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ProcedureStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ReindexStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| RemoveAggrStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| RemoveOperStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| RemoveFuncStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| RemoveStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| RenameStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| RevokeStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| OptimizableStmt {
if (strncmp($1, "/* " , sizeof("/* ")-1) == 0)
output_simple_statement($1);
else
output_statement($1, 1, NULL);
output_statement($1, 1, NULL, connection, argsinsert, argsresult);
}
| RuleStmt { output_statement($1, 0, NULL); }
| RuleStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| TransactionStmt {
fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
whenever_action(2);
free($1);
}
| ViewStmt { output_statement($1, 0, NULL); }
| LoadStmt { output_statement($1, 0, NULL); }
| CreatedbStmt { output_statement($1, 0, NULL); }
| DropdbStmt { output_statement($1, 0, NULL); }
| VacuumStmt { output_statement($1, 0, NULL); }
| VariableSetStmt { output_statement($1, 0, NULL); }
| VariableShowStmt { output_statement($1, 0, NULL); }
| VariableResetStmt { output_statement($1, 0, NULL); }
| ConstraintsSetStmt { output_statement($1, 0, NULL); }
| ViewStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| LoadStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| CreatedbStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| DropdbStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| VacuumStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| VariableSetStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| VariableShowStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| VariableResetStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ConstraintsSetStmt { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ECPGAllocateDescr { fprintf(yyout,"ECPGallocate_desc(__LINE__, \"%s\");",$1);
whenever_action(0);
free($1);
@ -488,8 +489,8 @@ stmt: AlterTableStmt { output_statement($1, 0, NULL); }
whenever_action(2);
free($1);
}
| ECPGExecute { output_statement($1, 0, NULL); }
| ECPGFetchDescStmt { output_statement($1.str, 1, $1.name); }
| ECPGExecute { output_statement($1, 0, NULL, connection, argsinsert, argsresult); }
| ECPGFetchDescStmt { output_statement($1.str, 1, $1.name, connection, argsinsert, argsresult); }
| ECPGFree {
fprintf(yyout, "{ ECPGdeallocate(__LINE__, \"%s\");", $1);
@ -509,7 +510,8 @@ stmt: AlterTableStmt { output_statement($1, 0, NULL); }
}
| ECPGOpen {
struct cursor *ptr;
struct arguments *p;
for (ptr = cur; ptr != NULL; ptr=ptr->next)
{
if (strcmp(ptr->name, $1) == 0)
@ -521,16 +523,15 @@ stmt: AlterTableStmt { output_statement($1, 0, NULL); }
sprintf(errortext, "trying to open undeclared cursor %s\n", $1);
mmerror(ET_ERROR, errortext);
}
fprintf(yyout, "{ ECPGdo(__LINE__, %s, \"%s\",", ptr->connection ? ptr->connection : "NULL", ptr->command);
/* dump variables to C file*/
dump_variables(ptr->argsinsert, 0);
dump_variables(argsinsert, 0);
fputs("ECPGt_EOIT, ", yyout);
dump_variables(ptr->argsresult, 0);
fputs("ECPGt_EORT);", yyout);
whenever_action(2);
free($1);
/* merge variables given in prepare statement with those given here */
for (p = argsinsert; p && p->next; p = p->next);
if (p)
p->next = ptr->argsinsert;
else
argsinsert = ptr->argsinsert;
output_statement(ptr->command, 0, NULL, ptr->connection, argsinsert, ptr->argsresult);
}
| ECPGPrepare {
if (connection)
@ -3840,138 +3841,10 @@ 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 { $$ = make_str("absolute"); }
| ACCESS { $$ = make_str("access"); }
| ACTION { $$ = make_str("action"); }
| AFTER { $$ = make_str("after"); }
| AGGREGATE { $$ = make_str("aggregate"); }
| BACKWARD { $$ = make_str("backward"); }
| BEFORE { $$ = make_str("before"); }
| CACHE { $$ = make_str("cache"); }
| COMMENT { $$ = make_str("comment"); }
| COMMITTED { $$ = make_str("committed"); }
| CONSTRAINTS { $$ = make_str("constraints"); }
| CREATEDB { $$ = make_str("createdb"); }
| CREATEUSER { $$ = make_str("createuser"); }
| CYCLE { $$ = make_str("cycle"); }
| DATABASE { $$ = make_str("database"); }
| DEFERRED { $$ = make_str("deferred"); }
| DELIMITERS { $$ = make_str("delimiters"); }
| DOUBLE { $$ = make_str("double"); }
| EACH { $$ = make_str("each"); }
| ENCODING { $$ = make_str("encoding"); }
| EXCLUSIVE { $$ = make_str("exclusive"); }
| FORWARD { $$ = make_str("forward"); }
| FUNCTION { $$ = make_str("function"); }
| HANDLER { $$ = make_str("handler"); }
| IMMEDIATE { $$ = make_str("immediate"); }
| INCREMENT { $$ = make_str("increment"); }
| INDEX { $$ = make_str("index"); }
| INHERITS { $$ = make_str("inherits"); }
| INSENSITIVE { $$ = make_str("insensitive"); }
| INSTEAD { $$ = make_str("instead"); }
| INTERVAL { $$ = make_str("interval"); }
| ISNULL { $$ = make_str("isnull"); }
| ISOLATION { $$ = make_str("isolation"); }
| KEY { $$ = make_str("key"); }
| LANGUAGE { $$ = make_str("language"); }
| LANCOMPILER { $$ = make_str("lancompiler"); }
| LEVEL { $$ = make_str("level"); }
| LOCATION { $$ = make_str("location"); }
| MATCH { $$ = make_str("match"); }
| MAXVALUE { $$ = make_str("maxvalue"); }
| MINVALUE { $$ = make_str("minvalue"); }
| MODE { $$ = make_str("mode"); }
| NEXT { $$ = make_str("next"); }
| NOCREATEDB { $$ = make_str("nocreatedb"); }
| NOCREATEUSER { $$ = make_str("nocreateuser"); }
| NOTHING { $$ = make_str("nothing"); }
| NOTNULL { $$ = make_str("notnull"); }
| OF { $$ = make_str("of"); }
| OIDS { $$ = make_str("oids"); }
| ONLY { $$ = make_str("only"); }
| OPERATOR { $$ = make_str("operator"); }
| OPTION { $$ = make_str("option"); }
| PASSWORD { $$ = make_str("password"); }
| PENDANT { $$ = make_str("pendant"); }
| PRIOR { $$ = make_str("prior"); }
| PRIVILEGES { $$ = make_str("privileges"); }
| PROCEDURAL { $$ = make_str("procedural"); }
| READ { $$ = make_str("read"); }
| RELATIVE { $$ = make_str("relative"); }
| RENAME { $$ = make_str("rename"); }
| RESTRICT { $$ = make_str("restrict"); }
| RETURNS { $$ = make_str("returns"); }
| ROW { $$ = make_str("row"); }
| RULE { $$ = make_str("rule"); }
| SCROLL { $$ = make_str("scroll"); }
| SEQUENCE { $$ = make_str("sequence"); }
| SERIAL { $$ = make_str("serial"); }
| SERIALIZABLE { $$ = make_str("serializable"); }
| SHARE { $$ = make_str("share"); }
| START { $$ = make_str("start"); }
| STATEMENT { $$ = make_str("statement"); }
| STDIN { $$ = make_str("stdin"); }
| STDOUT { $$ = make_str("stdout"); }
| SYSID { $$ = make_str("sysid"); }
| TEMP { $$ = make_str("temp"); }
| TEMPORARY { $$ = make_str("temporary"); }
| TIME { $$ = make_str("time"); }
| TIMESTAMP { $$ = make_str("timestamp"); }
| TIMEZONE_HOUR { $$ = make_str("timezone_hour"); }
| TIMEZONE_MINUTE { $$ = make_str("timezone_minute"); }
| TRIGGER { $$ = make_str("trigger"); }
| TRUNCATE { $$ = make_str("truncate"); }
| TRUSTED { $$ = make_str("trusted"); }
| TYPE_P { $$ = make_str("type"); }
| VALID { $$ = make_str("valid"); }
| VERSION { $$ = make_str("version"); }
| ZONE { $$ = make_str("zone"); }
| SQL_AT { $$ = make_str("at"); }
| SQL_BOOL { $$ = make_str("bool"); }
| SQL_BREAK { $$ = make_str("break"); }
| SQL_CALL { $$ = make_str("call"); }
| SQL_CONNECT { $$ = make_str("connect"); }
| SQL_CONTINUE { $$ = make_str("continue"); }
| SQL_COUNT { $$ = make_str("count"); }
| SQL_DATA { $$ = make_str("data"); }
| SQL_DATETIME_INTERVAL_CODE { $$ = make_str("datetime_interval_code"); }
| SQL_DATETIME_INTERVAL_PRECISION { $$ = make_str("datetime_interval_precision"); }
| SQL_DEALLOCATE { $$ = make_str("deallocate"); }
| SQL_DISCONNECT { $$ = make_str("disconnect"); }
| SQL_FOUND { $$ = make_str("found"); }
| SQL_GO { $$ = make_str("go"); }
| SQL_GOTO { $$ = make_str("goto"); }
| SQL_IDENTIFIED { $$ = make_str("identified"); }
| SQL_INDICATOR { $$ = make_str("indicator"); }
| SQL_INT { $$ = make_str("int"); }
| SQL_KEY_MEMBER { $$ = make_str("key_member"); }
| SQL_LENGTH { $$ = make_str("length"); }
| SQL_LONG { $$ = make_str("long"); }
| SQL_NAME { $$ = make_str("name"); }
| SQL_NULLABLE { $$ = make_str("nullable"); }
| SQL_OCTET_LENGTH { $$ = make_str("octet_length"); }
| SQL_OFF { $$ = make_str("off"); }
| SQL_OPEN { $$ = make_str("open"); }
| SQL_PREPARE { $$ = make_str("prepare"); }
| SQL_RELEASE { $$ = make_str("release"); }
| SQL_RETURNED_LENGTH { $$ = make_str("returned_length"); }
| SQL_RETURNED_OCTET_LENGTH { $$ = make_str("returned_octet_length"); }
| SQL_SCALE { $$ = make_str("scale"); }
| SQL_SECTION { $$ = make_str("section"); }
| SQL_SHORT { $$ = make_str("short"); }
| SQL_SIGNED { $$ = make_str("signed"); }
| SQL_SQLERROR { $$ = make_str("sqlerror"); }
| SQL_SQLPRINT { $$ = make_str("sqlprint"); }
| SQL_SQLWARNING { $$ = make_str("sqlwarning"); }
| SQL_STOP { $$ = make_str("stop"); }
| SQL_STRUCT { $$ = make_str("struct"); }
| SQL_UNSIGNED { $$ = make_str("unsigned"); }
| SQL_VAR { $$ = make_str("var"); }
| SQL_WHENEVER { $$ = make_str("whenever"); }
;
ColId: ECPGColId { $$ = $1; }
| ECPGTypeName { $$ = $1; }
;
/* Column label
* Allowed labels in "AS" clauses.
* Include TRUE/FALSE SQL3 reserved words for Postgres backward
@ -3982,55 +3855,9 @@ ColId: ident { $$ = $1; }
* rather than in ColId if there was a shift/reduce conflict
* when used as a full identifier. - thomas 1997-11-06
*/
ColLabel: ColId { $$ = $1; }
| ABORT_TRANS { $$ = make_str("abort"); }
| ANALYZE { $$ = make_str("analyze"); }
| BINARY { $$ = make_str("binary"); }
| CASE { $$ = make_str("case"); }
| CLUSTER { $$ = make_str("cluster"); }
| COALESCE { $$ = make_str("coalesce"); }
| CONSTRAINT { $$ = make_str("constraint"); }
| COPY { $$ = make_str("copy"); }
| CURRENT { $$ = make_str("current"); }
| CURRENT_USER { $$ = make_str("current_user"); }
| DEC { $$ = make_str("dec"); }
| DECIMAL { $$ = make_str("decimal"); }
| DEFERRABLE { $$ = make_str("deferrable"); }
| DO { $$ = make_str("do"); }
| ELSE { $$ = make_str("else"); }
| END_TRANS { $$ = make_str("end"); }
| EXPLAIN { $$ = make_str("explain"); }
| EXTEND { $$ = make_str("extend"); }
| FALSE_P { $$ = make_str("false"); }
| FLOAT { $$ = make_str("float"); }
| FOREIGN { $$ = make_str("foreign"); }
| GLOBAL { $$ = make_str("global"); }
| GROUP { $$ = make_str("group"); }
| INITIALLY { $$ = make_str("initially"); }
| LISTEN { $$ = make_str("listen"); }
| LOAD { $$ = make_str("load"); }
| LOCK_P { $$ = make_str("lock"); }
| MOVE { $$ = make_str("move"); }
| NEW { $$ = make_str("new"); }
| NONE { $$ = make_str("none"); }
| NULLIF { $$ = make_str("nullif"); }
| NUMERIC { $$ = make_str("numeric"); }
| ORDER { $$ = make_str("order"); }
| POSITION { $$ = make_str("position"); }
| PRECISION { $$ = make_str("precision"); }
| RESET { $$ = make_str("reset"); }
| SESSION_USER { $$ = make_str("session_user"); }
| SETOF { $$ = make_str("setof"); }
| SHOW { $$ = make_str("show"); }
| TABLE { $$ = make_str("table"); }
| THEN { $$ = make_str("then"); }
| TRANSACTION { $$ = make_str("transaction"); }
| TRUE_P { $$ = make_str("true"); }
| USER { $$ = make_str("user"); }
| VACUUM { $$ = make_str("vacuum"); }
| VERBOSE { $$ = make_str("verbose"); }
| WHEN { $$ = make_str("when"); }
;
ColLabel: ECPGLabelTypeName { $$ = $1; }
| ECPGColLabel { $$ = $1; }
;
SpecialRuleRelation: CURRENT
{
@ -4364,7 +4191,7 @@ type: simple_type
$$.type_dimension = -1;
$$.type_index = -1;
}
| symbol
| ECPGColLabel
{
/* this is for typedef'ed types */
struct typedefs *this = get_typedef($1);
@ -4427,9 +4254,6 @@ s_union: UNION opt_symbol
$$ = cat2_str(make_str("union"), $2);
}
opt_symbol: /* empty */ { $$ = EMPTY; }
| symbol { $$ = $1; }
simple_type: unsigned_type { $$=$1; }
| opt_signed signed_type { $$=$2; }
;
@ -4469,7 +4293,7 @@ variable_list: variable
$$ = cat_str(3, $1, make_str(","), $3);
}
variable: opt_pointer symbol opt_array_bounds opt_initializer
variable: opt_pointer ECPGColLabel opt_array_bounds opt_initializer
{
struct ECPGtype * type;
int dimension = $3.index1; /* dimension of array */
@ -4788,7 +4612,7 @@ ECPGSetConnection: SET SQL_CONNECTION to_equal connection_object
/*
* define a new type for embedded SQL
*/
ECPGTypedef: TYPE_P symbol IS type opt_type_array_bounds opt_reference
ECPGTypedef: TYPE_P ECPGColLabel IS type opt_type_array_bounds opt_reference
{
/* add entry to list */
struct typedefs *ptr, *this;
@ -4880,7 +4704,7 @@ opt_reference: SQL_REFERENCE { $$ = make_str("reference"); }
/*
* define the type of one variable for embedded SQL
*/
ECPGVar: SQL_VAR symbol IS type opt_type_array_bounds opt_reference
ECPGVar: SQL_VAR ECPGColLabel IS type opt_type_array_bounds opt_reference
{
struct variable *p = find_variable($2);
int dimension = $5.index1;
@ -4998,110 +4822,204 @@ action : SQL_CONTINUE {
}
/* some other stuff for ecpg */
/*
* no longer used
ecpg_expr: c_expr
{ $$ = $1; }
| a_expr TYPECAST Typename
{ $$ = cat_str(3, $1, make_str("::"), $3); }
| '-' ecpg_expr %prec UMINUS
{ $$ = cat2_str(make_str("-"), $2); }
| '%' ecpg_expr
{ $$ = cat2_str(make_str("%"), $2); }
| '^' ecpg_expr
{ $$ = cat2_str(make_str("^"), $2); }
| '|' ecpg_expr
{ $$ = cat2_str(make_str("|"), $2); }
| ';' a_expr
{ $$ = cat2_str(make_str(";"), $2); }
| a_expr '%'
{ $$ = cat2_str($1, make_str("%")); }
| a_expr '^'
{ $$ = cat2_str($1, make_str("^")); }
| a_expr '|'
{ $$ = cat2_str($1, make_str("|")); }
| a_expr '+' ecpg_expr
{ $$ = cat_str(3, $1, make_str("+"), $3); }
| a_expr '-' ecpg_expr
{ $$ = cat_str(3, $1, make_str("-"), $3); }
| a_expr '*' ecpg_expr
{ $$ = cat_str(3, $1, make_str("*"), $3); }
| a_expr '/' ecpg_expr
{ $$ = cat_str(3, $1, make_str("/"), $3); }
| a_expr '%' ecpg_expr
{ $$ = cat_str(3, $1, make_str("%"), $3); }
| a_expr '^' ecpg_expr
{ $$ = cat_str(3, $1, make_str("^"), $3); }
| a_expr '|' ecpg_expr
{ $$ = cat_str(3, $1, make_str("|"), $3); }
| a_expr '<' ecpg_expr
{ $$ = cat_str(3, $1, make_str("<"), $3); }
| a_expr '>' ecpg_expr
{ $$ = cat_str(3, $1, make_str(">"), $3); }
| a_expr '=' NULL_P
{ $$ = cat2_str($1, make_str("= NULL")); }
| NULL_P '=' ecpg_expr
{ $$ = cat2_str(make_str("= NULL"), $3); }
| a_expr '=' ecpg_expr
{ $$ = cat_str(3, $1, make_str("="), $3); }
| a_expr Op ecpg_expr
{ $$ = cat_str(3, $1, make_str("="), $3); }
| Op ecpg_expr
{ $$ = cat2_str($1, $2); }
| a_expr Op
{ $$ = cat2_str($1, $2); }
| a_expr AND ecpg_expr
{ $$ = cat_str(3, $1, make_str("and"), $3); }
| a_expr OR ecpg_expr
{ $$ = cat_str(3, $1, make_str("or"), $3); }
| NOT ecpg_expr
{ $$ = cat2_str(make_str("not"), $2); }
| a_expr LIKE ecpg_expr
{ $$ = cat_str(3, $1, make_str("like"), $3); }
| a_expr NOT LIKE ecpg_expr
{ $$ = cat_str(3, $1, make_str("not like"), $4); }
| a_expr ISNULL
{ $$ = cat2_str($1, make_str("isnull")); }
| a_expr IS NULL_P
{ $$ = cat2_str($1, make_str("is null")); }
| a_expr NOTNULL
{ $$ = cat2_str($1, make_str("notnull")); }
| a_expr IS NOT NULL_P
{ $$ = cat2_str($1, make_str("is not null")); }
| a_expr IS TRUE_P
{ $$ = cat2_str($1, make_str("is true")); }
| a_expr IS NOT FALSE_P
{ $$ = cat2_str($1, make_str("is not false")); }
| a_expr IS FALSE_P
{ $$ = cat2_str($1, make_str("is false")); }
| a_expr IS NOT TRUE_P
{ $$ = cat2_str($1, make_str("is not true")); }
| a_expr BETWEEN b_expr AND b_expr
{
$$ = cat_str(5, $1, make_str("between"), $3, make_str("and"), $5);
}
| a_expr NOT BETWEEN b_expr AND b_expr
{
$$ = cat_str(5, $1, make_str("not between"), $4, make_str("and"), $6);
}
| a_expr IN '(' in_expr ')'
{
$$ = cat_str(4, $1, make_str(" in ("), $4, make_str(")"));
}
| a_expr NOT IN '(' in_expr ')'
{
$$ = cat_str(4, $1, make_str(" not in ("), $5, make_str(")"));
}
| a_expr all_Op sub_type '(' SubSelect ')'
{
$$ = cat_str(4, $1, $2, $3, cat_str(3, make_str("("), $5, make_str(")")));
}
| row_expr
{ $$ = $1; }
| civariableonly
{ $$ = $1; }
/* additional ColId entries */
ECPGKeywords: SQL_AT { $$ = make_str("at"); }
| SQL_BREAK { $$ = make_str("break"); }
| SQL_CALL { $$ = make_str("call"); }
| SQL_CONNECT { $$ = make_str("connect"); }
| SQL_CONTINUE { $$ = make_str("continue"); }
| SQL_COUNT { $$ = make_str("count"); }
| SQL_DATA { $$ = make_str("data"); }
| SQL_DATETIME_INTERVAL_CODE { $$ = make_str("datetime_interval_code"); }
| SQL_DATETIME_INTERVAL_PRECISION { $$ = make_str("datetime_interval_precision"); }
| SQL_DEALLOCATE { $$ = make_str("deallocate"); }
| SQL_DISCONNECT { $$ = make_str("disconnect"); }
| SQL_FOUND { $$ = make_str("found"); }
| SQL_GO { $$ = make_str("go"); }
| SQL_GOTO { $$ = make_str("goto"); }
| SQL_IDENTIFIED { $$ = make_str("identified"); }
| SQL_INDICATOR { $$ = make_str("indicator"); }
| SQL_KEY_MEMBER { $$ = make_str("key_member"); }
| SQL_LENGTH { $$ = make_str("length"); }
| SQL_NAME { $$ = make_str("name"); }
| SQL_NULLABLE { $$ = make_str("nullable"); }
| SQL_OCTET_LENGTH { $$ = make_str("octet_length"); }
| SQL_OFF { $$ = make_str("off"); }
| SQL_OPEN { $$ = make_str("open"); }
| SQL_PREPARE { $$ = make_str("prepare"); }
| SQL_RELEASE { $$ = make_str("release"); }
| SQL_RETURNED_LENGTH { $$ = make_str("returned_length"); }
| SQL_RETURNED_OCTET_LENGTH { $$ = make_str("returned_octet_length"); }
| SQL_SCALE { $$ = make_str("scale"); }
| SQL_SECTION { $$ = make_str("section"); }
| SQL_SQLERROR { $$ = make_str("sqlerror"); }
| SQL_SQLPRINT { $$ = make_str("sqlprint"); }
| SQL_SQLWARNING { $$ = make_str("sqlwarning"); }
| SQL_STOP { $$ = make_str("stop"); }
| SQL_VAR { $$ = make_str("var"); }
| SQL_WHENEVER { $$ = make_str("whenever"); }
;
ECPGTypeName: SQL_BOOL { $$ = make_str("bool"); }
| SQL_INT { $$ = make_str("int"); }
| SQL_LONG { $$ = make_str("long"); }
| SQL_SHORT { $$ = make_str("short"); }
| SQL_STRUCT { $$ = make_str("struct"); }
| SQL_SIGNED { $$ = make_str("signed"); }
| SQL_UNSIGNED { $$ = make_str("unsigned"); }
| DOUBLE { $$ = make_str("double"); }
ECPGLabelTypeName: FLOAT { $$ = make_str("float"); }
| ECPGTypeName { $$ = $1; }
;
opt_symbol: symbol { $$ = $1; }
| /*EMPTY*/ { $$ = EMPTY; }
;
symbol: ColLabel { $$ = $1; }
ECPGColId: /* to be used instead of ColId */
ECPGKeywords { $$ = $1; }
| ident { $$ = $1; }
| datetime { $$ = $1; }
| ABSOLUTE { $$ = make_str("absolute"); }
| ACCESS { $$ = make_str("access"); }
| ACTION { $$ = make_str("action"); }
| AFTER { $$ = make_str("after"); }
| AGGREGATE { $$ = make_str("aggregate"); }
| BACKWARD { $$ = make_str("backward"); }
| BEFORE { $$ = make_str("before"); }
| CACHE { $$ = make_str("cache"); }
| COMMENT { $$ = make_str("comment"); }
| COMMITTED { $$ = make_str("committed"); }
| CONSTRAINTS { $$ = make_str("constraints"); }
| CREATEDB { $$ = make_str("createdb"); }
| CREATEUSER { $$ = make_str("createuser"); }
| CYCLE { $$ = make_str("cycle"); }
| DATABASE { $$ = make_str("database"); }
| DEFERRED { $$ = make_str("deferred"); }
| DELIMITERS { $$ = make_str("delimiters"); }
| EACH { $$ = make_str("each"); }
| ENCODING { $$ = make_str("encoding"); }
| EXCLUSIVE { $$ = make_str("exclusive"); }
| FORWARD { $$ = make_str("forward"); }
| FUNCTION { $$ = make_str("function"); }
| HANDLER { $$ = make_str("handler"); }
| IMMEDIATE { $$ = make_str("immediate"); }
| INCREMENT { $$ = make_str("increment"); }
| INDEX { $$ = make_str("index"); }
| INHERITS { $$ = make_str("inherits"); }
| INSENSITIVE { $$ = make_str("insensitive"); }
| INSTEAD { $$ = make_str("instead"); }
| INTERVAL { $$ = make_str("interval"); }
| ISNULL { $$ = make_str("isnull"); }
| ISOLATION { $$ = make_str("isolation"); }
| KEY { $$ = make_str("key"); }
| LANGUAGE { $$ = make_str("language"); }
| LANCOMPILER { $$ = make_str("lancompiler"); }
| LEVEL { $$ = make_str("level"); }
| LOCATION { $$ = make_str("location"); }
| MATCH { $$ = make_str("match"); }
| MAXVALUE { $$ = make_str("maxvalue"); }
| MINVALUE { $$ = make_str("minvalue"); }
| MODE { $$ = make_str("mode"); }
| NEXT { $$ = make_str("next"); }
| NOCREATEDB { $$ = make_str("nocreatedb"); }
| NOCREATEUSER { $$ = make_str("nocreateuser"); }
| NOTHING { $$ = make_str("nothing"); }
| NOTNULL { $$ = make_str("notnull"); }
| OF { $$ = make_str("of"); }
| OIDS { $$ = make_str("oids"); }
| ONLY { $$ = make_str("only"); }
| OPERATOR { $$ = make_str("operator"); }
| OPTION { $$ = make_str("option"); }
| PASSWORD { $$ = make_str("password"); }
| PENDANT { $$ = make_str("pendant"); }
| PRIOR { $$ = make_str("prior"); }
| PRIVILEGES { $$ = make_str("privileges"); }
| PROCEDURAL { $$ = make_str("procedural"); }
| READ { $$ = make_str("read"); }
| RELATIVE { $$ = make_str("relative"); }
| RENAME { $$ = make_str("rename"); }
| RESTRICT { $$ = make_str("restrict"); }
| RETURNS { $$ = make_str("returns"); }
| ROW { $$ = make_str("row"); }
| RULE { $$ = make_str("rule"); }
| SCROLL { $$ = make_str("scroll"); }
| SEQUENCE { $$ = make_str("sequence"); }
| SERIAL { $$ = make_str("serial"); }
| SERIALIZABLE { $$ = make_str("serializable"); }
| SHARE { $$ = make_str("share"); }
| START { $$ = make_str("start"); }
| STATEMENT { $$ = make_str("statement"); }
| STDIN { $$ = make_str("stdin"); }
| STDOUT { $$ = make_str("stdout"); }
| SYSID { $$ = make_str("sysid"); }
| TEMP { $$ = make_str("temp"); }
| TEMPORARY { $$ = make_str("temporary"); }
| TIME { $$ = make_str("time"); }
| TIMESTAMP { $$ = make_str("timestamp"); }
| TIMEZONE_HOUR { $$ = make_str("timezone_hour"); }
| TIMEZONE_MINUTE { $$ = make_str("timezone_minute"); }
| TRIGGER { $$ = make_str("trigger"); }
| TRUNCATE { $$ = make_str("truncate"); }
| TRUSTED { $$ = make_str("trusted"); }
| TYPE_P { $$ = make_str("type"); }
| VALID { $$ = make_str("valid"); }
| VERSION { $$ = make_str("version"); }
| ZONE { $$ = make_str("zone"); }
;
ECPGColLabel: ECPGColId { $$ = $1; }
| ABORT_TRANS { $$ = make_str("abort"); }
| ANALYZE { $$ = make_str("analyze"); }
| BINARY { $$ = make_str("binary"); }
| CASE { $$ = make_str("case"); }
| CLUSTER { $$ = make_str("cluster"); }
| COALESCE { $$ = make_str("coalesce"); }
| CONSTRAINT { $$ = make_str("constraint"); }
| COPY { $$ = make_str("copy"); }
| CURRENT { $$ = make_str("current"); }
| CURRENT_USER { $$ = make_str("current_user"); }
| DEC { $$ = make_str("dec"); }
| DECIMAL { $$ = make_str("decimal"); }
| DEFERRABLE { $$ = make_str("deferrable"); }
| DO { $$ = make_str("do"); }
| ELSE { $$ = make_str("else"); }
| END_TRANS { $$ = make_str("end"); }
| EXPLAIN { $$ = make_str("explain"); }
| EXTEND { $$ = make_str("extend"); }
| FALSE_P { $$ = make_str("false"); }
| FOREIGN { $$ = make_str("foreign"); }
| GLOBAL { $$ = make_str("global"); }
| GROUP { $$ = make_str("group"); }
| INITIALLY { $$ = make_str("initially"); }
| LISTEN { $$ = make_str("listen"); }
| LOAD { $$ = make_str("load"); }
| LOCK_P { $$ = make_str("lock"); }
| MOVE { $$ = make_str("move"); }
| NEW { $$ = make_str("new"); }
| NONE { $$ = make_str("none"); }
| NULLIF { $$ = make_str("nullif"); }
| NUMERIC { $$ = make_str("numeric"); }
| ORDER { $$ = make_str("order"); }
| POSITION { $$ = make_str("position"); }
| PRECISION { $$ = make_str("precision"); }
| RESET { $$ = make_str("reset"); }
| SESSION_USER { $$ = make_str("session_user"); }
| SETOF { $$ = make_str("setof"); }
| SHOW { $$ = make_str("show"); }
| TABLE { $$ = make_str("table"); }
| THEN { $$ = make_str("then"); }
| TRANSACTION { $$ = make_str("transaction"); }
| TRUE_P { $$ = make_str("true"); }
| USER { $$ = make_str("user"); }
| VACUUM { $$ = make_str("vacuum"); }
| VERBOSE { $$ = make_str("verbose"); }
| WHEN { $$ = make_str("when"); }
;
*/
into_list : coutputvariable | into_list ',' coutputvariable;
@ -5130,15 +5048,13 @@ indicator: /* empty */ { $$ = NULL; }
| SQL_INDICATOR cvariable { check_indicator((find_variable($2))->type); $$ = $2; }
| SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
ident: IDENT { $$ = $1; }
ident: IDENT { $$ = $1; }
| CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); };
/*
* C stuff
*/
symbol: ident { $$ = $1; }
cpp_line: CPP_LINE { $$ = $1; }
c_stuff: c_anything { $$ = $1; }

View File

@ -222,8 +222,6 @@ dump_variables(struct arguments * list, int mode)
/* Then the current element and its indicator */
ECPGdump_a_type(yyout, list->variable->name, list->variable->type,
/* (list->indicator->type->typ != ECPGt_NO_INDICATOR) ? list->indicator->name : NULL,
(list->indicator->type->typ != ECPGt_NO_INDICATOR) ? list->indicator->type : NULL, NULL, NULL);*/
list->indicator->name, list->indicator->type, NULL, NULL);
/* Then release the list element. */