From 72ba3cb50f60151a0c6816a2cb3990de237442d4 Mon Sep 17 00:00:00 2001 From: Michael Meskes <meskes@postgresql.org> Date: Fri, 28 Jul 2006 09:08:01 +0000 Subject: [PATCH] Added more SoC changes by Joachim Wieland <joe@mcknight.de>: - SHOW statement puts result into a variable - COPY TO STDOUT works --- src/interfaces/ecpg/ChangeLog | 6 ++++++ src/interfaces/ecpg/ecpglib/execute.c | 28 +++++++++++++++++++++++---- src/interfaces/ecpg/preproc/preproc.y | 12 ++++++------ 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index a89722bb647..3514d3a199e 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -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 <joe@mcknight.de>: + - 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. diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index e2bd5a68f33..c6ce668e502 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -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); diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index a005e71f285..71712b1bb4a 100644 --- a/src/interfaces/ecpg/preproc/preproc.y +++ b/src/interfaces/ecpg/preproc/preproc.y @@ -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 -- GitLab