dirty fix for flex problem
parent
ff5d7728e6
commit
d713192ca8
|
@ -0,0 +1,4 @@
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.a
|
||||||
|
*.so.*
|
|
@ -53,6 +53,8 @@ endif
|
||||||
$(srcdir)/pgc.c: pgc.l
|
$(srcdir)/pgc.c: pgc.l
|
||||||
ifdef FLEX
|
ifdef FLEX
|
||||||
$(FLEX) $(FLEXFLAGS) -o'$@' $<
|
$(FLEX) $(FLEXFLAGS) -o'$@' $<
|
||||||
|
sed -i 's/int yylineno/yy_size_t yylineno/g' pgc.c
|
||||||
|
sed -i 's/int yyleng/yy_size_t yyleng/g' pgc.c
|
||||||
else
|
else
|
||||||
@$(missing) flex $< $@
|
@$(missing) flex $< $@
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -36,9 +36,12 @@ extern char *yytext,
|
||||||
*token_start;
|
*token_start;
|
||||||
|
|
||||||
#ifdef YYDEBUG
|
#ifdef YYDEBUG
|
||||||
extern int yydebug;
|
extern int yydebug;
|
||||||
#endif
|
#endif
|
||||||
extern int yylineno,
|
#ifndef yy_size_t
|
||||||
|
typedef size_t yy_size_t;
|
||||||
|
#endif
|
||||||
|
extern yy_size_t yylineno,
|
||||||
yyleng;
|
yyleng;
|
||||||
extern FILE *yyin,
|
extern FILE *yyin,
|
||||||
*yyout;
|
*yyout;
|
||||||
|
|
|
@ -97,7 +97,7 @@ hashline_number(void)
|
||||||
{
|
{
|
||||||
char *line = mm_alloc(strlen("\n#line %d \"%s\"\n") + sizeof(int) * CHAR_BIT * 10 / 3 + strlen(input_filename));
|
char *line = mm_alloc(strlen("\n#line %d \"%s\"\n") + sizeof(int) * CHAR_BIT * 10 / 3 + strlen(input_filename));
|
||||||
|
|
||||||
sprintf(line, "\n#line %d \"%s\"\n", yylineno, input_filename);
|
sprintf(line, "\n#line %lu \"%s\"\n", yylineno, input_filename);
|
||||||
|
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
@ -195,8 +195,8 @@ output_escaped_str(char *str, bool quoted)
|
||||||
else if (str[i] == '\\')
|
else if (str[i] == '\\')
|
||||||
{
|
{
|
||||||
int j = i;
|
int j = i;
|
||||||
|
|
||||||
/* check whether this is a continuation line
|
/* check whether this is a continuation line
|
||||||
* if it is, do not output anything because newlines are escaped anyway */
|
* if it is, do not output anything because newlines are escaped anyway */
|
||||||
|
|
||||||
/* accept blanks after the '\' as some other compilers do too */
|
/* accept blanks after the '\' as some other compilers do too */
|
||||||
|
|
|
@ -52,8 +52,8 @@ static bool isinformixdefine(void);
|
||||||
char *token_start;
|
char *token_start;
|
||||||
int state_before;
|
int state_before;
|
||||||
|
|
||||||
struct _yy_buffer
|
struct _yy_buffer
|
||||||
{
|
{
|
||||||
YY_BUFFER_STATE buffer;
|
YY_BUFFER_STATE buffer;
|
||||||
long lineno;
|
long lineno;
|
||||||
char *filename;
|
char *filename;
|
||||||
|
@ -65,7 +65,7 @@ static char *old;
|
||||||
#define MAX_NESTED_IF 128
|
#define MAX_NESTED_IF 128
|
||||||
static short preproc_tos;
|
static short preproc_tos;
|
||||||
static short ifcond;
|
static short ifcond;
|
||||||
static struct _if_value
|
static struct _if_value
|
||||||
{
|
{
|
||||||
short condition;
|
short condition;
|
||||||
short else_branch;
|
short else_branch;
|
||||||
|
@ -80,7 +80,7 @@ static struct _if_value
|
||||||
|
|
||||||
%option yylineno
|
%option yylineno
|
||||||
|
|
||||||
%x C SQL incl def def_ident undef
|
%x C SQL incl def def_ident undef
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OK, here is a short description of lex/flex rules behavior.
|
* OK, here is a short description of lex/flex rules behavior.
|
||||||
|
@ -473,7 +473,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
/* throw back all but the initial "$" */
|
/* throw back all but the initial "$" */
|
||||||
yyless(1);
|
yyless(1);
|
||||||
/* and treat it as {other} */
|
/* and treat it as {other} */
|
||||||
return yytext[0];
|
return yytext[0];
|
||||||
}
|
}
|
||||||
<SQL>{dolqdelim} {
|
<SQL>{dolqdelim} {
|
||||||
token_start = yytext;
|
token_start = yytext;
|
||||||
|
@ -675,7 +675,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
}
|
}
|
||||||
<SQL>{identifier} {
|
<SQL>{identifier} {
|
||||||
const ScanKeyword *keyword;
|
const ScanKeyword *keyword;
|
||||||
|
|
||||||
if (!isdefine())
|
if (!isdefine())
|
||||||
{
|
{
|
||||||
/* Is it an SQL/ECPG keyword? */
|
/* Is it an SQL/ECPG keyword? */
|
||||||
|
@ -702,7 +702,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
}
|
}
|
||||||
<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} {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (INFORMIX_MODE)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
|
@ -743,7 +743,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
}
|
}
|
||||||
<C>{identifier} {
|
<C>{identifier} {
|
||||||
const ScanKeyword *keyword;
|
const ScanKeyword *keyword;
|
||||||
|
|
||||||
/* Informix uses SQL defines only in SQL space */
|
/* Informix uses SQL defines only in SQL space */
|
||||||
/* however, some defines have to be taken care of for compatibility */
|
/* however, some defines have to be taken care of for compatibility */
|
||||||
if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine())
|
if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine())
|
||||||
|
@ -854,7 +854,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
yyterminate();
|
yyterminate();
|
||||||
}
|
}
|
||||||
<C>{exec_sql}{include}{space}* { BEGIN(incl); }
|
<C>{exec_sql}{include}{space}* { BEGIN(incl); }
|
||||||
<C>{informix_special}{include}{space}* {
|
<C>{informix_special}{include}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (INFORMIX_MODE)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
|
@ -867,7 +867,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<C,xskip>{exec_sql}{ifdef}{space}* { ifcond = TRUE; BEGIN(xcond); }
|
<C,xskip>{exec_sql}{ifdef}{space}* { ifcond = TRUE; BEGIN(xcond); }
|
||||||
<C,xskip>{informix_special}{ifdef}{space}* {
|
<C,xskip>{informix_special}{ifdef}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (INFORMIX_MODE)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
|
@ -881,7 +881,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<C,xskip>{exec_sql}{ifndef}{space}* { ifcond = FALSE; BEGIN(xcond); }
|
<C,xskip>{exec_sql}{ifndef}{space}* { ifcond = FALSE; BEGIN(xcond); }
|
||||||
<C,xskip>{informix_special}{ifndef}{space}* {
|
<C,xskip>{informix_special}{ifndef}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (INFORMIX_MODE)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
|
@ -905,7 +905,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
|
|
||||||
ifcond = TRUE; BEGIN(xcond);
|
ifcond = TRUE; BEGIN(xcond);
|
||||||
}
|
}
|
||||||
<C,xskip>{informix_special}{elif}{space}* {
|
<C,xskip>{informix_special}{elif}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (INFORMIX_MODE)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
|
@ -1004,7 +1004,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
<xcond>{identifier}{space}*";" {
|
<xcond>{identifier}{space}*";" {
|
||||||
if (preproc_tos >= MAX_NESTED_IF-1)
|
if (preproc_tos >= MAX_NESTED_IF-1)
|
||||||
mmerror(PARSE_ERROR, ET_FATAL, "Too many nested 'EXEC SQL IFDEF' conditions");
|
mmerror(PARSE_ERROR, ET_FATAL, "Too many nested 'EXEC SQL IFDEF' conditions");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct _defines *defptr;
|
struct _defines *defptr;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -1047,7 +1047,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
<def_ident>{other}|\n {
|
<def_ident>{other}|\n {
|
||||||
mmerror(PARSE_ERROR, ET_FATAL, "Missing identifier in 'EXEC SQL DEFINE' command");
|
mmerror(PARSE_ERROR, ET_FATAL, "Missing identifier in 'EXEC SQL DEFINE' command");
|
||||||
yyterminate();
|
yyterminate();
|
||||||
}
|
}
|
||||||
<def>{space}*";" {
|
<def>{space}*";" {
|
||||||
struct _defines *ptr, *this;
|
struct _defines *ptr, *this;
|
||||||
|
|
||||||
|
@ -1085,7 +1085,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
<<EOF>> {
|
<<EOF>> {
|
||||||
if (yy_buffer == NULL)
|
if (yy_buffer == NULL)
|
||||||
{
|
{
|
||||||
if ( preproc_tos > 0 )
|
if ( preproc_tos > 0 )
|
||||||
{
|
{
|
||||||
preproc_tos = 0;
|
preproc_tos = 0;
|
||||||
mmerror(PARSE_ERROR, ET_FATAL, "Missing 'EXEC SQL ENDIF;'");
|
mmerror(PARSE_ERROR, ET_FATAL, "Missing 'EXEC SQL ENDIF;'");
|
||||||
|
@ -1104,7 +1104,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
ptr->used = NULL;
|
ptr->used = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yyin != NULL)
|
if (yyin != NULL)
|
||||||
fclose(yyin);
|
fclose(yyin);
|
||||||
|
|
||||||
|
@ -1124,7 +1124,7 @@ cppline {space}*#(.*\\{space})*.*{newline}
|
||||||
|
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
output_line_number();
|
output_line_number();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<INITIAL>{other}|\n { mmerror(PARSE_ERROR, ET_FATAL, "Internal error: unreachable state, please inform pgsql-bugs@postgresql.org"); }
|
<INITIAL>{other}|\n { mmerror(PARSE_ERROR, ET_FATAL, "Internal error: unreachable state, please inform pgsql-bugs@postgresql.org"); }
|
||||||
|
@ -1157,7 +1157,7 @@ addlit(char *ytext, int yleng)
|
||||||
/* enlarge buffer if needed */
|
/* enlarge buffer if needed */
|
||||||
if ((literallen+yleng) >= literalalloc)
|
if ((literallen+yleng) >= literalalloc)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
literalalloc *= 2;
|
literalalloc *= 2;
|
||||||
while ((literallen+yleng) >= literalalloc);
|
while ((literallen+yleng) >= literalalloc);
|
||||||
literalbuf = (char *) realloc(literalbuf, literalalloc);
|
literalbuf = (char *) realloc(literalbuf, literalalloc);
|
||||||
|
@ -1203,7 +1203,7 @@ parse_include(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* skip the ";" if there is one and trailing whitespace. Note that
|
* skip the ";" if there is one and trailing whitespace. Note that
|
||||||
* yytext contains at least one non-space character plus the ";"
|
* yytext contains at least one non-space character plus the ";"
|
||||||
*/
|
*/
|
||||||
for (i = strlen(yytext)-2;
|
for (i = strlen(yytext)-2;
|
||||||
i > 0 && ecpg_isspace(yytext[i]);
|
i > 0 && ecpg_isspace(yytext[i]);
|
||||||
|
@ -1214,7 +1214,7 @@ parse_include(void)
|
||||||
i--;
|
i--;
|
||||||
|
|
||||||
yytext[i+1] = '\0';
|
yytext[i+1] = '\0';
|
||||||
|
|
||||||
yyin = NULL;
|
yyin = NULL;
|
||||||
|
|
||||||
/* If file name is enclosed in '"' remove these and look only in '.' */
|
/* If file name is enclosed in '"' remove these and look only in '.' */
|
||||||
|
@ -1224,7 +1224,7 @@ parse_include(void)
|
||||||
{
|
{
|
||||||
yytext[i] = '\0';
|
yytext[i] = '\0';
|
||||||
memmove(yytext, yytext+1, strlen(yytext));
|
memmove(yytext, yytext+1, strlen(yytext));
|
||||||
|
|
||||||
strncpy(inc_file, yytext, sizeof(inc_file));
|
strncpy(inc_file, yytext, sizeof(inc_file));
|
||||||
yyin = fopen(inc_file, "r");
|
yyin = fopen(inc_file, "r");
|
||||||
if (!yyin)
|
if (!yyin)
|
||||||
|
@ -1235,7 +1235,7 @@ parse_include(void)
|
||||||
yyin = fopen(inc_file, "r");
|
yyin = fopen(inc_file, "r");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1244,12 +1244,12 @@ parse_include(void)
|
||||||
yytext[i] = '\0';
|
yytext[i] = '\0';
|
||||||
memmove(yytext, yytext+1, strlen(yytext));
|
memmove(yytext, yytext+1, strlen(yytext));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ip = include_paths; yyin == NULL && ip != NULL; ip = ip->next)
|
for (ip = include_paths; yyin == NULL && ip != NULL; ip = ip->next)
|
||||||
{
|
{
|
||||||
if (strlen(ip->path) + strlen(yytext) + 3 > MAXPGPATH)
|
if (strlen(ip->path) + strlen(yytext) + 3 > MAXPGPATH)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error: Path %s/%s is too long in line %d, skipping.\n", ip->path, yytext, yylineno);
|
fprintf(stderr, "Error: Path %s/%s is too long in line %lu, skipping.\n", ip->path, yytext, yylineno);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
snprintf (inc_file, sizeof(inc_file), "%s/%s", ip->path, yytext);
|
snprintf (inc_file, sizeof(inc_file), "%s/%s", ip->path, yytext);
|
||||||
|
@ -1265,7 +1265,7 @@ parse_include(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!yyin)
|
if (!yyin)
|
||||||
mmerror(NO_INCLUDE_FILE, ET_FATAL, "Cannot open include file %s in line %d\n", yytext, yylineno);
|
mmerror(NO_INCLUDE_FILE, ET_FATAL, "Cannot open include file %s in line %lu\n", yytext, yylineno);
|
||||||
|
|
||||||
input_filename = mm_strdup(inc_file);
|
input_filename = mm_strdup(inc_file);
|
||||||
yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE ));
|
yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE ));
|
||||||
|
|
|
@ -60,7 +60,7 @@ mmerror(int error_code, enum errortype type, char * error, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
fprintf(stderr, "%s:%d: ", input_filename, yylineno);
|
fprintf(stderr, "%s:%lu: ", input_filename, yylineno);
|
||||||
|
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
|
@ -423,7 +423,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
|
||||||
CACHE CALLED CASCADE CASCADED CASE CAST CHAIN CHAR_P
|
CACHE CALLED CASCADE CASCADED CASE CAST CHAIN CHAR_P
|
||||||
CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
|
CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
|
||||||
CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT
|
CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT
|
||||||
COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS
|
COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS
|
||||||
CONTENT_P CONVERSION_P COPY COST CREATE CREATEDB
|
CONTENT_P CONVERSION_P COPY COST CREATE CREATEDB
|
||||||
CREATEROLE CREATEUSER CROSS CSV CURRENT_P CURRENT_DATE CURRENT_ROLE
|
CREATEROLE CREATEUSER CROSS CSV CURRENT_P CURRENT_DATE CURRENT_ROLE
|
||||||
CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
|
CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
|
||||||
|
@ -480,7 +480,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
|
||||||
STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P
|
STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P
|
||||||
SYMMETRIC SYSID SYSTEM_P
|
SYMMETRIC SYSID SYSTEM_P
|
||||||
|
|
||||||
TABLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP TO
|
TABLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP TO
|
||||||
TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P TRUNCATE TRUSTED TYPE_P
|
TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P TRUNCATE TRUSTED TYPE_P
|
||||||
|
|
||||||
UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL
|
UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL
|
||||||
|
@ -586,7 +586,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
|
||||||
%type <str> RemoveOperStmt RenameStmt all_Op opt_trusted opt_lancompiler
|
%type <str> RemoveOperStmt RenameStmt all_Op opt_trusted opt_lancompiler
|
||||||
%type <str> VariableSetStmt var_value zone_value VariableShowStmt
|
%type <str> VariableSetStmt var_value zone_value VariableShowStmt
|
||||||
%type <str> VariableResetStmt AlterTableStmt from_list overlay_list
|
%type <str> VariableResetStmt AlterTableStmt from_list overlay_list
|
||||||
%type <str> relation_name OptTableSpace LockStmt opt_lock
|
%type <str> relation_name OptTableSpace LockStmt opt_lock
|
||||||
%type <str> CreateUserStmt AlterUserStmt CreateSeqStmt OptSeqList
|
%type <str> CreateUserStmt AlterUserStmt CreateSeqStmt OptSeqList
|
||||||
%type <str> OptSeqElem TriggerForSpec TriggerForOpt TriggerForType
|
%type <str> OptSeqElem TriggerForSpec TriggerForOpt TriggerForType
|
||||||
%type <str> DropTrigStmt TriggerOneEvent TriggerEvents RuleActionStmt
|
%type <str> DropTrigStmt TriggerOneEvent TriggerEvents RuleActionStmt
|
||||||
|
@ -616,7 +616,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
|
||||||
%type <str> OptSchemaName OptSchemaEltList schema_stmt opt_drop_behavior
|
%type <str> OptSchemaName OptSchemaEltList schema_stmt opt_drop_behavior
|
||||||
%type <str> handler_name any_name_list any_name opt_as insert_column_list
|
%type <str> handler_name any_name_list any_name opt_as insert_column_list
|
||||||
%type <str> columnref values_clause AllConstVar prep_type_clause ExecuteStmt
|
%type <str> columnref values_clause AllConstVar prep_type_clause ExecuteStmt
|
||||||
%type <str> insert_column_item DropRuleStmt ctext_expr execute_param_clause
|
%type <str> insert_column_item DropRuleStmt ctext_expr execute_param_clause
|
||||||
%type <str> createfunc_opt_item set_rest alter_rel_cmd
|
%type <str> createfunc_opt_item set_rest alter_rel_cmd
|
||||||
%type <str> CreateFunctionStmt createfunc_opt_list func_table
|
%type <str> CreateFunctionStmt createfunc_opt_list func_table
|
||||||
%type <str> DropUserStmt copy_from copy_opt_list copy_opt_item
|
%type <str> DropUserStmt copy_from copy_opt_list copy_opt_item
|
||||||
|
@ -647,7 +647,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
|
||||||
%type <str> ECPGGetDescriptorHeader ECPGColLabel SetResetClause AlterUserSetStmt
|
%type <str> ECPGGetDescriptorHeader ECPGColLabel SetResetClause AlterUserSetStmt
|
||||||
%type <str> reserved_keyword unreserved_keyword ecpg_interval opt_ecpg_using
|
%type <str> reserved_keyword unreserved_keyword ecpg_interval opt_ecpg_using
|
||||||
%type <str> col_name_keyword precision opt_scale ECPGExecuteImmediateStmt
|
%type <str> col_name_keyword precision opt_scale ECPGExecuteImmediateStmt
|
||||||
%type <str> ECPGTypeName using_list ECPGColLabelCommon UsingConst
|
%type <str> ECPGTypeName using_list ECPGColLabelCommon UsingConst
|
||||||
%type <str> using_descriptor into_descriptor opt_nulls_order opt_asc_desc
|
%type <str> using_descriptor into_descriptor opt_nulls_order opt_asc_desc
|
||||||
%type <str> prepared_name struct_union_type_with_symbol OptConsTableSpace
|
%type <str> prepared_name struct_union_type_with_symbol OptConsTableSpace
|
||||||
%type <str> ECPGunreserved ECPGunreserved_interval cvariable opt_bit_field
|
%type <str> ECPGunreserved ECPGunreserved_interval cvariable opt_bit_field
|
||||||
|
@ -665,7 +665,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
|
||||||
%type <str> opclass_drop_list opclass_drop DropOpFamilyStmt opt_opfamily
|
%type <str> opclass_drop_list opclass_drop DropOpFamilyStmt opt_opfamily
|
||||||
%type <str> CreateOpFamilyStmt AlterOpFamilyStmt create_as_target
|
%type <str> CreateOpFamilyStmt AlterOpFamilyStmt create_as_target
|
||||||
%type <str> xml_attributes xml_attribute_list document_or_content xml_whitespace_option
|
%type <str> xml_attributes xml_attribute_list document_or_content xml_whitespace_option
|
||||||
%type <str> opt_xml_root_standalone xml_root_version xml_attribute_el
|
%type <str> opt_xml_root_standalone xml_root_version xml_attribute_el
|
||||||
%type <str> where_or_current_clause AlterTSConfigurationStmt AlterTSDictionaryStmt
|
%type <str> where_or_current_clause AlterTSConfigurationStmt AlterTSDictionaryStmt
|
||||||
|
|
||||||
%type <struct_union> s_struct_union_symbol
|
%type <struct_union> s_struct_union_symbol
|
||||||
|
@ -787,7 +787,7 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
{
|
{
|
||||||
if (connection)
|
if (connection)
|
||||||
mmerror(PARSE_ERROR, ET_ERROR, "no at option for deallocate statement.\n");
|
mmerror(PARSE_ERROR, ET_ERROR, "no at option for deallocate statement.\n");
|
||||||
|
|
||||||
output_deallocate_prepare_statement($1);
|
output_deallocate_prepare_statement($1);
|
||||||
}
|
}
|
||||||
| DeclareCursorStmt { output_simple_statement($1); }
|
| DeclareCursorStmt { output_simple_statement($1); }
|
||||||
|
@ -819,15 +819,15 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
| LoadStmt { output_statement($1, 0, ECPGst_normal); }
|
| LoadStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
| LockStmt { output_statement($1, 0, ECPGst_normal); }
|
| LockStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
| NotifyStmt { output_statement($1, 0, ECPGst_normal); }
|
| NotifyStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
| PrepareStmt {
|
| PrepareStmt {
|
||||||
if ($1.type == NULL || strlen($1.type) == 0) /* use PQprepare without type parameters */
|
if ($1.type == NULL || strlen($1.type) == 0) /* use PQprepare without type parameters */
|
||||||
output_prepare_statement($1.name, $1.stmt);
|
output_prepare_statement($1.name, $1.stmt);
|
||||||
else /* use PQexec and let backend do its stuff */
|
else /* use PQexec and let backend do its stuff */
|
||||||
{
|
{
|
||||||
char *txt = cat_str(5, make_str("prepare"), $1.name, $1.type, make_str("as"), $1.stmt);
|
char *txt = cat_str(5, make_str("prepare"), $1.name, $1.type, make_str("as"), $1.stmt);
|
||||||
output_statement(txt, 0, ECPGst_normal);
|
output_statement(txt, 0, ECPGst_normal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| ReassignOwnedStmt { output_statement($1, 0, ECPGst_normal); }
|
| ReassignOwnedStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
| ReindexStmt { output_statement($1, 0, ECPGst_normal); }
|
| ReindexStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
| RemoveAggrStmt { output_statement($1, 0, ECPGst_normal); }
|
| RemoveAggrStmt { output_statement($1, 0, ECPGst_normal); }
|
||||||
|
@ -1500,14 +1500,14 @@ CopyStmt: COPY opt_binary qualified_name opt_oids copy_from
|
||||||
mmerror(PARSE_ERROR, ET_ERROR, "copy from stdout not possible.\n");
|
mmerror(PARSE_ERROR, ET_ERROR, "copy from stdout not possible.\n");
|
||||||
else if (strcmp($5, "from") == 0 && strcmp($6, "stdin") == 0)
|
else if (strcmp($5, "from") == 0 && strcmp($6, "stdin") == 0)
|
||||||
mmerror(PARSE_ERROR, ET_WARNING, "copy from stdin not implemented.\n");
|
mmerror(PARSE_ERROR, ET_WARNING, "copy from stdin not implemented.\n");
|
||||||
|
|
||||||
$$ = cat_str(9, make_str("copy"), $2, $3, $4, $5, $6, $7, $8, $9);
|
$$ = cat_str(9, make_str("copy"), $2, $3, $4, $5, $6, $7, $8, $9);
|
||||||
}
|
}
|
||||||
| COPY select_with_parens TO copy_file_name opt_with copy_opt_list
|
| COPY select_with_parens TO copy_file_name opt_with copy_opt_list
|
||||||
{
|
{
|
||||||
if (strcmp($4, "stdin") == 0)
|
if (strcmp($4, "stdin") == 0)
|
||||||
mmerror(PARSE_ERROR, ET_ERROR, "copy to stdin not possible.\n");
|
mmerror(PARSE_ERROR, ET_ERROR, "copy to stdin not possible.\n");
|
||||||
|
|
||||||
$$ = cat_str(6, make_str("copy"), $2, make_str("to"), $4, $5, $6);
|
$$ = cat_str(6, make_str("copy"), $2, make_str("to"), $4, $5, $6);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
@ -2573,12 +2573,12 @@ opt_class: any_name { $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
opt_asc_desc: ASC { $$ = make_str("asc"); }
|
opt_asc_desc: ASC { $$ = make_str("asc"); }
|
||||||
| DESC { $$ = make_str("desc"); }
|
| DESC { $$ = make_str("desc"); }
|
||||||
| /*EMPTY*/ { $$ = EMPTY; }
|
| /*EMPTY*/ { $$ = EMPTY; }
|
||||||
;
|
;
|
||||||
|
|
||||||
opt_nulls_order: NULLS_FIRST { $$ = make_str("nulls first"); }
|
opt_nulls_order: NULLS_FIRST { $$ = make_str("nulls first"); }
|
||||||
| NULLS_LAST { $$ = make_str("nulls last"); }
|
| NULLS_LAST { $$ = make_str("nulls last"); }
|
||||||
| /*EMPTY*/ { $$ = EMPTY; }
|
| /*EMPTY*/ { $$ = EMPTY; }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -3059,12 +3059,12 @@ ViewStmt: CREATE OptTemp VIEW qualified_name opt_column_list AS SelectStmt opt_
|
||||||
*/
|
*/
|
||||||
opt_check_option:
|
opt_check_option:
|
||||||
WITH_CHECK OPTION
|
WITH_CHECK OPTION
|
||||||
{
|
{
|
||||||
mmerror(PARSE_ERROR, ET_ERROR, "WITH CHECK OPTION not implemented");
|
mmerror(PARSE_ERROR, ET_ERROR, "WITH CHECK OPTION not implemented");
|
||||||
$$ = EMPTY;
|
$$ = EMPTY;
|
||||||
}
|
}
|
||||||
| WITH_CASCADED CHECK OPTION
|
| WITH_CASCADED CHECK OPTION
|
||||||
{
|
{
|
||||||
mmerror(PARSE_ERROR, ET_ERROR, "WITH CHECK OPTION not implemented");
|
mmerror(PARSE_ERROR, ET_ERROR, "WITH CHECK OPTION not implemented");
|
||||||
$$ = EMPTY;
|
$$ = EMPTY;
|
||||||
}
|
}
|
||||||
|
@ -3074,7 +3074,7 @@ opt_check_option:
|
||||||
$$ = EMPTY;
|
$$ = EMPTY;
|
||||||
}
|
}
|
||||||
| /* EMPTY */
|
| /* EMPTY */
|
||||||
{ $$ = EMPTY; }
|
{ $$ = EMPTY; }
|
||||||
;
|
;
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -3377,7 +3377,7 @@ InsertStmt: INSERT INTO qualified_name insert_rest returning_clause
|
||||||
{ $$ = cat_str(4, make_str("insert into"), $3, $4, $5); }
|
{ $$ = cat_str(4, make_str("insert into"), $3, $4, $5); }
|
||||||
;
|
;
|
||||||
|
|
||||||
insert_rest:
|
insert_rest:
|
||||||
SelectStmt
|
SelectStmt
|
||||||
{ $$ = $1; }
|
{ $$ = $1; }
|
||||||
| '(' insert_column_list ')' SelectStmt
|
| '(' insert_column_list ')' SelectStmt
|
||||||
|
@ -3700,7 +3700,7 @@ for_locking_clause:
|
||||||
| FOR READ ONLY { $$ = make_str("for read only");}
|
| FOR READ ONLY { $$ = make_str("for read only");}
|
||||||
;
|
;
|
||||||
|
|
||||||
opt_for_locking_clause:
|
opt_for_locking_clause:
|
||||||
for_locking_clause { $$ = $1; }
|
for_locking_clause { $$ = $1; }
|
||||||
| /* EMPTY */ { $$ = EMPTY; }
|
| /* EMPTY */ { $$ = EMPTY; }
|
||||||
;
|
;
|
||||||
|
@ -3959,7 +3959,7 @@ GenericType: type_function_name opt_type_modifiers { $$ = cat2_str($1, $2); }
|
||||||
opt_type_modifiers: '(' expr_list ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
|
opt_type_modifiers: '(' expr_list ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
|
||||||
| /* EMPTY */ { $$ = EMPTY; }
|
| /* EMPTY */ { $$ = EMPTY; }
|
||||||
;
|
;
|
||||||
|
|
||||||
/* SQL92 numeric data types
|
/* SQL92 numeric data types
|
||||||
* Check FLOAT() precision limits assuming IEEE floating types.
|
* Check FLOAT() precision limits assuming IEEE floating types.
|
||||||
* Provide real DECIMAL() and NUMERIC() implementations now - Jan 1998-12-30
|
* Provide real DECIMAL() and NUMERIC() implementations now - Jan 1998-12-30
|
||||||
|
@ -4252,7 +4252,7 @@ a_expr: c_expr
|
||||||
{ $$ = cat_str(4, $1, $2, $3, $4); }
|
{ $$ = cat_str(4, $1, $2, $3, $4); }
|
||||||
| a_expr subquery_Op sub_type '(' a_expr ')' %prec Op
|
| a_expr subquery_Op sub_type '(' a_expr ')' %prec Op
|
||||||
{ $$ = cat_str(6, $1, $2, $3, make_str("("), $5, make_str(")")); }
|
{ $$ = cat_str(6, $1, $2, $3, make_str("("), $5, make_str(")")); }
|
||||||
| UNIQUE select_with_parens
|
| UNIQUE select_with_parens
|
||||||
{ $$ = cat2_str(make_str("unique"), $2); }
|
{ $$ = cat2_str(make_str("unique"), $2); }
|
||||||
| a_expr IS DOCUMENT_P
|
| a_expr IS DOCUMENT_P
|
||||||
{ $$ = cat2_str($1, make_str("is document")); }
|
{ $$ = cat2_str($1, make_str("is document")); }
|
||||||
|
@ -4730,7 +4730,7 @@ update_target_list: '(' inf_col_list ')' '=' '(' inf_val_list ')'
|
||||||
vals = cat_str( 3, vals, ptrv->val, make_str(")") );
|
vals = cat_str( 3, vals, ptrv->val, make_str(")") );
|
||||||
}
|
}
|
||||||
$$ = cat_str( 3, cols, make_str("="), vals );
|
$$ = cat_str( 3, cols, make_str("="), vals );
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
inf_col_list: ColId opt_indirection
|
inf_col_list: ColId opt_indirection
|
||||||
|
@ -4875,7 +4875,7 @@ Sconst: SCONST
|
||||||
}
|
}
|
||||||
| DOLCONST
|
| DOLCONST
|
||||||
{
|
{
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -5009,7 +5009,7 @@ connection_target: opt_database_name opt_server opt_port
|
||||||
/* old style: dbname[@server][:port] */
|
/* old style: dbname[@server][:port] */
|
||||||
if (strlen($2) > 0 && *($2) != '@')
|
if (strlen($2) > 0 && *($2) != '@')
|
||||||
mmerror(PARSE_ERROR, ET_ERROR, "Expected '@', found '%s'", $2);
|
mmerror(PARSE_ERROR, ET_ERROR, "Expected '@', found '%s'", $2);
|
||||||
|
|
||||||
/* C strings need to be handled differently */
|
/* C strings need to be handled differently */
|
||||||
if ($1[0] == '\"')
|
if ($1[0] == '\"')
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
|
@ -5221,7 +5221,7 @@ ECPGCursorStmt: DECLARE name cursor_options CURSOR opt_hold FOR prepared_name
|
||||||
;
|
;
|
||||||
|
|
||||||
ECPGExecuteImmediateStmt: EXECUTE IMMEDIATE execstring
|
ECPGExecuteImmediateStmt: EXECUTE IMMEDIATE execstring
|
||||||
{
|
{
|
||||||
/* execute immediate means prepare the statement and
|
/* execute immediate means prepare the statement and
|
||||||
* immediately execute it */
|
* immediately execute it */
|
||||||
$$ = $3;
|
$$ = $3;
|
||||||
|
@ -5497,7 +5497,7 @@ var_type: simple_type
|
||||||
$$.type_index = this->type->type_index;
|
$$.type_index = this->type->type_index;
|
||||||
if (this->type->type_sizeof && strlen(this->type->type_sizeof) != 0)
|
if (this->type->type_sizeof && strlen(this->type->type_sizeof) != 0)
|
||||||
$$.type_sizeof = this->type->type_sizeof;
|
$$.type_sizeof = this->type->type_sizeof;
|
||||||
else
|
else
|
||||||
$$.type_sizeof = cat_str(3, make_str("sizeof("), mm_strdup(this->name), make_str(")"));
|
$$.type_sizeof = cat_str(3, make_str("sizeof("), mm_strdup(this->name), make_str(")"));
|
||||||
|
|
||||||
struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
|
struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
|
||||||
|
@ -5728,7 +5728,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
|
||||||
type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, yylineno);
|
type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, yylineno);
|
||||||
else
|
else
|
||||||
type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, yylineno), dimension);
|
type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, yylineno), dimension);
|
||||||
|
|
||||||
if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1)
|
if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1)
|
||||||
*dim = '\0';
|
*dim = '\0';
|
||||||
else
|
else
|
||||||
|
@ -5739,7 +5739,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize
|
||||||
|
|
||||||
/* make sure varchar struct name is unique by adding linenumer of its definition */
|
/* make sure varchar struct name is unique by adding linenumer of its definition */
|
||||||
vcn = (char *) mm_alloc(strlen($2) + sizeof(int) * CHAR_BIT * 10 / 3);
|
vcn = (char *) mm_alloc(strlen($2) + sizeof(int) * CHAR_BIT * 10 / 3);
|
||||||
sprintf(vcn, "%s_%d", $2, yylineno);
|
sprintf(vcn, "%s_%lu", $2, yylineno);
|
||||||
if (strcmp(dimension, "0") == 0)
|
if (strcmp(dimension, "0") == 0)
|
||||||
$$ = cat_str(7, make2_str(make_str(" struct varchar_"), vcn), make_str(" { int len; char arr["), mm_strdup(length), make_str("]; } *"), mm_strdup($2), $4, $5);
|
$$ = cat_str(7, make2_str(make_str(" struct varchar_"), vcn), make_str(" { int len; char arr["), mm_strdup(length), make_str("]; } *"), mm_strdup($2), $4, $5);
|
||||||
else
|
else
|
||||||
|
@ -5839,7 +5839,7 @@ execstring: char_variable
|
||||||
{ $$ = make3_str(make_str("\""), $1, make_str("\"")); }
|
{ $$ = make3_str(make_str("\""), $1, make_str("\"")); }
|
||||||
;
|
;
|
||||||
|
|
||||||
prepared_name: name {
|
prepared_name: name {
|
||||||
if ($1[0] == '\"' && $1[strlen($1)-1] == '\"') /* already quoted? */
|
if ($1[0] == '\"' && $1[strlen($1)-1] == '\"') /* already quoted? */
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
else /* not quoted => convert to lowercase */
|
else /* not quoted => convert to lowercase */
|
||||||
|
|
Loading…
Reference in New Issue