|
12 | 12 | *
|
13 | 13 | *
|
14 | 14 | * IDENTIFICATION
|
15 |
| - * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.154 2007/08/22 08:20:58 meskes Exp $ |
| 15 | + * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.155 2007/08/29 13:58:13 meskes Exp $ |
16 | 16 | *
|
17 | 17 | *-------------------------------------------------------------------------
|
18 | 18 | */
|
@@ -50,6 +50,7 @@ static void parse_include (void);
|
50 | 50 | static void check_escape_warning(void);
|
51 | 51 | static bool ecpg_isspace(char ch);
|
52 | 52 | static bool isdefine(void);
|
| 53 | +static bool isinformixdefine(void); |
53 | 54 |
|
54 | 55 | char *token_start;
|
55 | 56 | int state_before;
|
@@ -751,8 +752,10 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
751 | 752 | }
|
752 | 753 | <C>{identifier} {
|
753 | 754 | const ScanKeyword *keyword;
|
754 |
| - |
755 |
| - if (INFORMIX_MODE || !isdefine()) |
| 755 | + |
| 756 | + /* Informix uses SQL defines only in SQL space */ |
| 757 | + /* however, some defines have to be taken care of for compatibility */ |
| 758 | + if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine()) |
756 | 759 | {
|
757 | 760 | keyword = ScanCKeywordLookup(yytext);
|
758 | 761 | if (keyword != NULL)
|
@@ -1332,6 +1335,36 @@ static bool isdefine(void)
|
1332 | 1335 | return false;
|
1333 | 1336 | }
|
1334 | 1337 |
|
| 1338 | +static bool isinformixdefine(void) |
| 1339 | +{ |
| 1340 | + const char *new = NULL; |
| 1341 | + |
| 1342 | + if (strcmp(yytext, "dec_t") == 0) |
| 1343 | + new = "decimal"; |
| 1344 | + else if (strcmp(yytext, "intrvl_t") == 0) |
| 1345 | + new = "interval"; |
| 1346 | + else if (strcmp(yytext, "dtime_t") == 0) |
| 1347 | + new = "timestamp"; |
| 1348 | + |
| 1349 | + if (new) |
| 1350 | + { |
| 1351 | + struct _yy_buffer *yb; |
| 1352 | + |
| 1353 | + yb = mm_alloc(sizeof(struct _yy_buffer)); |
| 1354 | + |
| 1355 | + yb->buffer = YY_CURRENT_BUFFER; |
| 1356 | + yb->lineno = yylineno; |
| 1357 | + yb->filename = mm_strdup(input_filename); |
| 1358 | + yb->next = yy_buffer; |
| 1359 | + yy_buffer = yb; |
| 1360 | + |
| 1361 | + yy_scan_string(new); |
| 1362 | + return true; |
| 1363 | + } |
| 1364 | + |
| 1365 | + return false; |
| 1366 | +} |
| 1367 | + |
1335 | 1368 | /*
|
1336 | 1369 | * Called before any actual parsing is done
|
1337 | 1370 | */
|
|
0 commit comments