Added more SoC changes by Joachim Wieland :
authorMichael Meskes
Fri, 28 Jul 2006 09:08:01 +0000 (09:08 +0000)
committerMichael Meskes
Fri, 28 Jul 2006 09:08:01 +0000 (09:08 +0000)
- SHOW statement puts result into a variable
- COPY TO STDOUT works

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/ecpglib/execute.c
src/interfaces/ecpg/preproc/preproc.y

index a89722bb647444cb7b92c7695456466698931e5c..3514d3a199ed233d911b94ed1df07bca109a0fbb 100644 (file)
@@ -2044,5 +2044,11 @@ Mo Jun 26 16:08:23 CEST 2006
 We Jul  5 12:17:28 CEST 2006
 
    - Fixed remaining Coverity bugs.
+
+Fr Jul 28 11:00:51 CEST 2006
+
+   - Added more SoC changes by Joachim Wieland :
+       - SHOW statement puts result into a variable
+       - COPY TO STDOUT works
    - Set ecpg library version to 5.2.
    - Set ecpg version to 4.2.1.
index e2bd5a68f3344f3c9cb2ad5ec0b60afb3fb9c587..c6ce668e502bfb8621a85ad6e1f55722c010dc57 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.52 2006/07/14 05:28:28 tgl Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.53 2006/07/28 09:08:01 meskes Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -1421,9 +1421,29 @@ ECPGexecute(struct statement * stmt)
                status = false;
                break;
            case PGRES_COPY_OUT:
-               ECPGlog("ECPGexecute line %d: Got PGRES_COPY_OUT ... tossing.\n", stmt->lineno);
-               PQendcopy(stmt->connection->connection);
-               break;
+               {
+                   char *buffer;
+                   int res;
+                   ECPGlog("ECPGexecute line %d: Got PGRES_COPY_OUT\n", stmt->lineno);
+                   while ((res = PQgetCopyData(stmt->connection->connection,
+                                        &buffer, 0)) > 0)
+                   {
+                       printf("%s", buffer);
+                       PQfreemem(buffer);
+                   }
+                   if (res == -1)
+                   {
+                       /* COPY done */
+                       PQclear(results);
+                       results = PQgetResult(stmt->connection->connection);
+                       if (PQresultStatus(results) == PGRES_COMMAND_OK)
+                           ECPGlog("ECPGexecute line %d: Got PGRES_COMMAND_OK after PGRES_COPY_OUT\n", stmt->lineno);
+                       else
+                           ECPGlog("ECPGexecute line %d: Got error after PGRES_COPY_OUT: %s", PQresultErrorMessage(results));
+                   }
+                   //PQendcopy(stmt->connection->connection);
+                   break;
+               }
            case PGRES_COPY_IN:
                ECPGlog("ECPGexecute line %d: Got PGRES_COPY_IN ... tossing.\n", stmt->lineno);
                PQendcopy(stmt->connection->connection);
index a005e71f2851135650fe1e47273390edfccd905d..71712b1bb4a4345aa90887cd48e7c93928e05e7f 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.325 2006/06/26 14:12:02 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.326 2006/07/28 09:08:01 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -1194,16 +1194,16 @@ ColId_or_Sconst: ColId          { $$ = $1; }
        | StringConst           { $$ = $1; }
        ;
 
-VariableShowStmt:  SHOW var_name
+VariableShowStmt:  SHOW var_name ecpg_into
            { $$ = cat2_str(make_str("show"), $2); }
-       | SHOW TIME ZONE
+       | SHOW TIME ZONE ecpg_into
            { $$ = make_str("show time zone"); }
-       | SHOW TRANSACTION ISOLATION LEVEL
+       | SHOW TRANSACTION ISOLATION LEVEL ecpg_into
            { $$ = make_str("show transaction isolation level"); }
-       | SHOW SESSION AUTHORIZATION
+       | SHOW SESSION AUTHORIZATION ecpg_into
            { $$ = make_str("show session authorization"); }
        | SHOW ALL
-           { $$ = make_str("show all"); }
+           { mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL not implemented"); }
        ;
 
 VariableResetStmt: RESET var_name