From bea0466d9dc099f1fda28f5714e83ad9a1b23034 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Fri, 15 Feb 2008 12:11:02 +0000 Subject: [PATCH] Changed the way symbols are defined in C in INFORMIX mode. Added SQLSTATE macro closing bug #3961. EXECUTE can return NOT FOUND so it should be checked here too. --- src/interfaces/ecpg/ChangeLog | 9 +++++ src/interfaces/ecpg/include/datetime.h | 7 ++-- src/interfaces/ecpg/include/decimal.h | 5 ++- src/interfaces/ecpg/include/ecpg_informix.h | 7 +++- src/interfaces/ecpg/include/ecpglib.h | 5 ++- src/interfaces/ecpg/preproc/pgc.l | 41 +++------------------ src/interfaces/ecpg/preproc/preproc.y | 4 +- 7 files changed, 33 insertions(+), 45 deletions(-) diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index 846c67cc0c..7a2f8346a6 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -2307,4 +2307,13 @@ Wed, 06 Feb 2008 09:04:48 +0100 - Fixed segfault in ecpg when using an array element. - Free all memory in auto-prepare mode. +Thu, 14 Feb 2008 13:11:34 +0100 + + - Added SQLSTATE macro closing bug #3961. + - EXECUTE can return NOT FOUND so it should be checked here too. + - Changed regression test accordingly. + +Fri, 15 Feb 2008 12:01:13 +0100 + + - Changed the way symbols are defined in C in INFORMIX mode. diff --git a/src/interfaces/ecpg/include/datetime.h b/src/interfaces/ecpg/include/datetime.h index c3a7062675..e18aae7b04 100644 --- a/src/interfaces/ecpg/include/datetime.h +++ b/src/interfaces/ecpg/include/datetime.h @@ -1,11 +1,12 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/datetime.h,v 1.12 2006/03/11 04:38:39 momjian Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/datetime.h,v 1.12.4.1 2008/02/15 12:11:02 meskes Exp $ */ #ifndef _ECPG_DATETIME_H #define _ECPG_DATETIME_H #include -typedef timestamp dtime_t; -typedef interval intrvl_t; +/* brought in by ecpg_informix.h nowadays + * typedef timestamp dtime_t; + * typedef interval intrvl_t; */ #endif /* ndef _ECPG_DATETIME_H */ diff --git a/src/interfaces/ecpg/include/decimal.h b/src/interfaces/ecpg/include/decimal.h index 9944f052e3..3bbd6f0357 100644 --- a/src/interfaces/ecpg/include/decimal.h +++ b/src/interfaces/ecpg/include/decimal.h @@ -1,10 +1,11 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/decimal.h,v 1.14 2006/03/11 04:38:39 momjian Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/decimal.h,v 1.14.4.1 2008/02/15 12:11:02 meskes Exp $ */ #ifndef _ECPG_DECIMAL_H #define _ECPG_DECIMAL_H #include -typedef decimal dec_t; +/* brought in by ecpg_informix.h nowadays + * typedef decimal dec_t; */ #endif /* ndef _ECPG_DECIMAL_H */ diff --git a/src/interfaces/ecpg/include/ecpg_informix.h b/src/interfaces/ecpg/include/ecpg_informix.h index 4441c56b33..c19fa8d673 100644 --- a/src/interfaces/ecpg/include/ecpg_informix.h +++ b/src/interfaces/ecpg/include/ecpg_informix.h @@ -1,6 +1,6 @@ /* * This file contains stuff needed to be as compatible to Informix as possible. - * $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg_informix.h,v 1.18 2006/03/11 04:38:39 momjian Exp $ + * $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg_informix.h,v 1.18.4.1 2008/02/15 12:11:02 meskes Exp $ */ #ifndef _ECPG_INFORMIX_H #define _ECPG_INFORMIX_H @@ -82,6 +82,11 @@ extern int dttofmtasc(timestamp *, char *, int, char *); extern int intoasc(interval *, char *); extern int dtcvfmtasc(char *, char *, timestamp *); +/* we also define Informix datatypes here */ +typedef timestamp dtime_t; +typedef interval intrvl_t; +typedef decimal dec_t; + #ifdef __cplusplus } #endif diff --git a/src/interfaces/ecpg/include/ecpglib.h b/src/interfaces/ecpg/include/ecpglib.h index 18cab5029e..6034a0901f 100644 --- a/src/interfaces/ecpg/include/ecpglib.h +++ b/src/interfaces/ecpg/include/ecpglib.h @@ -1,7 +1,7 @@ /* * this is a small part of c.h since we don't want to leak all postgres * definitions into ecpg programs - * $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpglib.h,v 1.74 2008/01/13 11:53:16 meskes Exp $ + * $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpglib.h,v 1.74.2.1 2008/02/15 12:11:02 meskes Exp $ */ #ifndef _ECPGLIB_H @@ -58,7 +58,8 @@ void sqlprint(void); /* define this for simplicity as well as compatibility */ -#define SQLCODE sqlca.sqlcode +#define SQLCODE sqlca.sqlcode +#define SQLSTATE sqlca.sqlstate /* dynamic SQL */ diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index e5bd28be92..ee2805d157 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -12,7 +12,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.159 2008/01/15 10:31:47 meskes Exp $ + * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.159.2.1 2008/02/15 12:11:02 meskes Exp $ * *------------------------------------------------------------------------- */ @@ -47,7 +47,6 @@ static void addlitchar (unsigned char); static void parse_include (void); static bool ecpg_isspace(char ch); static bool isdefine(void); -static bool isinformixdefine(void); char *token_start; int state_before; @@ -744,9 +743,11 @@ cppline {space}*#(.*\\{space})*.*{newline} {identifier} { const ScanKeyword *keyword; - /* Informix uses SQL defines only in SQL space */ - /* however, some defines have to be taken care of for compatibility */ - if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine()) +<<<<<<< pgc.l + if (!INFORMIX_MODE && !isdefine()) +======= + if (!isdefine()) +>>>>>>> 1.162 { keyword = ScanCKeywordLookup(yytext); if (keyword != NULL) @@ -1318,36 +1319,6 @@ static bool isdefine(void) return false; } -static bool isinformixdefine(void) -{ - const char *new = NULL; - - if (strcmp(yytext, "dec_t") == 0) - new = "decimal"; - else if (strcmp(yytext, "intrvl_t") == 0) - new = "interval"; - else if (strcmp(yytext, "dtime_t") == 0) - new = "timestamp"; - - if (new) - { - struct _yy_buffer *yb; - - yb = mm_alloc(sizeof(struct _yy_buffer)); - - yb->buffer = YY_CURRENT_BUFFER; - yb->lineno = yylineno; - yb->filename = mm_strdup(input_filename); - yb->next = yy_buffer; - yy_buffer = yb; - - yy_scan_string(new); - return true; - } - - return false; -} - /* * Called before any actual parsing is done */ diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index 9bcf994480..5b7cef224c 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.359 2008/01/15 10:31:47 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.359.2.1 2008/02/15 12:11:02 meskes Exp $ */ /* Copyright comment */ %{ @@ -807,7 +807,7 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, ECPGst_normal); } | DropUserStmt { output_statement($1, 0, ECPGst_normal); } | DropdbStmt { output_statement($1, 0, ECPGst_normal); } | ExplainStmt { output_statement($1, 0, ECPGst_normal); } - | ExecuteStmt { output_statement($1, 0, ECPGst_execute); } + | ExecuteStmt { output_statement($1, 1, ECPGst_execute); } | FetchStmt { output_statement($1, 1, ECPGst_normal); } | GrantStmt { output_statement($1, 0, ECPGst_normal); } | GrantRoleStmt { output_statement($1, 0, ECPGst_normal); } -- 2.50.0