OSDN Git Service

- Synced preproc.y with gram.y
authorMichael Meskes <meskes@postgresql.org>
Mon, 14 Jul 2003 10:16:45 +0000 (10:16 +0000)
committerMichael Meskes <meskes@postgresql.org>
Mon, 14 Jul 2003 10:16:45 +0000 (10:16 +0000)
        - Init sqlca in ECPGprepare().
        - Added CLOSE DATABASE for Informix compatibility.

src/interfaces/ecpg/ecpglib/prepare.c
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/test/test_informix.pgc

index 63d7afa..8b0d523 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.5 2003/06/26 11:37:05 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.6 2003/07/14 10:16:44 meskes Exp $ */
 
 #define POSTGRES_ECPG_INTERNAL
 #include "postgres_fe.h"
@@ -59,7 +59,9 @@ ECPGprepare(int lineno, char *name, char *variable)
 {
        struct statement *stmt;
        struct prepared_statement *this;
+       struct sqlca_t *sqlca = ECPGget_sqlca();
 
+       ECPGinit_sqlca(sqlca);
        /* check if we already have prepared this statement */
        for (this = prep_stmts; this != NULL && strcmp(this->name, name) != 0; this = this->next);
        if (this)
index 1e700d8..df2914b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.246 2003/07/09 14:53:18 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.247 2003/07/14 10:16:44 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -567,7 +567,28 @@ stmt:  AlterDatabaseSetStmt                { output_statement($1, 0, connection); }
                | AlterUserStmt         { output_statement($1, 0, connection); }
                | AnalyzeStmt           { output_statement($1, 0, connection); }
                | CheckPointStmt        { output_statement($1, 0, connection); }
-               | ClosePortalStmt       { output_statement($1, 0, connection); }
+               | ClosePortalStmt
+               {
+                       if (INFORMIX_MODE)
+                       {
+                               /* Informix also has a CLOSE DATABASE command that
+                                  essantially works like a DISCONNECT CURRENT 
+                                  as far as I know. */
+                               if (strcasecmp($1+strlen("close "), "database") == 0)
+                               {
+                                       if (connection)
+                                               mmerror(PARSE_ERROR, ET_ERROR, "no at option for close database statement.\n");
+                                                               
+                                       fprintf(yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");");
+                                       whenever_action(2);
+                                       free($1);
+                               }
+                               else
+                                       output_statement($1, 0, connection);
+                       }
+                       else
+                               output_statement($1, 0, connection);
+               }
                | ClusterStmt           { output_statement($1, 0, connection); }
                | CommentStmt           { output_statement($1, 0, connection); }
                | ConstraintsSetStmt    { output_statement($1, 0, connection); }
@@ -2596,8 +2617,11 @@ prep_type_list: Typename         { $$ = $1; }
        | prep_type_list ',' Typename   { $$ = cat_str(3, $1, make_str(","), $3); }
        ;
 
-ExecuteStmt: EXECUTE name execute_param_clause into_clause
-               { $$ = cat_str(4, make_str("execute"), $2, $3, $4); }
+ExecuteStmt: EXECUTE name execute_param_clause
+               { $$ = cat_str(3, make_str("execute"), $2, $3); }
+               | CREATE OptTemp TABLE qualified_name OptCreateAs AS EXECUTE name execute_param_clause
+               { $$ = cat_str(8, make_str("create"), $2, make_str("table"), $4, $5, make_str("as execute"), $8, $9); }
+               
                ;
 
 execute_param_clause: '(' expr_list ')'        { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
@@ -2878,23 +2902,12 @@ opt_select_limit:       select_limit    { $$ = $1; }
                | /*EMPTY*/                                     { $$ = EMPTY; }
                ;
 
-select_limit_value: PosIntConst
-               {
-                       if (atoi($1) < 0)
-                               mmerror(PARSE_ERROR, ET_ERROR, "LIMIT must not be negative");
-                       $$ = $1;
-               }
-               | ALL   { $$ = make_str("all"); }
-               | PARAM { $$ = make_name(); }
+select_limit_value: a_expr     { $$ = $1; }
+               | ALL           { $$ = make_str("all"); }
+               | PARAM         { $$ = make_name(); }
                ;
 
-select_offset_value:   PosIntConst
-               {
-                       if (atoi($1) < 0)
-                               mmerror(PARSE_ERROR, ET_ERROR, "OFFSET must not be negative");
-                       $$ = $1;
-               }
-               | PARAM { $$ = make_name(); }
+select_offset_value: a_expr { $$ = $1; }       
                ;
 
 /*
index 71d804a..abcd65a 100644 (file)
@@ -57,7 +57,7 @@ int main()
        $drop table test;
        $commit;
 
-       $disconnect;
+       $close database;
 
        return 0;
 }