]> granicus.if.org Git - postgresql/commitdiff
Changed INFORMIX mode symbol definition yet again because the old way didn't work...
authorMichael Meskes <meskes@postgresql.org>
Sun, 17 Feb 2008 18:42:23 +0000 (18:42 +0000)
committerMichael Meskes <meskes@postgresql.org>
Sun, 17 Feb 2008 18:42:23 +0000 (18:42 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/include/datetime.h
src/interfaces/ecpg/include/decimal.h
src/interfaces/ecpg/include/ecpg_informix.h
src/interfaces/ecpg/preproc/pgc.l

index 7a2f8346a648928225de68884b6def934ea54643..b73664a4ae2b51cf1d41e43a57cb0ce46707dda1 100644 (file)
@@ -2317,3 +2317,8 @@ Fri, 15 Feb 2008 12:01:13 +0100
 
        - Changed the way symbols are defined in C in INFORMIX mode.
 
+Sun, 17 Feb 2008 18:45:39 +0100
+
+       - Removed duplicate include of ecpgtype.h.
+       - Changed INFORMIX mode symbol definition yet again because the old
+         way didn't work on NetBSD.
index e18aae7b0481cebdbe46cb15f40be2d01321700b..2f6f4d483878d236342ac7edf0981b8af4a3c2e3 100644 (file)
@@ -1,12 +1,13 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/datetime.h,v 1.12.4.1 2008/02/15 12:11:02 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/datetime.h,v 1.12.4.2 2008/02/17 18:42:23 meskes Exp $ */
 
 #ifndef _ECPG_DATETIME_H
 #define _ECPG_DATETIME_H
 
 #include <ecpg_informix.h>
 
-/* brought in by ecpg_informix.h nowadays
- * typedef timestamp dtime_t;
- * typedef interval intrvl_t; */
+#ifndef _ECPGLIB_H /* source created by ecpg which defines these symbols */
+typedef timestamp dtime_t;
+typedef interval intrvl_t;
+#endif /* ndef _ECPGLIB_H */
 
 #endif   /* ndef _ECPG_DATETIME_H */
index 3bbd6f0357b40b8a3c842c85d96264002829281e..110d280eca55a7c190e98b0c09e243689c95dd7a 100644 (file)
@@ -1,11 +1,12 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/decimal.h,v 1.14.4.1 2008/02/15 12:11:02 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/decimal.h,v 1.14.4.2 2008/02/17 18:42:23 meskes Exp $ */
 
 #ifndef _ECPG_DECIMAL_H
 #define _ECPG_DECIMAL_H
 
 #include <ecpg_informix.h>
 
-/* brought in by ecpg_informix.h nowadays
- * typedef decimal dec_t; */
+#ifndef _ECPGLIB_H /* source created by ecpg which defines this symbol */
+typedef decimal dec_t; 
+#endif /* ndef _ECPGLIB_H */
 
 #endif   /* ndef _ECPG_DECIMAL_H */
index c19fa8d6738b9a560cd6411659f258c685f3ab0b..c9895f061fe71bd76f743d6337925ffd6df3ebec 100644 (file)
@@ -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.4.1 2008/02/15 12:11:02 meskes Exp $
+ * $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg_informix.h,v 1.18.4.2 2008/02/17 18:42:23 meskes Exp $
  */
 #ifndef _ECPG_INFORMIX_H
 #define _ECPG_INFORMIX_H
@@ -82,11 +82,6 @@ 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
index 02ba8240b698e0c76cc97ae1d9704d3e8799570d..2ad415d88337f3df8380f6dbb4081d709de23aec 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.159.2.2 2008/02/15 16:28:47 meskes Exp $
+ *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.159.2.3 2008/02/17 18:42:23 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,6 +47,7 @@ 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;
@@ -743,7 +744,9 @@ cppline                     {space}*#(.*\\{space})*.*{newline}
 <C>{identifier}        {
                                                const ScanKeyword               *keyword;
                                                        
-                                               if (!isdefine())
+                                               /* Informix uses SQL defines only in SQL space */
+                                               /* however, some defines have to be taken care of for compatibility */
+                                               if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine())
                                                {
                                                        keyword = ScanCKeywordLookup(yytext);
                                                        if (keyword != NULL)
@@ -1315,6 +1318,36 @@ 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
  */