*** empty log message ***
authorMichael Meskes
Thu, 2 Mar 2000 12:13:32 +0000 (12:13 +0000)
committerMichael Meskes
Thu, 2 Mar 2000 12:13:32 +0000 (12:13 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/extern.h
src/interfaces/ecpg/preproc/output.c
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/preproc/variable.c

index c4d47d976bcbeb87f06a773a1bd7fb1fcb04143d..e6009b454ec7ae71debadf7a3dc64b7667abfc39 100644 (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.
index 7cf42946f419984637e58f6f2bc3f01eecd18fb2..1134e42c7ee7cb1cf80ac3352849c245237febac 100644 (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);
index 91b2308317289393dacdcf34d5482991adb95ea3..d67f9eae5af7d477e72d7dd204aa8fb35376c0ae 100644 (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);
 }
index c1fe45c4a4440e62e00c01ee20934d8651519417..a65c822488cabc5bfc753233964d7a9b0cf0562a 100644 (file)
@@ -350,17 +350,18 @@ make_name(void)
 %type      storage_clause opt_initializer c_anything blockstart
 %type      blockend variable_list variable c_thing c_term
 %type     opt_pointer cvariable ECPGDisconnect dis_name storage_modifier
-%type     stmt symbol opt_symbol ECPGRelease execstring server_name
+%type     stmt ECPGRelease execstring server_name
 %type     connection_object opt_server opt_port c_stuff opt_reference
 %type      user_name opt_user char_variable ora_user ident
 %type      db_prefix server opt_options opt_connection_name c_list
-%type     ECPGSetConnection cpp_line ECPGTypedef c_args
+%type     ECPGSetConnection cpp_line ECPGTypedef c_args ECPGKeywords
 %type     enum_type civariableonly ECPGCursorStmt ECPGDeallocate
 %type     ECPGFree ECPGDeclare ECPGVar opt_at enum_definition
 %type      struct_type s_struct declaration declarations variable_declarations
 %type      s_struct s_union union_type ECPGSetAutocommit on_off
-%type     ECPGAllocateDescr ECPGDeallocateDescr
-%type     ECPGGetDescriptorHeader 
+%type     ECPGAllocateDescr ECPGDeallocateDescr symbol opt_symbol
+%type     ECPGGetDescriptorHeader ECPGColId ECPGColLabel ECPGTypeName
+%type     ECPGLabelTypeName
 
 %type   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; }
index 8cbb1d38777148f0875f06ff43155596189256cf..10b8af6cf95af7d0d880d8c3a0312b78e83790c3 100644 (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. */