]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
From: Michael Meskes <Michael.Meskes@usa.net>
authorMarc G. Fournier <scrappy@hub.org>
Thu, 21 Jan 1999 20:01:34 +0000 (20:01 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Thu, 21 Jan 1999 20:01:34 +0000 (20:01 +0000)
See attached file. Now accepts "exec sql whenever sqlwarning".

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/lib/Makefile.in
src/interfaces/ecpg/lib/ecpglib.c
src/interfaces/ecpg/preproc/ecpg_keywords.c
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/test/header_test.h

index 464f5cea0b8634230d26d17947e2eac88dc73920..9675f4822728417e230a1959306d953aecfb1a91 100644 (file)
@@ -335,7 +335,7 @@ Thu Sep 17 08:55:33 CEST 1998
 
 Thu Sep 17 19:23:24 CEST 1998
 
-       - Added missing ´;´ in preproc.y
+       - Added missing ';' in preproc.y
        - Set version to 2.4.2
 
 Tue Sep 29 10:22:00 CEST 1998
@@ -357,23 +357,29 @@ Thu Okt 15 10:05:04 CEST 1998
        - Synced preproc.y with gram.y yet again.
         - Set version to 2.4.4
 
-Wed Dec  9 11:24:54 MEZ 1998
+Wed Dec  9 20:24:54 MEZ 1998
 
        - Synced preproc.y with gram.y and the keywords.c files to add CASE
          statement.
 
-Tue Dec 22 14:16:11 CET 1998
+Tue Dec 22 19:16:11 CET 1998
 
        - Synced preproc.y with gram.y for locking statements.
        - Set version to 2.4.5
 
-Tue Jan  7 15:19:34 CET 1999
+Tue Jan  7 19:19:34 CET 1999
 
        - Synced preproc.y with gram.y for for-update clause and changes in
          handling of numerics
 
-Mon Jan 18 11:22:44 CET 1999
+Mon Jan 18 19:22:44 CET 1999
 
        - Added INTERSECT, EXCEPT and UNION for Select statements
        - Put keywords.c in sync again after forgettimg it the last time.
-       - Set version to 2.4.6
+
+Thu Jan 21 21:29:00 CET 1999
+
+       - Fixed libecpg to not segfault if there is no connection.
+       - Set library version to 2.6.3
+       - Added 'exec sql whenever sqlwarning'.
+       - Set ecpg version to 2.4.6
index 182fd6574325cc07889916f94641f037a54e43da..9173f36c4eef70e43f1d1b0d33a581a955bf3033 100644 (file)
@@ -6,13 +6,13 @@
 # Copyright (c) 1994, Regents of the University of California
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.39 1999/01/17 06:19:24 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.40 1999/01/21 20:01:32 scrappy Exp $
 #
 #-------------------------------------------------------------------------
 
 NAME= ecpg
 SO_MAJOR_VERSION= 2
-SO_MINOR_VERSION= 6.2
+SO_MINOR_VERSION= 6.3
 
 SRCDIR= @top_srcdir@
 include $(SRCDIR)/Makefile.global
index f982d5103cb758bd78d77b19c82748b41398f32e..62769941a7ce9c9b20ec7c17451888c6b1620fcc 100644 (file)
@@ -886,12 +886,17 @@ ECPGtrans(int lineno, const char *transaction)
        PGresult   *res;
 
        ECPGlog("ECPGtrans line %d action = %s\n", lineno, transaction);
-       if ((res = PQexec(actual_connection->connection, transaction)) == NULL)
+
+       /* if we have no connection we just simulate the command */
+       if (actual_connection && actual_connection->connection)
        {
-               register_error(ECPG_TRANS, "Error in transaction processing line %d.", lineno);
-               return FALSE;
+               if ((res = PQexec(actual_connection->connection, transaction)) == NULL)
+               {
+                       register_error(ECPG_TRANS, "Error in transaction processing line %d.", lineno);
+                       return FALSE;
+               }
+               PQclear(res);
        }
-       PQclear(res);
        if (strcmp(transaction, "commit") == 0 || strcmp(transaction, "rollback") == 0)
                committed = 1;
        return TRUE;
index 77d7eaacc0cca4ac0339a9080140f2c8eb2a3893..04e0d6165d5e5cb7d580786a6c7d3ea8ea2711d1 100644 (file)
@@ -38,6 +38,7 @@ static ScanKeyword ScanKeywords[] = {
        {"section", SQL_SECTION},
        {"sqlerror", SQL_SQLERROR},
        {"sqlprint", SQL_SQLPRINT},
+       {"sqlwarning", SQL_SQLWARNING},
        {"stop", SQL_STOP},
        {"whenever", SQL_WHENEVER},
 };
index 7f2949373f7d672669d0d49adc2159aaa1f89553..0e34aa36dcdb7eba0ca08efe27a1cd1df1baafcf 100644 (file)
@@ -45,7 +45,7 @@ output_line_number()
 /*
  * store the whenever action here
  */
-static struct when when_error, when_nf;
+static struct when when_error, when_nf, when_warn;
 
 static void
 print_action(struct when *w)
@@ -76,6 +76,12 @@ whenever_action(int mode)
                fprintf(yyout, "\nif (sqlca.sqlcode == ECPG_NOT_FOUND) ");
                print_action(&when_nf);
        }
+       if (when_warn.code != W_NOTHING)
+        {
+               output_line_number();
+                fprintf(yyout, "\nif (sqlca.sqlwarn[0] == 'W') ");
+               print_action(&when_warn);
+        }
        if (when_error.code != W_NOTHING)
         {
                output_line_number();
@@ -517,7 +523,7 @@ output_statement(char * stmt, int mode)
 %token         SQL_DISCONNECT SQL_FOUND SQL_GO SQL_GOTO
 %token         SQL_IDENTIFIED SQL_IMMEDIATE SQL_INDICATOR SQL_OPEN SQL_RELEASE
 %token         SQL_SECTION SQL_SEMI SQL_SQLERROR SQL_SQLPRINT SQL_START
-%token         SQL_STOP SQL_WHENEVER
+%token         SQL_STOP SQL_WHENEVER SQL_SQLWARNING
 
 /* C token */
 %token         S_ANYTHING S_AUTO S_BOOL S_CHAR S_CONST S_DOUBLE S_ENUM S_EXTERN
@@ -4630,9 +4636,7 @@ ECPGSetConnection:  SET SQL_CONNECTION connection_object
                         }
 /*
  * whenever statement: decide what to do in case of error/no data found
- * according to SQL standards we miss: SQLSTATE, CONSTRAINT, SQLEXCEPTION
- * and SQLWARNING
-
+ * according to SQL standards we lack: SQLSTATE, CONSTRAINT and SQLEXCEPTION
  */
 ECPGWhenever: SQL_WHENEVER SQL_SQLERROR action {
        when_error.code = $<action>3.code;
@@ -4644,6 +4648,11 @@ ECPGWhenever: SQL_WHENEVER SQL_SQLERROR action {
        when_nf.command = $<action>4.command;
        $$ = cat3_str(make1_str("/* exec sql whenever not found "), $4.str, make1_str("; */\n"));
 }
+       | SQL_WHENEVER SQL_SQLWARNING action {
+       when_warn.code = $<action>3.code;
+       when_warn.command = $<action>3.command;
+       $$ = cat3_str(make1_str("/* exec sql whenever sql_warning "), $3.str, make1_str("; */\n"));
+}
 
 action : SQL_CONTINUE {
        $<action>$.code = W_NOTHING;
index 7d495ac64fb5a422a0461c64fcebfa63e835bced..5050113e1844d502eab558de77744c67c9f18b9f 100644 (file)
@@ -1,3 +1,15 @@
 exec sql include sqlca;
 
-exec sql whenever sqlerror sqlprint;
+exec sql whenever sqlerror do print_and_stop();
+exec sql whenever sqlwarning do warn();
+
+void print_and_stop(void)
+{
+       sqlprint();
+       exit(-1);
+}
+
+void warn(void)
+{
+       fprintf(stderr, "Warning: At least one column was truncated\n");
+}