mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Fixed bug in Informix define handling.
This commit is contained in:
parent
f145de27c3
commit
c7b6593042
@ -2229,5 +2229,9 @@ Tue, 14 Aug 2007 11:46:51 +0200
|
||||
Wed, 22 Aug 2007 08:41:33 +0200
|
||||
|
||||
- More cleaning up and removed some duplicates.
|
||||
|
||||
Wed, 29 Aug 2007 15:41:58 +0200
|
||||
|
||||
- Fixed bug in Informix define handling.
|
||||
- Set ecpg library version to 6.0.
|
||||
- Set ecpg version to 4.4.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.100 2007/08/14 10:01:53 meskes Exp $ */
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.101 2007/08/29 13:58:13 meskes Exp $ */
|
||||
|
||||
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
|
||||
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
|
||||
@ -212,11 +212,6 @@ main(int argc, char *const argv[])
|
||||
char informix_path[MAXPGPATH];
|
||||
|
||||
compat = (strcmp(optarg, "INFORMIX") == 0) ? ECPG_COMPAT_INFORMIX : ECPG_COMPAT_INFORMIX_SE;
|
||||
/* system_includes = true; */
|
||||
add_preprocessor_define("dec_t=decimal");
|
||||
add_preprocessor_define("intrvl_t=interval");
|
||||
add_preprocessor_define("dtime_t=timestamp");
|
||||
|
||||
get_pkginclude_path(my_exec_path, pkginclude_path);
|
||||
snprintf(informix_path, MAXPGPATH, "%s/informix/esql", pkginclude_path);
|
||||
add_include_path(informix_path);
|
||||
|
@ -12,7 +12,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.154 2007/08/22 08:20:58 meskes Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.155 2007/08/29 13:58:13 meskes Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -50,6 +50,7 @@ static void parse_include (void);
|
||||
static void check_escape_warning(void);
|
||||
static bool ecpg_isspace(char ch);
|
||||
static bool isdefine(void);
|
||||
static bool isinformixdefine(void);
|
||||
|
||||
char *token_start;
|
||||
int state_before;
|
||||
@ -752,7 +753,9 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||
<C>{identifier} {
|
||||
const ScanKeyword *keyword;
|
||||
|
||||
if (INFORMIX_MODE || !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)
|
||||
@ -1332,6 +1335,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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user