|
12 | 12 | *
|
13 | 13 | *
|
14 | 14 | * IDENTIFICATION
|
15 |
| - * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.159.2.2 2008/02/15 16:28:47 meskes Exp $ |
| 15 | + * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.159.2.3 2008/02/17 18:42:23 meskes Exp $ |
16 | 16 | *
|
17 | 17 | *-------------------------------------------------------------------------
|
18 | 18 | */
|
@@ -47,6 +47,7 @@ static void addlitchar (unsigned char);
|
47 | 47 | static void parse_include (void);
|
48 | 48 | static bool ecpg_isspace(char ch);
|
49 | 49 | static bool isdefine(void);
|
| 50 | +static bool isinformixdefine(void); |
50 | 51 |
|
51 | 52 | char *token_start;
|
52 | 53 | int state_before;
|
@@ -743,7 +744,9 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
743 | 744 | <C>{identifier} {
|
744 | 745 | const ScanKeyword *keyword;
|
745 | 746 |
|
746 |
| - if (!isdefine()) |
| 747 | + /* Informix uses SQL defines only in SQL space */ |
| 748 | + /* however, some defines have to be taken care of for compatibility */ |
| 749 | + if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine()) |
747 | 750 | {
|
748 | 751 | keyword = ScanCKeywordLookup(yytext);
|
749 | 752 | if (keyword != NULL)
|
@@ -1315,6 +1318,36 @@ static bool isdefine(void)
|
1315 | 1318 | return false;
|
1316 | 1319 | }
|
1317 | 1320 |
|
| 1321 | +static bool isinformixdefine(void) |
| 1322 | +{ |
| 1323 | + const char *new = NULL; |
| 1324 | + |
| 1325 | + if (strcmp(yytext, "dec_t") == 0) |
| 1326 | + new = "decimal"; |
| 1327 | + else if (strcmp(yytext, "intrvl_t") == 0) |
| 1328 | + new = "interval"; |
| 1329 | + else if (strcmp(yytext, "dtime_t") == 0) |
| 1330 | + new = "timestamp"; |
| 1331 | + |
| 1332 | + if (new) |
| 1333 | + { |
| 1334 | + struct _yy_buffer *yb; |
| 1335 | + |
| 1336 | + yb = mm_alloc(sizeof(struct _yy_buffer)); |
| 1337 | + |
| 1338 | + yb->buffer = YY_CURRENT_BUFFER; |
| 1339 | + yb->lineno = yylineno; |
| 1340 | + yb->filename = mm_strdup(input_filename); |
| 1341 | + yb->next = yy_buffer; |
| 1342 | + yy_buffer = yb; |
| 1343 | + |
| 1344 | + yy_scan_string(new); |
| 1345 | + return true; |
| 1346 | + } |
| 1347 | + |
| 1348 | + return false; |
| 1349 | +} |
| 1350 | + |
1318 | 1351 | /*
|
1319 | 1352 | * Called before any actual parsing is done
|
1320 | 1353 | */
|
|
0 commit comments