aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2008-02-17 18:42:23 +0000
committerMichael Meskes <meskes@postgresql.org>2008-02-17 18:42:23 +0000
commit0ab060794930f50acf93e00a321887806eec9bd6 (patch)
tree96926023496cabae64c5db3d2a85492dd76573bb /src
parenta50a313c1dfe2e250e21e34d479febb2b3243f98 (diff)
downloadpostgresql-0ab060794930f50acf93e00a321887806eec9bd6.tar.gz
postgresql-0ab060794930f50acf93e00a321887806eec9bd6.zip
Changed INFORMIX mode symbol definition yet again because the old way didn't work on NetBSD.
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/ecpg/ChangeLog5
-rw-r--r--src/interfaces/ecpg/include/datetime.h9
-rw-r--r--src/interfaces/ecpg/include/decimal.h7
-rw-r--r--src/interfaces/ecpg/include/ecpg_informix.h7
-rw-r--r--src/interfaces/ecpg/preproc/pgc.l37
5 files changed, 50 insertions, 15 deletions
diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 7a2f8346a64..b73664a4ae2 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -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.
diff --git a/src/interfaces/ecpg/include/datetime.h b/src/interfaces/ecpg/include/datetime.h
index e18aae7b048..2f6f4d48387 100644
--- a/src/interfaces/ecpg/include/datetime.h
+++ b/src/interfaces/ecpg/include/datetime.h
@@ -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 */
diff --git a/src/interfaces/ecpg/include/decimal.h b/src/interfaces/ecpg/include/decimal.h
index 3bbd6f0357b..110d280eca5 100644
--- a/src/interfaces/ecpg/include/decimal.h
+++ b/src/interfaces/ecpg/include/decimal.h
@@ -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 */
diff --git a/src/interfaces/ecpg/include/ecpg_informix.h b/src/interfaces/ecpg/include/ecpg_informix.h
index c19fa8d6738..c9895f061fe 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.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
diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l
index 02ba8240b69..2ad415d8833 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.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
*/