Synced parser and keyword list.
Fixed handling of cyclic defines.
This commit is contained in:
parent
45995219a0
commit
5420ed3a81
|
@ -1845,6 +1845,11 @@ Mon, 5 Jul 2004 10:41:54 +0200
|
||||||
Mon Jul 5 20:50:09 CEST 2004
|
Mon Jul 5 20:50:09 CEST 2004
|
||||||
|
|
||||||
- Added free() calls against memory leak in interval.c.
|
- Added free() calls against memory leak in interval.c.
|
||||||
|
|
||||||
|
Tue Jul 20 09:15:21 CEST 2004
|
||||||
|
|
||||||
|
- Synced parser and keyword list.
|
||||||
|
- Fixed handling of cyclic defines.
|
||||||
- Set pgtypes library version to 1.2.
|
- Set pgtypes library version to 1.2.
|
||||||
- Set ecpg version to 3.2.0.
|
- Set ecpg version to 3.2.0.
|
||||||
- Set compat library version to 1.2.
|
- Set compat library version to 1.2.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.88 2004/06/10 22:26:23 momjian Exp $ */
|
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.89 2004/07/20 18:06:41 meskes Exp $ */
|
||||||
|
|
||||||
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
|
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
|
||||||
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
|
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
|
||||||
|
@ -96,7 +96,7 @@ add_preprocessor_define(char *define)
|
||||||
{
|
{
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
/* symbol gets a value */
|
/* symbol has a value */
|
||||||
for (tmp = ptr - 1; *tmp == ' '; tmp--);
|
for (tmp = ptr - 1; *tmp == ' '; tmp--);
|
||||||
tmp[1] = '\0';
|
tmp[1] = '\0';
|
||||||
defines->old = define_copy;
|
defines->old = define_copy;
|
||||||
|
@ -105,9 +105,10 @@ add_preprocessor_define(char *define)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
defines->old = define_copy;
|
defines->old = define_copy;
|
||||||
defines->new = mm_strdup("");
|
defines->new = mm_strdup("1");
|
||||||
}
|
}
|
||||||
defines->pertinent = true;
|
defines->pertinent = true;
|
||||||
|
defines->used = NULL;
|
||||||
defines->next = pd;
|
defines->next = pd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.63 2004/06/20 10:45:47 meskes Exp $
|
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.64 2004/07/20 18:06:41 meskes Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -233,8 +233,6 @@ static ScanKeyword ScanKeywords[] = {
|
||||||
{"owner", OWNER},
|
{"owner", OWNER},
|
||||||
{"partial", PARTIAL},
|
{"partial", PARTIAL},
|
||||||
{"password", PASSWORD},
|
{"password", PASSWORD},
|
||||||
{"path", PATH_P},
|
|
||||||
{"pendant", PENDANT},
|
|
||||||
{"position", POSITION},
|
{"position", POSITION},
|
||||||
{"precision", PRECISION},
|
{"precision", PRECISION},
|
||||||
{"prepare", PREPARE},
|
{"prepare", PREPARE},
|
||||||
|
@ -327,7 +325,6 @@ static ScanKeyword ScanKeywords[] = {
|
||||||
{"varchar", VARCHAR},
|
{"varchar", VARCHAR},
|
||||||
{"varying", VARYING},
|
{"varying", VARYING},
|
||||||
{"verbose", VERBOSE},
|
{"verbose", VERBOSE},
|
||||||
{"version", VERSION},
|
|
||||||
{"view", VIEW},
|
{"view", VIEW},
|
||||||
{"volatile", VOLATILE},
|
{"volatile", VOLATILE},
|
||||||
{"when", WHEN},
|
{"when", WHEN},
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.129 2004/06/30 15:01:57 meskes Exp $
|
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.130 2004/07/20 18:06:41 meskes Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -602,7 +602,7 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
/* How about a DEFINE? */
|
/* How about a DEFINE? */
|
||||||
for (ptr = defines; ptr; ptr = ptr->next)
|
for (ptr = defines; ptr; ptr = ptr->next)
|
||||||
{
|
{
|
||||||
if (strcmp(yytext, ptr->old) == 0)
|
if (strcmp(yytext, ptr->old) == 0 && ptr->used == NULL)
|
||||||
{
|
{
|
||||||
struct _yy_buffer *yb;
|
struct _yy_buffer *yb;
|
||||||
|
|
||||||
|
@ -611,7 +611,7 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
yb->buffer = YY_CURRENT_BUFFER;
|
yb->buffer = YY_CURRENT_BUFFER;
|
||||||
yb->lineno = yylineno;
|
yb->lineno = yylineno;
|
||||||
yb->filename = mm_strdup(input_filename);
|
yb->filename = mm_strdup(input_filename);
|
||||||
yb->next = yy_buffer;
|
ptr->used = yb->next = yy_buffer;
|
||||||
|
|
||||||
yy_buffer = yb;
|
yy_buffer = yb;
|
||||||
|
|
||||||
|
@ -619,7 +619,6 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ptr == NULL)
|
if (ptr == NULL)
|
||||||
{
|
{
|
||||||
/* Is it an SQL keyword? */
|
/* Is it an SQL keyword? */
|
||||||
|
@ -640,18 +639,15 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
/*
|
/*
|
||||||
* None of the above. Return it as an identifier.
|
* None of the above. Return it as an identifier.
|
||||||
*
|
*
|
||||||
* The backend would attempt to truncate and case-fold
|
* The backend will attempt to truncate and case-fold
|
||||||
* the identifier, but I see no good reason for ecpg
|
* the identifier, but I see no good reason for ecpg
|
||||||
* to do so; that's just another way that ecpg could get
|
* to do so; that's just another way that ecpg could get
|
||||||
* out of step with the backend.
|
* out of step with the backend.
|
||||||
*/
|
*/
|
||||||
if (ptr == NULL)
|
|
||||||
{
|
|
||||||
yylval.str = mm_strdup(yytext);
|
yylval.str = mm_strdup(yytext);
|
||||||
return IDENT;
|
return IDENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
<SQL>{other} { return yytext[0]; }
|
<SQL>{other} { return yytext[0]; }
|
||||||
<C>{exec_sql} { BEGIN SQL; return SQL_START; }
|
<C>{exec_sql} { BEGIN SQL; return SQL_START; }
|
||||||
<C>{informix_special} {
|
<C>{informix_special} {
|
||||||
|
@ -700,7 +696,7 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
/* is it a define? */
|
/* is it a define? */
|
||||||
for (ptr = defines; ptr; ptr = ptr->next)
|
for (ptr = defines; ptr; ptr = ptr->next)
|
||||||
{
|
{
|
||||||
if (strcmp(yytext, ptr->old) == 0)
|
if (strcmp(yytext, ptr->old) == 0 && ptr->used == NULL)
|
||||||
{
|
{
|
||||||
struct _yy_buffer *yb;
|
struct _yy_buffer *yb;
|
||||||
|
|
||||||
|
@ -709,7 +705,7 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
yb->buffer = YY_CURRENT_BUFFER;
|
yb->buffer = YY_CURRENT_BUFFER;
|
||||||
yb->lineno = yylineno;
|
yb->lineno = yylineno;
|
||||||
yb->filename = mm_strdup(input_filename);
|
yb->filename = mm_strdup(input_filename);
|
||||||
yb->next = yy_buffer;
|
ptr->used = yb->next = yy_buffer;
|
||||||
|
|
||||||
yy_buffer = yb;
|
yy_buffer = yb;
|
||||||
|
|
||||||
|
@ -739,7 +735,7 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
<C>"-" { return('-'); }
|
<C>"-" { return('-'); }
|
||||||
<C>"(" { return('('); }
|
<C>"(" { return('('); }
|
||||||
<C>")" { return(')'); }
|
<C>")" { return(')'); }
|
||||||
<C>{space} { ECHO; }
|
<C,xskip>{space} { ECHO; }
|
||||||
<C>\{ { return('{'); }
|
<C>\{ { return('{'); }
|
||||||
<C>\} { return('}'); }
|
<C>\} { return('}'); }
|
||||||
<C>\[ { return('['); }
|
<C>\[ { return('['); }
|
||||||
|
@ -981,6 +977,7 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
this->old = old;
|
this->old = old;
|
||||||
this->new = mm_strdup(literalbuf);
|
this->new = mm_strdup(literalbuf);
|
||||||
this->next = defines;
|
this->next = defines;
|
||||||
|
this->used = NULL;
|
||||||
defines = this;
|
defines = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1005,6 +1002,14 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
{
|
{
|
||||||
struct _yy_buffer *yb = yy_buffer;
|
struct _yy_buffer *yb = yy_buffer;
|
||||||
int i;
|
int i;
|
||||||
|
struct _defines *ptr;
|
||||||
|
|
||||||
|
for (ptr = defines; ptr; ptr = ptr->next)
|
||||||
|
if (ptr->used == yy_buffer)
|
||||||
|
{
|
||||||
|
ptr->used = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (yyin != NULL)
|
if (yyin != NULL)
|
||||||
fclose(yyin);
|
fclose(yyin);
|
||||||
|
@ -1025,6 +1030,7 @@ cppline {space}*#(.*\\{space})+.*
|
||||||
|
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
output_line_number();
|
output_line_number();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%%
|
%%
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.292 2004/07/05 09:45:53 meskes Exp $ */
|
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.293 2004/07/20 18:06:41 meskes Exp $ */
|
||||||
|
|
||||||
/* Copyright comment */
|
/* Copyright comment */
|
||||||
%{
|
%{
|
||||||
|
@ -385,7 +385,7 @@ add_additional_variables(char *name, bool insert)
|
||||||
OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR ORDER
|
OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR ORDER
|
||||||
OUT_P OUTER_P OVERLAPS OVERLAY OWNER
|
OUT_P OUTER_P OVERLAPS OVERLAY OWNER
|
||||||
|
|
||||||
PARTIAL PASSWORD PATH_P PENDANT PLACING POSITION
|
PARTIAL PASSWORD PLACING POSITION
|
||||||
PRECISION PRESERVE PREPARE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE
|
PRECISION PRESERVE PREPARE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE
|
||||||
|
|
||||||
QUOTE
|
QUOTE
|
||||||
|
@ -403,7 +403,7 @@ add_additional_variables(char *name, bool insert)
|
||||||
UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL UPDATE USAGE
|
UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL UPDATE USAGE
|
||||||
USER USING
|
USER USING
|
||||||
|
|
||||||
VACUUM VALID VALUES VARCHAR VARYING VERBOSE VERSION VIEW VOLATILE
|
VACUUM VALID VALUES VARCHAR VARYING VERBOSE VIEW VOLATILE
|
||||||
WHEN WHERE WITH WITHOUT WORK WRITE
|
WHEN WHERE WITH WITHOUT WORK WRITE
|
||||||
YEAR_P
|
YEAR_P
|
||||||
ZONE
|
ZONE
|
||||||
|
@ -414,7 +414,7 @@ add_additional_variables(char *name, bool insert)
|
||||||
*/
|
*/
|
||||||
%token UNIONJOIN
|
%token UNIONJOIN
|
||||||
|
|
||||||
/* Special keywords, not in the query language - see the "lex" file */
|
/* Special token types, not actually keywords - see the "lex" file */
|
||||||
%token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP BCONST XCONST
|
%token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP BCONST XCONST
|
||||||
%token <ival> ICONST PARAM
|
%token <ival> ICONST PARAM
|
||||||
%token <dval> FCONST
|
%token <dval> FCONST
|
||||||
|
@ -1232,6 +1232,9 @@ alter_table_cmd:
|
||||||
/* ALTER TABLE <name> SET WITHOUT CLUSTER */
|
/* ALTER TABLE <name> SET WITHOUT CLUSTER */
|
||||||
| SET WITHOUT CLUSTER
|
| SET WITHOUT CLUSTER
|
||||||
{ $$ = make_str("set without cluster"); }
|
{ $$ = make_str("set without cluster"); }
|
||||||
|
/* ALTER TABLE <name> SET TABLESPACE <tablespacename> */
|
||||||
|
| SET TABLESPACE name
|
||||||
|
{ $$ = cat_str(2, make_str("set tablespace"), $3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
alter_column_default:
|
alter_column_default:
|
||||||
|
@ -1590,8 +1593,8 @@ CreateAsElement: ColId { $$ = $1; }
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqList OptTableSpace
|
CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqList
|
||||||
{ $$ = cat_str(5, make_str("create"), $2, make_str("sequence"), $4, $5, $6); }
|
{ $$ = cat_str(4, make_str("create"), $2, make_str("sequence"), $4, $5); }
|
||||||
;
|
;
|
||||||
|
|
||||||
AlterSeqStmt: ALTER SEQUENCE qualified_name OptSeqList
|
AlterSeqStmt: ALTER SEQUENCE qualified_name OptSeqList
|
||||||
|
@ -5857,6 +5860,7 @@ ECPGunreserved: ABORT_P { $$ = make_str("abort"); }
|
||||||
| ADD { $$ = make_str("add"); }
|
| ADD { $$ = make_str("add"); }
|
||||||
| AFTER { $$ = make_str("after"); }
|
| AFTER { $$ = make_str("after"); }
|
||||||
| AGGREGATE { $$ = make_str("aggregate"); }
|
| AGGREGATE { $$ = make_str("aggregate"); }
|
||||||
|
| ALSO { $$ = make_str("also"); }
|
||||||
| ALTER { $$ = make_str("alter"); }
|
| ALTER { $$ = make_str("alter"); }
|
||||||
| ASSERTION { $$ = make_str("assertion"); }
|
| ASSERTION { $$ = make_str("assertion"); }
|
||||||
| ASSIGNMENT { $$ = make_str("assignment"); }
|
| ASSIGNMENT { $$ = make_str("assignment"); }
|
||||||
|
@ -5957,8 +5961,6 @@ ECPGunreserved: ABORT_P { $$ = make_str("abort"); }
|
||||||
| OWNER { $$ = make_str("owner"); }
|
| OWNER { $$ = make_str("owner"); }
|
||||||
| PARTIAL { $$ = make_str("partial"); }
|
| PARTIAL { $$ = make_str("partial"); }
|
||||||
| PASSWORD { $$ = make_str("password"); }
|
| PASSWORD { $$ = make_str("password"); }
|
||||||
| PATH_P { $$ = make_str("path"); }
|
|
||||||
| PENDANT { $$ = make_str("pendant"); }
|
|
||||||
| PREPARE { $$ = make_str("prepare"); }
|
| PREPARE { $$ = make_str("prepare"); }
|
||||||
| PRESERVE { $$ = make_str("preserver"); }
|
| PRESERVE { $$ = make_str("preserver"); }
|
||||||
| PRIOR { $$ = make_str("prior"); }
|
| PRIOR { $$ = make_str("prior"); }
|
||||||
|
@ -6021,7 +6023,6 @@ ECPGunreserved: ABORT_P { $$ = make_str("abort"); }
|
||||||
| VALID { $$ = make_str("valid"); }
|
| VALID { $$ = make_str("valid"); }
|
||||||
| VALUES { $$ = make_str("values"); }
|
| VALUES { $$ = make_str("values"); }
|
||||||
| VARYING { $$ = make_str("varying"); }
|
| VARYING { $$ = make_str("varying"); }
|
||||||
| VERSION { $$ = make_str("version"); }
|
|
||||||
| VIEW { $$ = make_str("view"); }
|
| VIEW { $$ = make_str("view"); }
|
||||||
| WITH { $$ = make_str("with"); }
|
| WITH { $$ = make_str("with"); }
|
||||||
| WITHOUT { $$ = make_str("without"); }
|
| WITHOUT { $$ = make_str("without"); }
|
||||||
|
|
|
@ -135,6 +135,7 @@ struct _defines
|
||||||
char *old;
|
char *old;
|
||||||
char *new;
|
char *new;
|
||||||
int pertinent;
|
int pertinent;
|
||||||
|
void *used;
|
||||||
struct _defines *next;
|
struct _defines *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue