Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
890707a5
Commit
890707a5
authored
Feb 03, 2006
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve tab whitespace in file.
Add comment about $$ and '' SCONST strings.
parent
46dfa5ec
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
142 additions
and
141 deletions
+142
-141
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/preproc/preproc.y
+142
-141
No files found.
src/interfaces/ecpg/preproc/preproc.y
View file @
890707a5
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.31
7 2006/02/01 22:16:36
momjian Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.31
8 2006/02/03 05:38:35
momjian Exp $ */
/* Copyright comment */
/* Copyright comment */
%{
%{
...
@@ -54,9 +54,9 @@ void
...
@@ -54,9 +54,9 @@ void
mmerror(int error_code, enum errortype type, char * error, ...)
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:%d: ", input_filename, yylineno);
switch(type)
switch(type)
{
{
case ET_WARNING:
case ET_WARNING:
...
@@ -71,9 +71,9 @@ mmerror(int error_code, enum errortype type, char * error, ...)
...
@@ -71,9 +71,9 @@ mmerror(int error_code, enum errortype type, char * error, ...)
va_start(ap, error);
va_start(ap, error);
vfprintf(stderr, error, ap);
vfprintf(stderr, error, ap);
va_end(ap);
va_end(ap);
fprintf(stderr, "\n");
fprintf(stderr, "\n");
switch(type)
switch(type)
{
{
case ET_WARNING:
case ET_WARNING:
...
@@ -176,11 +176,11 @@ create_questionmarks(char *name, bool array)
...
@@ -176,11 +176,11 @@ create_questionmarks(char *name, bool array)
int count;
int count;
char *result = EMPTY;
char *result = EMPTY;
/* In case we have a struct, we have to print as many "?" as there are attributes in the struct
/* In case we have a struct, we have to print as many "?" as there are attributes in the struct
* An array is only allowed together with an element argument
* An array is only allowed together with an element argument
* This is essantially only used for inserts, but using a struct as input parameter is an error anywhere else
* This is essantially only used for inserts, but using a struct as input parameter is an error anywhere else
* so we don't have to worry here. */
* so we don't have to worry here. */
if (p->type->type == ECPGt_struct || (array && p->type->type == ECPGt_array && p->type->u.element->type == ECPGt_struct))
if (p->type->type == ECPGt_struct || (array && p->type->type == ECPGt_array && p->type->u.element->type == ECPGt_struct))
{
{
struct ECPGstruct_member *m;
struct ECPGstruct_member *m;
...
@@ -209,14 +209,14 @@ adjust_informix(struct arguments *list)
...
@@ -209,14 +209,14 @@ adjust_informix(struct arguments *list)
{
{
/* Informix accepts DECLARE with variables that are out of scope when OPEN is called.
/* Informix accepts DECLARE with variables that are out of scope when OPEN is called.
* for instance you can declare variables in a function, and then subsequently use them
* for instance you can declare variables in a function, and then subsequently use them
* {
* {
* declare_vars();
* declare_vars();
* exec sql ... which uses vars declared in the above function
* exec sql ... which uses vars declared in the above function
*
*
* This breaks standard and leads to some very dangerous programming.
* This breaks standard and leads to some very dangerous programming.
* Since they do, we have to work around and accept their syntax as well.
* Since they do, we have to work around and accept their syntax as well.
* But we will do so ONLY in Informix mode.
* But we will do so ONLY in Informix mode.
* We have to change the variables to our own struct and just store the pointer instead of the variable
* We have to change the variables to our own struct and just store the pointer instead of the variable
*/
*/
struct arguments *ptr;
struct arguments *ptr;
...
@@ -226,11 +226,11 @@ adjust_informix(struct arguments *list)
...
@@ -226,11 +226,11 @@ adjust_informix(struct arguments *list)
{
{
char temp[20]; /* this should be sufficient unless you have 8 byte integers */
char temp[20]; /* this should be sufficient unless you have 8 byte integers */
char *original_var;
char *original_var;
/* change variable name to "ECPG_informix_get_var(<counter>)" */
/* change variable name to "ECPG_informix_get_var(<counter>)" */
original_var = ptr->variable->name;
original_var = ptr->variable->name;
sprintf(temp, "%d))", ecpg_informix_var);
sprintf(temp, "%d))", ecpg_informix_var);
if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char) && atoi(ptr->variable->type->size) > 1)
if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char) && atoi(ptr->variable->type->size) > 1)
{
{
ptr->variable = new_variable(cat_str(4, make_str("("), mm_strdup(ECPGtype_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1")), ptr->variable->type->size), 0);
ptr->variable = new_variable(cat_str(4, make_str("("), mm_strdup(ECPGtype_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1")), ptr->variable->type->size), 0);
...
@@ -246,17 +246,17 @@ adjust_informix(struct arguments *list)
...
@@ -246,17 +246,17 @@ adjust_informix(struct arguments *list)
ptr->variable = new_variable(cat_str(4, make_str("*("), mm_strdup(ECPGtype_name(ptr->variable->type->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size), 0);
ptr->variable = new_variable(cat_str(4, make_str("*("), mm_strdup(ECPGtype_name(ptr->variable->type->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size), 0);
sprintf(temp, "%d, &(", ecpg_informix_var++);
sprintf(temp, "%d, &(", ecpg_informix_var++);
}
}
/* create call to "ECPG_informix_set_var(<counter>, <pointer>. <linen number>)" */
/* create call to "ECPG_informix_set_var(<counter>, <pointer>. <linen number>)" */
result = cat_str(5, result, make_str("ECPG_informix_set_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
result = cat_str(5, result, make_str("ECPG_informix_set_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
/* now the indicator if there is one */
/* now the indicator if there is one */
if (ptr->indicator->type->type != ECPGt_NO_INDICATOR)
if (ptr->indicator->type->type != ECPGt_NO_INDICATOR)
{
{
/* change variable name to "ECPG_informix_get_var(<counter>)" */
/* change variable name to "ECPG_informix_get_var(<counter>)" */
original_var = ptr->indicator->name;
original_var = ptr->indicator->name;
sprintf(temp, "%d))", ecpg_informix_var);
sprintf(temp, "%d))", ecpg_informix_var);
/* create call to "ECPG_informix_set_var(<counter>, <pointer>. <linen number>)" */
/* create call to "ECPG_informix_set_var(<counter>, <pointer>. <linen number>)" */
if (atoi(ptr->indicator->type->size) > 1)
if (atoi(ptr->indicator->type->size) > 1)
{
{
...
@@ -294,7 +294,7 @@ add_additional_variables(char *name, bool insert)
...
@@ -294,7 +294,7 @@ add_additional_variables(char *name, bool insert)
}
}
if (insert)
if (insert)
{
{
/* add all those input variables that were given earlier
/* add all those input variables that were given earlier
* note that we have to append here but have to keep the existing order */
* note that we have to append here but have to keep the existing order */
for (p = ptr->argsinsert; p; p = p->next)
for (p = ptr->argsinsert; p; p = p->next)
add_variable_to_tail(&argsinsert, p->variable, p->indicator);
add_variable_to_tail(&argsinsert, p->variable, p->indicator);
...
@@ -303,7 +303,7 @@ add_additional_variables(char *name, bool insert)
...
@@ -303,7 +303,7 @@ add_additional_variables(char *name, bool insert)
/* add all those output variables that were given earlier */
/* add all those output variables that were given earlier */
for (p = ptr->argsresult; p; p = p->next)
for (p = ptr->argsresult; p; p = p->next)
add_variable_to_tail(&argsresult, p->variable, p->indicator);
add_variable_to_tail(&argsresult, p->variable, p->indicator);
return ptr;
return ptr;
}
}
%}
%}
...
@@ -324,8 +324,8 @@ add_additional_variables(char *name, bool insert)
...
@@ -324,8 +324,8 @@ add_additional_variables(char *name, bool insert)
/* special embedded SQL token */
/* special embedded SQL token */
%token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK
%token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK
SQL_CALL SQL_CARDINALITY SQL_CONNECT
SQL_CALL SQL_CARDINALITY SQL_CONNECT
SQL_CONTINUE SQL_COUNT SQL_CURRENT SQL_DATA
SQL_CONTINUE SQL_COUNT SQL_CURRENT SQL_DATA
SQL_DATETIME_INTERVAL_CODE
SQL_DATETIME_INTERVAL_CODE
SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE
SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE
SQL_DESCRIPTOR SQL_DISCONNECT SQL_ENUM SQL_FOUND
SQL_DESCRIPTOR SQL_DISCONNECT SQL_ENUM SQL_FOUND
...
@@ -352,75 +352,75 @@ add_additional_variables(char *name, bool insert)
...
@@ -352,75 +352,75 @@ add_additional_variables(char *name, bool insert)
%token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER
%token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER
AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC
AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC
ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION
ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION
BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
BOOLEAN_P BOTH BY
BOOLEAN_P BOTH BY
CACHE CALLED CASCADE CASE CAST CHAIN CHAR_P
CACHE CALLED CASCADE 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 CONNECTION CONSTRAINT CONSTRAINTS CONVERSION_P CONVERT COPY CREATE CREATEDB
COMMITTED CONNECTION CONSTRAINT CONSTRAINTS CONVERSION_P CONVERT COPY CREATE CREATEDB
CREATEROLE CREATEUSER CROSS CSV CURRENT_DATE CURRENT_ROLE CURRENT_TIME
CREATEROLE CREATEUSER CROSS CSV CURRENT_DATE CURRENT_ROLE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS
DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS
DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS
DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS
DESC DISABLE_P DISTINCT DO DOMAIN_P DOUBLE_P DROP
DESC DISABLE_P DISTINCT DO DOMAIN_P DOUBLE_P DROP
EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ESCAPE EXCEPT EXCLUSIVE EXCLUDING
EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ESCAPE EXCEPT EXCLUSIVE EXCLUDING
EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT
EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT
FALSE_P FETCH FIRST_P FLOAT_P FOR FORCE FOREIGN FORWARD FREEZE FROM
FALSE_P FETCH FIRST_P FLOAT_P FOR FORCE FOREIGN FORWARD FREEZE FROM
FULL FUNCTION
FULL FUNCTION
GET GLOBAL GRANT GRANTED GREATEST GROUP_P
GET GLOBAL GRANT GRANTED GREATEST GROUP_P
HANDLER HAVING HEADER_P HOLD HOUR_P
HANDLER HAVING HEADER_P HOLD HOUR_P
IF_P ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IN_P INCLUDING INCREMENT
IF_P ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IN_P INCLUDING INCREMENT
INDEX INHERIT INHERITS INITIALLY INNER_P INOUT INPUT_P
INDEX INHERIT INHERITS INITIALLY INNER_P INOUT INPUT_P
INSENSITIVE INSERT INSTEAD INT_P INTEGER INTERSECT
INSENSITIVE INSERT INSTEAD INT_P INTEGER INTERSECT
INTERVAL INTO INVOKER IS ISNULL ISOLATION
INTERVAL INTO INVOKER IS ISNULL ISOLATION
JOIN
JOIN
KEY
KEY
LANCOMPILER LANGUAGE LARGE_P LAST_P LEADING LEAST LEFT LEVEL
LANCOMPILER LANGUAGE LARGE_P LAST_P LEADING LEAST LEFT LEVEL
LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION
LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION
LOCK_P LOGIN_P
LOCK_P LOGIN_P
MATCH MAXVALUE MINUTE_P MINVALUE MODE MONTH_P MOVE
MATCH MAXVALUE MINUTE_P MINVALUE MODE MONTH_P MOVE
NAMES NATIONAL NATURAL NCHAR NEW NEXT NO NOCREATEDB
NAMES NATIONAL NATURAL NCHAR NEW NEXT NO NOCREATEDB
NOCREATEROLE NOCREATEUSER NOINHERIT NOLOGIN_P NONE NOSUPERUSER
NOCREATEROLE NOCREATEUSER NOINHERIT NOLOGIN_P NONE NOSUPERUSER
NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF NUMERIC
NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF NUMERIC
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 OWNED OWNER
OUT_P OUTER_P OVERLAPS OVERLAY OWNED OWNER
PARTIAL PASSWORD PLACING POSITION
PARTIAL PASSWORD PLACING POSITION
PRECISION PRESERVE PREPARE PREPARED PRIMARY
PRECISION PRESERVE PREPARE PREPARED PRIMARY
PRIOR PRIVILEGES PROCEDURAL PROCEDURE
PRIOR PRIVILEGES PROCEDURAL PROCEDURE
QUOTE
QUOTE
READ REAL REASSIGN RECHECK REFERENCES REINDEX RELATIVE_P RELEASE RENAME
READ REAL REASSIGN RECHECK REFERENCES REINDEX RELATIVE_P RELEASE RENAME
REPEATABLE REPLACE RESET RESTART RESTRICT RETURNS REVOKE RIGHT
REPEATABLE REPLACE RESET RESTART RESTRICT RETURNS REVOKE RIGHT
ROLE ROLLBACK ROW ROWS RULE
ROLE ROLLBACK ROW ROWS RULE
SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE
SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE
SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT
SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT
STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SUPERUSER_P SYMMETRIC
STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SUPERUSER_P SYMMETRIC
SYSID SYSTEM_P
SYSID SYSTEM_P
TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP TO TOAST
TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP TO TOAST
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
UPDATE USER USING
UPDATE USER USING
VACUUM VALID VALIDATOR VALUES VARCHAR VARYING VERBOSE VIEW VOLATILE
VACUUM VALID VALIDATOR VALUES VARCHAR VARYING VERBOSE VIEW VOLATILE
WHEN WHERE WITH WITHOUT WORK WRITE
WHEN WHERE WITH WITHOUT WORK WRITE
YEAR_P
YEAR_P
...
@@ -472,7 +472,7 @@ add_additional_variables(char *name, bool insert)
...
@@ -472,7 +472,7 @@ add_additional_variables(char *name, bool insert)
%type <str> comment_text ConstraintDeferrabilitySpec TableElementList
%type <str> comment_text ConstraintDeferrabilitySpec TableElementList
%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
%type <str> ColConstraint ColConstraintElem drop_type Bconst Iresult
%type <str> ColConstraint ColConstraintElem drop_type Bconst Iresult
%type <str> TableConstraint OptTableElementList Xconst opt_transaction
%type <str> TableConstraint OptTableElementList Xconst opt_transaction
%type <str> ConstraintElem key_actions ColQualList type_name
%type <str> ConstraintElem key_actions ColQualList type_name
%type <str> target_list target_el update_target_list alias_clause
%type <str> target_list target_el update_target_list alias_clause
%type <str> update_target_el qualified_name database_name alter_using
%type <str> update_target_el qualified_name database_name alter_using
...
@@ -497,7 +497,7 @@ add_additional_variables(char *name, bool insert)
...
@@ -497,7 +497,7 @@ add_additional_variables(char *name, bool insert)
%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
%type <str> FetchStmt from_in CreateOpClassStmt like_including_defaults
%type <str> FetchStmt from_in CreateOpClassStmt like_including_defaults
%type <str> ClosePortalStmt DropStmt VacuumStmt AnalyzeStmt opt_verbose
%type <str> ClosePortalStmt DropStmt VacuumStmt AnalyzeStmt opt_verbose
%type <str> opt_full func_arg OptWithOids opt_freeze alter_table_cmd
%type <str> opt_full func_arg OptWithOids opt_freeze alter_table_cmd
%type <str> analyze_keyword opt_name_list ExplainStmt index_params
%type <str> analyze_keyword opt_name_list ExplainStmt index_params
%type <str> index_elem opt_class access_method_clause alter_table_cmds
%type <str> index_elem opt_class access_method_clause alter_table_cmds
%type <str> index_opt_unique IndexStmt func_return ConstInterval
%type <str> index_opt_unique IndexStmt func_return ConstInterval
...
@@ -530,10 +530,10 @@ add_additional_variables(char *name, bool insert)
...
@@ -530,10 +530,10 @@ add_additional_variables(char *name, bool insert)
%type <str> select_clause opt_select_limit select_limit_value opt_recheck
%type <str> select_clause opt_select_limit select_limit_value opt_recheck
%type <str> ConstraintTimeSpec AlterDatabaseSetStmt DropAssertStmt
%type <str> ConstraintTimeSpec AlterDatabaseSetStmt DropAssertStmt
%type <str> select_offset_value ReindexStmt join_type opt_boolean
%type <str> select_offset_value ReindexStmt join_type opt_boolean
%type <str> join_qual joined_table opclass_item
%type <str> join_qual joined_table opclass_item
%type <str> lock_type array_expr_list ReassignOwnedStmt
%type <str> lock_type array_expr_list ReassignOwnedStmt
%type <str> OptConstrFromTable OptTempTableName StringConst array_expr
%type <str> OptConstrFromTable OptTempTableName StringConst array_expr
%type <str> constraints_set_mode comment_type
%type <str> constraints_set_mode comment_type
%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
%type <str> opt_force key_update CreateSchemaStmt PosIntStringConst
%type <str> opt_force key_update CreateSchemaStmt PosIntStringConst
%type <str> IntConst PosIntConst grantee_list func_type opt_or_replace
%type <str> IntConst PosIntConst grantee_list func_type opt_or_replace
...
@@ -553,7 +553,7 @@ add_additional_variables(char *name, bool insert)
...
@@ -553,7 +553,7 @@ add_additional_variables(char *name, bool insert)
%type <str> ConstBit GenericType TableFuncElementList opt_analyze
%type <str> ConstBit GenericType TableFuncElementList opt_analyze
%type <str> opt_sort_clause subquery_Op transaction_mode_item
%type <str> opt_sort_clause subquery_Op transaction_mode_item
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
%type <str> indicator ECPGExecute ECPGPrepare ecpg_using ecpg_into
%type <str> indicator ECPGExecute ECPGPrepare ecpg_using ecpg_into
%type <str> storage_declaration storage_clause opt_initializer c_anything
%type <str> storage_declaration storage_clause opt_initializer c_anything
%type <str> variable_list variable c_thing c_term ECPGKeywords_vanames
%type <str> variable_list variable c_thing c_term ECPGKeywords_vanames
%type <str> opt_pointer ECPGDisconnect dis_name storage_modifier
%type <str> opt_pointer ECPGDisconnect dis_name storage_modifier
...
@@ -573,7 +573,7 @@ add_additional_variables(char *name, bool insert)
...
@@ -573,7 +573,7 @@ add_additional_variables(char *name, bool insert)
%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 func_name_keyword precision opt_scale
%type <str> col_name_keyword func_name_keyword precision opt_scale
%type <str> ECPGTypeName using_list ECPGColLabelCommon UsingConst
%type <str> ECPGTypeName using_list ECPGColLabelCommon UsingConst
%type <str> inf_val_list inf_col_list using_descriptor into_descriptor
%type <str> inf_val_list inf_col_list using_descriptor into_descriptor
%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
%type <str> ECPGunreserved ECPGunreserved_interval cvariable
%type <str> AlterOwnerStmt OptTableSpaceOwner CreateTableSpaceStmt
%type <str> AlterOwnerStmt OptTableSpaceOwner CreateTableSpaceStmt
...
@@ -593,11 +593,11 @@ add_additional_variables(char *name, bool insert)
...
@@ -593,11 +593,11 @@ add_additional_variables(char *name, bool insert)
%type <dtype_enum> descriptor_item desc_header_item
%type <dtype_enum> descriptor_item desc_header_item
%type <type> var_type
%type <type> var_type
%type <action> action
%type <action> action
%type <index> opt_array_bounds
%type <index> opt_array_bounds
%%
%%
prog: statements;
prog: statements;
...
@@ -660,7 +660,7 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, connection); }
...
@@ -660,7 +660,7 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, connection); }
{
{
if (connection)
if (connection)
mmerror(PARSE_ERROR, ET_ERROR, "no at option for close database statement.\n");
mmerror(PARSE_ERROR, ET_ERROR, "no at option for close database statement.\n");
fprintf(yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");");
fprintf(yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");");
whenever_action(2);
whenever_action(2);
free($1);
free($1);
...
@@ -792,7 +792,7 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, connection); }
...
@@ -792,7 +792,7 @@ stmt: AlterDatabaseStmt { output_statement($1, 0, connection); }
fputs("ECPGt_EORT);", yyout);
fputs("ECPGt_EORT);", yyout);
fprintf(yyout, "}");
fprintf(yyout, "}");
output_line_number();
output_line_number();
/* whenever_action(2); */
/* whenever_action(2); */
free($1);
free($1);
}
}
...
@@ -962,39 +962,39 @@ CreateUserStmt:
...
@@ -962,39 +962,39 @@ CreateUserStmt:
CREATE USER RoleId opt_with OptRoleList
CREATE USER RoleId opt_with OptRoleList
{$$ = cat_str(4, make_str("create user"), $3, $4, $5); }
{$$ = cat_str(4, make_str("create user"), $3, $4, $5); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Alter a postgresql DBMS role
* Alter a postgresql DBMS role
*
*
*
*
*****************************************************************************/
*****************************************************************************/
AlterRoleStmt: ALTER ROLE RoleId opt_with OptRoleList
AlterRoleStmt: ALTER ROLE RoleId opt_with OptRoleList
{ $$ = cat_str(4, make_str("alter role"), $3, $4, $5); }
{ $$ = cat_str(4, make_str("alter role"), $3, $4, $5); }
;
;
AlterRoleSetStmt: ALTER ROLE RoleId SET set_rest
AlterRoleSetStmt: ALTER ROLE RoleId SET set_rest
{ $$ = cat_str(4, make_str("alter role"), $3, make_str("set"), $5); }
{ $$ = cat_str(4, make_str("alter role"), $3, make_str("set"), $5); }
| ALTER ROLE RoleId VariableResetStmt
| ALTER ROLE RoleId VariableResetStmt
{ $$ = cat_str(3, make_str("alter role"), $3, $4); }
{ $$ = cat_str(3, make_str("alter role"), $3, $4); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Alter a postgresql DBMS user
* Alter a postgresql DBMS user
*
*
*****************************************************************************/
*****************************************************************************/
AlterUserStmt: ALTER USER RoleId opt_with OptRoleList
AlterUserStmt: ALTER USER RoleId opt_with OptRoleList
{ $$ = cat_str(4, make_str("alter user"), $3, $4, $5); };
{ $$ = cat_str(4, make_str("alter user"), $3, $4, $5); };
AlterRoleSetStmt: ALTER USER RoleId SET set_rest
AlterRoleSetStmt: ALTER USER RoleId SET set_rest
{ $$ = cat_str(4, make_str("alter user"), $3, make_str("set"), $5); }
{ $$ = cat_str(4, make_str("alter user"), $3, make_str("set"), $5); }
| ALTER USER RoleId VariableResetStmt
| ALTER USER RoleId VariableResetStmt
{ $$ = cat_str(3, make_str("alter user"), $3, $4); }
{ $$ = cat_str(3, make_str("alter user"), $3, $4); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Drop a postgresql DBMS role
* Drop a postgresql DBMS role
...
@@ -1004,7 +1004,7 @@ CreateUserStmt:
...
@@ -1004,7 +1004,7 @@ CreateUserStmt:
DropRoleStmt: DROP ROLE name_list
DropRoleStmt: DROP ROLE name_list
{ $$ = cat2_str(make_str("drop role"), $3);}
{ $$ = cat2_str(make_str("drop role"), $3);}
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Drop a postgresql DBMS user
* Drop a postgresql DBMS user
...
@@ -1014,7 +1014,7 @@ CreateUserStmt:
...
@@ -1014,7 +1014,7 @@ CreateUserStmt:
DropUserStmt: DROP USER name_list
DropUserStmt: DROP USER name_list
{ $$ = cat2_str(make_str("drop user"), $3);}
{ $$ = cat2_str(make_str("drop user"), $3);}
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Create a postgresql group
* Create a postgresql group
...
@@ -1024,7 +1024,7 @@ CreateUserStmt:
...
@@ -1024,7 +1024,7 @@ CreateUserStmt:
CreateGroupStmt: CREATE GROUP_P RoleId opt_with OptRoleList
CreateGroupStmt: CREATE GROUP_P RoleId opt_with OptRoleList
{ $$ = cat_str(4, make_str("create group"), $3, $4, $5); }
{ $$ = cat_str(4, make_str("create group"), $3, $4, $5); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Alter a postgresql group
* Alter a postgresql group
...
@@ -1034,11 +1034,11 @@ CreateUserStmt:
...
@@ -1034,11 +1034,11 @@ CreateUserStmt:
AlterGroupStmt: ALTER GROUP_P RoleId add_drop USER name_list
AlterGroupStmt: ALTER GROUP_P RoleId add_drop USER name_list
{ $$ = cat_str(5, make_str("alter group"), $3, $4, make_str("user"), $6); }
{ $$ = cat_str(5, make_str("alter group"), $3, $4, make_str("user"), $6); }
;
;
add_drop: ADD_P { $$ = make_str("add"); }
add_drop: ADD_P { $$ = make_str("add"); }
| DROP { $$ = make_str("drop"); }
| DROP { $$ = make_str("drop"); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Drop a postgresql group
* Drop a postgresql group
...
@@ -1048,20 +1048,20 @@ CreateUserStmt:
...
@@ -1048,20 +1048,20 @@ CreateUserStmt:
DropGroupStmt: DROP GROUP_P name_list
DropGroupStmt: DROP GROUP_P name_list
{ $$ = cat2_str(make_str("drop group"), $3); }
{ $$ = cat2_str(make_str("drop group"), $3); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* Manipulate a schema
* Manipulate a schema
*
*
*
*
*****************************************************************************/
*****************************************************************************/
CreateSchemaStmt: CREATE SCHEMA OptSchemaName AUTHORIZATION RoleId OptSchemaEltList
CreateSchemaStmt: CREATE SCHEMA OptSchemaName AUTHORIZATION RoleId OptSchemaEltList
{ $$ = cat_str(5, make_str("create schema"), $3, make_str("authorization"), $5, $6); }
{ $$ = cat_str(5, make_str("create schema"), $3, make_str("authorization"), $5, $6); }
| CREATE SCHEMA ColId OptSchemaEltList
| CREATE SCHEMA ColId OptSchemaEltList
{ $$ = cat_str(3, make_str("create schema"), $3, $4); }
{ $$ = cat_str(3, make_str("create schema"), $3, $4); }
;
;
OptSchemaName: ColId { $$ = $1; }
OptSchemaName: ColId { $$ = $1; }
| /* EMPTY */ { $$ = EMPTY; }
| /* EMPTY */ { $$ = EMPTY; }
;
;
...
@@ -1123,7 +1123,7 @@ set_rest: var_name TO var_list_or_default
...
@@ -1123,7 +1123,7 @@ set_rest: var_name TO var_list_or_default
var_name: ECPGColId { $$ = $1; }
var_name: ECPGColId { $$ = $1; }
| var_name '.' ColId { $$ = cat_str(3, $1, make_str("."), $3); }
| var_name '.' ColId { $$ = cat_str(3, $1, make_str("."), $3); }
;
;
var_list_or_default: var_list
var_list_or_default: var_list
{ $$ = $1; }
{ $$ = $1; }
...
@@ -1336,7 +1336,7 @@ opt_drop_behavior: CASCADE { $$ = make_str("cascade"); }
...
@@ -1336,7 +1336,7 @@ opt_drop_behavior: CASCADE { $$ = make_str("cascade"); }
alter_using: USING a_expr { $$ = cat2_str(make_str("using"), $2); }
alter_using: USING a_expr { $$ = cat2_str(make_str("using"), $2); }
| /* EMPTY */ { $$ = EMPTY; }
| /* EMPTY */ { $$ = EMPTY; }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* QUERY :
* QUERY :
...
@@ -1395,7 +1395,7 @@ copy_opt_item: BINARY { $$ = make_str("binary"); }
...
@@ -1395,7 +1395,7 @@ copy_opt_item: BINARY { $$ = make_str("binary"); }
{ $$ = cat2_str(make_str("force quote"), $3); }
{ $$ = cat2_str(make_str("force quote"), $3); }
| FORCE NOT NULL_P columnList
| FORCE NOT NULL_P columnList
{ $$ = cat2_str(make_str("force not null"), $4); }
{ $$ = cat2_str(make_str("force not null"), $4); }
;
;
opt_binary: BINARY { $$ = make_str("binary"); }
opt_binary: BINARY { $$ = make_str("binary"); }
...
@@ -1466,7 +1466,7 @@ TableElement: columnDef { $$ = $1; }
...
@@ -1466,7 +1466,7 @@ TableElement: columnDef { $$ = $1; }
| TableConstraint { $$ = $1; }
| TableConstraint { $$ = $1; }
;
;
columnDef: ColId Typename ColQualList
columnDef: ColId Typename ColQualList
{$$ = cat_str(3, $1, $2, $3); }
{$$ = cat_str(3, $1, $2, $3); }
;
;
...
@@ -1531,7 +1531,7 @@ TableLikeClause: LIKE qualified_name like_including_defaults
...
@@ -1531,7 +1531,7 @@ TableLikeClause: LIKE qualified_name like_including_defaults
like_including_defaults:
like_including_defaults:
INCLUDING DEFAULTS { $$ = make_str("including defaults"); }
INCLUDING DEFAULTS { $$ = make_str("including defaults"); }
| EXCLUDING DEFAULTS { $$ = make_str("excluding defaults"); }
| EXCLUDING DEFAULTS { $$ = make_str("excluding defaults"); }
| /* EMPTY */ { $$ = EMPTY; }
| /* EMPTY */ { $$ = EMPTY; }
;
;
/* ConstraintElem specifies constraint syntax which is not embedded into
/* ConstraintElem specifies constraint syntax which is not embedded into
...
@@ -1625,7 +1625,7 @@ OptTableSpace: TABLESPACE name { $$ = cat2_str(make_str("tablespace"), $2); }
...
@@ -1625,7 +1625,7 @@ OptTableSpace: TABLESPACE name { $$ = cat2_str(make_str("tablespace"), $2); }
OptConsTableSpace: USING INDEX TABLESPACE name { $$ = cat2_str(make_str("using index tablespace"), $4); }
OptConsTableSpace: USING INDEX TABLESPACE name { $$ = cat2_str(make_str("using index tablespace"), $4); }
| /*EMPTY*/ { $$ = EMPTY; }
| /*EMPTY*/ { $$ = EMPTY; }
;
;
/*
/*
* Note: CREATE TABLE ... AS SELECT ... is just another spelling for
* Note: CREATE TABLE ... AS SELECT ... is just another spelling for
* SELECT ... INTO.
* SELECT ... INTO.
...
@@ -2005,7 +2005,7 @@ ReassignOwnedStmt:
...
@@ -2005,7 +2005,7 @@ ReassignOwnedStmt:
REASSIGN OWNED BY name_list TO name
REASSIGN OWNED BY name_list TO name
{$$ = cat_str(4, make_str("reassign owned by"), $4, make_str("to"), $6); }
{$$ = cat_str(4, make_str("reassign owned by"), $4, make_str("to"), $6); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* QUERY:
* QUERY:
...
@@ -2062,9 +2062,9 @@ TruncateStmt: TRUNCATE opt_table qualified_name_list
...
@@ -2062,9 +2062,9 @@ TruncateStmt: TRUNCATE opt_table qualified_name_list
*****************************************************************************/
*****************************************************************************/
/* This is different from the backend as we try to be compatible with many other
/* This is different from the backend as we try to be compatible with many other
* embedded SQL implementations. So we accept their syntax as well and
* embedded SQL implementations. So we accept their syntax as well and
* translate it to the PGSQL syntax. */
* translate it to the PGSQL syntax. */
FetchStmt: FETCH fetch_direction from_in name ecpg_into
FetchStmt: FETCH fetch_direction from_in name ecpg_into
{
{
add_additional_variables($4, false);
add_additional_variables($4, false);
...
@@ -2095,12 +2095,12 @@ FetchStmt: FETCH fetch_direction from_in name ecpg_into
...
@@ -2095,12 +2095,12 @@ FetchStmt: FETCH fetch_direction from_in name ecpg_into
add_additional_variables($3, false);
add_additional_variables($3, false);
$$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3);
$$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3);
}
}
| FETCH from_in name
| FETCH from_in name
{
{
add_additional_variables($3, false);
add_additional_variables($3, false);
$$ = cat_str(3, make_str("fetch"), $2, $3);
$$ = cat_str(3, make_str("fetch"), $2, $3);
}
}
| FETCH name
| FETCH name
{
{
add_additional_variables($2, false);
add_additional_variables($2, false);
$$ = cat2_str(make_str("fetch"), $2);
$$ = cat2_str(make_str("fetch"), $2);
...
@@ -2266,7 +2266,7 @@ RevokeRoleStmt:
...
@@ -2266,7 +2266,7 @@ RevokeRoleStmt:
opt_grant_admin_option: WITH ADMIN OPTION { $$ = make_str("with admin option"); }
opt_grant_admin_option: WITH ADMIN OPTION { $$ = make_str("with admin option"); }
| /*EMPTY*/ { $$ = EMPTY; }
| /*EMPTY*/ { $$ = EMPTY; }
;
;
opt_granted_by: GRANTED BY RoleId { $$ = cat2_str(make_str("granted by"), $3); }
opt_granted_by: GRANTED BY RoleId { $$ = cat2_str(make_str("granted by"), $3); }
| /*EMPTY*/ { $$ = EMPTY; }
| /*EMPTY*/ { $$ = EMPTY; }
;
;
...
@@ -2573,7 +2573,7 @@ AlterObjectSchemaStmt:
...
@@ -2573,7 +2573,7 @@ AlterObjectSchemaStmt:
| ALTER TYPE_P any_name SET SCHEMA name
| ALTER TYPE_P any_name SET SCHEMA name
{ $$ = cat_str(4, make_str("alter type"), $3, make_str("set schema"), $6); }
{ $$ = cat_str(4, make_str("alter type"), $3, make_str("set schema"), $6); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* ALTER THING name OWNER TO newname
* ALTER THING name OWNER TO newname
...
@@ -2716,13 +2716,13 @@ transaction_mode_item:
...
@@ -2716,13 +2716,13 @@ transaction_mode_item:
| READ ONLY { $$ = make_str("read only"); }
| READ ONLY { $$ = make_str("read only"); }
| READ WRITE { $$ = make_str("read write"); }
| READ WRITE { $$ = make_str("read write"); }
;
;
transaction_mode_list:
transaction_mode_list:
transaction_mode_item { $$ = $1; }
transaction_mode_item { $$ = $1; }
| transaction_mode_list ',' transaction_mode_item { $$ = cat_str(3, $1, make_str(","), $3); }
| transaction_mode_list ',' transaction_mode_item { $$ = cat_str(3, $1, make_str(","), $3); }
| transaction_mode_list transaction_mode_item { $$ = cat_str(3, $1, make_str(" "), $2); }
| transaction_mode_list transaction_mode_item { $$ = cat_str(3, $1, make_str(" "), $2); }
;
;
transaction_mode_list_or_empty:
transaction_mode_list_or_empty:
transaction_mode_list { $$ = $1; }
transaction_mode_list { $$ = $1; }
| /* EMPTY */ { $$ = EMPTY; }
| /* EMPTY */ { $$ = EMPTY; }
...
@@ -2812,7 +2812,7 @@ opt_equal: '=' { $$ = make_str("="); }
...
@@ -2812,7 +2812,7 @@ opt_equal: '=' { $$ = make_str("="); }
AlterDatabaseStmt: ALTER DATABASE database_name opt_with alterdb_opt_list
AlterDatabaseStmt: ALTER DATABASE database_name opt_with alterdb_opt_list
{ $$ = cat_str(4, make_str("alter database"), $3, $4, $5); }
{ $$ = cat_str(4, make_str("alter database"), $3, $4, $5); }
;
;
AlterDatabaseSetStmt: ALTER DATABASE database_name SET set_rest
AlterDatabaseSetStmt: ALTER DATABASE database_name SET set_rest
{ $$ = cat_str(4, make_str("alter database"), $3, make_str("set"), $5); }
{ $$ = cat_str(4, make_str("alter database"), $3, make_str("set"), $5); }
| ALTER DATABASE database_name VariableResetStmt
| ALTER DATABASE database_name VariableResetStmt
...
@@ -2827,7 +2827,7 @@ alterdb_opt_list:
...
@@ -2827,7 +2827,7 @@ alterdb_opt_list:
alterdb_opt_item:
alterdb_opt_item:
CONNECTION LIMIT opt_equal PosIntConst { $$ = cat_str(3, make_str("connection limit"), $3, $4); }
CONNECTION LIMIT opt_equal PosIntConst { $$ = cat_str(3, make_str("connection limit"), $3, $4); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* DROP DATABASE [ IF EXISTS ]
* DROP DATABASE [ IF EXISTS ]
...
@@ -2866,7 +2866,7 @@ AlterDomainStmt:
...
@@ -2866,7 +2866,7 @@ AlterDomainStmt:
| ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior
| ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior
{ $$ = cat_str(5, make_str("alter domain"), $3, make_str("drop constraint"), $6, $7); }
{ $$ = cat_str(5, make_str("alter domain"), $3, make_str("drop constraint"), $6, $7); }
;
;
opt_as: AS {$$ = make_str("as"); }
opt_as: AS {$$ = make_str("as"); }
| /* EMPTY */ {$$ = EMPTY; }
| /* EMPTY */ {$$ = EMPTY; }
;
;
...
@@ -2958,7 +2958,7 @@ ExplainableStmt:
...
@@ -2958,7 +2958,7 @@ ExplainableStmt:
| DeleteStmt
| DeleteStmt
| DeclareCursorStmt
| DeclareCursorStmt
/* | ExecuteStmt */
/* | ExecuteStmt */
;
;
opt_analyze:
opt_analyze:
analyze_keyword { $$ = $1; }
analyze_keyword { $$ = $1; }
| /* EMPTY */ { $$ = EMPTY; }
| /* EMPTY */ { $$ = EMPTY; }
...
@@ -3144,7 +3144,7 @@ opt_hold: /* EMPTY */
...
@@ -3144,7 +3144,7 @@ opt_hold: /* EMPTY */
| WITH HOLD { $$ = make_str("with hold"); }
| WITH HOLD { $$ = make_str("with hold"); }
| WITHOUT HOLD { $$ = make_str("without hold"); }
| WITHOUT HOLD { $$ = make_str("without hold"); }
;
;
/*****************************************************************************
/*****************************************************************************
*
*
* QUERY:
* QUERY:
...
@@ -3284,7 +3284,7 @@ select_limit_value: a_expr { $$ = $1; }
...
@@ -3284,7 +3284,7 @@ select_limit_value: a_expr { $$ = $1; }
| ALL { $$ = make_str("all"); }
| ALL { $$ = make_str("all"); }
;
;
select_offset_value: a_expr { $$ = $1; }
select_offset_value: a_expr { $$ = $1; }
;
;
/*
/*
...
@@ -3701,7 +3701,7 @@ opt_interval: YEAR_P { $$ = make_str("year"); }
...
@@ -3701,7 +3701,7 @@ opt_interval: YEAR_P { $$ = make_str("year"); }
* expression grammar
* expression grammar
*
*
*****************************************************************************/
*****************************************************************************/
/* General expressions
/* General expressions
* This is the heart of the expression syntax.
* This is the heart of the expression syntax.
*
*
...
@@ -3948,19 +3948,19 @@ func_expr: func_name '(' ')'
...
@@ -3948,19 +3948,19 @@ func_expr: func_name '(' ')'
{ $$ = cat2_str($1, make_str("(*)")); }
{ $$ = cat2_str($1, make_str("(*)")); }
| CURRENT_DATE
| CURRENT_DATE
{ $$ = make_str("current_date"); }
{ $$ = make_str("current_date"); }
| CURRENT_TIME
| CURRENT_TIME
{ $$ = make_str("current_time"); }
{ $$ = make_str("current_time"); }
| CURRENT_TIME '(' PosIntConst ')'
| CURRENT_TIME '(' PosIntConst ')'
{ $$ = cat_str(3, make_str("current_time ("), $3, make_str(")")); }
{ $$ = cat_str(3, make_str("current_time ("), $3, make_str(")")); }
| CURRENT_TIMESTAMP
| CURRENT_TIMESTAMP
{ $$ = make_str("current_timestamp"); }
{ $$ = make_str("current_timestamp"); }
| CURRENT_TIMESTAMP '(' PosIntConst ')'
| CURRENT_TIMESTAMP '(' PosIntConst ')'
{ $$ = cat_str(3, make_str("current_timestamp ("), $3, make_str(")")); }
{ $$ = cat_str(3, make_str("current_timestamp ("), $3, make_str(")")); }
| LOCALTIME
| LOCALTIME
{ $$ = make_str("localtime"); }
{ $$ = make_str("localtime"); }
| LOCALTIME '(' PosIntConst ')'
| LOCALTIME '(' PosIntConst ')'
{ $$ = cat_str(3, make_str("localtime ("), $3, make_str(")")); }
{ $$ = cat_str(3, make_str("localtime ("), $3, make_str(")")); }
| LOCALTIMESTAMP
| LOCALTIMESTAMP
{ $$ = make_str("local_timestamp"); }
{ $$ = make_str("local_timestamp"); }
| LOCALTIMESTAMP '(' PosIntConst ')'
| LOCALTIMESTAMP '(' PosIntConst ')'
{ $$ = cat_str(3, make_str("locale_timestamp ("), $3, make_str(")")); }
{ $$ = cat_str(3, make_str("locale_timestamp ("), $3, make_str(")")); }
...
@@ -3968,9 +3968,9 @@ func_expr: func_name '(' ')'
...
@@ -3968,9 +3968,9 @@ func_expr: func_name '(' ')'
{ $$ = make_str("current_role"); }
{ $$ = make_str("current_role"); }
| CURRENT_USER
| CURRENT_USER
{ $$ = make_str("current_user"); }
{ $$ = make_str("current_user"); }
| SESSION_USER
| SESSION_USER
{ $$ = make_str("session_user"); }
{ $$ = make_str("session_user"); }
| USER
| USER
{ $$ = make_str("user"); }
{ $$ = make_str("user"); }
| CAST '(' a_expr AS Typename ')'
| CAST '(' a_expr AS Typename ')'
{ $$ = cat_str(5, make_str("cast("), $3, make_str("as"), $5, make_str(")")); }
{ $$ = cat_str(5, make_str("cast("), $3, make_str("as"), $5, make_str(")")); }
...
@@ -4073,7 +4073,7 @@ type_list: type_list ',' Typename
...
@@ -4073,7 +4073,7 @@ type_list: type_list ',' Typename
array_expr_list: array_expr { $$ = $1; }
array_expr_list: array_expr { $$ = $1; }
| array_expr_list ',' array_expr { $$ = cat_str(3, $1, make_str(","), $3); }
| array_expr_list ',' array_expr { $$ = cat_str(3, $1, make_str(","), $3); }
;
;
array_expr: '[' expr_list ']' { $$ = cat_str(3, make_str("["), $2, make_str("]")); }
array_expr: '[' expr_list ']' { $$ = cat_str(3, make_str("["), $2, make_str("]")); }
| '[' array_expr_list ']' { $$ = cat_str(3, make_str("["), $2, make_str("]")); }
| '[' array_expr_list ']' { $$ = cat_str(3, make_str("["), $2, make_str("]")); }
...
@@ -4190,7 +4190,7 @@ indirection: indirection_el { $$ = $1; }
...
@@ -4190,7 +4190,7 @@ indirection: indirection_el { $$ = $1; }
opt_indirection:
opt_indirection:
/*EMPTY*/ { $$ = EMPTY; }
/*EMPTY*/ { $$ = EMPTY; }
| opt_indirection indirection_el { $$ = cat2_str($1, $2);}
| opt_indirection indirection_el { $$ = cat2_str($1, $2);}
;
;
opt_asymmetric: ASYMMETRIC { $$ = make_str("asymmetric"); }
opt_asymmetric: ASYMMETRIC { $$ = make_str("asymmetric"); }
...
@@ -4227,7 +4227,7 @@ update_target_list: update_target_list ',' update_target_el
...
@@ -4227,7 +4227,7 @@ update_target_list: update_target_list ',' update_target_el
struct inf_compat_val *ptrv;
struct inf_compat_val *ptrv;
char *cols = make_str( "(" );
char *cols = make_str( "(" );
char *vals = make_str( "(" );
char *vals = make_str( "(" );
for (ptrc = informix_col, ptrv = informix_val; ptrc != NULL && ptrv != NULL; ptrc = ptrc->next, ptrv = ptrv->next)
for (ptrc = informix_col, ptrv = informix_val; ptrc != NULL && ptrv != NULL; ptrc = ptrc->next, ptrv = ptrv->next)
{
{
if ( ptrc->next != NULL )
if ( ptrc->next != NULL )
...
@@ -4252,7 +4252,7 @@ update_target_list: update_target_list ',' update_target_el
...
@@ -4252,7 +4252,7 @@ update_target_list: update_target_list ',' update_target_el
inf_col_list: ColId opt_indirection
inf_col_list: ColId opt_indirection
{
{
struct inf_compat_col *ptr = mm_alloc(sizeof(struct inf_compat_col));
struct inf_compat_col *ptr = mm_alloc(sizeof(struct inf_compat_col));
ptr->name = $1;
ptr->name = $1;
ptr->indirection = $2;
ptr->indirection = $2;
ptr->next = NULL;
ptr->next = NULL;
...
@@ -4261,18 +4261,18 @@ inf_col_list: ColId opt_indirection
...
@@ -4261,18 +4261,18 @@ inf_col_list: ColId opt_indirection
| ColId opt_indirection ',' inf_col_list
| ColId opt_indirection ',' inf_col_list
{
{
struct inf_compat_col *ptr = mm_alloc(sizeof(struct inf_compat_col));
struct inf_compat_col *ptr = mm_alloc(sizeof(struct inf_compat_col));
ptr->name = $1;
ptr->name = $1;
ptr->indirection = $2;
ptr->indirection = $2;
ptr->next = informix_col;
ptr->next = informix_col;
informix_col = ptr;
informix_col = ptr;
}
}
;
;
inf_val_list: a_expr
inf_val_list: a_expr
{
{
struct inf_compat_val *ptr = mm_alloc(sizeof(struct inf_compat_val));
struct inf_compat_val *ptr = mm_alloc(sizeof(struct inf_compat_val));
ptr->val = $1;
ptr->val = $1;
ptr->next = NULL;
ptr->next = NULL;
informix_val = ptr;
informix_val = ptr;
...
@@ -4280,7 +4280,7 @@ inf_val_list: a_expr
...
@@ -4280,7 +4280,7 @@ inf_val_list: a_expr
| a_expr ',' inf_val_list
| a_expr ',' inf_val_list
{
{
struct inf_compat_val *ptr = mm_alloc(sizeof(struct inf_compat_val));
struct inf_compat_val *ptr = mm_alloc(sizeof(struct inf_compat_val));
ptr->val = $1;
ptr->val = $1;
ptr->next = informix_val;
ptr->next = informix_val;
informix_val = ptr;
informix_val = ptr;
...
@@ -4375,11 +4375,12 @@ Bconst: BCONST { $$ = make_name();};
...
@@ -4375,11 +4375,12 @@ Bconst: BCONST { $$ = make_name();};
Xconst: XCONST { $$ = make_name();};
Xconst: XCONST { $$ = make_name();};
Sconst: SCONST
Sconst: SCONST
{
{
/* could have been input as '' or $$ */
$$ = (char *)mm_alloc(strlen($1) + 3);
$$ = (char *)mm_alloc(strlen($1) + 3);
$$[0]='\'';
$$[0]='\'';
strcpy($$+1, $1);
strcpy($$+1, $1);
$$[strlen($1)+2]='\0';
$$[strlen($1)+1]='\'';
$$[strlen($1)+1]='\'';
$$[strlen($1)+2]='\0';
free($1);
free($1);
}
}
;
;
...
@@ -4392,7 +4393,7 @@ IntConst: PosIntConst { $$ = $1; }
...
@@ -4392,7 +4393,7 @@ IntConst: PosIntConst { $$ = $1; }
| '-' PosIntConst { $$ = cat2_str(make_str("-"), $2); }
| '-' PosIntConst { $$ = cat2_str(make_str("-"), $2); }
;
;
IntConstVar: Iconst
IntConstVar: Iconst
{
{
char *length = mm_alloc(32);
char *length = mm_alloc(32);
...
@@ -4406,7 +4407,7 @@ IntConstVar: Iconst
...
@@ -4406,7 +4407,7 @@ IntConstVar: Iconst
AllConstVar: Fconst
AllConstVar: Fconst
{
{
char *length = mm_alloc(32);
char *length = mm_alloc(32);
sprintf(length, "%d", (int) strlen($1));
sprintf(length, "%d", (int) strlen($1));
new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0);
new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0);
$$ = $1;
$$ = $1;
...
@@ -4416,7 +4417,7 @@ AllConstVar: Fconst
...
@@ -4416,7 +4417,7 @@ AllConstVar: Fconst
{
{
char *length = mm_alloc(32);
char *length = mm_alloc(32);
char *var = cat2_str(make_str("-"), $2);
char *var = cat2_str(make_str("-"), $2);
sprintf(length, "%d", (int) strlen(var));
sprintf(length, "%d", (int) strlen(var));
new_variable(var, ECPGmake_simple_type(ECPGt_const, length), 0);
new_variable(var, ECPGmake_simple_type(ECPGt_const, length), 0);
$$ = var;
$$ = var;
...
@@ -4425,16 +4426,16 @@ AllConstVar: Fconst
...
@@ -4425,16 +4426,16 @@ AllConstVar: Fconst
{
{
char *length = mm_alloc(32);
char *length = mm_alloc(32);
char *var = cat2_str(make_str("-"), $2);
char *var = cat2_str(make_str("-"), $2);
sprintf(length, "%d", (int) strlen(var));
sprintf(length, "%d", (int) strlen(var));
new_variable(var, ECPGmake_simple_type(ECPGt_const, length), 0);
new_variable(var, ECPGmake_simple_type(ECPGt_const, length), 0);
$$ = var;
$$ = var;
}
}
| Sconst
| Sconst
{
{
char *length = mm_alloc(32);
char *length = mm_alloc(32);
char *var = $1 + 1;
char *var = $1 + 1;
var[strlen(var) - 1] = '\0';
var[strlen(var) - 1] = '\0';
sprintf(length, "%d", (int) strlen(var));
sprintf(length, "%d", (int) strlen(var));
new_variable(var, ECPGmake_simple_type(ECPGt_const, length), 0);
new_variable(var, ECPGmake_simple_type(ECPGt_const, length), 0);
...
@@ -4447,14 +4448,14 @@ StringConst: Sconst { $$ = $1; }
...
@@ -4447,14 +4448,14 @@ StringConst: Sconst { $$ = $1; }
;
;
PosIntStringConst: Iconst { $$ = $1; }
PosIntStringConst: Iconst { $$ = $1; }
| Sconst { $$ = $1; }
| Sconst { $$ = $1; }
| civar { $$ = $1; }
| civar { $$ = $1; }
;
;
NumConst: Fconst { $$ = $1; }
NumConst: Fconst { $$ = $1; }
| Iconst { $$ = $1; }
| Iconst { $$ = $1; }
| '-' Fconst { $$ = cat2_str(make_str("-"), $2); }
| '-' Fconst { $$ = cat2_str(make_str("-"), $2); }
| '-' Iconst { $$ = cat2_str(make_str("-"), $2); }
| '-' Iconst { $$ = cat2_str(make_str("-"), $2); }
| civar { $$ = $1; }
| civar { $$ = $1; }
;
;
...
@@ -4720,7 +4721,7 @@ ECPGDeallocate: DEALLOCATE PREPARE prepared_name
...
@@ -4720,7 +4721,7 @@ ECPGDeallocate: DEALLOCATE PREPARE prepared_name
{ $$ = $2; }
{ $$ = $2; }
;
;
/*
/*
* variable decalartion outside exec sql declare block
* variable decalartion outside exec sql declare block
*/
*/
ECPGVarDeclaration: single_vt_declaration;
ECPGVarDeclaration: single_vt_declaration;
...
@@ -4728,8 +4729,8 @@ ECPGVarDeclaration: single_vt_declaration;
...
@@ -4728,8 +4729,8 @@ ECPGVarDeclaration: single_vt_declaration;
single_vt_declaration: type_declaration { $$ = $1; }
single_vt_declaration: type_declaration { $$ = $1; }
| single_var_declaration { $$ = $1; }
| single_var_declaration { $$ = $1; }
;
;
single_var_declaration: storage_declaration
single_var_declaration: storage_declaration
var_type
var_type
{
{
actual_type[struct_level].type_enum = $2.type_enum;
actual_type[struct_level].type_enum = $2.type_enum;
...
@@ -4884,7 +4885,7 @@ var_declaration: storage_declaration
...
@@ -4884,7 +4885,7 @@ var_declaration: storage_declaration
actual_type[struct_level].type_dimension = $1.type_dimension;
actual_type[struct_level].type_dimension = $1.type_dimension;
actual_type[struct_level].type_index = $1.type_index;
actual_type[struct_level].type_index = $1.type_index;
actual_type[struct_level].type_sizeof = $1.type_sizeof;
actual_type[struct_level].type_sizeof = $1.type_sizeof;
actual_startline[struct_level] = hashline_number();
actual_startline[struct_level] = hashline_number();
}
}
variable_list ';'
variable_list ';'
...
@@ -4964,7 +4965,7 @@ var_type: simple_type
...
@@ -4964,7 +4965,7 @@ var_type: simple_type
$$.type_enum = ECPGt_numeric;
$$.type_enum = ECPGt_numeric;
$$.type_str = make_str("numeric");
$$.type_str = make_str("numeric");
}
}
$$.type_dimension = make_str("-1");
$$.type_dimension = make_str("-1");
$$.type_index = make_str("-1");
$$.type_index = make_str("-1");
$$.type_sizeof = NULL;
$$.type_sizeof = NULL;
...
@@ -4973,7 +4974,7 @@ var_type: simple_type
...
@@ -4973,7 +4974,7 @@ var_type: simple_type
{
{
if (strlen($2) != 0 && strcmp ($1, "datetime") != 0 && strcmp ($1, "interval") != 0)
if (strlen($2) != 0 && strcmp ($1, "datetime") != 0 && strcmp ($1, "interval") != 0)
mmerror (PARSE_ERROR, ET_ERROR, "Interval specification not allowed here ");
mmerror (PARSE_ERROR, ET_ERROR, "Interval specification not allowed here ");
/*
/*
* Check for type names that the SQL grammar treats as
* Check for type names that the SQL grammar treats as
* unreserved keywords
* unreserved keywords
...
@@ -5075,7 +5076,7 @@ var_type: simple_type
...
@@ -5075,7 +5076,7 @@ var_type: simple_type
if (!forward)
if (!forward)
{
{
/* No */
/* No */
this = get_typedef(name);
this = get_typedef(name);
$$.type_str = mm_strdup(this->name);
$$.type_str = mm_strdup(this->name);
$$.type_enum = this->type->type_enum;
$$.type_enum = this->type->type_enum;
...
@@ -5114,12 +5115,12 @@ struct_union_type_with_symbol: s_struct_union_symbol
...
@@ -5114,12 +5115,12 @@ struct_union_type_with_symbol: s_struct_union_symbol
if (struct_level >= STRUCT_DEPTH)
if (struct_level >= STRUCT_DEPTH)
mmerror(PARSE_ERROR, ET_ERROR, "Too many levels in nested structure/union definition");
mmerror(PARSE_ERROR, ET_ERROR, "Too many levels in nested structure/union definition");
forward_name = mm_strdup($1.symbol);
forward_name = mm_strdup($1.symbol);
}
}
'{' variable_declarations '}'
'{' variable_declarations '}'
{
{
struct typedefs *ptr, *this;
struct typedefs *ptr, *this;
struct this_type su_type;
struct this_type su_type;
ECPGfree_struct_member(struct_member_list[struct_level]);
ECPGfree_struct_member(struct_member_list[struct_level]);
struct_member_list[struct_level] = NULL;
struct_member_list[struct_level] = NULL;
struct_level--;
struct_level--;
...
@@ -5130,7 +5131,7 @@ struct_union_type_with_symbol: s_struct_union_symbol
...
@@ -5130,7 +5131,7 @@ struct_union_type_with_symbol: s_struct_union_symbol
su_type.type_str = cat2_str($1.su, $1.symbol);
su_type.type_str = cat2_str($1.su, $1.symbol);
free(forward_name);
free(forward_name);
forward_name = NULL;
forward_name = NULL;
/* This is essantially a typedef but needs the keyword struct/union as well.
/* This is essantially a typedef but needs the keyword struct/union as well.
* So we create the typedef for each struct definition with symbol */
* So we create the typedef for each struct definition with symbol */
for (ptr = types; ptr != NULL; ptr = ptr->next)
for (ptr = types; ptr != NULL; ptr = ptr->next)
...
@@ -5179,7 +5180,7 @@ s_struct_union_symbol: SQL_STRUCT symbol
...
@@ -5179,7 +5180,7 @@ s_struct_union_symbol: SQL_STRUCT symbol
{
{
$$.su = make_str("struct");
$$.su = make_str("struct");
$$.symbol = $2;
$$.symbol = $2;
ECPGstruct_sizeof = cat_str(3, make_str("sizeof("), cat2_str(mm_strdup($$.su), mm_strdup($$.symbol)), make_str(")"));
ECPGstruct_sizeof = cat_str(3, make_str("sizeof("), cat2_str(mm_strdup($$.su), mm_strdup($$.symbol)), make_str(")"));
}
}
| UNION symbol
| UNION symbol
{
{
...
@@ -5188,7 +5189,7 @@ s_struct_union_symbol: SQL_STRUCT symbol
...
@@ -5188,7 +5189,7 @@ s_struct_union_symbol: SQL_STRUCT symbol
}
}
;
;
s_struct_union: SQL_STRUCT
s_struct_union: SQL_STRUCT
{
{
ECPGstruct_sizeof = make_str(""); /* This must not be NULL to distinguish from simple types. */
ECPGstruct_sizeof = make_str(""); /* This must not be NULL to distinguish from simple types. */
$$ = make_str("struct");
$$ = make_str("struct");
...
@@ -5290,7 +5291,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_initializer
...
@@ -5290,7 +5291,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_initializer
if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1)
if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1)
*dim = '\0';
*dim = '\0';
else
else
sprintf(dim, "[%s]", dimension);
sprintf(dim, "[%s]", dimension);
/* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */
/* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */
if (atoi(length) < 0 || strcmp(length, "0") == 0)
if (atoi(length) < 0 || strcmp(length, "0") == 0)
...
@@ -5453,13 +5454,13 @@ into_descriptor: INTO opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
...
@@ -5453,13 +5454,13 @@ into_descriptor: INTO opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
$$ = EMPTY;
$$ = EMPTY;
}
}
;
;
opt_sql: /*EMPTY*/ | SQL_SQL;
opt_sql: /*EMPTY*/ | SQL_SQL;
ecpg_into: INTO into_list { $$ = EMPTY; }
ecpg_into: INTO into_list { $$ = EMPTY; }
| into_descriptor { $$ = $1; }
| into_descriptor { $$ = $1; }
;
;
using_list: UsingConst | UsingConst ',' using_list;
using_list: UsingConst | UsingConst ',' using_list;
UsingConst: AllConst
UsingConst: AllConst
...
@@ -5485,10 +5486,10 @@ ECPGPrepare: PREPARE prepared_name FROM execstring
...
@@ -5485,10 +5486,10 @@ ECPGPrepare: PREPARE prepared_name FROM execstring
{ $$ = cat_str(3, $2, make_str(","), $4); }
{ $$ = cat_str(3, $2, make_str(","), $4); }
;
;
/*
/*
* We accept descibe but do nothing with it so far.
* We accept descibe but do nothing with it so far.
*/
*/
ECPGDescribe: SQL_DESCRIBE INPUT_P name using_descriptor
ECPGDescribe: SQL_DESCRIBE INPUT_P name using_descriptor
{
{
mmerror(PARSE_ERROR, ET_WARNING, "using unsupported describe statement.\n");
mmerror(PARSE_ERROR, ET_WARNING, "using unsupported describe statement.\n");
$$ = (char *) mm_alloc(sizeof("1, ECPGprepared_statement(\"\")") + strlen($3));
$$ = (char *) mm_alloc(sizeof("1, ECPGprepared_statement(\"\")") + strlen($3));
...
@@ -5511,7 +5512,7 @@ ECPGDescribe: SQL_DESCRIBE INPUT_P name using_descriptor
...
@@ -5511,7 +5512,7 @@ ECPGDescribe: SQL_DESCRIBE INPUT_P name using_descriptor
opt_output: SQL_OUTPUT { $$ = make_str("output"); }
opt_output: SQL_OUTPUT { $$ = make_str("output"); }
| /* EMPTY */ { $$ = EMPTY; }
| /* EMPTY */ { $$ = EMPTY; }
;
;
/*
/*
* dynamic SQL: descriptor based access
* dynamic SQL: descriptor based access
* originall written by Christof Petig <christof.petig@wtal.de>
* originall written by Christof Petig <christof.petig@wtal.de>
...
@@ -5528,7 +5529,7 @@ ECPGAllocateDescr: SQL_ALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
...
@@ -5528,7 +5529,7 @@ ECPGAllocateDescr: SQL_ALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
}
}
;
;
/*
/*
* deallocate a descriptor
* deallocate a descriptor
*/
*/
...
@@ -5871,7 +5872,7 @@ action : SQL_CONTINUE
...
@@ -5871,7 +5872,7 @@ action : SQL_CONTINUE
$<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
$<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
$<action>$.str = cat2_str(make_str("call"), mm_strdup($<action>$.command));
$<action>$.str = cat2_str(make_str("call"), mm_strdup($<action>$.command));
}
}
| SQL_CALL name
| SQL_CALL name
{
{
$<action>$.code = W_DO;
$<action>$.code = W_DO;
$<action>$.command = cat_str(3, $2, make_str("("), make_str(")"));
$<action>$.command = cat_str(3, $2, make_str("("), make_str(")"));
...
@@ -5914,7 +5915,7 @@ ECPGKeywords_vanames: SQL_BREAK { $$ = make_str("break"); }
...
@@ -5914,7 +5915,7 @@ ECPGKeywords_vanames: SQL_BREAK { $$ = make_str("break"); }
| SQL_STOP { $$ = make_str("stop"); }
| SQL_STOP { $$ = make_str("stop"); }
| SQL_VALUE { $$ = make_str("value"); }
| SQL_VALUE { $$ = make_str("value"); }
;
;
ECPGKeywords_rest: SQL_CONNECT { $$ = make_str("connect"); }
ECPGKeywords_rest: SQL_CONNECT { $$ = make_str("connect"); }
| SQL_DESCRIBE { $$ = make_str("describe"); }
| SQL_DESCRIBE { $$ = make_str("describe"); }
| SQL_DISCONNECT { $$ = make_str("disconnect"); }
| SQL_DISCONNECT { $$ = make_str("disconnect"); }
...
@@ -6002,7 +6003,7 @@ ECPGColLabelCommon: ident { $$ = $1; }
...
@@ -6002,7 +6003,7 @@ ECPGColLabelCommon: ident { $$ = $1; }
| func_name_keyword { $$ = $1; }
| func_name_keyword { $$ = $1; }
| ECPGKeywords_vanames { $$ = $1; }
| ECPGKeywords_vanames { $$ = $1; }
;
;
ECPGColLabel: ECPGColLabelCommon { $$ = $1; }
ECPGColLabel: ECPGColLabelCommon { $$ = $1; }
| reserved_keyword { $$ = $1; }
| reserved_keyword { $$ = $1; }
| ECPGunreserved { $$ = $1; }
| ECPGunreserved { $$ = $1; }
...
@@ -6017,7 +6018,7 @@ ECPGCKeywords: S_AUTO { $$ = make_str("auto"); }
...
@@ -6017,7 +6018,7 @@ ECPGCKeywords: S_AUTO { $$ = make_str("auto"); }
| S_TYPEDEF { $$ = make_str("typedef"); }
| S_TYPEDEF { $$ = make_str("typedef"); }
| S_VOLATILE { $$ = make_str("volatile"); }
| S_VOLATILE { $$ = make_str("volatile"); }
;
;
/*
/*
* Keyword classification lists. Generally, every keyword present in
* Keyword classification lists. Generally, every keyword present in
* the Postgres grammar should appear in exactly one of these lists.
* the Postgres grammar should appear in exactly one of these lists.
...
@@ -6042,14 +6043,14 @@ ECPGunreserved_interval: DAY_P { $$ = make_str("day"); }
...
@@ -6042,14 +6043,14 @@ ECPGunreserved_interval: DAY_P { $$ = make_str("day"); }
| SECOND_P { $$ = make_str("second"); }
| SECOND_P { $$ = make_str("second"); }
| YEAR_P { $$ = make_str("year"); }
| YEAR_P { $$ = make_str("year"); }
;
;
/* The following symbol must be excluded from var_name but still included in ColId
/* The following symbol must be excluded from var_name but still included in ColId
to enable ecpg special postgresql variables with this name: CONNECTION
to enable ecpg special postgresql variables with this name: CONNECTION
*/
*/
ECPGunreserved: ECPGunreserved_con { $$ = $1; }
ECPGunreserved: ECPGunreserved_con { $$ = $1; }
| CONNECTION { $$ = make_str("connection"); }
| CONNECTION { $$ = make_str("connection"); }
;
;
ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
| ABSOLUTE_P { $$ = make_str("absolute"); }
| ABSOLUTE_P { $$ = make_str("absolute"); }
| ACCESS { $$ = make_str("access"); }
| ACCESS { $$ = make_str("access"); }
...
@@ -6460,12 +6461,12 @@ indicator: cvariable { check_indicator((find_variable($1))->type); $$ = $1; }
...
@@ -6460,12 +6461,12 @@ indicator: cvariable { check_indicator((find_variable($1))->type); $$ = $1; }
| SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
| SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
;
;
cvariable: CVARIABLE
cvariable: CVARIABLE
{
{
/* As long as multidimensional arrays are not implemented we have to check for those here */
/* As long as multidimensional arrays are not implemented we have to check for those here */
char *ptr = $1;
char *ptr = $1;
int brace_open=0, brace = false;
int brace_open=0, brace = false;
for (; *ptr; ptr++)
for (; *ptr; ptr++)
{
{
switch (*ptr)
switch (*ptr)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment