From 4505653e54eb768c2ec4777638cc900859f0175a Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Thu, 26 Jun 2003 11:37:05 +0000 Subject: [PATCH] Added just another compatibility level for Informix. --- src/interfaces/ecpg/ChangeLog | 10 ++++++++++ src/interfaces/ecpg/ecpglib/connect.c | 4 ++-- src/interfaces/ecpg/ecpglib/data.c | 4 ++-- src/interfaces/ecpg/ecpglib/execute.c | 8 +++++--- src/interfaces/ecpg/ecpglib/extern.h | 3 ++- src/interfaces/ecpg/ecpglib/prepare.c | 4 ++-- src/interfaces/ecpg/preproc/ecpg.c | 12 +++++++----- src/interfaces/ecpg/preproc/extern.h | 3 ++- src/interfaces/ecpg/preproc/pgc.l | 20 ++++++++++---------- src/interfaces/ecpg/preproc/preproc.y | 6 ++---- src/interfaces/ecpg/test/test_informix.pgc | 7 ++++++- 11 files changed, 50 insertions(+), 31 deletions(-) diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index a8daf97af74..67629d5bea9 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -1514,6 +1514,16 @@ Fri Jun 20 15:34:29 CEST 2003 Sun Jun 22 11:20:29 CEST 2003 - Fixed missing '\0' in output char pointer. + +Wed Jun 25 09:29:34 CEST 2003 + + - Synced keyword.x and preproc.y/gram.y. + - Implemented Informix special way to treat NULLs. + +Thu Jun 26 13:26:13 CEST 2003 + + - Added another compatibility level INFORMIX_SE. + - Synced again. - Set ecpg version to 3.0.0 - Set ecpg library to 4.0.0 - Set pgtypes library to 1.0.0 diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c index cda4bbd15bf..77505f1184a 100644 --- a/src/interfaces/ecpg/ecpglib/connect.c +++ b/src/interfaces/ecpg/ecpglib/connect.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.8 2003/06/25 10:44:21 meskes Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.9 2003/06/26 11:37:05 meskes Exp $ */ #define POSTGRES_ECPG_INTERNAL #include "postgres_fe.h" @@ -304,7 +304,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p ECPGinit_sqlca(sqlca); - if (compat == ECPG_COMPAT_INFORMIX) + if (INFORMIX_MODE(compat)) { char *envname; diff --git a/src/interfaces/ecpg/ecpglib/data.c b/src/interfaces/ecpg/ecpglib/data.c index 8e0138d527d..77f35e639e0 100644 --- a/src/interfaces/ecpg/ecpglib/data.c +++ b/src/interfaces/ecpg/ecpglib/data.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.8 2003/06/25 10:44:21 meskes Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.9 2003/06/26 11:37:05 meskes Exp $ */ #define POSTGRES_ECPG_INTERNAL #include "postgres_fe.h" @@ -78,7 +78,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, break; #endif /* HAVE_LONG_LONG_INT_64 */ case ECPGt_NO_INDICATOR: - if (force_indicator == false && compat == ECPG_COMPAT_INFORMIX) + if (force_indicator == false) { /* Informix has an additional way to specify NULLs * note that this uses special values to denote NULL */ diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index af4d23b7e79..ad5ab5d1f02 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.12 2003/06/25 10:44:21 meskes Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.13 2003/06/26 11:37:05 meskes Exp $ */ /* * The aim is to get a simpler inteface to the database routines. @@ -508,7 +508,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var, break; #endif /* HAVE_LONG_LONG_INT_64 */ case ECPGt_NO_INDICATOR: - if (stmt->force_indicator == false && stmt->compat == ECPG_COMPAT_INFORMIX) + if (stmt->force_indicator == false) { if (ECPGis_informix_null(var->type, var->value)) *tobeinserted_p = "null"; @@ -1186,7 +1186,9 @@ ECPGexecute(struct statement * stmt) sqlca->sqlerrd[1] = PQoidValue(results); sqlca->sqlerrd[2] = atol(PQcmdTuples(results)); ECPGlog("ECPGexecute line %d Ok: %s\n", stmt->lineno, cmdstat); - if (!sqlca->sqlerrd[2] && ( !strncmp(cmdstat, "UPDATE", 6) + if (stmt->compat != ECPG_COMPAT_INFORMIX_SE && + !sqlca->sqlerrd[2] && + ( !strncmp(cmdstat, "UPDATE", 6) || !strncmp(cmdstat, "INSERT", 6) || !strncmp(cmdstat, "DELETE", 6))) ECPGraise(stmt->lineno, ECPG_NOT_FOUND, NULL); diff --git a/src/interfaces/ecpg/ecpglib/extern.h b/src/interfaces/ecpg/ecpglib/extern.h index a7f37491da8..b6b25b8328a 100644 --- a/src/interfaces/ecpg/ecpglib/extern.h +++ b/src/interfaces/ecpg/ecpglib/extern.h @@ -5,7 +5,8 @@ #include "libpq-fe.h" #include "sqlca.h" -enum COMPAT_MODE { ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX}; +enum COMPAT_MODE { ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX, ECPG_COMPAT_INFORMIX_SE}; +#define INFORMIX_MODE(X) ((X) == ECPG_COMPAT_INFORMIX || (X) == ECPG_COMPAT_INFORMIX_SE) /* Here are some methods used by the lib. */ diff --git a/src/interfaces/ecpg/ecpglib/prepare.c b/src/interfaces/ecpg/ecpglib/prepare.c index a10f386fc8c..63d7afac701 100644 --- a/src/interfaces/ecpg/ecpglib/prepare.c +++ b/src/interfaces/ecpg/ecpglib/prepare.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.4 2003/06/25 10:44:21 meskes Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.5 2003/06/26 11:37:05 meskes Exp $ */ #define POSTGRES_ECPG_INTERNAL #include "postgres_fe.h" @@ -110,7 +110,7 @@ ECPGdeallocate(int lineno, int c, char *name) bool ret = ECPGdeallocate_one(lineno, name); enum COMPAT_MODE compat = c; - if (compat == ECPG_COMPAT_INFORMIX) + if (INFORMIX_MODE(compat)) { /* Just ignore all errors since we do not know the list of cursors we * are allowed to free. We have to trust that the software. */ diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c index 0256080a50a..42f278057ce 100644 --- a/src/interfaces/ecpg/preproc/ecpg.c +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.74 2003/06/25 10:44:21 meskes Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.75 2003/06/26 11:37:05 meskes Exp $ */ /* New main for ecpg, the PostgreSQL embedded SQL precompiler. */ /* (C) Michael Meskes Feb 5th, 1998 */ @@ -45,7 +45,9 @@ help(const char *progname) printf(" -d generate parser debug output\n"); #endif printf(" -C set compatibility mode\n" - " mode may be \"INFORMIX\" only at the moment\n"); + " mode may be one of\n" + " \"INFORMIX\"\n" + " \"INFORMIX_SE\"\n"); printf(" -r