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