/*
* Variables containing simple states.
*/
-int struct_level = 0;
-int braces_open; /* brace level counter */
+int struct_level = 0;
+int braces_open; /* brace level counter */
char errortext[128];
char *connection = NULL;
-char *input_filename = NULL;
+char *input_filename = NULL;
-static int QueryIsRule = 0, FoundInto = 0;
+static int QueryIsRule = 0, FoundInto = 0;
static int initializer = 0;
static struct this_type actual_type[STRUCT_DEPTH];
-static char *actual_storage[STRUCT_DEPTH];
-static char *actual_startline[STRUCT_DEPTH];
+static char *actual_storage[STRUCT_DEPTH];
+static char *actual_startline[STRUCT_DEPTH];
/* temporarily store struct members while creating the data structure */
struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH] = { NULL };
void
mmerror(int error_code, enum errortype type, char * error)
{
- switch(type)
- {
- case ET_WARNING:
- fprintf(stderr, "%s:%d: WARNING: %s\n", input_filename, yylineno, error);
- break;
- case ET_ERROR:
- fprintf(stderr, "%s:%d: ERROR: %s\n", input_filename, yylineno, error);
- ret_value = error_code;
- break;
- case ET_FATAL:
- fprintf(stderr, "%s:%d: ERROR: %s\n", input_filename, yylineno, error);
- exit(error_code);
- }
+ switch(type)
+ {
+ case ET_WARNING:
+ fprintf(stderr, "%s:%d: WARNING: %s\n", input_filename, yylineno, error);
+ break;
+ case ET_ERROR:
+ fprintf(stderr, "%s:%d: ERROR: %s\n", input_filename, yylineno, error);
+ ret_value = error_code;
+ break;
+ case ET_FATAL:
+ fprintf(stderr, "%s:%d: ERROR: %s\n", input_filename, yylineno, error);
+ exit(error_code);
+ }
}
/*
static char *
cat2_str(char *str1, char *str2)
-{
- char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 2);
+{
+ char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 2);
strcpy(res_str, str1);
strcat(res_str, " ");
cat_str(int count, ...)
{
va_list args;
- int i;
+ int i;
char *res_str;
va_start(args, count);
static char *
make2_str(char *str1, char *str2)
-{
- char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 1);
+{
+ char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 1);
strcpy(res_str, str1);
strcat(res_str, str2);
static char *
make3_str(char *str1, char *str2, char *str3)
-{
- char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) +strlen(str3) + 1);
+{
+ char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) +strlen(str3) + 1);
strcpy(res_str, str1);
strcat(res_str, str2);
%}
%union {
- double dval;
- int ival;
- char * str;
- struct when action;
- struct index index;
- int tagname;
- struct this_type type;
- enum ECPGttype type_enum;
- enum ECPGdtype dtype_enum;
- struct fetch_desc descriptor;
+ double dval;
+ int ival;
+ char *str;
+ struct when action;
+ struct index index;
+ int tagname;
+ struct this_type type;
+ enum ECPGttype type_enum;
+ enum ECPGdtype dtype_enum;
+ struct fetch_desc descriptor;
}
/* special embedded SQL token */
-%token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK
-%token SQL_CALL SQL_CARDINALITY SQL_CONNECT SQL_CONNECTION
-%token SQL_CONTINUE SQL_COUNT
-%token SQL_DATA SQL_DATETIME_INTERVAL_CODE SQL_DATETIME_INTERVAL_PRECISION
-%token SQL_DEALLOCATE SQL_DESCRIPTOR SQL_DISCONNECT SQL_ENUM
-%token SQL_FOUND SQL_FREE SQL_GET SQL_GO SQL_GOTO
-%token SQL_IDENTIFIED SQL_INDICATOR SQL_INT SQL_KEY_MEMBER
-%token SQL_LENGTH SQL_LONG
-%token SQL_NAME SQL_NULLABLE
-%token SQL_OCTET_LENGTH SQL_OPEN SQL_PREPARE
-%token SQL_RELEASE SQL_REFERENCE SQL_RETURNED_LENGTH
-%token SQL_RETURNED_OCTET_LENGTH
-%token SQL_SCALE SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQL
-%token SQL_SQLERROR SQL_SQLPRINT
-%token SQL_SQLWARNING SQL_START SQL_STOP SQL_STRUCT SQL_UNSIGNED
-%token SQL_VALUE SQL_VAR SQL_WHENEVER
+%token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK
+ SQL_CALL SQL_CARDINALITY SQL_CONNECT SQL_CONNECTION
+ SQL_CONTINUE SQL_COUNT SQL_DATA
+ SQL_DATETIME_INTERVAL_CODE
+ SQL_DATETIME_INTERVAL_PRECISION SQL_DEALLOCATE
+ SQL_DESCRIPTOR SQL_DISCONNECT SQL_ENUM SQL_FOUND
+ SQL_FREE SQL_GET SQL_GO SQL_GOTO SQL_IDENTIFIED
+ SQL_INDICATOR SQL_INT SQL_KEY_MEMBER SQL_LENGTH
+ SQL_LONG SQL_NAME SQL_NULLABLE SQL_OCTET_LENGTH
+ SQL_OPEN SQL_PREPARE SQL_RELEASE SQL_REFERENCE
+ SQL_RETURNED_LENGTH SQL_RETURNED_OCTET_LENGTH SQL_SCALE
+ SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQL SQL_SQLERROR
+ SQL_SQLPRINT SQL_SQLWARNING SQL_START SQL_STOP
+ SQL_STRUCT SQL_UNSIGNED SQL_VALUE SQL_VAR SQL_WHENEVER
/* C token */
-%token S_ADD S_AND S_ANYTHING S_AUTO S_CONST S_DEC S_DIV S_DOTPOINT
-%token S_EQUAL S_EXTERN S_INC S_LSHIFT
-%token S_MEMPOINT S_MEMBER S_MOD S_MUL S_NEQUAL S_OR
-%token S_REGISTER S_RSHIFT S_STATIC S_SUB S_VOLATILE
+%token S_ADD S_AND S_ANYTHING S_AUTO S_CONST S_DEC S_DIV
+ S_DOTPOINT S_EQUAL S_EXTERN S_INC S_LSHIFT S_MEMPOINT
+ S_MEMBER S_MOD S_MUL S_NEQUAL S_OR S_REGISTER S_RSHIFT
+ S_STATIC S_SUB S_VOLATILE
/* I need this and don't know where it is defined inside the backend */
-%token TYPECAST
+%token TYPECAST
/* Keywords (in SQL92 reserved words) */
-%token ABSOLUTE, ACTION, ADD, ALL, ALTER, AND, ANY, AS, ASC, AT, AUTHORIZATION,
- BEGIN_TRANS, BETWEEN, BOTH, BY,
- CASCADE, CASE, CAST, CHAIN, CHAR, CHARACTER,
- CHARACTERISTICS, CHECK, CLOSE,
- COALESCE, COLLATE, COLUMN, COMMIT,
- CONSTRAINT, CONSTRAINTS, CREATE, CROSS, CURRENT, CURRENT_DATE,
- CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR,
- DAY_P, DEC, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISTINCT, DOUBLE, DROP,
- ELSE, ENCRYPTED, END_TRANS, EXCEPT, EXECUTE, EXISTS, EXTRACT,
- FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
- GLOBAL, GRANT, GROUP, HAVING, HOUR_P,
- IN, INNER_P, INOUT, INSENSITIVE, INSERT, INTERSECT, INTERVAL, INTO, IS,
- ISOLATION, JOIN, KEY, LANGUAGE, LEADING, LEFT, LEVEL, LIKE, LOCAL,
- MATCH, MINUTE_P, MONTH_P, NAMES,
- NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF, NULL_P, NUMERIC,
- OF, OFF, OLD, ON, ONLY, OPTION, OR, ORDER, OUT, OUTER_P, OVERLAPS,
- PARTIAL, PATH_P, POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC,
- READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK,
- SCHEMA, SCROLL, SECOND_P, SELECT, SESSION, SESSION_USER, SET, SOME, SUBSTRING,
- TABLE, TEMPORARY, THEN, TIME, TIMESTAMP
- TO, TRAILING, TRANSACTION, TRIM, TRUE_P,
- UNENCRYPTED, UNION, UNIQUE, UNKNOWN, UPDATE, USAGE, USER, USING,
- VALUES, VARCHAR, VARYING, VIEW,
- WHEN, WHERE, WITH, WITHOUT, WORK, YEAR_P, ZONE
+%token ABSOLUTE, ACTION, ADD, ALL, ALTER, AND, ANY, AS, ASC,
+ AT, AUTHORIZATION, BEGIN_TRANS, BETWEEN, BOTH, BY,
+ CASCADE, CASE, CAST, CHAIN, CHAR, CHARACTER,
+ CHARACTERISTICS, CHECK, CLOSE, COALESCE, COLLATE,
+ COLUMN, COMMIT, CONSTRAINT, CONSTRAINTS, CREATE, CROSS,
+ CURRENT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,
+ CURRENT_USER, CURSOR, DAY_P, DEC, DECIMAL, DECLARE,
+ DEFAULT, DELETE, DESC, DISTINCT, DOUBLE, DROP, ELSE,
+ ENCRYPTED, END_TRANS, EXCEPT, EXECUTE, EXISTS, EXTRACT,
+ FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
+ GLOBAL, GRANT, GROUP, HAVING, HOUR_P, IN, INNER_P,
+ INOUT, INSENSITIVE, INSERT, INTERSECT, INTERVAL, INTO,
+ IS, ISOLATION, JOIN, KEY, LANGUAGE, LEADING, LEFT,
+ LEVEL, LIKE, LOCAL, MATCH, MINUTE_P, MONTH_P, NAMES,
+ NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF,
+ NULL_P, NUMERIC, OF, OFF, OLD, ON, ONLY, OPTION, OR,
+ ORDER, OUT, OUTER_P, OVERLAPS, PARTIAL, PATH_P,
+ POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES,
+ PROCEDURE, PUBLIC, READ, REFERENCES, RELATIVE, REVOKE,
+ RIGHT, ROLLBACK, SCHEMA, SCROLL, SECOND_P, SELECT,
+ SESSION, SESSION_USER, SET, SOME, SUBSTRING, TABLE,
+ TEMPORARY, THEN, TIME, TIMESTAMP TO, TRAILING,
+ TRANSACTION, TRIM, TRUE_P, UNENCRYPTED, UNION, UNIQUE,
+ UNKNOWN, UPDATE, USAGE, USER, USING, VALUES, VARCHAR,
+ VARYING, VIEW, WHEN, WHERE, WITH, WITHOUT, WORK,
+ YEAR_P, ZONE
/* Keywords (in SQL3 reserved words) */
-%token DEFERRABLE, DEFERRED,
- IMMEDIATE, INITIALLY,
- PENDANT,
- REPLACE, RESTRICT,
- TRIGGER
+%token DEFERRABLE, DEFERRED, IMMEDIATE, INITIALLY, PENDANT,
+ REPLACE, RESTRICT, TRIGGER
/* Keywords (in SQL92 non-reserved words) */
-%token COMMITTED, SERIALIZABLE, TYPE_P
+%token COMMITTED, SERIALIZABLE, TYPE_P
/* Keywords for Postgres support (not in SQL92 reserved words)
*
* when some sort of pg_privileges relation is introduced.
* - Todd A. Brandys 1998-01-01?
*/
-%token ABORT_TRANS, ACCESS, AFTER, AGGREGATE, ANALYSE, ANALYZE,
- BACKWARD, BEFORE, BINARY, BIT, CACHE, CHECKPOINT, CLUSTER,
- COMMENT, COPY, CREATEDB, CREATEUSER, CYCLE, DATABASE,
- DELIMITERS, DO, EACH, ENCODING, EXCLUSIVE, EXPLAIN,
- FORCE, FORWARD, FREEZE, FUNCTION, HANDLER, INCREMENT,
- INDEX, INHERITS, INSTEAD, ISNULL, LANCOMPILER, LIMIT,
- LISTEN, UNLISTEN, LOAD, LOCATION, LOCK_P, MAXVALUE,
- MINVALUE, MODE, MOVE, NEW, NOCREATEDB, NOCREATEUSER,
- NONE, NOTHING, NOTIFY, NOTNULL, OFFSET, OIDS,
- OPERATOR, OWNER, PASSWORD, PROCEDURAL, REINDEX, RENAME, RESET,
- RETURNS, ROW, RULE, SEQUENCE, SETOF, SHARE,
- SHOW, START, STATEMENT, STATISTICS, STDIN, STDOUT, STORAGE,
- SYSID, TEMP,
- TEMPLATE, TOAST, TRUNCATE, TRUSTED, UNLISTEN, UNTIL, VACUUM,
- VALID, VERBOSE, VERSION
+%token ABORT_TRANS, ACCESS, AFTER, AGGREGATE, ANALYSE, ANALYZE,
+ BACKWARD, BEFORE, BINARY, BIT, CACHE, CHECKPOINT,
+ CLUSTER, COMMENT, COPY, CREATEDB, CREATEUSER, CYCLE,
+ DATABASE, DELIMITERS, DO, EACH, ENCODING, EXCLUSIVE,
+ EXPLAIN, FORCE, FORWARD, FREEZE, FUNCTION, HANDLER,
+ INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
+ LANCOMPILER, LIMIT, LISTEN, UNLISTEN, LOAD, LOCATION,
+ LOCK_P, MAXVALUE, MINVALUE, MODE, MOVE, NEW,
+ NOCREATEDB, NOCREATEUSER, NONE, NOTHING, NOTIFY,
+ NOTNULL, OFFSET, OIDS, OPERATOR, OWNER, PASSWORD,
+ PROCEDURAL, REINDEX, RENAME, RESET, RETURNS, ROW, RULE,
+ SEQUENCE, SETOF, SHARE, SHOW, START, STATEMENT,
+ STATISTICS, STDIN, STDOUT, STORAGE, SYSID, TEMP,
+ TEMPLATE, TOAST, TRUNCATE, TRUSTED, UNLISTEN, UNTIL,
+ VACUUM, VALID, VERBOSE, VERSION
/* The grammar thinks these are keywords, but they are not in the keywords.c
* list and so can never be entered directly. The filter in parser.c
* creates these tokens when required.
*/
-%token UNIONJOIN
-
+%token UNIONJOIN
+
/* Special keywords, not in the query language - see the "lex" file */
-%token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP BITCONST
-%token <ival> ICONST PARAM
-%token <dval> FCONST
+%token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP BITCONST
+%token <ival> ICONST PARAM
+%token <dval> FCONST
/* these are not real. they are here so that they get generated as #define's*/
-%token OP
+%token OP
/* precedence: lowest to highest */
%left UNION EXCEPT
%left INTERSECT
-%left JOIN UNIONJOIN CROSS LEFT FULL RIGHT INNER_P NATURAL
+%left JOIN UNIONJOIN CROSS LEFT FULL RIGHT INNER_P NATURAL
%left OR
%left AND
%right NOT
%nonassoc OVERLAPS
%nonassoc BETWEEN
%nonassoc IN
-%left POSTFIXOP /* dummy for postfix Op rules */
+%left POSTFIXOP /* dummy for postfix Op rules */
%left Op /* multi-character ops and user-defined operators */
%nonassoc NOTNULL
%nonassoc ISNULL
%left '*' '/' '%'
%left '^'
/* Unary Operators */
-%left AT ZONE
+%left AT ZONE
%right UMINUS
%left '.'
%left '[' ']'
%type <str> Iconst Fconst Sconst TransactionStmt CreateStmt UserId
%type <str> CreateAsElement OptCreateAs CreateAsList CreateAsStmt
%type <str> key_reference comment_text ConstraintDeferrabilitySpec
-%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
-%type <str> ColConstraint ColConstraintElem drop_type Bitconst
-%type <str> OptTableElementList OptTableElement TableConstraint
-%type <str> ConstraintElem key_actions ColQualList type_name DropSchemaStmt
-%type <str> target_list target_el update_target_list alias_clause
-%type <str> update_target_el opt_id relation_name database_name
-%type <str> access_method attr_name class index_name name func_name
-%type <str> file_name AexprConst ParamNo c_expr ConstTypename
+%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
+%type <str> ColConstraint ColConstraintElem drop_type Bitconst
+%type <str> OptTableElementList OptTableElement TableConstraint
+%type <str> ConstraintElem key_actions ColQualList type_name DropSchemaStmt
+%type <str> target_list target_el update_target_list alias_clause
+%type <str> update_target_el opt_id relation_name database_name
+%type <str> access_method attr_name class index_name name func_name
+%type <str> file_name AexprConst ParamNo c_expr ConstTypename
%type <str> in_expr_nodes a_expr b_expr TruncateStmt CommentStmt
-%type <str> opt_indirection expr_list extract_list extract_arg
+%type <str> opt_indirection expr_list extract_list extract_arg
%type <str> position_list substr_list substr_from alter_column_default
%type <str> trim_list in_expr substr_for attr attrs drop_behavior
%type <str> Typename SimpleTypename Generic Numeric opt_float opt_numeric
-%type <str> opt_decimal Character character opt_varying opt_charset
+%type <str> opt_decimal Character character opt_varying opt_charset
%type <str> opt_collate opt_timezone opt_interval table_ref
%type <str> row_expr row_descriptor row_list ConstDatetime opt_chain
%type <str> SelectStmt into_clause OptTemp ConstraintAttributeSpec
-%type <str> opt_table opt_all sort_clause sortby_list ConstraintAttr
+%type <str> opt_table opt_all sort_clause sortby_list ConstraintAttr
%type <str> sortby OptUseOp relation_name_list name_list ColId_or_Sconst
%type <str> group_clause having_clause from_clause opt_distinct
%type <str> join_outer where_clause relation_expr sub_type opt_arg
%type <str> opt_column_list insert_rest InsertStmt OptimizableStmt
-%type <str> columnList DeleteStmt LockStmt UpdateStmt CursorStmt
-%type <str> NotifyStmt columnElem copy_dirn UnlistenStmt copy_null
-%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
-%type <str> opt_with_copy FetchStmt direction fetch_how_many from_in
-%type <str> ClosePortalStmt DropStmt VacuumStmt AnalyzeStmt opt_verbose
-%type <str> opt_full func_arg OptWithOids opt_freeze opt_ecpg_into
-%type <str> analyze_keyword opt_name_list ExplainStmt index_params
-%type <str> index_list func_index index_elem opt_class access_method_clause
-%type <str> index_opt_unique IndexStmt func_return ConstInterval
-%type <str> func_args_list func_args opt_with ProcedureStmt def_arg
-%type <str> def_elem def_list definition DefineStmt select_with_parens
-%type <str> opt_instead event event_object RuleActionList opt_using
+%type <str> columnList DeleteStmt LockStmt UpdateStmt CursorStmt
+%type <str> NotifyStmt columnElem copy_dirn UnlistenStmt copy_null
+%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
+%type <str> opt_with_copy FetchStmt direction fetch_how_many from_in
+%type <str> ClosePortalStmt DropStmt VacuumStmt AnalyzeStmt opt_verbose
+%type <str> opt_full func_arg OptWithOids opt_freeze opt_ecpg_into
+%type <str> analyze_keyword opt_name_list ExplainStmt index_params
+%type <str> index_list func_index index_elem opt_class access_method_clause
+%type <str> index_opt_unique IndexStmt func_return ConstInterval
+%type <str> func_args_list func_args opt_with ProcedureStmt def_arg
+%type <str> def_elem def_list definition DefineStmt select_with_parens
+%type <str> opt_instead event event_object RuleActionList opt_using
%type <str> RuleActionStmtOrEmpty RuleActionMulti func_as reindex_type
-%type <str> RuleStmt opt_column opt_name oper_argtypes NumConst
-%type <str> MathOp RemoveFuncStmt aggr_argtype for_update_clause
-%type <str> RemoveAggrStmt opt_procedural select_no_parens
-%type <str> RemoveOperStmt RenameStmt all_Op opt_Trusted opt_lancompiler
-%type <str> VariableSetStmt var_value zone_value VariableShowStmt
-%type <str> VariableResetStmt AlterTableStmt DropUserStmt from_list
-%type <str> opt_trans user_list OptUserList OptUserElem
-%type <str> CreateUserStmt AlterUserStmt CreateSeqStmt OptSeqList
-%type <str> OptSeqElem TriggerForSpec TriggerForOpt TriggerForType
+%type <str> RuleStmt opt_column opt_name oper_argtypes NumConst
+%type <str> MathOp RemoveFuncStmt aggr_argtype for_update_clause
+%type <str> RemoveAggrStmt opt_procedural select_no_parens
+%type <str> RemoveOperStmt RenameStmt all_Op opt_Trusted opt_lancompiler
+%type <str> VariableSetStmt var_value zone_value VariableShowStmt
+%type <str> VariableResetStmt AlterTableStmt DropUserStmt from_list
+%type <str> opt_trans user_list OptUserList OptUserElem
+%type <str> CreateUserStmt AlterUserStmt CreateSeqStmt OptSeqList
+%type <str> OptSeqElem TriggerForSpec TriggerForOpt TriggerForType
%type <str> DropTrigStmt TriggerOneEvent TriggerEvents RuleActionStmt
-%type <str> TriggerActionTime CreateTrigStmt DropPLangStmt
-%type <str> CreatePLangStmt TriggerFuncArgs TriggerFuncArg simple_select
-%type <str> ViewStmt LoadStmt CreatedbStmt createdb_opt_item
+%type <str> TriggerActionTime CreateTrigStmt DropPLangStmt
+%type <str> CreatePLangStmt TriggerFuncArgs TriggerFuncArg simple_select
+%type <str> ViewStmt LoadStmt CreatedbStmt createdb_opt_item
%type <str> createdb_opt_list opt_encoding OptInherit opt_equal
%type <str> AlterUserSetStmt privilege_list privilege privilege_target
-%type <str> opt_grant_grant_option opt_revoke_grant_option
+%type <str> opt_grant_grant_option opt_revoke_grant_option
%type <str> function_with_argtypes_list function_with_argtypes
-%type <str> DropdbStmt ClusterStmt grantee RevokeStmt Bit bit
+%type <str> DropdbStmt ClusterStmt grantee RevokeStmt Bit bit
%type <str> GrantStmt privileges PosAllConst
%type <str> opt_cursor ConstraintsSetStmt AllConst
%type <str> case_expr when_clause_list case_default case_arg when_clause
-%type <str> select_clause opt_select_limit select_limit_value
+%type <str> select_clause opt_select_limit select_limit_value
%type <str> ConstraintTimeSpec AlterDatabaseSetStmt
-%type <str> select_offset_value ReindexStmt join_type opt_boolean
+%type <str> select_offset_value ReindexStmt join_type opt_boolean
%type <str> join_qual update_list AlterSchemaStmt joined_table
%type <str> opt_level opt_lock lock_type OptGroupList OptGroupElem
-%type <str> OptConstrFromTable OptTempTableName StringConst
-%type <str> constraints_set_list constraints_set_namelist
+%type <str> OptConstrFromTable OptTempTableName StringConst
+%type <str> constraints_set_list constraints_set_namelist
%type <str> constraints_set_mode comment_type opt_empty_parentheses
%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
%type <str> opt_force key_update CreateSchemaStmt PosIntStringConst
-%type <str> IntConst PosIntConst grantee_list func_type opt_or_replace
-%type <str> select_limit opt_for_update_clause CheckPointStmt
+%type <str> IntConst PosIntConst grantee_list func_type opt_or_replace
+%type <str> select_limit opt_for_update_clause CheckPointStmt
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
%type <str> indicator ECPGExecute ECPGPrepare ecpg_using ecpg_into
-%type <str> storage_clause opt_initializer c_anything blockstart
-%type <str> blockend variable_list variable c_thing c_term
+%type <str> storage_clause opt_initializer c_anything blockstart
+%type <str> blockend variable_list variable c_thing c_term
%type <str> opt_pointer ECPGDisconnect dis_name storage_modifier
%type <str> stmt ECPGRelease execstring server_name
%type <str> connection_object opt_server opt_port c_stuff c_stuff_item
-%type <str> user_name opt_user char_variable ora_user ident opt_reference
+%type <str> user_name opt_user char_variable ora_user ident opt_reference
%type <str> quoted_ident_stringvar
-%type <str> db_prefix server opt_options opt_connection_name c_list
+%type <str> db_prefix server opt_options opt_connection_name c_list
%type <str> ECPGSetConnection cpp_line ECPGTypedef c_args ECPGKeywords
%type <str> enum_type civar civarind ECPGCursorStmt ECPGDeallocate
%type <str> ECPGFree ECPGDeclare ECPGVar opt_at enum_definition
-%type <str> struct_type s_struct declaration declarations variable_declarations
-%type <str> s_union union_type ECPGSetAutocommit on_off
+%type <str> struct_type s_struct declaration declarations variable_declarations
+%type <str> s_union union_type ECPGSetAutocommit on_off
%type <str> ECPGAllocateDescr ECPGDeallocateDescr symbol opt_symbol
%type <str> ECPGGetDescriptorHeader ECPGColLabel
%type <str> reserved_keyword unreserved_keyword
%%
prog: statements;
-statements: /* empty */
- | statements statement
+statements: /*EMPTY*/
+ | statements statement
statement: ecpgstart opt_at stmt ';' { connection = NULL; }
- | ecpgstart stmt ';'
- | ECPGDeclaration
- | c_thing { fprintf(yyout, "%s", $1); free($1); }
- | cpp_line { fprintf(yyout, "%s", $1); free($1); }
- | blockstart { fputs($1, yyout); free($1); }
- | blockend { fputs($1, yyout); free($1); }
- ;
-
-opt_at: AT connection_target {
- connection = $2;
- /*
- if we have a variable as connection
- target, remove it from the variable
- list or else it will be used twice
- */
- if (argsinsert != NULL)
- argsinsert = NULL;
- };
-
-stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
+ | ecpgstart stmt ';'
+ | ECPGDeclaration
+ | c_thing { fprintf(yyout, "%s", $1); free($1); }
+ | cpp_line { fprintf(yyout, "%s", $1); free($1); }
+ | blockstart { fputs($1, yyout); free($1); }
+ | blockend { fputs($1, yyout); free($1); }
+ ;
+
+opt_at: AT connection_target
+ {
+ connection = $2;
+ /*
+ * if we have a variable as connection
+ * target, remove it from the variable
+ * list or else it will be used twice
+ */
+ if (argsinsert != NULL)
+ argsinsert = NULL;
+ };
+
+stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
| AlterGroupStmt { output_statement($1, 0, connection); }
| AlterSchemaStmt { output_statement($1, 0, connection); }
| AlterTableStmt { output_statement($1, 0, connection); }
| AlterUserSetStmt { output_statement($1, 0, connection); }
| ClosePortalStmt { output_statement($1, 0, connection); }
| CommentStmt { output_statement($1, 0, connection); }
- | CopyStmt { output_statement($1, 0, connection); }
+ | CopyStmt { output_statement($1, 0, connection); }
| CreateStmt { output_statement($1, 0, connection); }
| CreateAsStmt { output_statement($1, 0, connection); }
- | CreateSchemaStmt { output_statement($1, 0, connection); }
+ | CreateSchemaStmt { output_statement($1, 0, connection); }
| CreateGroupStmt { output_statement($1, 0, connection); }
| CreateSeqStmt { output_statement($1, 0, connection); }
| CreatePLangStmt { output_statement($1, 0, connection); }
| CreateTrigStmt { output_statement($1, 0, connection); }
| CreateUserStmt { output_statement($1, 0, connection); }
- | ClusterStmt { output_statement($1, 0, connection); }
- | DefineStmt { output_statement($1, 0, connection); }
- | DropStmt { output_statement($1, 0, connection); }
+ | ClusterStmt { output_statement($1, 0, connection); }
+ | DefineStmt { output_statement($1, 0, connection); }
+ | DropStmt { output_statement($1, 0, connection); }
| DropSchemaStmt { output_statement($1, 0, connection); }
| TruncateStmt { output_statement($1, 0, connection); }
| DropGroupStmt { output_statement($1, 0, connection); }
| DropTrigStmt { output_statement($1, 0, connection); }
| DropUserStmt { output_statement($1, 0, connection); }
| ExplainStmt { output_statement($1, 0, connection); }
- | FetchStmt { output_statement($1, 1, connection); }
- | GrantStmt { output_statement($1, 0, connection); }
- | IndexStmt { output_statement($1, 0, connection); }
+ | FetchStmt { output_statement($1, 1, connection); }
+ | GrantStmt { output_statement($1, 0, connection); }
+ | IndexStmt { output_statement($1, 0, connection); }
| ListenStmt { output_statement($1, 0, connection); }
| UnlistenStmt { output_statement($1, 0, connection); }
- | LockStmt { output_statement($1, 0, connection); }
+ | LockStmt { output_statement($1, 0, connection); }
| NotifyStmt { output_statement($1, 0, connection); }
| ProcedureStmt { output_statement($1, 0, connection); }
| ReindexStmt { output_statement($1, 0, connection); }
| RemoveFuncStmt { output_statement($1, 0, connection); }
| RenameStmt { output_statement($1, 0, connection); }
| RevokeStmt { output_statement($1, 0, connection); }
- | OptimizableStmt {
- if (strncmp($1, "/* " , sizeof("/* ")-1) == 0)
- output_simple_statement($1);
- else
- output_statement($1, 1, connection);
- }
- | RuleStmt { output_statement($1, 0, connection); }
- | TransactionStmt {
- fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
- whenever_action(2);
- free($1);
- }
- | ViewStmt { output_statement($1, 0, connection); }
- | LoadStmt { output_statement($1, 0, connection); }
+ | OptimizableStmt
+ {
+ if (strncmp($1, "/* " , sizeof("/* ")-1) == 0)
+ output_simple_statement($1);
+ else
+ output_statement($1, 1, connection);
+ }
+ | RuleStmt { output_statement($1, 0, connection); }
+ | TransactionStmt
+ {
+ fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
+ whenever_action(2);
+ free($1);
+ }
+ | ViewStmt { output_statement($1, 0, connection); }
+ | LoadStmt { output_statement($1, 0, connection); }
| CreatedbStmt { output_statement($1, 0, connection); }
| DropdbStmt { output_statement($1, 0, connection); }
| VacuumStmt { output_statement($1, 0, connection); }
| AnalyzeStmt { output_statement($1, 0, connection); }
| VariableSetStmt { output_statement($1, 0, connection); }
| VariableShowStmt { output_statement($1, 0, connection); }
- | VariableResetStmt { output_statement($1, 0, connection); }
- | ConstraintsSetStmt { output_statement($1, 0, connection); }
+ | VariableResetStmt { output_statement($1, 0, connection); }
+ | ConstraintsSetStmt { output_statement($1, 0, connection); }
| CheckPointStmt { output_statement($1, 0, connection); }
- | ECPGAllocateDescr { fprintf(yyout,"ECPGallocate_desc(__LINE__, %s);",$1);
- whenever_action(0);
- free($1);
- }
- | ECPGConnect {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for connect statement.\n");
-
- fprintf(yyout, "{ ECPGconnect(__LINE__, %s, %d); ", $1, autocommit);
-
- reset_variables();
-
- whenever_action(2);
- free($1);
- }
- | ECPGCursorStmt {
- output_simple_statement($1);
- }
- | ECPGDeallocate {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for connect statement.\n");
-
- fputc('{', yyout);
- fputs($1, yyout);
- whenever_action(2);
- free($1);
- }
- | ECPGDeallocateDescr { fprintf(yyout,"ECPGdeallocate_desc(__LINE__, %s);",$1);
- whenever_action(0);
- free($1);
- }
- | ECPGDeclare {
- output_simple_statement($1);
- }
- | ECPGDisconnect {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for disconnect statement.\n");
-
- fprintf(yyout, "{ ECPGdisconnect(__LINE__, %s);", $1);
- whenever_action(2);
- free($1);
- }
- | ECPGExecute { output_statement($1, 0, connection); }
- | ECPGFree {
- fprintf(yyout, "{ ECPGdeallocate(__LINE__, \"%s\");", $1);
-
- whenever_action(2);
- free($1);
- }
- | ECPGGetDescriptor {
- lookup_descriptor($1.name, connection);
- output_get_descr($1.name, $1.str);
- free($1.name);
- free($1.str);
- }
- | ECPGGetDescriptorHeader {
- lookup_descriptor($1, connection);
- output_get_descr_header($1);
- free($1);
- }
- | ECPGOpen {
- struct cursor *ptr;
- struct arguments *p;
-
- for (ptr = cur; ptr != NULL; ptr=ptr->next)
- {
- if (strcmp(ptr->name, $1) == 0)
- break;
- }
-
- if (ptr == NULL)
- {
- sprintf(errortext, "trying to open undeclared cursor %s\n", $1);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
-
- /* merge variables given in prepare statement with those given here */
- for (p = ptr->argsinsert; p; p = p->next)
- append_variable(&argsinsert, p->variable, p->indicator);
-
- for (p = ptr->argsresult; p; p = p->next)
- add_variable(&argsresult, p->variable, p->indicator);
-
- output_statement(mm_strdup(ptr->command), 0, ptr->connection ? mm_strdup(ptr->connection) : NULL);
- }
- | ECPGPrepare {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for set connection statement.\n");
+ | ECPGAllocateDescr
+ {
+ fprintf(yyout,"ECPGallocate_desc(__LINE__, %s);",$1);
+ whenever_action(0);
+ free($1);
+ }
+ | ECPGConnect
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for connect statement.\n");
- fprintf(yyout, "{ ECPGprepare(__LINE__, %s);", $1);
- whenever_action(2);
- free($1);
- }
+ fprintf(yyout, "{ ECPGconnect(__LINE__, %s, %d); ", $1, autocommit);
+ reset_variables();
+ whenever_action(2);
+ free($1);
+ }
+ | ECPGCursorStmt
+ {
+ output_simple_statement($1);
+ }
+ | ECPGDeallocate
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for connect statement.\n");
+
+ fputc('{', yyout);
+ fputs($1, yyout);
+ whenever_action(2);
+ free($1);
+ }
+ | ECPGDeallocateDescr
+ {
+ fprintf(yyout,"ECPGdeallocate_desc(__LINE__, %s);",$1);
+ whenever_action(0);
+ free($1);
+ }
+ | ECPGDeclare
+ {
+ output_simple_statement($1);
+ }
+ | ECPGDisconnect
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for disconnect statement.\n");
+
+ fprintf(yyout, "{ ECPGdisconnect(__LINE__, %s);", $1);
+ whenever_action(2);
+ free($1);
+ }
+ | ECPGExecute
+ {
+ output_statement($1, 0, connection);
+ }
+ | ECPGFree
+ {
+ fprintf(yyout, "{ ECPGdeallocate(__LINE__, \"%s\");", $1);
+
+ whenever_action(2);
+ free($1);
+ }
+ | ECPGGetDescriptor
+ {
+ lookup_descriptor($1.name, connection);
+ output_get_descr($1.name, $1.str);
+ free($1.name);
+ free($1.str);
+ }
+ | ECPGGetDescriptorHeader
+ {
+ lookup_descriptor($1, connection);
+ output_get_descr_header($1);
+ free($1);
+ }
+ | ECPGOpen
+ {
+ struct cursor *ptr;
+ struct arguments *p;
+
+ for (ptr = cur; ptr != NULL; ptr=ptr->next)
+ {
+ if (strcmp(ptr->name, $1) == 0)
+ break;
+ }
+
+ if (ptr == NULL)
+ {
+ sprintf(errortext, "trying to open undeclared cursor %s\n", $1);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+
+ /* merge variables given in prepare statement with those given here */
+ for (p = ptr->argsinsert; p; p = p->next)
+ append_variable(&argsinsert, p->variable, p->indicator);
+
+ for (p = ptr->argsresult; p; p = p->next)
+ add_variable(&argsresult, p->variable, p->indicator);
+
+ output_statement(mm_strdup(ptr->command), 0, ptr->connection ? mm_strdup(ptr->connection) : NULL);
+ }
+ | ECPGPrepare
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for set connection statement.\n");
+
+ fprintf(yyout, "{ ECPGprepare(__LINE__, %s);", $1);
+ whenever_action(2);
+ free($1);
+ }
| ECPGRelease { /* output already done */ }
- | ECPGSetAutocommit {
- fprintf(yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL");
- whenever_action(2);
- free($1);
- }
- | ECPGSetConnection {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for set connection statement.\n");
+ | ECPGSetAutocommit
+ {
+ fprintf(yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL");
+ whenever_action(2);
+ free($1);
+ }
+ | ECPGSetConnection
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for set connection statement.\n");
- fprintf(yyout, "{ ECPGsetconn(__LINE__, %s);", $1);
- whenever_action(2);
- free($1);
- }
- | ECPGTypedef {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for typedef statement.\n");
+ fprintf(yyout, "{ ECPGsetconn(__LINE__, %s);", $1);
+ whenever_action(2);
+ free($1);
+ }
+ | ECPGTypedef
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for typedef statement.\n");
- output_simple_statement($1);
- }
- | ECPGVar {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for var statement.\n");
+ output_simple_statement($1);
+ }
+ | ECPGVar
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for var statement.\n");
- output_simple_statement($1);
- }
- | ECPGWhenever {
- if (connection)
- mmerror(PARSE_ERROR, ET_ERROR, "no at option for whenever statement.\n");
+ output_simple_statement($1);
+ }
+ | ECPGWhenever
+ {
+ if (connection)
+ mmerror(PARSE_ERROR, ET_ERROR, "no at option for whenever statement.\n");
- output_simple_statement($1);
- }
+ output_simple_statement($1);
+ }
;
*****************************************************************************/
CreateUserStmt: CREATE USER UserId OptUserList
- {
- $$ = cat_str(3, make_str("create user"), $3, $4);
- }
- | CREATE USER UserId WITH OptUserList
- {
- $$ = cat_str(4, make_str("create user"), $3, make_str("with"), $5);
- }
+ { $$ = cat_str(3, make_str("create user"), $3, $4); }
+ | CREATE USER UserId WITH OptUserList
+ { $$ = cat_str(4, make_str("create user"), $3, make_str("with"), $5); }
;
/*****************************************************************************
*****************************************************************************/
AlterUserStmt: ALTER USER UserId OptUserList
- {
- $$ = cat_str(3, make_str("alter user"), $3, $4);
- }
- | ALTER USER UserId WITH OptUserList
- {
- $$ = cat_str(4, make_str("alter user"), $3, make_str("with"), $5);
- }
+ { $$ = cat_str(3, make_str("alter user"), $3, $4); }
+ | ALTER USER UserId WITH OptUserList
+ { $$ = cat_str(4, make_str("alter user"), $3, make_str("with"), $5); }
;
AlterUserSetStmt: ALTER USER UserId VariableSetStmt
- {
- $$ = cat_str(3, make_str("alter user"), $3, $4);
- }
+ { $$ = cat_str(3, make_str("alter user"), $3, $4); }
| ALTER USER UserId VariableResetStmt
- {
- $$ = cat_str(3, make_str("alter user"), $3, $4);
- }
+ { $$ = cat_str(3, make_str("alter user"), $3, $4); }
;
/*****************************************************************************
*****************************************************************************/
DropUserStmt: DROP USER user_list
- {
- $$ = cat2_str(make_str("drop user"), $3);
- }
+ { $$ = cat2_str(make_str("drop user"), $3);}
;
/*
* Options for CREATE USER and ALTER USER
*/
-OptUserList: OptUserList OptUserElem { $$ = cat2_str($1, $2); }
- | /* EMPTY */ { $$ = EMPTY; }
+OptUserList: OptUserList OptUserElem { $$ = cat2_str($1, $2); }
+ | /* EMPTY */ { $$ = EMPTY; }
;
OptUserElem: PASSWORD Sconst
- {
- $$ = cat2_str(make_str("password"), $2);
- }
- | SYSID Iconst
- {
- $$ = cat2_str(make_str("sysid"), $2);
- }
- | CREATEDB
- {
- $$ = make_str("createdb");
- }
- | NOCREATEDB
- {
- $$ = make_str("nocreatedb");
- }
- | CREATEUSER
- {
- $$ = make_str("createuser");
- }
- | NOCREATEUSER
- {
- $$ = make_str("nocreateuser");
- }
- | IN GROUP user_list
- {
- $$ = cat2_str(make_str("in group"), $3);
- }
- | VALID UNTIL Sconst
- {
- $$ = cat2_str(make_str("valid until"), $3);
- }
- ;
-
-user_list: user_list ',' UserId
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
- | UserId
- {
- $$ = $1;
- }
+ { $$ = cat2_str(make_str("password"), $2); }
+ | SYSID Iconst
+ { $$ = cat2_str(make_str("sysid"), $2); }
+ | CREATEDB
+ { $$ = make_str("createdb"); }
+ | NOCREATEDB
+ { $$ = make_str("nocreatedb"); }
+ | CREATEUSER
+ { $$ = make_str("createuser"); }
+ | NOCREATEUSER
+ { $$ = make_str("nocreateuser"); }
+ | IN GROUP user_list
+ { $$ = cat2_str(make_str("in group"), $3); }
+ | VALID UNTIL Sconst
+ { $$ = cat2_str(make_str("valid until"), $3); }
+ ;
+
+user_list: user_list ',' UserId
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ | UserId
+ { $$ = $1; }
;
*
****************************************************************************/
CreateGroupStmt: CREATE GROUP UserId OptGroupList
- {
- $$ = cat_str(3, make_str("create group"), $3, $4);
- }
- | CREATE GROUP UserId WITH OptGroupList
- {
- $$ = cat_str(4, make_str("create group"), $3, make_str("with"), $5);
- }
+ { $$ = cat_str(3, make_str("create group"), $3, $4); }
+ | CREATE GROUP UserId WITH OptGroupList
+ { $$ = cat_str(4, make_str("create group"), $3, make_str("with"), $5); }
;
/*
* Options for CREATE GROUP
*/
OptGroupList: OptGroupList OptGroupElem { $$ = cat2_str($1, $2); }
- | /* EMPTY */ { $$ = EMPTY; }
+ | /* EMPTY */ { $$ = EMPTY; }
;
OptGroupElem: USER user_list
- {
- $$ = cat2_str(make_str("user"), $2);
- }
- | SYSID Iconst
- {
- $$ = cat2_str(make_str("sysid"), $2);
- }
- ;
+ { $$ = cat2_str(make_str("user"), $2); }
+ | SYSID Iconst
+ { $$ = cat2_str(make_str("sysid"), $2); }
+ ;
/*****************************************************************************
*
*****************************************************************************/
AlterGroupStmt: ALTER GROUP UserId ADD USER user_list
- {
- $$ = cat_str(4, make_str("alter group"), $3, make_str("add user"), $6);
- }
- | ALTER GROUP UserId DROP USER user_list
- {
- $$ = cat_str(4, make_str("alter group"), $3, make_str("drop user"), $6);
- }
- ;
+ { $$ = cat_str(4, make_str("alter group"), $3, make_str("add user"), $6); }
+ | ALTER GROUP UserId DROP USER user_list
+ { $$ = cat_str(4, make_str("alter group"), $3, make_str("drop user"), $6); }
+ ;
/*****************************************************************************
*
*
*****************************************************************************/
DropGroupStmt: DROP GROUP UserId
- {
- $$ = cat2_str(make_str("drop group"), $3);
- }
- ;
+ { $$ = cat2_str(make_str("drop group"), $3); }
+ ;
/*****************************************************************************
*
*
*
*****************************************************************************/
-
-CreateSchemaStmt: CREATE SCHEMA UserId
- {
- $$ = cat2_str(make_str("create scheme"), $3);
- }
+
+CreateSchemaStmt: CREATE SCHEMA UserId
+ { $$ = cat2_str(make_str("create scheme"), $3); }
;
-AlterSchemaStmt: ALTER SCHEMA UserId
- {
- $$ = cat2_str(make_str("alter scheme"), $3);
- }
+AlterSchemaStmt: ALTER SCHEMA UserId
+ { $$ = cat2_str(make_str("alter scheme"), $3); }
;
-DropSchemaStmt: DROP SCHEMA UserId
- {
- $$ = cat2_str(make_str("drop scheme"), $3);
- }
+DropSchemaStmt: DROP SCHEMA UserId
+ { $$ = cat2_str(make_str("drop scheme"), $3); }
;
/*****************************************************************************
* Set PG internal variable
* SET name TO 'var_value'
* Include SQL92 syntax (thomas 1997-10-22):
- * SET TIME ZONE 'var_value'
+ * SET TIME ZONE 'var_value'
*
*****************************************************************************/
VariableSetStmt: SET ColId TO var_value
- {
- $$ = cat_str(4, make_str("set"), $2, make_str("to"), $4);
- }
+ { $$ = cat_str(4, make_str("set"), $2, make_str("to"), $4); }
| SET ColId '=' var_value
- {
- $$ = cat_str(4, make_str("set"), $2, make_str("="), $4);
- }
+ { $$ = cat_str(4, make_str("set"), $2, make_str("="), $4); }
| SET TIME ZONE zone_value
- {
- $$ = cat2_str(make_str("set time zone"), $4);
- }
+ { $$ = cat2_str(make_str("set time zone"), $4); }
| SET TRANSACTION ISOLATION LEVEL opt_level
- {
- $$ = cat2_str(make_str("set transaction isolation level"), $5);
- }
+ { $$ = cat2_str(make_str("set transaction isolation level"), $5); }
| SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
- {
- $$ = cat2_str(make_str("set session characteristics as transaction isolation level"), $8);
- }
+ { $$ = cat2_str(make_str("set session characteristics as transaction isolation level"), $8); }
| SET NAMES opt_encoding
- {
- $$ = cat2_str(make_str("set names"), $3);
- }
- | SET SESSION AUTHORIZATION ColId_or_Sconst
- {
- $$ = cat2_str(make_str("set session authorization"), $4);
- }
- ;
-
-opt_level: READ COMMITTED { $$ = make_str("read committed"); }
- | SERIALIZABLE { $$ = make_str("serializable"); }
- ;
-
-
-var_value: opt_boolean { $$ = $1; }
- | AllConst { $$ = $1; }
- | name_list {
- if (strlen($1) == 0)
- mmerror(PARSE_ERROR, ET_ERROR, "SET must have at least one argument.");
-
- $$ = $1;
- }
- | DEFAULT { $$ = make_str("default"); }
+ { $$ = cat2_str(make_str("set names"), $3); }
+ | SET SESSION AUTHORIZATION ColId_or_Sconst
+ { $$ = cat2_str(make_str("set session authorization"), $4); }
+ ;
+
+opt_level: READ COMMITTED { $$ = make_str("read committed"); }
+ | SERIALIZABLE { $$ = make_str("serializable"); }
+ ;
+
+
+var_value: opt_boolean { $$ = $1; }
+ | AllConst { $$ = $1; }
+ | name_list
+ {
+ if (strlen($1) == 0)
+ mmerror(PARSE_ERROR, ET_ERROR, "SET must have at least one argument.");
+
+ $$ = $1;
+ }
+ | DEFAULT { $$ = make_str("default"); }
;
-opt_boolean: TRUE_P { $$ = make_str("true"); }
- | FALSE_P { $$ = make_str("false"); }
- | ON { $$ = make_str("on"); }
- | OFF { $$ = make_str("off"); }
+opt_boolean: TRUE_P { $$ = make_str("true"); }
+ | FALSE_P { $$ = make_str("false"); }
+ | ON { $$ = make_str("on"); }
+ | OFF { $$ = make_str("off"); }
;
/* Timezone values can be:
*/
zone_value: AllConst { $$ = $1; }
| ConstInterval StringConst opt_interval
- {
- $$ = cat_str(3, $1, $2, $3);
- }
+ { $$ = cat_str(3, $1, $2, $3); }
| ConstInterval '(' PosIntConst ')' StringConst opt_interval
- {
- $$ = cat_str(6, $1, make_str("("), $3, make_str(")"), $5, $6);
- }
- | DEFAULT { $$ = make_str("default"); }
- | LOCAL { $$ = make_str("local"); }
+ { $$ = cat_str(6, $1, make_str("("), $3, make_str(")"), $5, $6); }
+ | DEFAULT
+ { $$ = make_str("default"); }
+ | LOCAL
+ { $$ = make_str("local"); }
;
-opt_encoding: StringConst { $$ = $1; }
- | DEFAULT { $$ = make_str("default"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_encoding: StringConst { $$ = $1; }
+ | DEFAULT { $$ = make_str("default"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-ColId_or_Sconst: ColId { $$ = $1; }
- | StringConst { $$ = $1; }
+ColId_or_Sconst: ColId { $$ = $1; }
+ | StringConst { $$ = $1; }
;
VariableShowStmt: SHOW ColId
- {
- $$ = cat2_str(make_str("show"), $2);
- }
+ { $$ = cat2_str(make_str("show"), $2); }
| SHOW TIME ZONE
- {
- $$ = make_str("show time zone");
- }
+ { $$ = make_str("show time zone"); }
| SHOW ALL
- {
- $$ = make_str("show all");
- }
+ { $$ = make_str("show all"); }
| SHOW TRANSACTION ISOLATION LEVEL
- {
- $$ = make_str("show transaction isolation level");
- }
+ { $$ = make_str("show transaction isolation level"); }
;
VariableResetStmt: RESET ColId
- {
- $$ = cat2_str(make_str("reset"), $2);
- }
+ { $$ = cat2_str(make_str("reset"), $2); }
| RESET TIME ZONE
- {
- $$ = make_str("reset time zone");
- }
+ { $$ = make_str("reset time zone"); }
| RESET TRANSACTION ISOLATION LEVEL
- {
- $$ = make_str("reset transaction isolation level");
- }
+ { $$ = make_str("reset transaction isolation level"); }
| RESET ALL
- {
- $$ = make_str("reset all");
- }
+ { $$ = make_str("reset all"); }
;
ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode
- {
- $$ = cat_str(3, make_str("set constraints"), $3, $4);
- }
- ;
+ { $$ = cat_str(3, make_str("set constraints"), $3, $4); }
+ ;
constraints_set_list: ALL
- {
- $$ = make_str("all");
- }
- | constraints_set_namelist
- {
- $$ = $1;
- }
- ;
-
-
-constraints_set_namelist: ColId
- {
- $$ = $1;
- }
- | constraints_set_namelist ',' ColId
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
- ;
-
-constraints_set_mode: DEFERRED
- {
- $$ = make_str("deferred");
- }
- | IMMEDIATE
- {
- $$ = make_str("immediate");
- }
- ;
+ { $$ = make_str("all"); }
+ | constraints_set_namelist
+ { $$ = $1; }
+ ;
+
+constraints_set_namelist: ColId
+ { $$ = $1; }
+ | constraints_set_namelist ',' ColId
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ ;
+
+constraints_set_mode: DEFERRED { $$ = make_str("deferred"); }
+ | IMMEDIATE { $$ = make_str("immediate"); }
+ ;
/*
* Checkpoint statement
*/
-CheckPointStmt: CHECKPOINT { $$= make_str("checkpoint"); }
- ;
+CheckPointStmt: CHECKPOINT { $$= make_str("checkpoint"); }
+ ;
/*****************************************************************************
AlterTableStmt:
/* ALTER TABLE <relation> ADD [COLUMN] <coldef> */
- ALTER TABLE relation_expr ADD opt_column columnDef
- {
- $$ = cat_str(5, make_str("alter table"), $3, make_str("add"), $5, $6);
- }
+ ALTER TABLE relation_expr ADD opt_column columnDef
+ { $$ = cat_str(5, make_str("alter table"), $3, make_str("add"), $5, $6); }
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */
- | ALTER TABLE relation_expr ALTER opt_column ColId alter_column_default
- {
- $$ = cat_str(6, make_str("alter table"), $3, make_str("alter"), $5, $6, $7);
- }
+ | ALTER TABLE relation_expr ALTER opt_column ColId alter_column_default
+ { $$ = cat_str(6, make_str("alter table"), $3, make_str("alter"), $5, $6, $7); }
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <Iconst> */
- | ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS Iconst
- {
- $$ = cat_str(7, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set statistics"), $9);
- }
+ | ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS Iconst
+ { $$ = cat_str(7, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set statistics"), $9); }
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */
- | ALTER TABLE relation_expr ALTER opt_column ColId SET STORAGE ColId
- {
- $$ = cat_str(7, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set storage"), $9);
- }
+ | ALTER TABLE relation_expr ALTER opt_column ColId SET STORAGE ColId
+ { $$ = cat_str(7, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set storage"), $9); }
/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */
- | ALTER TABLE relation_expr DROP opt_column ColId drop_behavior
- {
- $$ = cat_str(6, make_str("alter table"), $3, make_str("drop"), $5, $6, $7);
- }
+ | ALTER TABLE relation_expr DROP opt_column ColId drop_behavior
+ { $$ = cat_str(6, make_str("alter table"), $3, make_str("drop"), $5, $6, $7); }
/* ALTER TABLE <relation> ADD CONSTRAINT ... */
- | ALTER TABLE relation_expr ADD TableConstraint
- {
- $$ = cat_str(4, make_str("alter table"), $3, make_str("add"), $5);
- }
+ | ALTER TABLE relation_expr ADD TableConstraint
+ { $$ = cat_str(4, make_str("alter table"), $3, make_str("add"), $5); }
/* ALTER TABLE <relation> DROP CONSTRAINT ... */
- | ALTER TABLE relation_expr DROP CONSTRAINT name drop_behavior
- {
- $$ = cat_str(5, make_str("alter table"), $3, make_str("drop constraint"), $6, $7);
- }
-/* ALTER TABLE <name> OWNER TO UserId */
- | ALTER TABLE relation_name OWNER TO UserId
- {
- $$ = cat_str(4, make_str("alter table"), $3, make_str("owner to"), $6);
- }
+ | ALTER TABLE relation_expr DROP CONSTRAINT name drop_behavior
+ { $$ = cat_str(5, make_str("alter table"), $3, make_str("drop constraint"), $6, $7); }
+/* ALTER TABLE <name> OWNER TO UserId */
+ | ALTER TABLE relation_name OWNER TO UserId
+ { $$ = cat_str(4, make_str("alter table"), $3, make_str("owner to"), $6); }
;
alter_column_default:
- SET DEFAULT a_expr { $$ = cat2_str(make_str("set default"), $3); }
- | DROP DEFAULT { $$ = make_str("drop default"); }
- ;
+ SET DEFAULT a_expr { $$ = cat2_str(make_str("set default"), $3); }
+ | DROP DEFAULT { $$ = make_str("drop default"); }
+ ;
-drop_behavior: CASCADE { $$ = make_str("cascade"); }
- | RESTRICT { $$ = make_str("restrict"); }
- ;
+drop_behavior: CASCADE { $$ = make_str("cascade"); }
+ | RESTRICT { $$ = make_str("restrict"); }
+ ;
/*****************************************************************************
*
*
*****************************************************************************/
-ClosePortalStmt: CLOSE opt_id
- {
- $$ = cat2_str(make_str("close"), $2);
- }
+ClosePortalStmt: CLOSE opt_id { $$ = cat2_str(make_str("close"), $2); }
;
-opt_id: ColId { $$ = $1; }
- | /*EMPTY*/ { $$ = NULL; }
- ;
+opt_id: ColId { $$ = $1; }
+ | /*EMPTY*/ { $$ = NULL; }
+ ;
/*****************************************************************************
*
*****************************************************************************/
CopyStmt: COPY opt_binary relation_name opt_with_copy copy_dirn copy_file_name copy_delimiter copy_null
- {
- $$ = cat_str(8, make_str("copy"), $2, $3, $4, $5, $6, $7, $8);
- }
+ { $$ = cat_str(8, make_str("copy"), $2, $3, $4, $5, $6, $7, $8); }
;
-copy_dirn: TO
- { $$ = make_str("to"); }
- | FROM
- { $$ = make_str("from"); }
+copy_dirn: TO { $$ = make_str("to"); }
+ | FROM { $$ = make_str("from"); }
;
/*
* used depends on the direction. (It really doesn't make sense to copy from
* stdout. We silently correct the "typo". - AY 9/94
*/
-copy_file_name: StringConst { $$ = $1; }
+copy_file_name: StringConst { $$ = $1; }
| STDIN { $$ = make_str("stdin"); }
| STDOUT { $$ = make_str("stdout"); }
;
-opt_binary: BINARY { $$ = make_str("binary"); }
+opt_binary: BINARY { $$ = make_str("binary"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
-opt_with_copy: WITH OIDS { $$ = make_str("with oids"); }
+opt_with_copy: WITH OIDS { $$ = make_str("with oids"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
/*
* the default copy delimiter is tab but the user can configure it
*/
-copy_delimiter: opt_using DELIMITERS StringConst { $$ = cat_str(3, $1, make_str("delimiters"), $3); }
- | /*EMPTY*/ { $$ = EMPTY; }
+copy_delimiter: opt_using DELIMITERS StringConst
+ { $$ = cat_str(3, $1, make_str("delimiters"), $3); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
opt_using: USING { $$ = make_str("using"); }
| /* EMPTY */ { $$ = EMPTY; }
;
-copy_null: WITH NULL_P AS StringConst { $$ = cat2_str(make_str("with null as"), $4); }
- | /* EMPTY */ { $$ = EMPTY; }
+copy_null: WITH NULL_P AS StringConst
+ { $$ = cat2_str(make_str("with null as"), $4); }
+ | /* EMPTY */
+ { $$ = EMPTY; }
;
/*****************************************************************************
CreateStmt: CREATE OptTemp TABLE relation_name '(' OptTableElementList ')'
OptInherit OptWithOids
- {
- $$ = cat_str(9, make_str("create"), $2, make_str("table"), $4, make_str("("), $6, make_str(")"), $8, $9);
- }
+ { $$ = cat_str(9, make_str("create"), $2, make_str("table"), $4, make_str("("), $6, make_str(")"), $8, $9); }
;
/*
* since TEMP is not a reserved word. See also OptTempTableName.
*/
-OptTemp: TEMPORARY { $$ = make_str("temporary"); }
- | TEMP { $$ = make_str("temp"); }
+OptTemp: TEMPORARY { $$ = make_str("temporary"); }
+ | TEMP { $$ = make_str("temp"); }
| LOCAL TEMPORARY { $$ = make_str("local temporary"); }
| LOCAL TEMP { $$ = make_str("local temp"); }
- | GLOBAL TEMPORARY {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMPORARY will be passed to backend");
- $$ = make_str("global temporary");
- }
- | GLOBAL TEMP {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMP will be passed to backend");
- $$ = make_str("global temp");
- }
- | /*EMPTY*/ { $$ = EMPTY; }
+ | GLOBAL TEMPORARY
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMPORARY will be passed to backend");
+ $$ = make_str("global temporary");
+ }
+ | GLOBAL TEMP
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMP will be passed to backend");
+ $$ = make_str("global temp");
+ }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
OptTableElementList: OptTableElementList ',' OptTableElement
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
- | OptTableElement
- {
- $$ = $1;
- }
- | /*EMPTY*/ { $$ = EMPTY; }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ | OptTableElement
+ { $$ = $1; }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
OptTableElement: columnDef { $$ = $1; }
- | TableConstraint { $$ = $1; }
+ | TableConstraint { $$ = $1; }
;
-columnDef: ColId Typename ColQualList opt_collate
- {
- if (strlen($4) > 0)
- {
- sprintf(errortext, "Currently unsupported CREATE TABLE / COLLATE %s will be passed to backend", $4);
- mmerror(PARSE_ERROR, ET_WARNING, errortext);
- }
- $$ = cat_str(4, $1, $2, $3, $4);
- }
+columnDef: ColId Typename ColQualList opt_collate
+ {
+ if (strlen($4) > 0)
+ {
+ sprintf(errortext, "Currently unsupported CREATE TABLE / COLLATE %s will be passed to backend", $4);
+ mmerror(PARSE_ERROR, ET_WARNING, errortext);
+ }
+ $$ = cat_str(4, $1, $2, $3, $4);
+ }
;
-ColQualList: ColQualList ColConstraint { $$ = cat2_str($1,$2); }
- | /*EMPTY*/ { $$ = EMPTY; }
+ColQualList: ColQualList ColConstraint { $$ = cat2_str($1,$2); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
ColConstraint: CONSTRAINT name ColConstraintElem
- {
- $$ = cat_str(3, make_str("constraint"), $2, $3);
- }
- | ColConstraintElem
- { $$ = $1; }
- | ConstraintAttr
- { $$ = $1; }
+ { $$ = cat_str(3, make_str("constraint"), $2, $3); }
+ | ColConstraintElem { $$ = $1; }
+ | ConstraintAttr { $$ = $1; }
;
/* DEFAULT NULL is already the default for Postgres.
* shift/reduce conflicts with WITH TIME ZONE anyway.
* - thomas 1999-01-08
*/
-ColConstraintElem: NOT NULL_P
- {
- $$ = make_str("not null");
- }
- | NULL_P
- {
- $$ = make_str("null");
- }
- | UNIQUE
- {
- $$ = make_str("unique");
- }
- | PRIMARY KEY
- {
- $$ = make_str("primary key");
- }
- | CHECK '(' a_expr ')'
- {
- $$ = cat_str(3, make_str("check ("), $3, make_str(")"));
- }
- | DEFAULT b_expr
- {
- $$ = cat2_str(make_str("default"), $2);
- }
- | REFERENCES ColId opt_column_list key_match key_actions
- {
- $$ = cat_str(5, make_str("references"), $2, $3, $4, $5);
- }
- ;
+ColConstraintElem: NOT NULL_P
+ { $$ = make_str("not null"); }
+ | NULL_P
+ { $$ = make_str("null"); }
+ | UNIQUE
+ { $$ = make_str("unique"); }
+ | PRIMARY KEY
+ { $$ = make_str("primary key"); }
+ | CHECK '(' a_expr ')'
+ { $$ = cat_str(3, make_str("check ("), $3, make_str(")")); }
+ | DEFAULT b_expr
+ { $$ = cat2_str(make_str("default"), $2); }
+ | REFERENCES ColId opt_column_list key_match key_actions
+ { $$ = cat_str(5, make_str("references"), $2, $3, $4, $5); }
+ ;
/*
* ConstraintAttr represents constraint attributes, which we parse as if
* there is no parsing conflict.
*/
ConstraintAttr: DEFERRABLE { $$ = make_str("deferrable"); }
- | NOT DEFERRABLE { $$ = make_str("not deferrable"); }
+ | NOT DEFERRABLE { $$ = make_str("not deferrable"); }
| INITIALLY DEFERRED { $$ = make_str("initially deferred"); }
| INITIALLY IMMEDIATE { $$ = make_str("initially immediate"); }
;
/* ConstraintElem specifies constraint syntax which is not embedded into
- * a column definition. ColConstraintElem specifies the embedded form.
+ * a column definition. ColConstraintElem specifies the embedded form.
* - thomas 1997-12-03
*/
TableConstraint: CONSTRAINT name ConstraintElem
- {
- $$ = cat_str(3, make_str("constraint"), $2, $3);
- }
+ { $$ = cat_str(3, make_str("constraint"), $2, $3); }
| ConstraintElem
- { $$ = $1; }
+ { $$ = $1; }
;
ConstraintElem: CHECK '(' a_expr ')'
- {
- $$ = cat_str(3, make_str("check("), $3, make_str(")"));
- }
+ { $$ = cat_str(3, make_str("check("), $3, make_str(")")); }
| UNIQUE '(' columnList ')'
- {
- $$ = cat_str(3, make_str("unique("), $3, make_str(")"));
- }
+ { $$ = cat_str(3, make_str("unique("), $3, make_str(")")); }
| PRIMARY KEY '(' columnList ')'
- {
- $$ = cat_str(3, make_str("primary key("), $4, make_str(")"));
- }
+ { $$ = cat_str(3, make_str("primary key("), $4, make_str(")")); }
| FOREIGN KEY '(' columnList ')' REFERENCES ColId opt_column_list
key_match key_actions ConstraintAttributeSpec
- {
- $$ = cat_str(8, make_str("foreign key("), $4, make_str(") references"), $7, $8, $9, $10, $11);
- }
+ { $$ = cat_str(8, make_str("foreign key("), $4, make_str(") references"), $7, $8, $9, $10, $11); }
;
-key_match: MATCH FULL
- {
- $$ = make_str("match full");
- }
- | MATCH PARTIAL
+key_match: MATCH FULL
+ { $$ = make_str("match full"); }
+ | MATCH PARTIAL
{
mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported FOREIGN KEY/MATCH PARTIAL will be passed to backend");
$$ = make_str("match partial");
}
| /*EMPTY*/
- {
- $$ = EMPTY;
- }
+ { $$ = EMPTY; }
;
-key_actions: key_delete { $$ = $1; }
- | key_update { $$ = $1; }
- | key_delete key_update { $$ = cat2_str($1, $2); }
- | key_update key_delete { $$ = cat2_str($1, $2); }
- | /*EMPTY*/ { $$ = EMPTY; }
+key_actions: key_delete { $$ = $1; }
+ | key_update { $$ = $1; }
+ | key_delete key_update { $$ = cat2_str($1, $2); }
+ | key_update key_delete { $$ = cat2_str($1, $2); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-key_delete: ON DELETE key_reference { $$ = cat2_str(make_str("on delete"), $3); }
+key_delete: ON DELETE key_reference
+ { $$ = cat2_str(make_str("on delete"), $3); }
-key_update: ON UPDATE key_reference { $$ = cat2_str(make_str("on update"), $3); }
+key_update: ON UPDATE key_reference
+ { $$ = cat2_str(make_str("on update"), $3); }
-key_reference: NO ACTION { $$ = make_str("no action"); }
- | RESTRICT { $$ = make_str("restrict"); }
- | CASCADE { $$ = make_str("cascade"); }
- | SET DEFAULT { $$ = make_str("set default"); }
- | SET NULL_P { $$ = make_str("set null"); }
+key_reference: NO ACTION { $$ = make_str("no action"); }
+ | RESTRICT { $$ = make_str("restrict"); }
+ | CASCADE { $$ = make_str("cascade"); }
+ | SET DEFAULT { $$ = make_str("set default"); }
+ | SET NULL_P { $$ = make_str("set null"); }
;
-OptInherit: INHERITS '(' relation_name_list ')' { $$ = cat_str(3, make_str("inherits ("), $3, make_str(")")); }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
+OptInherit: INHERITS '(' relation_name_list ')'
+ { $$ = cat_str(3, make_str("inherits ("), $3, make_str(")")); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
+ ;
-OptWithOids: WITH OIDS { $$ = make_str("with oids"); }
- | WITHOUT OIDS { $$ = make_str("without oids"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+OptWithOids: WITH OIDS { $$ = make_str("with oids"); }
+ | WITHOUT OIDS { $$ = make_str("without oids"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
*/
CreateAsStmt: CREATE OptTemp TABLE relation_name OptCreateAs AS
- { FoundInto = 0; } SelectStmt
+ { FoundInto = 0; }
+ SelectStmt
{
if (FoundInto == 1)
mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE / AS SELECT may not specify INTO");
- $$ = cat_str(7, make_str("create"), $2, make_str("table"), $4, $5, make_str("as"), $8);
+ $$ = cat_str(7, make_str("create"), $2, make_str("table"), $4, $5, make_str("as"), $8);
}
;
-OptCreateAs: '(' CreateAsList ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
- | /*EMPTY*/ { $$ = EMPTY; }
+OptCreateAs: '(' CreateAsList ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-CreateAsList: CreateAsList ',' CreateAsElement { $$ = cat_str(3, $1, make_str(","), $3); }
- | CreateAsElement { $$ = $1; }
+CreateAsList: CreateAsList ',' CreateAsElement
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ | CreateAsElement
+ { $$ = $1; }
;
CreateAsElement: ColId { $$ = $1; }
*
*****************************************************************************/
-CreateSeqStmt: CREATE OptTemp SEQUENCE relation_name OptSeqList
- {
- $$ = cat_str(4, make_str("create sequence"), $2, $4, $5);
- }
+CreateSeqStmt: CREATE OptTemp SEQUENCE relation_name OptSeqList
+ { $$ = cat_str(4, make_str("create sequence"), $2, $4, $5); }
;
-OptSeqList: OptSeqList OptSeqElem
- { $$ = cat2_str($1, $2); }
- | { $$ = EMPTY; }
+OptSeqList: OptSeqList OptSeqElem { $$ = cat2_str($1, $2); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
OptSeqElem: CACHE NumConst
- {
- $$ = cat2_str(make_str("cache"), $2);
- }
- | CYCLE
- {
- $$ = make_str("cycle");
- }
- | INCREMENT NumConst
- {
- $$ = cat2_str(make_str("increment"), $2);
- }
- | MAXVALUE NumConst
- {
- $$ = cat2_str(make_str("maxvalue"), $2);
- }
- | MINVALUE NumConst
- {
- $$ = cat2_str(make_str("minvalue"), $2);
- }
- | START NumConst
- {
- $$ = cat2_str(make_str("start"), $2);
- }
+ { $$ = cat2_str(make_str("cache"), $2); }
+ | CYCLE
+ { $$ = make_str("cycle"); }
+ | INCREMENT NumConst
+ { $$ = cat2_str(make_str("increment"), $2); }
+ | MAXVALUE NumConst
+ { $$ = cat2_str(make_str("maxvalue"), $2); }
+ | MINVALUE NumConst
+ { $$ = cat2_str(make_str("minvalue"), $2); }
+ | START NumConst
+ { $$ = cat2_str(make_str("start"), $2); }
;
/*****************************************************************************
CreatePLangStmt: CREATE opt_Trusted opt_procedural LANGUAGE ColId_or_Sconst
HANDLER func_name opt_lancompiler
- {
- $$ = cat_str(8, make_str("create"), $2, $3, make_str("language"), $5, make_str("handler"), $7, $8);
- }
+ { $$ = cat_str(8, make_str("create"), $2, $3, make_str("language"), $5, make_str("handler"), $7, $8); }
;
-opt_Trusted: TRUSTED { $$ = make_str("trusted"); }
- | { $$ = EMPTY; }
- ;
+opt_Trusted: TRUSTED { $$ = make_str("trusted"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
-opt_lancompiler: LANCOMPILER StringConst { $$ = cat2_str(make_str("lancompiler"), $2); }
- | /*EMPTY*/ { $$ = ""; }
- ;
+opt_lancompiler: LANCOMPILER StringConst
+ { $$ = cat2_str(make_str("lancompiler"), $2); }
+ | /*EMPTY*/
+ { $$ = ""; }
+ ;
-DropPLangStmt: DROP opt_procedural LANGUAGE StringConst
- {
- $$ = cat_str(4, make_str("drop"), $2, make_str("language"), $4);
- }
+DropPLangStmt: DROP opt_procedural LANGUAGE StringConst
+ { $$ = cat_str(4, make_str("drop"), $2, make_str("language"), $4); }
;
-opt_procedural: PROCEDURAL { $$ = make_str("prcedural"); }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
+opt_procedural: PROCEDURAL { $$ = make_str("prcedural"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
/*****************************************************************************
*
*****************************************************************************/
CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
- relation_name TriggerForSpec EXECUTE PROCEDURE
+ relation_name TriggerForSpec
+ EXECUTE PROCEDURE
name '(' TriggerFuncArgs ')'
- {
- $$ = cat_str(12, make_str("create trigger"), $3, $4, $5, make_str("on"), $7, $8, make_str("execute procedure"), $11, make_str("("), $13, make_str(")"));
- }
- | CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON
- relation_name OptConstrFromTable
+ { $$ = cat_str(12, make_str("create trigger"), $3, $4, $5, make_str("on"), $7, $8, make_str("execute procedure"), $11, make_str("("), $13, make_str(")")); }
+ | CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON
+ relation_name OptConstrFromTable
ConstraintAttributeSpec
- FOR EACH ROW EXECUTE PROCEDURE
+ FOR EACH ROW EXECUTE PROCEDURE
name '(' TriggerFuncArgs ')'
- {
- $$ = cat_str(13, make_str("create constraint trigger"), $4, make_str("after"), $6, make_str("on"), $8, $9, $10, make_str("for each row execute procedure"), $16, make_str("("), $18, make_str(")"));
- }
+ { $$ = cat_str(13, make_str("create constraint trigger"), $4, make_str("after"), $6, make_str("on"), $8, $9, $10, make_str("for each row execute procedure"), $16, make_str("("), $18, make_str(")")); }
;
-TriggerActionTime: BEFORE { $$ = make_str("before"); }
- | AFTER { $$ = make_str("after"); }
+TriggerActionTime: BEFORE { $$ = make_str("before"); }
+ | AFTER { $$ = make_str("after"); }
;
TriggerEvents: TriggerOneEvent
- {
- $$ = $1;
- }
- | TriggerOneEvent OR TriggerOneEvent
- {
- $$ = cat_str(3, $1, make_str("or"), $3);
- }
- | TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent
- {
- $$ = cat_str(5, $1, make_str("or"), $3, make_str("or"), $5);
- }
+ { $$ = $1; }
+ | TriggerOneEvent OR TriggerOneEvent
+ { $$ = cat_str(3, $1, make_str("or"), $3); }
+ | TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent
+ { $$ = cat_str(5, $1, make_str("or"), $3, make_str("or"), $5); }
;
-TriggerOneEvent: INSERT { $$ = make_str("insert"); }
- | DELETE { $$ = make_str("delete"); }
- | UPDATE { $$ = make_str("update"); }
+TriggerOneEvent: INSERT { $$ = make_str("insert"); }
+ | DELETE { $$ = make_str("delete"); }
+ | UPDATE { $$ = make_str("update"); }
;
TriggerForSpec: FOR TriggerForOpt TriggerForType
- {
- $$ = cat_str(3, make_str("for"), $2, $3);
- }
+ { $$ = cat_str(3, make_str("for"), $2, $3); }
;
-TriggerForOpt: EACH { $$ = make_str("each"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+TriggerForOpt: EACH { $$ = make_str("each"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-TriggerForType: ROW { $$ = make_str("row"); }
- | STATEMENT { $$ = make_str("statement"); }
+TriggerForType: ROW { $$ = make_str("row"); }
+ | STATEMENT { $$ = make_str("statement"); }
;
TriggerFuncArgs: TriggerFuncArg
- { $$ = $1; }
- | TriggerFuncArgs ',' TriggerFuncArg
- { $$ = cat_str(3, $1, make_str(","), $3); }
- | /*EMPTY*/
- { $$ = EMPTY; }
+ { $$ = $1; }
+ | TriggerFuncArgs ',' TriggerFuncArg
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-TriggerFuncArg: PosAllConst
- {
- $$ = $1;
- }
- | ColId { $$ = $1; }
- ;
-
-OptConstrFromTable: /* Empty */
- {
- $$ = EMPTY;
- }
- | FROM relation_name
- {
- $$ = cat2_str(make_str("from"), $2);
- }
- ;
-
-ConstraintAttributeSpec: ConstraintDeferrabilitySpec
- { $$ = $1; }
- | ConstraintDeferrabilitySpec ConstraintTimeSpec
- {
+TriggerFuncArg: PosAllConst { $$ = $1; }
+ | ColId { $$ = $1; }
+ ;
+
+OptConstrFromTable: /* Empty */ { $$ = EMPTY; }
+ | FROM relation_name { $$ = cat2_str(make_str("from"), $2); }
+ ;
+
+ConstraintAttributeSpec: ConstraintDeferrabilitySpec { $$ = $1; }
+ | ConstraintDeferrabilitySpec ConstraintTimeSpec
+ {
if (strcmp($1, "deferrable") != 0 && strcmp($2, "initially deferrable") == 0 )
mmerror(PARSE_ERROR, ET_ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE");
$$ = cat2_str($1, $2);
}
- | ConstraintTimeSpec
- { $$ = $1; }
- | ConstraintTimeSpec ConstraintDeferrabilitySpec
+ | ConstraintTimeSpec { $$ = $1; }
+ | ConstraintTimeSpec ConstraintDeferrabilitySpec
{
if (strcmp($2, "deferrable") != 0 && strcmp($1, "initially deferrable") == 0 )
mmerror(PARSE_ERROR, ET_ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE");
- $$ = cat2_str($1, $2);
+ $$ = cat2_str($1, $2);
}
- ;
+ ;
-ConstraintDeferrabilitySpec: NOT DEFERRABLE { $$ = make_str("not deferrable"); }
- | DEFERRABLE { $$ = make_str("deferrable"); }
- ;
+ConstraintDeferrabilitySpec: NOT DEFERRABLE
+ { $$ = make_str("not deferrable"); }
+ | DEFERRABLE
+ { $$ = make_str("deferrable"); }
+ ;
-ConstraintTimeSpec: INITIALLY IMMEDIATE { $$ = make_str("initially immediate"); }
- | INITIALLY DEFERRED { $$ = make_str("initially deferred"); }
- ;
+ConstraintTimeSpec: INITIALLY IMMEDIATE
+ { $$ = make_str("initially immediate"); }
+ | INITIALLY DEFERRED
+ { $$ = make_str("initially deferred"); }
+ ;
DropTrigStmt: DROP TRIGGER name ON relation_name
- {
- $$ = cat_str(4, make_str("drop trigger"), $3, make_str("on"), $5);
- }
+ { $$ = cat_str(4, make_str("drop trigger"), $3, make_str("on"), $5); }
;
/*****************************************************************************
*****************************************************************************/
DefineStmt: CREATE AGGREGATE func_name definition
- {
- $$ = cat_str(3, make_str("create aggregate"), $3, $4);
- }
- | CREATE OPERATOR all_Op definition
- {
- $$ = cat_str(3, make_str("create operator"), $3, $4);
- }
- | CREATE TYPE_P name definition
- {
- $$ = cat_str(3, make_str("create type"), $3, $4);
- }
+ { $$ = cat_str(3, make_str("create aggregate"), $3, $4); }
+ | CREATE OPERATOR all_Op definition
+ { $$ = cat_str(3, make_str("create operator"), $3, $4); }
+ | CREATE TYPE_P name definition
+ { $$ = cat_str(3, make_str("create type"), $3, $4); }
;
-definition: '(' def_list ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+definition: '(' def_list ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
;
def_list: def_elem { $$ = $1; }
- | def_list ',' def_elem { $$ = cat_str(3, $1, make_str(","), $3); }
+ | def_list ',' def_elem { $$ = cat_str(3, $1, make_str(","), $3); }
;
-def_elem: ColLabel '=' def_arg {
- $$ = cat_str(3, $1, make_str("="), $3);
- }
- | ColLabel
- {
- $$ = $1;
- }
+def_elem: ColLabel '=' def_arg { $$ = cat_str(3, $1, make_str("="), $3); }
+ | ColLabel { $$ = $1; }
;
/* Note: any simple identifier will be returned as a type name! */
-def_arg: func_return { $$ = $1; }
- | all_Op { $$ = $1; }
- | AllConst { $$ = $1; }
+def_arg: func_return { $$ = $1; }
+ | all_Op { $$ = $1; }
+ | AllConst { $$ = $1; }
;
/*****************************************************************************
*
* QUERY:
*
- * DROP itemtype itemname [, itemname ...]
+ * DROP itemtype itemname [, itemname ...]
*
*****************************************************************************/
DropStmt: DROP drop_type relation_name_list
- {
- $$ = cat_str(3, make_str("drop"), $2, $3);
- }
+ { $$ = cat_str(3, make_str("drop"), $2, $3); }
;
drop_type: TABLE { $$ = make_str("table"); }
- | SEQUENCE { $$ = make_str("sequence"); }
- | VIEW { $$ = make_str("view"); }
- | INDEX { $$ = make_str("index"); }
- | RULE { $$ = make_str("rule"); }
- | TYPE_P { $$ = make_str("type"); }
- ;
+ | SEQUENCE { $$ = make_str("sequence"); }
+ | VIEW { $$ = make_str("view"); }
+ | INDEX { $$ = make_str("index"); }
+ | RULE { $$ = make_str("rule"); }
+ | TYPE_P { $$ = make_str("type"); }
+ ;
/*****************************************************************************
*
- * QUERY:
- * truncate table relname
+ * QUERY:
+ * truncate table relname
*
*****************************************************************************/
TruncateStmt: TRUNCATE opt_table relation_name
- {
- $$ = cat2_str(make_str("truncate table"), $3);
- }
- ;
+ { $$ = cat2_str(make_str("truncate table"), $3); }
+ ;
/*****************************************************************************
*
* QUERY:
- * fetch/move [forward | backward] [ # | all ] [ in <portalname> ]
- * fetch [ forward | backward | absolute | relative ]
- * [ # | all | next | prior ] [ [ in | from ] <portalname> ]
+ * fetch/move [forward | backward] [ # | all ] [ in <portalname> ]
+ * fetch [ forward | backward | absolute | relative ]
+ * [ # | all | next | prior ] [ [ in | from ] <portalname> ]
*
*****************************************************************************/
FetchStmt: FETCH direction fetch_how_many from_in name ecpg_into
- {
- if (strcmp($2, "relative") == 0 && atol($3) == 0L)
- mmerror(PARSE_ERROR, ET_ERROR, "FETCH/RELATIVE at current position is not supported");
+ {
+ if (strcmp($2, "relative") == 0 && atol($3) == 0L)
+ mmerror(PARSE_ERROR, ET_ERROR, "FETCH/RELATIVE at current position is not supported");
- $$ = cat_str(5, make_str("fetch"), $2, $3, $4, $5);
- }
+ $$ = cat_str(5, make_str("fetch"), $2, $3, $4, $5);
+ }
| FETCH fetch_how_many from_in name ecpg_into
- {
- $$ = cat_str(4, make_str("fetch"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("fetch"), $2, $3, $4); }
| FETCH direction from_in name ecpg_into
- {
- $$ = cat_str(4, make_str("fetch"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("fetch"), $2, $3, $4); }
| FETCH from_in name ecpg_into
- {
- $$ = cat_str(3, make_str("fetch"), $2, $3);
- }
+ { $$ = cat_str(3, make_str("fetch"), $2, $3); }
| FETCH name ecpg_into
- {
- $$ = cat2_str(make_str("fetch"), $2);
- }
+ { $$ = cat2_str(make_str("fetch"), $2); }
| MOVE direction fetch_how_many from_in name
- {
- $$ = cat_str(5, make_str("move"), $2, $3, $4, $5);
- }
+ { $$ = cat_str(5, make_str("move"), $2, $3, $4, $5); }
| MOVE fetch_how_many from_in name
- {
- $$ = cat_str(4, make_str("move"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("move"), $2, $3, $4); }
| MOVE direction from_in name
- {
- $$ = cat_str(4, make_str("move"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("move"), $2, $3, $4); }
| MOVE from_in name
- {
- $$ = cat_str(3, make_str("move"), $2, $3);
- }
+ { $$ = cat_str(3, make_str("move"), $2, $3); }
| MOVE name
- {
- $$ = cat2_str(make_str("move"), $2);
- }
+ { $$ = cat2_str(make_str("move"), $2); }
;
direction: FORWARD { $$ = make_str("forward"); }
- | BACKWARD { $$ = make_str("backward"); }
- | RELATIVE { $$ = make_str("relative"); }
- | ABSOLUTE {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported FETCH/ABSOLUTE will be passed to backend, backend will use RELATIVE");
- $$ = make_str("absolute");
- }
+ | BACKWARD { $$ = make_str("backward"); }
+ | RELATIVE { $$ = make_str("relative"); }
+ | ABSOLUTE
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported FETCH/ABSOLUTE will be passed to backend, backend will use RELATIVE");
+ $$ = make_str("absolute");
+ }
;
-fetch_how_many: IntConst { $$ = $1; }
- | ALL { $$ = make_str("all"); }
- | NEXT { $$ = make_str("next"); }
- | PRIOR { $$ = make_str("prior"); }
+fetch_how_many: IntConst { $$ = $1; }
+ | ALL { $$ = make_str("all"); }
+ | NEXT { $$ = make_str("next"); }
+ | PRIOR { $$ = make_str("prior"); }
;
-from_in: IN { $$ = make_str("in"); }
- | FROM { $$ = make_str("from"); }
- ;
+from_in: IN { $$ = make_str("in"); }
+ | FROM { $$ = make_str("from"); }
+ ;
/*****************************************************************************
*
- * The COMMENT ON statement can take different forms based upon the type of
- * the object associated with the comment. The form of the statement is:
+ * The COMMENT ON statement can take different forms based upon the type of
+ * the object associated with the comment. The form of the statement is:
*
- * COMMENT ON [ [ DATABASE | INDEX | RULE | SEQUENCE | TABLE | TYPE | VIEW ]
- * <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION
- * <funcname> (arg1, arg2, ...) | OPERATOR <op>
- * (leftoperand_typ rightoperand_typ) | TRIGGER <triggername> ON
- * <relname> ] IS 'text'
+ * COMMENT ON [ [ DATABASE | INDEX | RULE | SEQUENCE | TABLE | TYPE | VIEW ]
+ * <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION
+ * <funcname> (arg1, arg2, ...) | OPERATOR <op>
+ * (leftoperand_typ rightoperand_typ) | TRIGGER <triggername> ON
+ * <relname> ] IS 'text'
*
*****************************************************************************/
CommentStmt: COMMENT ON comment_type name IS comment_text
- {
- $$ = cat_str(5, make_str("comment on"), $3, $4, make_str("is"), $6);
- }
- | COMMENT ON COLUMN relation_name '.' attr_name IS comment_text
- {
- $$ = cat_str(6, make_str("comment on column"), $4, make_str("."), $6, make_str("is"), $8);
- }
- | COMMENT ON AGGREGATE name '(' aggr_argtype ')' IS comment_text
- {
- $$ = cat_str(6, make_str("comment on aggregate"), $4, make_str("("), $6, make_str(") is"), $9);
- }
- | COMMENT ON AGGREGATE name aggr_argtype IS comment_text
- {
- $$ = cat_str(5, make_str("comment on aggregate"), $4, $5, make_str("is"), $7);
- }
+ { $$ = cat_str(5, make_str("comment on"), $3, $4, make_str("is"), $6); }
+ | COMMENT ON COLUMN relation_name '.' attr_name IS comment_text
+ { $$ = cat_str(6, make_str("comment on column"), $4, make_str("."), $6, make_str("is"), $8); }
+ | COMMENT ON AGGREGATE name '(' aggr_argtype ')' IS comment_text
+ { $$ = cat_str(6, make_str("comment on aggregate"), $4, make_str("("), $6, make_str(") is"), $9); }
+ | COMMENT ON AGGREGATE name aggr_argtype IS comment_text
+ { $$ = cat_str(5, make_str("comment on aggregate"), $4, $5, make_str("is"), $7); }
| COMMENT ON FUNCTION func_name func_args IS comment_text
- {
- $$ = cat_str(5, make_str("comment on function"), $4, $5, make_str("is"), $7);
- }
+ { $$ = cat_str(5, make_str("comment on function"), $4, $5, make_str("is"), $7); }
| COMMENT ON OPERATOR all_Op '(' oper_argtypes ')' IS comment_text
- {
- $$ = cat_str(6, make_str("comment on operator"), $4, make_str("("), $6, make_str(") is"), $9);
- }
+ { $$ = cat_str(6, make_str("comment on operator"), $4, make_str("("), $6, make_str(") is"), $9); }
| COMMENT ON TRIGGER name ON relation_name IS comment_text
- {
- $$ = cat_str(6, make_str("comment on trigger"), $4, make_str("on"), $6, make_str("is"), $8);
- }
- ;
+ { $$ = cat_str(6, make_str("comment on trigger"), $4, make_str("on"), $6, make_str("is"), $8); }
+ ;
-comment_type: DATABASE { $$ = make_str("database"); }
- | INDEX { $$ = make_str("idnex"); }
- | RULE { $$ = make_str("rule"); }
- | SEQUENCE { $$ = make_str("sequence"); }
- | TABLE { $$ = make_str("table"); }
- | TYPE_P { $$ = make_str("type"); }
- | VIEW { $$ = make_str("view"); }
+comment_type: DATABASE { $$ = make_str("database"); }
+ | INDEX { $$ = make_str("idnex"); }
+ | RULE { $$ = make_str("rule"); }
+ | SEQUENCE { $$ = make_str("sequence"); }
+ | TABLE { $$ = make_str("table"); }
+ | TYPE_P { $$ = make_str("type"); }
+ | VIEW { $$ = make_str("view"); }
;
-comment_text: StringConst { $$ = $1; }
- | NULL_P { $$ = make_str("null"); }
- ;
+comment_text: StringConst { $$ = $1; }
+ | NULL_P { $$ = make_str("null"); }
+ ;
/*****************************************************************************
*
*
*****************************************************************************/
-GrantStmt: GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option
- {
- $$ = cat_str(7, make_str("grant"), $2, make_str("on"), $4, make_str("to"), $6, $7);
- }
+GrantStmt: GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option
+ { $$ = cat_str(7, make_str("grant"), $2, make_str("on"), $4, make_str("to"), $6, $7); }
;
RevokeStmt: REVOKE opt_revoke_grant_option privileges ON privilege_target FROM grantee_list
- {
- $$ = cat_str(8, make_str("revoke"), $2, $3, make_str("on"), $5, make_str("from"), $7);
- }
+ { $$ = cat_str(8, make_str("revoke"), $2, $3, make_str("on"), $5, make_str("from"), $7); }
;
-privileges: ALL PRIVILEGES
- {
- $$ = make_str("all privileges");
- }
- | ALL
- {
- $$ = make_str("all");
- }
- | privilege_list
- {
- $$ = $1;
- }
+privileges: ALL PRIVILEGES { $$ = make_str("all privileges"); }
+ | ALL { $$ = make_str("all"); }
+ | privilege_list { $$ = $1; }
;
-privilege_list: privilege
- {
- $$ = $1;
- }
- | privilege_list ',' privilege
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
+privilege_list: privilege
+ { $$ = $1; }
+ | privilege_list ',' privilege
+ { $$ = cat_str(3, $1, make_str(","), $3); }
;
-privilege: SELECT
- {
- $$ = make_str("select");
- }
- | INSERT
- {
- $$ = make_str("insert");
- }
- | UPDATE
- {
- $$ = make_str("update");
- }
- | DELETE
- {
- $$ = make_str("delete");
- }
- | RULE
- {
- $$ = make_str("rule");
- }
- | REFERENCES
- {
- $$ = make_str("references");
- }
- | TRIGGER
- {
- $$ = make_str("trigger");
- }
- | EXECUTE
- {
- $$ = make_str("execute");
- }
- | USAGE
- {
- $$ = make_str("usage");
- }
+privilege: SELECT { $$ = make_str("select"); }
+ | INSERT { $$ = make_str("insert"); }
+ | UPDATE { $$ = make_str("update"); }
+ | DELETE { $$ = make_str("delete"); }
+ | RULE { $$ = make_str("rule"); }
+ | REFERENCES { $$ = make_str("references"); }
+ | TRIGGER { $$ = make_str("trigger"); }
+ | EXECUTE { $$ = make_str("execute"); }
+ | USAGE { $$ = make_str("usage"); }
;
-privilege_target: relation_name_list
- {
- $$ = $1;
- }
- | TABLE relation_name_list
- {
- $$ = cat2_str(make_str("table"), $2);
- }
+privilege_target: relation_name_list
+ { $$ = $1; }
+ | TABLE relation_name_list
+ { $$ = cat2_str(make_str("table"), $2); }
| FUNCTION function_with_argtypes_list
- {
- $$ = cat2_str(make_str("function"), $2);
- }
- | LANGUAGE name_list
- {
- $$ = cat2_str(make_str("language") , $2);
- }
+ { $$ = cat2_str(make_str("function"), $2); }
+ | LANGUAGE name_list
+ { $$ = cat2_str(make_str("language") , $2); }
;
-
-grantee_list: grantee { $$ = $1; }
- | grantee_list ',' grantee { $$ = cat_str(3, $1, make_str(","), $3); }
+
+grantee_list: grantee
+ { $$ = $1; }
+ | grantee_list ',' grantee
+ { $$ = cat_str(3, $1, make_str(","), $3); }
;
-
-grantee: PUBLIC
- {
- $$ = make_str("public");
- }
- | GROUP ColId
- {
- $$ = cat2_str(make_str("group"), $2);
- }
- | ColId
- {
- $$ = $1;
- }
+
+grantee: PUBLIC { $$ = make_str("public"); }
+ | GROUP ColId { $$ = cat2_str(make_str("group"), $2); }
+ | ColId { $$ = $1; }
;
opt_grant_grant_option: WITH GRANT OPTION
- {
+ {
mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported GRANT/WITH GRANT OPTION will be passed to backend");
$$ = make_str("with grant option");
}
- | /*EMPTY*/ { $$ = EMPTY; }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
opt_revoke_grant_option: GRANT OPTION FOR
- {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported REVOKE/GRANT OPTION FOR will be passed to backend");
- $$ = make_str("with grant option");
- }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported REVOKE/GRANT OPTION FOR will be passed to backend");
+ $$ = make_str("with grant option");
+ }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
function_with_argtypes_list: function_with_argtypes
- { $$ = $1; }
+ { $$ = $1; }
| function_with_argtypes_list ',' function_with_argtypes
{ $$ = cat_str(3, $1, make_str(","), $3); }
;
-function_with_argtypes: func_name func_args
- { $$ = cat2_str($1, $2); };
+function_with_argtypes: func_name func_args { $$ = cat2_str($1, $2); };
/*****************************************************************************
*
*****************************************************************************/
IndexStmt: CREATE index_opt_unique INDEX index_name ON relation_name
- access_method_clause '(' index_params ')' where_clause
- {
- $$ = cat_str(11, make_str("create"), $2, make_str("index"), $4, make_str("on"), $6, $7, make_str("("), $9, make_str(")"), $11);
- }
+ access_method_clause '(' index_params ')' where_clause
+ { $$ = cat_str(11, make_str("create"), $2, make_str("index"), $4, make_str("on"), $6, $7, make_str("("), $9, make_str(")"), $11); }
;
index_opt_unique: UNIQUE { $$ = make_str("unique"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-access_method_clause: USING access_method { $$ = cat2_str(make_str("using"), $2); }
- | /*EMPTY*/ { $$ = EMPTY; }
+access_method_clause: USING access_method
+ { $$ = cat2_str(make_str("using"), $2); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-index_params: index_list { $$ = $1; }
- | func_index { $$ = $1; }
+index_params: index_list { $$ = $1; }
+ | func_index { $$ = $1; }
;
-index_list: index_list ',' index_elem { $$ = cat_str(3, $1, make_str(","), $3); }
- | index_elem { $$ = $1; }
+index_list: index_list ',' index_elem
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ | index_elem
+ { $$ = $1; }
;
func_index: func_name '(' name_list ')' opt_class
- {
- $$ = cat_str(5, $1, make_str("("), $3, ")", $5);
- }
- ;
+ { $$ = cat_str(5, $1, make_str("("), $3, ")", $5); }
+ ;
index_elem: attr_name opt_class
- {
- $$ = cat2_str($1, $2);
- }
+ { $$ = cat2_str($1, $2); }
;
-opt_class: class {
- /*
- * Release 7.0 removed network_ops, timespan_ops, and
- * datetime_ops, so we suppress it from being passed to
- * the parser so the default *_ops is used. This can be
- * removed in some later release. bjm 2000/02/07
- *
- * Release 7.1 removes lztext_ops, so suppress that too
- * for a while. tgl 2000/07/30
- */
- if (strcmp($1, "network_ops") != 0 &&
- strcmp($1, "timespan_ops") != 0 &&
- strcmp($1, "datetime_ops") != 0 &&
- strcmp($1, "lztext_ops") != 0)
- $$ = $1;
- else
- $$ = EMPTY;
- }
- | USING class { $$ = cat2_str(make_str("using"), $2); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_class: class
+ {
+ /*
+ * Release 7.0 removed network_ops, timespan_ops, and
+ * datetime_ops, so we suppress it from being passed to
+ * the parser so the default *_ops is used. This can be
+ * removed in some later release. bjm 2000/02/07
+ *
+ * Release 7.1 removes lztext_ops, so suppress that too
+ * for a while. tgl 2000/07/30
+ */
+ if (strcmp($1, "network_ops") != 0 &&
+ strcmp($1, "timespan_ops") != 0 &&
+ strcmp($1, "datetime_ops") != 0 &&
+ strcmp($1, "lztext_ops") != 0)
+ $$ = $1;
+ else
+ $$ = EMPTY;
+ }
+ | USING class { $$ = cat2_str(make_str("using"), $2); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
*****************************************************************************/
ProcedureStmt: CREATE opt_or_replace FUNCTION func_name func_args
- RETURNS func_return AS func_as LANGUAGE ColId_or_Sconst opt_with
- {
- $$ = cat_str(12, make_str("create"), $2, make_str("function"), $4, $5, make_str("returns"), $7, make_str("as"), $9, make_str("language"), $11, $12);
- }
+ RETURNS func_return AS func_as LANGUAGE ColId_or_Sconst opt_with
+ { $$ = cat_str(12, make_str("create"), $2, make_str("function"), $4, $5, make_str("returns"), $7, make_str("as"), $9, make_str("language"), $11, $12); }
+ ;
-opt_or_replace: OR REPLACE { $$ = make_str("or replace"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_or_replace: OR REPLACE { $$ = make_str("or replace"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-opt_with: WITH definition { $$ = cat2_str(make_str("with"), $2); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_with: WITH definition { $$ = cat2_str(make_str("with"), $2); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-func_args: '(' func_args_list ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
- | '(' ')' { $$ = make_str("()"); }
+func_args: '(' func_args_list ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ | '(' ')'
+ { $$ = make_str("()"); }
;
-func_args_list: func_arg { $$ = $1; }
+func_args_list: func_arg
+ { $$ = $1; }
| func_args_list ',' func_arg
- { $$ = cat_str(3, $1, make_str(","), $3); }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
;
func_arg: opt_arg func_type
- {
- /* We can catch over-specified arguments here if we want to,
- * but for now better to silently swallow typmod, etc.
- * - thomas 2000-03-22
- */
- $$ = cat2_str($1, $2);
- }
- | func_type
- {
- $$ = $1;
- }
- ;
+ {
+ /* We can catch over-specified arguments here if we want to,
+ * but for now better to silently swallow typmod, etc.
+ * - thomas 2000-03-22
+ */
+ $$ = cat2_str($1, $2);
+ }
+ | func_type { $$ = $1; }
+ ;
-opt_arg: IN { $$ = make_str("in"); }
- | OUT {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE FUNCTION/OUT will be passed to backend");
+opt_arg: IN { $$ = make_str("in"); }
+ | OUT
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE FUNCTION/OUT will be passed to backend");
- $$ = make_str("out");
+ $$ = make_str("out");
}
- | INOUT {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE FUNCTION/INOUT will be passed to backend");
+ | INOUT
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE FUNCTION/INOUT will be passed to backend");
- $$ = make_str("inout");
+ $$ = make_str("inout");
}
- ;
+ ;
-func_as: StringConst { $$ = $1; }
- | StringConst ',' StringConst { $$ = cat_str(3, $1, make_str(","), $3); }
+func_as: StringConst
+ { $$ = $1; }
+ | StringConst ',' StringConst
+ { $$ = cat_str(3, $1, make_str(","), $3); }
func_return: func_type
- {
- /* We can catch over-specified arguments here if we want to,
- * but for now better to silently swallow typmod, etc.
- * - thomas 2000-03-22
- */
- $$ = $1;
- }
+ {
+ /* We can catch over-specified arguments here if we want to,
+ * but for now better to silently swallow typmod, etc.
+ * - thomas 2000-03-22
+ */
+ $$ = $1;
+ }
;
func_type: Typename
- {
- $$ = $1;
- }
- | type_name '.' ColId '%' TYPE_P
- {
- $$ = cat_str(4, $1, make_str("."), $3, make_str("% type"));
- }
+ { $$ = $1; }
+ | type_name '.' ColId '%' TYPE_P
+ { $$ = cat_str(4, $1, make_str("."), $3, make_str("% type")); }
;
/*****************************************************************************
*
* QUERY:
*
- * DROP FUNCTION funcname (arg1, arg2, ...)
- * DROP AGGREGATE aggname (aggtype)
- * DROP OPERATOR opname (leftoperand_typ rightoperand_typ)
+ * DROP FUNCTION funcname (arg1, arg2, ...)
+ * DROP AGGREGATE aggname (aggtype)
+ * DROP OPERATOR opname (leftoperand_typ rightoperand_typ)
*
*****************************************************************************/
-RemoveFuncStmt: DROP FUNCTION func_name func_args
- {
- $$ = cat_str(3, make_str("drop function"), $3, $4);
- }
+RemoveFuncStmt: DROP FUNCTION func_name func_args
+ { $$ = cat_str(3, make_str("drop function"), $3, $4); }
;
RemoveAggrStmt: DROP AGGREGATE func_name '(' aggr_argtype ')'
- {
- $$ = cat_str(5, make_str("drop aggregate"), $3, make_str("("), $5, make_str(")"));
- }
+ { $$ = cat_str(5, make_str("drop aggregate"), $3, make_str("("), $5, make_str(")")); }
| DROP AGGREGATE func_name aggr_argtype
- {
- /* Obsolete syntax, but must support for awhile */
- $$ = cat_str(3, make_str("drop aggregate"), $3, $4);
- }
+ {
+ /* Obsolete syntax, but must support for awhile */
+ $$ = cat_str(3, make_str("drop aggregate"), $3, $4);
+ }
;
-aggr_argtype: Typename { $$ = $1; }
- | '*' { $$ = make_str("*"); }
+aggr_argtype: Typename { $$ = $1; }
+ | '*' { $$ = make_str("*"); }
;
RemoveOperStmt: DROP OPERATOR all_Op '(' oper_argtypes ')'
- {
- $$ = cat_str(5, make_str("drop operator"), $3, make_str("("), $5, make_str(")"));
- }
+ { $$ = cat_str(5, make_str("drop operator"), $3, make_str("("), $5, make_str(")")); }
;
oper_argtypes: Typename
- {
- mmerror(PARSE_ERROR, ET_ERROR, "parser: argument type missing (use NONE for unary operators)");
- }
+ { mmerror(PARSE_ERROR, ET_ERROR, "parser: argument type missing (use NONE for unary operators)"); }
| Typename ',' Typename
- { $$ = cat_str(3, $1, make_str(","), $3); }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
| NONE ',' Typename /* left unary */
- { $$ = cat2_str(make_str("none,"), $3); }
+ { $$ = cat2_str(make_str("none,"), $3); }
| Typename ',' NONE /* right unary */
- { $$ = cat2_str($1, make_str(", none")); }
+ { $$ = cat2_str($1, make_str(", none")); }
;
/*****************************************************************************
*
- * QUERY:
+ * QUERY:
*
- * REINDEX type <typename> [FORCE] [ALL]
+ * REINDEX type <typename> [FORCE] [ALL]
*
*****************************************************************************/
ReindexStmt: REINDEX reindex_type name opt_force
- {
- $$ = cat_str(4, make_str("reindex"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("reindex"), $2, $3, $4); }
+ ;
-reindex_type: INDEX { $$ = make_str("index"); }
- | TABLE { $$ = make_str("table"); }
- | DATABASE { $$ = make_str("database"); }
- ;
-opt_force: FORCE { $$ = make_str("force"); }
- | /* EMPTY */ { $$ = EMPTY; }
- ;
+reindex_type: INDEX { $$ = make_str("index"); }
+ | TABLE { $$ = make_str("table"); }
+ | DATABASE { $$ = make_str("database"); }
+ ;
+
+opt_force: FORCE { $$ = make_str("force"); }
+ | /* EMPTY */ { $$ = EMPTY; }
+ ;
/*****************************************************************************
*
*****************************************************************************/
RenameStmt: ALTER TABLE relation_expr RENAME opt_column opt_name TO name
- {
- $$ = cat_str(7, make_str("alter table"), $3, make_str("rename"), $5, $6, make_str("to"), $8);
- }
+ { $$ = cat_str(7, make_str("alter table"), $3, make_str("rename"), $5, $6, make_str("to"), $8); }
;
-opt_name: name { $$ = $1; }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_name: name { $$ = $1; }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-opt_column: COLUMN { $$ = make_str("column"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_column: COLUMN { $$ = make_str("column"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
{ QueryIsRule=1; }
ON event TO event_object where_clause
DO opt_instead RuleActionList
- {
- QueryIsRule=0;
- $$ = cat_str(10, make_str("create rule"), $3, make_str("as on"), $7, make_str("to"), $9, $10, make_str("do"), $12, $13);
- }
+ {
+ QueryIsRule=0;
+ $$ = cat_str(10, make_str("create rule"), $3, make_str("as on"), $7, make_str("to"), $9, $10, make_str("do"), $12, $13);
+ }
;
-RuleActionList: NOTHING { $$ = make_str("nothing"); }
- | RuleActionStmt { $$ = $1; }
- | '(' RuleActionMulti ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
- ;
+RuleActionList: NOTHING { $$ = make_str("nothing"); }
+ | RuleActionStmt { $$ = $1; }
+ | '(' RuleActionMulti ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ ;
/* the thrashing around here is to discard "empty" statements... */
RuleActionMulti: RuleActionMulti ';' RuleActionStmtOrEmpty
- { $$ = cat_str(3, $1, make_str(";"), $3); }
+ { $$ = cat_str(3, $1, make_str(";"), $3); }
| RuleActionStmtOrEmpty
- { $$ = cat2_str($1, make_str(";")); }
+ { $$ = cat2_str($1, make_str(";")); }
;
RuleActionStmt: SelectStmt
| InsertStmt
- | UpdateStmt
- | DeleteStmt
+ | UpdateStmt
+ | DeleteStmt
| NotifyStmt
- ;
+ ;
+
RuleActionStmtOrEmpty: RuleActionStmt { $$ = $1; }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
event_object: relation_name '.' attr_name
- {
- $$ = make3_str($1, make_str("."), $3);
- }
+ { $$ = make3_str($1, make_str("."), $3); }
| relation_name
- {
- $$ = $1;
- }
+ { $$ = $1; }
;
/* change me to select, update, etc. some day */
-event: SELECT { $$ = make_str("select"); }
+event: SELECT { $$ = make_str("select"); }
| UPDATE { $$ = make_str("update"); }
| DELETE { $$ = make_str("delete"); }
| INSERT { $$ = make_str("insert"); }
;
-opt_instead: INSTEAD { $$ = make_str("instead"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_instead: INSTEAD { $$ = make_str("instead"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
*****************************************************************************/
NotifyStmt: NOTIFY relation_name
- {
- $$ = cat2_str(make_str("notify"), $2);
- }
+ { $$ = cat2_str(make_str("notify"), $2); }
;
ListenStmt: LISTEN relation_name
- {
- $$ = cat2_str(make_str("listen"), $2);
- }
-;
+ { $$ = cat2_str(make_str("listen"), $2); }
+ ;
UnlistenStmt: UNLISTEN relation_name
- {
- $$ = cat2_str(make_str("unlisten"), $2);
- }
+ { $$ = cat2_str(make_str("unlisten"), $2); }
| UNLISTEN '*'
- {
- $$ = make_str("unlisten *");
- }
-;
+ { $$ = make_str("unlisten *"); }
+ ;
+
/*****************************************************************************
*
- * Transactions:
+ * Transactions:
*
* BEGIN / COMMIT / ROLLBACK
- * (also older versions END / ABORT)
+ * (also older versions END / ABORT)
*
*****************************************************************************/
-TransactionStmt: ABORT_TRANS opt_trans { $$ = make_str("rollback"); }
- | BEGIN_TRANS opt_trans { $$ = make_str("begin transaction"); }
- | COMMIT opt_trans { $$ = make_str("commit"); }
- | COMMIT opt_trans opt_chain { $$ = cat2_str(make_str("commit"), $3); }
- | END_TRANS opt_trans { $$ = make_str("commit"); }
- | ROLLBACK opt_trans { $$ = make_str("rollback"); }
- | ROLLBACK opt_trans opt_chain { $$ = cat2_str(make_str("rollback"), $3); }
- ;
-
-opt_trans: WORK { $$ = EMPTY; }
- | TRANSACTION { $$ = EMPTY; }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
-
-opt_chain: AND NO CHAIN { $$ = make_str("and no chain"); }
- | AND CHAIN {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported COMMIT/CHAIN will be passed to backend");
-
- $$ = make_str("and chain");
- }
- ;
+TransactionStmt: ABORT_TRANS opt_trans { $$ = make_str("rollback"); }
+ | BEGIN_TRANS opt_trans { $$ = make_str("begin transaction"); }
+ | COMMIT opt_trans { $$ = make_str("commit"); }
+ | COMMIT opt_trans opt_chain { $$ = cat2_str(make_str("commit"), $3); }
+ | END_TRANS opt_trans { $$ = make_str("commit"); }
+ | ROLLBACK opt_trans { $$ = make_str("rollback"); }
+ | ROLLBACK opt_trans opt_chain { $$ = cat2_str(make_str("rollback"), $3); }
+ ;
+
+opt_trans: WORK { $$ = EMPTY; }
+ | TRANSACTION { $$ = EMPTY; }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
+
+opt_chain: AND NO CHAIN
+ { $$ = make_str("and no chain"); }
+ | AND CHAIN
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported COMMIT/CHAIN will be passed to backend");
+
+ $$ = make_str("and chain");
+ }
+ ;
/*****************************************************************************
*
*****************************************************************************/
ViewStmt: CREATE VIEW name opt_column_list AS SelectStmt
- {
- $$ = cat_str(5, make_str("create view"), $3, $4, make_str("as"), $6);
- }
+ { $$ = cat_str(5, make_str("create view"), $3, $4, make_str("as"), $6); }
;
*****************************************************************************/
LoadStmt: LOAD file_name
- {
- $$ = cat2_str(make_str("load"), $2);
- }
+ { $$ = cat2_str(make_str("load"), $2); }
;
*****************************************************************************/
CreatedbStmt: CREATE DATABASE database_name WITH createdb_opt_list
- {
- $$ = cat_str(4, make_str("create database"), $3, make_str("with"), $5);
- }
+ { $$ = cat_str(4, make_str("create database"), $3, make_str("with"), $5); }
| CREATE DATABASE database_name
- {
- $$ = cat2_str(make_str("create database"), $3);
- }
+ { $$ = cat2_str(make_str("create database"), $3); }
;
-createdb_opt_list: createdb_opt_item
- { $$ = $1; }
- | createdb_opt_list createdb_opt_item
- { $$ = cat2_str($1, $2); }
- ;
-
-createdb_opt_item: LOCATION opt_equal StringConst { $$ = cat_str(3,make_str("location"), $2, $3); }
- | LOCATION opt_equal DEFAULT { $$ = cat_str(3, make_str("location"), $2, make_str("default")); }
- | TEMPLATE opt_equal name { $$ = cat_str(3, make_str("template"), $2, $3); }
- | TEMPLATE opt_equal DEFAULT { $$ = cat_str(3, make_str("template"), $2, make_str("default")); }
- | ENCODING opt_equal PosIntStringConst
- {
- $$ = cat_str(3, make_str("encoding"), $2, $3);
- }
+createdb_opt_list: createdb_opt_item
+ { $$ = $1; }
+ | createdb_opt_list createdb_opt_item
+ { $$ = cat2_str($1, $2); }
+ ;
+
+createdb_opt_item: LOCATION opt_equal StringConst
+ { $$ = cat_str(3,make_str("location"), $2, $3); }
+ | LOCATION opt_equal DEFAULT
+ { $$ = cat_str(3, make_str("location"), $2, make_str("default")); }
+ | TEMPLATE opt_equal name
+ { $$ = cat_str(3, make_str("template"), $2, $3); }
+ | TEMPLATE opt_equal DEFAULT
+ { $$ = cat_str(3, make_str("template"), $2, make_str("default")); }
+ | ENCODING opt_equal PosIntStringConst
+ { $$ = cat_str(3, make_str("encoding"), $2, $3); }
| ENCODING opt_equal DEFAULT
- {
- $$ = cat_str(3, make_str("encoding"), $2, make_str("default"));
- }
- | OWNER opt_equal name
- {
- $$ = cat_str(3, make_str("owner"), $2, $3);
- }
+ { $$ = cat_str(3, make_str("encoding"), $2, make_str("default")); }
+ | OWNER opt_equal name
+ { $$ = cat_str(3, make_str("owner"), $2, $3); }
| OWNER opt_equal DEFAULT
- {
- $$ = cat_str(3, make_str("owner"), $2, make_str("default"));
- }
- ;
+ { $$ = cat_str(3, make_str("owner"), $2, make_str("default")); }
+ ;
+
+opt_equal: '=' { $$ = make_str("="); }
+ | /* EMPTY */ { $$ = EMPTY; }
+ ;
-opt_equal: '=' { $$ = make_str("="); }
- | /* EMPTY */ { $$ = EMPTY; }
- ;
/*****************************************************************************
*
- * ALTER DATABASE
+ * ALTER DATABASE
*
*
*****************************************************************************/
-AlterDatabaseSetStmt: ALTER DATABASE database_name VariableSetStmt
- {
- $$ = cat_str(3, make_str("alter database"), $3, $4);
- }
- | ALTER DATABASE database_name VariableResetStmt
- {
- $$ = cat_str(3, make_str("alter database"), $3, $4);
- }
- ;
-
+AlterDatabaseSetStmt: ALTER DATABASE database_name VariableSetStmt
+ { $$ = cat_str(3, make_str("alter database"), $3, $4); }
+ | ALTER DATABASE database_name VariableResetStmt
+ { $$ = cat_str(3, make_str("alter database"), $3, $4); }
+ ;
+
/*****************************************************************************
*
* DROP DATABASE
*
*****************************************************************************/
-DropdbStmt: DROP DATABASE database_name
- {
- $$ = cat2_str(make_str("drop database"), $3);
- }
+DropdbStmt: DROP DATABASE database_name
+ { $$ = cat2_str(make_str("drop database"), $3); }
;
*****************************************************************************/
ClusterStmt: CLUSTER index_name ON relation_name
- {
- $$ = cat_str(4, make_str("cluster"), $2, make_str("on"), $4);
- }
+ { $$ = cat_str(4, make_str("cluster"), $2, make_str("on"), $4); }
;
*****************************************************************************/
VacuumStmt: VACUUM opt_full opt_freeze opt_verbose
- {
- $$ = cat_str(4, make_str("vacuum"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("vacuum"), $2, $3, $4); }
| VACUUM opt_full opt_freeze opt_verbose relation_name
- {
- $$ = cat_str(5, make_str("vacuum"), $2, $3, $4, $5);
- }
+ { $$ = cat_str(5, make_str("vacuum"), $2, $3, $4, $5); }
| VACUUM opt_full opt_freeze opt_verbose AnalyzeStmt
- {
- $$ = cat_str(5, make_str("vacuum"), $2, $3, $4, $5);
- }
+ { $$ = cat_str(5, make_str("vacuum"), $2, $3, $4, $5); }
;
AnalyzeStmt: analyze_keyword opt_verbose
- {
- $$ = cat_str(2, $1, $2);
- }
+ { $$ = cat_str(2, $1, $2); }
| analyze_keyword opt_verbose relation_name opt_name_list
- {
- $$ = cat_str(4, $1, $2, $3, $4);
- }
+ { $$ = cat_str(4, $1, $2, $3, $4); }
;
-analyze_keyword: ANALYZE { $$ = make_str("analyze"); }
- | ANALYSE { $$ = make_str("analyse"); }
+analyze_keyword: ANALYZE { $$ = make_str("analyze"); }
+ | ANALYSE { $$ = make_str("analyse"); }
;
-opt_verbose: VERBOSE { $$ = make_str("verbose"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_verbose: VERBOSE { $$ = make_str("verbose"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-opt_full: FULL { $$ = make_str("full"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_full: FULL { $$ = make_str("full"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-opt_freeze: FREEZE { $$ = make_str("freeze"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_freeze: FREEZE { $$ = make_str("freeze"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-opt_name_list: '(' name_list ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_name_list: '(' name_list ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
*****************************************************************************/
ExplainStmt: EXPLAIN opt_verbose OptimizableStmt
- {
- $$ = cat_str(3, make_str("explain"), $2, $3);
- }
+ { $$ = cat_str(3, make_str("explain"), $2, $3); }
| EXPLAIN analyze_keyword opt_verbose OptimizableStmt
- {
- $$ = cat_str(4, make_str("explain"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("explain"), $2, $3, $4); }
;
* conflict. So I just changed the rules 'InsertStmt' and 'insert_rest' to accept
* the same statements without any shift/reduce conflicts */
InsertStmt: INSERT INTO relation_name insert_rest
- {
- $$ = cat_str(3, make_str("insert into"), $3, $4);
- }
+ { $$ = cat_str(3, make_str("insert into"), $3, $4); }
;
insert_rest: VALUES '(' target_list ')'
- {
- $$ = cat_str(3, make_str("values("), $3, make_str(")"));
- }
+ { $$ = cat_str(3, make_str("values("), $3, make_str(")")); }
| DEFAULT VALUES
- {
- $$ = make_str("default values");
- }
+ { $$ = make_str("default values"); }
| SelectStmt
- {
- $$ = $1;
- }
+ { $$ = $1; }
| '(' columnList ')' VALUES '(' target_list ')'
- {
- $$ = cat_str(5, make_str("("), $2, make_str(") values ("), $6, make_str(")"));
- }
+ { $$ = cat_str(5, make_str("("), $2, make_str(") values ("), $6, make_str(")")); }
| '(' columnList ')' SelectStmt
- {
- $$ = cat_str(4, make_str("("), $2, make_str(")"), $4);
- }
+ { $$ = cat_str(4, make_str("("), $2, make_str(")"), $4); }
;
-opt_column_list: '(' columnList ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_column_list: '(' columnList ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-columnList:
- columnList ',' columnElem
- { $$ = cat_str(3, $1, make_str(","), $3); }
+columnList: columnList ',' columnElem
+ { $$ = cat_str(3, $1, make_str(","), $3); }
| columnElem
- { $$ = $1; }
+ { $$ = $1; }
;
columnElem: ColId opt_indirection
- {
- $$ = cat2_str($1, $2);
- }
+ { $$ = cat2_str($1, $2); }
;
*****************************************************************************/
DeleteStmt: DELETE FROM relation_expr where_clause
- {
- $$ = cat_str(3, make_str("delete from"), $3, $4);
- }
+ { $$ = cat_str(3, make_str("delete from"), $3, $4); }
;
LockStmt: LOCK_P opt_table relation_name_list opt_lock
- {
- $$ = cat_str(4, make_str("lock"), $2, $3, $4);
- }
+ { $$ = cat_str(4, make_str("lock"), $2, $3, $4); }
;
-opt_lock: IN lock_type MODE { $$ = cat_str(3, make_str("in"), $2, make_str("mode")); }
- | /*EMPTY*/ { $$ = EMPTY;}
- ;
+opt_lock: IN lock_type MODE
+ { $$ = cat_str(3, make_str("in"), $2, make_str("mode")); }
+ | /*EMPTY*/
+ { $$ = EMPTY;}
+ ;
-lock_type: ACCESS SHARE { $$ = make_str("access share"); }
+lock_type: ACCESS SHARE { $$ = make_str("access share"); }
| ROW SHARE { $$ = make_str("access share"); }
| ROW EXCLUSIVE { $$ = make_str("row exclusive"); }
| SHARE UPDATE EXCLUSIVE { $$ = make_str("share update exclusive"); }
*****************************************************************************/
UpdateStmt: UPDATE relation_expr
- SET update_target_list
- from_clause
- where_clause
- {
- $$ = cat_str(6, make_str("update"), $2, make_str("set"), $4, $5, $6);
- }
+ SET update_target_list
+ from_clause
+ where_clause
+ {$$ = cat_str(6, make_str("update"), $2, make_str("set"), $4, $5, $6); }
;
*
*****************************************************************************/
CursorStmt: DECLARE name opt_cursor CURSOR FOR SelectStmt
+ {
+ struct cursor *ptr, *this;
+
+ for (ptr = cur; ptr != NULL; ptr = ptr->next)
+ {
+ if (strcmp($2, ptr->name) == 0)
{
- struct cursor *ptr, *this;
-
- for (ptr = cur; ptr != NULL; ptr = ptr->next)
- {
- if (strcmp($2, ptr->name) == 0)
- {
- /* re-definition is a bug */
- sprintf(errortext, "cursor %s already defined", $2);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
- }
-
- this = (struct cursor *) mm_alloc(sizeof(struct cursor));
-
- /* initial definition */
- this->next = cur;
- this->name = $2;
- this->connection = connection;
- this->command = cat_str(5, make_str("declare"), mm_strdup($2), $3, make_str("cursor for"), $6);
- this->argsinsert = argsinsert;
- this->argsresult = argsresult;
- argsinsert = argsresult = NULL;
-
- cur = this;
-
- $$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
+ /* re-definition is a bug */
+ sprintf(errortext, "cursor %s already defined", $2);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
}
+ }
+
+ this = (struct cursor *) mm_alloc(sizeof(struct cursor));
+
+ /* initial definition */
+ this->next = cur;
+ this->name = $2;
+ this->connection = connection;
+ this->command = cat_str(5, make_str("declare"), mm_strdup($2), $3, make_str("cursor for"), $6);
+ this->argsinsert = argsinsert;
+ this->argsresult = argsresult;
+ argsinsert = argsresult = NULL;
+
+ cur = this;
+
+ $$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
+ }
;
-opt_cursor: BINARY { $$ = make_str("binary"); }
- | INSENSITIVE { $$ = make_str("insensitive"); }
- | SCROLL { $$ = make_str("scroll"); }
- | INSENSITIVE SCROLL { $$ = make_str("insensitive scroll"); }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
+opt_cursor: BINARY { $$ = make_str("binary"); }
+ | INSENSITIVE { $$ = make_str("insensitive"); }
+ | SCROLL { $$ = make_str("scroll"); }
+ | INSENSITIVE SCROLL { $$ = make_str("insensitive scroll"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
/*****************************************************************************
*
*
*****************************************************************************/
-SelectStmt: select_no_parens %prec UMINUS
- { $$ = $1; }
- | select_with_parens %prec UMINUS
- { $$ = $1; }
- ;
-
-select_with_parens: '(' select_no_parens ')'
- {
- $$ = cat_str(3, make_str("("), $2, make_str(")"));
- }
- | '(' select_with_parens ')'
- {
- $$ = cat_str(3, make_str("("), $2, make_str(")"));
- }
- ;
-
-select_no_parens: simple_select
- {
- $$ = $1;
- }
+SelectStmt: select_no_parens %prec UMINUS
+ { $$ = $1; }
+ | select_with_parens %prec UMINUS
+ { $$ = $1; }
+ ;
+
+select_with_parens: '(' select_no_parens ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ | '(' select_with_parens ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ ;
+
+select_no_parens: simple_select
+ { $$ = $1; }
| select_clause sort_clause opt_for_update_clause opt_select_limit
- {
- $$ = cat_str(4, $1, $2, $3, $4);
- }
+ { $$ = cat_str(4, $1, $2, $3, $4); }
| select_clause for_update_clause opt_select_limit
- {
- $$ = cat_str(3, $1, $2, $3);
- }
- | select_clause select_limit
- {
- $$ = cat2_str($1, $2);
- }
-
-select_clause: simple_select
- {
- $$ = $1;
+ { $$ = cat_str(3, $1, $2, $3); }
+ | select_clause select_limit
+ { $$ = cat2_str($1, $2); }
+ ;
- }
- | select_with_parens
- {
- $$ = $1;
- }
+select_clause: simple_select { $$ = $1; }
+ | select_with_parens { $$ = $1; }
;
-simple_select: SELECT opt_distinct target_list
- into_clause from_clause where_clause
- group_clause having_clause
- {
- $$ = cat_str(8, make_str("select"), $2, $3, $4, $5, $6, $7, $8);
- }
- | select_clause UNION opt_all select_clause
- {
- $$ = cat_str(4, $1, make_str("union"), $3, $4);
- }
- | select_clause INTERSECT opt_all select_clause
- {
- $$ = cat_str(4, $1, make_str("intersect"), $3, $4);
- }
- | select_clause EXCEPT opt_all select_clause
- {
- $$ = cat_str(4, $1, make_str("except"), $3, $4);
- }
+simple_select: SELECT opt_distinct target_list
+ into_clause from_clause where_clause
+ group_clause having_clause
+ { $$ = cat_str(8, make_str("select"), $2, $3, $4, $5, $6, $7, $8); }
+ | select_clause UNION opt_all select_clause
+ { $$ = cat_str(4, $1, make_str("union"), $3, $4); }
+ | select_clause INTERSECT opt_all select_clause
+ { $$ = cat_str(4, $1, make_str("intersect"), $3, $4); }
+ | select_clause EXCEPT opt_all select_clause
+ { $$ = cat_str(4, $1, make_str("except"), $3, $4); }
;
-into_clause: INTO OptTempTableName {
- FoundInto = 1;
- $$= cat2_str(make_str("into"), $2);
- }
- | ecpg_into { $$ = EMPTY; }
- | /*EMPTY*/ { $$ = EMPTY; }
+into_clause: INTO OptTempTableName
+ {
+ FoundInto = 1;
+ $$= cat2_str(make_str("into"), $2);
+ }
+ | ecpg_into { $$ = EMPTY; }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
/*
* a boolean and a table name.
*/
OptTempTableName: TEMPORARY opt_table relation_name
- {
- $$ = cat_str(3, make_str("temporary"), $2, $3);
- }
- | TEMP opt_table relation_name
- {
- $$ = cat_str(3, make_str("temp"), $2, $3);
- }
- | LOCAL TEMPORARY opt_table relation_name
- {
- $$ = cat_str(3, make_str("local temporary"), $3, $4);
- }
- | LOCAL TEMP opt_table relation_name
- {
- $$ = cat_str(3, make_str("local temp"), $3, $4);
- }
- | GLOBAL TEMPORARY opt_table relation_name
- {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMPORARY will be passed to backend");
- $$ = cat_str(3, make_str("global temporary"), $3, $4);
- }
- | GLOBAL TEMP opt_table relation_name
- {
- mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMP will be passed to backend");
- $$ = cat_str(3, make_str("global temp"), $3, $4);
- }
- | TABLE relation_name
- {
- $$ = cat2_str(make_str("table"), $2);
- }
- | relation_name
- {
- $$ = $1;
- }
- ;
+ { $$ = cat_str(3, make_str("temporary"), $2, $3); }
+ | TEMP opt_table relation_name
+ { $$ = cat_str(3, make_str("temp"), $2, $3); }
+ | LOCAL TEMPORARY opt_table relation_name
+ { $$ = cat_str(3, make_str("local temporary"), $3, $4); }
+ | LOCAL TEMP opt_table relation_name
+ { $$ = cat_str(3, make_str("local temp"), $3, $4); }
+ | GLOBAL TEMPORARY opt_table relation_name
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMPORARY will be passed to backend");
+ $$ = cat_str(3, make_str("global temporary"), $3, $4);
+ }
+ | GLOBAL TEMP opt_table relation_name
+ {
+ mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported CREATE TABLE / GLOBAL TEMP will be passed to backend");
+ $$ = cat_str(3, make_str("global temp"), $3, $4);
+ }
+ | TABLE relation_name
+ { $$ = cat2_str(make_str("table"), $2); }
+ | relation_name
+ { $$ = $1; }
+ ;
-opt_table: TABLE { $$ = make_str("table"); }
+opt_table: TABLE { $$ = make_str("table"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
-opt_all: ALL { $$ = make_str("all"); }
+opt_all: ALL { $$ = make_str("all"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
-opt_distinct: DISTINCT { $$ = make_str("distinct"); }
- | DISTINCT ON '(' expr_list ')' { $$ = cat_str(3, make_str("distinct on ("), $4, make_str(")")); }
- | ALL { $$ = make_str("all"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_distinct: DISTINCT
+ { $$ = make_str("distinct"); }
+ | DISTINCT ON '(' expr_list ')'
+ { $$ = cat_str(3, make_str("distinct on ("), $4, make_str(")")); }
+ | ALL
+ { $$ = make_str("all"); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-sort_clause: ORDER BY sortby_list {
- $$ = cat2_str(make_str("order by"), $3);
- }
+sort_clause: ORDER BY sortby_list
+ { $$ = cat2_str(make_str("order by"), $3); }
;
sortby_list: sortby { $$ = $1; }
;
sortby: a_expr OptUseOp
- {
- $$ = cat2_str($1, $2);
- }
+ { $$ = cat2_str($1, $2); }
;
-OptUseOp: USING all_Op { $$ = cat2_str(make_str("using"), $2); }
+OptUseOp: USING all_Op { $$ = cat2_str(make_str("using"), $2); }
| ASC { $$ = make_str("asc"); }
| DESC { $$ = make_str("desc"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
-select_limit: LIMIT select_limit_value OFFSET select_offset_value
- { $$ = cat_str(4, make_str("limit"), $2, make_str("offset"), $4); }
+select_limit: LIMIT select_limit_value OFFSET select_offset_value
+ { $$ = cat_str(4, make_str("limit"), $2, make_str("offset"), $4); }
| OFFSET select_offset_value LIMIT select_limit_value
- { $$ = cat_str(4, make_str("offset"), $2, make_str("limit"), $4); }
- | LIMIT select_limit_value
- { $$ = cat2_str(make_str("limit"), $2); }
- | OFFSET select_offset_value
- { $$ = cat2_str(make_str("offset"), $2); }
+ { $$ = cat_str(4, make_str("offset"), $2, make_str("limit"), $4); }
+ | LIMIT select_limit_value
+ { $$ = cat2_str(make_str("limit"), $2); }
+ | OFFSET select_offset_value
+ { $$ = cat2_str(make_str("offset"), $2); }
| LIMIT select_limit_value ',' select_offset_value
- { mmerror(PARSE_ERROR, ET_WARNING, "No longer supported LIMIT #,# syntax passed to backend."); }
- ;
+ { mmerror(PARSE_ERROR, ET_WARNING, "No longer supported LIMIT #,# syntax passed to backend."); }
+ ;
-opt_select_limit: select_limit { $$ = $1; }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
+opt_select_limit: select_limit { $$ = $1; }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
-select_limit_value: PosIntConst {
- if (atoi($1) < 0)
- mmerror(PARSE_ERROR, ET_ERROR, "LIMIT must not be negative");
- $$ = $1;
- }
- | ALL { $$ = make_str("all"); }
- | PARAM { $$ = make_name(); }
- ;
-
-select_offset_value: PosIntConst {
- if (atoi($1) < 0)
- mmerror(PARSE_ERROR, ET_ERROR, "OFFSET must not be negative");
- $$ = $1;
- }
- | PARAM { $$ = make_name(); }
- ;
+select_limit_value: PosIntConst
+ {
+ if (atoi($1) < 0)
+ mmerror(PARSE_ERROR, ET_ERROR, "LIMIT must not be negative");
+ $$ = $1;
+ }
+ | ALL { $$ = make_str("all"); }
+ | PARAM { $$ = make_name(); }
+ ;
+
+select_offset_value: PosIntConst
+ {
+ if (atoi($1) < 0)
+ mmerror(PARSE_ERROR, ET_ERROR, "OFFSET must not be negative");
+ $$ = $1;
+ }
+ | PARAM { $$ = make_name(); }
+ ;
/*
* jimmy bell-style recursive queries aren't supported in the
* ...however, recursive addattr and rename supported. make special
* cases for these.
*/
-relation_name_list: name_list { $$ = $1; };
+relation_name_list: name_list { $$ = $1; }
+ ;
-name_list: name
- { $$ = $1; }
+name_list: name
+ { $$ = $1; }
| name_list ',' name
- { $$ = cat_str(3, $1, make_str(","), $3); }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
;
-group_clause: GROUP BY expr_list { $$ = cat2_str(make_str("group by"), $3); }
- | /*EMPTY*/ { $$ = EMPTY; }
+group_clause: GROUP BY expr_list
+ { $$ = cat2_str(make_str("group by"), $3); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-having_clause: HAVING a_expr
- {
- $$ = cat2_str(make_str("having"), $2);
- }
- | /*EMPTY*/ { $$ = EMPTY; }
+having_clause: HAVING a_expr
+ { $$ = cat2_str(make_str("having"), $2); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-for_update_clause: FOR UPDATE update_list
- {
- $$ = make_str("for update");
- }
+for_update_clause: FOR UPDATE update_list
+ { $$ = make_str("for update"); }
| FOR READ ONLY
- {
- $$ = make_str("for read only");
- }
+ { $$ = make_str("for read only"); }
;
-opt_for_update_clause: for_update_clause { $$ = $1; }
- | /* EMPTY */ { $$ = EMPTY; }
- ;
-
-update_list: OF name_list
- {
- $$ = cat2_str(make_str("of"), $2);
- }
- | /* EMPTY */
- {
- $$ = EMPTY;
- }
- ;
+opt_for_update_clause: for_update_clause { $$ = $1; }
+ | /* EMPTY */ { $$ = EMPTY; }
+ ;
+
+update_list: OF name_list { $$ = cat2_str(make_str("of"), $2); }
+ | /* EMPTY */ { $$ = EMPTY; }
+ ;
/*****************************************************************************
*
* clauses common to all Optimizable Stmts:
- * from_clause - allow list of both JOIN expressions and table names
+ * from_clause - allow list of both JOIN expressions and table names
* where_clause - qualifications for joins or restrictions
*
*****************************************************************************/
-from_clause: FROM from_list { $$ = cat2_str(make_str("from"), $2); }
- | /* EMPTY */ { $$ = EMPTY; }
+from_clause: FROM from_list { $$ = cat2_str(make_str("from"), $2); }
+ | /* EMPTY */ { $$ = EMPTY; }
;
-from_list: from_list ',' table_ref { $$ = cat_str(3, $1, make_str(","), $3); }
- | table_ref { $$ = $1; }
- ;
+from_list: from_list ',' table_ref { $$ = cat_str(3, $1, make_str(","), $3); }
+ | table_ref { $$ = $1; }
+ ;
/*
- * table_ref is where an alias clause can be attached. Note we cannot make
+ * table_ref is where an alias clause can be attached. Note we cannot make
* alias_clause have an empty production because that causes parse conflicts
* between table_ref := '(' joined_table ')' alias_clause
* and joined_table := '(' joined_table ')'. So, we must have the
* redundant-looking productions here instead.
- */
-table_ref: relation_expr
- {
- $$ = $1;
- }
- | relation_expr alias_clause
- {
- $$= cat2_str($1, $2);
- }
- | select_with_parens
- {
- mmerror(PARSE_ERROR, ET_ERROR, "sub-SELECT in FROM must have an alias");
- }
- | select_with_parens alias_clause
- {
- $$=cat2_str($1, $2);
- }
- | joined_table
- {
- $$ = $1;
- }
- | '(' joined_table ')' alias_clause
- {
- $$=cat_str(4, make_str("("), $2, make_str(")"), $4);
- }
- ;
+ */
+table_ref: relation_expr
+ { $$ = $1; }
+ | relation_expr alias_clause
+ { $$= cat2_str($1, $2); }
+ | select_with_parens
+ {mmerror(PARSE_ERROR, ET_ERROR, "sub-SELECT in FROM must have an alias");}
+ | select_with_parens alias_clause
+ { $$=cat2_str($1, $2); }
+ | joined_table
+ { $$ = $1; }
+ | '(' joined_table ')' alias_clause
+ { $$=cat_str(4, make_str("("), $2, make_str(")"), $4); }
+ ;
/*
* It may seem silly to separate joined_table from table_ref, but there is
* treat 'JOIN' and 'join_type JOIN' separately, rather than allowing
* join_type to expand to empty; if we try it, the parser generator can't
* figure out when to reduce an empty join_type right after table_ref.
- *
- * Note that a CROSS JOIN is the same as an unqualified
+ *
+ * Note that a CROSS JOIN is the same as an unqualified
* INNER JOIN, and an INNER JOIN/ON has the same shape
* but a qualification expression to limit membership.
* A NATURAL JOIN implicitly matches column names between
* tables and the shape is determined by which columns are
* in common. We'll collect columns during the later transformations.
- */
+ */
-joined_table: '(' joined_table ')'
- {
- $$ = cat_str(3, make_str("("), $2, make_str(")"));
- }
- | table_ref CROSS JOIN table_ref
- {
- $$ = cat_str(3, $1, make_str("cross join"), $4);
- }
- | table_ref UNIONJOIN table_ref
- {
- $$ = cat_str(3, $1, make_str("unionjoin"), $3);
- }
- | table_ref join_type JOIN table_ref join_qual
- {
- $$ = cat_str(5, $1, $2, make_str("join"), $4, $5);
- }
- | table_ref JOIN table_ref join_qual
- {
- $$ = cat_str(4, $1, make_str("join"), $3, $4);
- }
- | table_ref NATURAL join_type JOIN table_ref
- {
- $$ = cat_str(5, $1, make_str("natural"), $3, make_str("join"), $5);
- }
- | table_ref NATURAL JOIN table_ref
- {
- $$ = cat_str(3, $1, make_str("natural join"), $4);
- }
- ;
+joined_table: '(' joined_table ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ | table_ref CROSS JOIN table_ref
+ { $$ = cat_str(3, $1, make_str("cross join"), $4); }
+ | table_ref UNIONJOIN table_ref
+ { $$ = cat_str(3, $1, make_str("unionjoin"), $3); }
+ | table_ref join_type JOIN table_ref join_qual
+ { $$ = cat_str(5, $1, $2, make_str("join"), $4, $5); }
+ | table_ref JOIN table_ref join_qual
+ { $$ = cat_str(4, $1, make_str("join"), $3, $4); }
+ | table_ref NATURAL join_type JOIN table_ref
+ { $$ = cat_str(5, $1, make_str("natural"), $3, make_str("join"), $5); }
+ | table_ref NATURAL JOIN table_ref
+ { $$ = cat_str(3, $1, make_str("natural join"), $4); }
+ ;
alias_clause: AS ColId '(' name_list ')'
{ $$ = cat_str(5, make_str("as"), $2, make_str("("), $4, make_str(")")); }
{ $$ = $1; }
;
-join_type: FULL join_outer { $$ = cat2_str(make_str("full"), $2); }
- | LEFT join_outer { $$ = cat2_str(make_str("left"), $2); }
- | RIGHT join_outer { $$ = cat2_str(make_str("right"), $2); }
- | INNER_P { $$ = make_str("inner"); }
+join_type: FULL join_outer { $$ = cat2_str(make_str("full"), $2); }
+ | LEFT join_outer { $$ = cat2_str(make_str("left"), $2); }
+ | RIGHT join_outer { $$ = cat2_str(make_str("right"), $2); }
+ | INNER_P { $$ = make_str("inner"); }
;
/* OUTER is just noise... */
-join_outer: OUTER_P { $$ = make_str("outer"); }
- | /*EMPTY*/ { $$ = EMPTY; /* no qualifiers */ }
+join_outer: OUTER_P { $$ = make_str("outer"); }
+ | /*EMPTY*/ { $$ = EMPTY; /* no qualifiers */ }
;
/* JOIN qualification clauses
* Possibilities are:
- * USING ( column list ) allows only unqualified column names,
- * which must match between tables.
- * ON expr allows more general qualifications.
+ * USING ( column list ) allows only unqualified column names,
+ * which must match between tables.
+ * ON expr allows more general qualifications.
*/
-join_qual: USING '(' name_list ')' { $$ = cat_str(3, make_str("using ("), $3, make_str(")")); }
- | ON a_expr { $$ = cat2_str(make_str("on"), $2); }
- ;
+join_qual: USING '(' name_list ')'
+ { $$ = cat_str(3, make_str("using ("), $3, make_str(")")); }
+ | ON a_expr
+ { $$ = cat2_str(make_str("on"), $2); }
+ ;
relation_expr: relation_name
- {
- /* normal relations */
- $$ = $1;
- }
+ { /* normal relations */ $$ = $1; }
| relation_name '*'
- {
- /* inheritance query */
- $$ = cat2_str($1, make_str("*"));
- }
+ { /* inheritance query */ $$ = cat2_str($1, make_str("*")); }
| ONLY relation_name
- {
- /* inheritance query */
- $$ = cat2_str(make_str("ONLY "), $2);
- }
+ { /* inheritance query */ $$ = cat2_str(make_str("ONLY "), $2); }
+ ;
-where_clause: WHERE a_expr { $$ = cat2_str(make_str("where"), $2); }
+where_clause: WHERE a_expr { $$ = cat2_str(make_str("where"), $2); }
| /*EMPTY*/ { $$ = EMPTY; /* no qualifiers */ }
;
+
/*****************************************************************************
*
* Type syntax
*****************************************************************************/
Typename: SimpleTypename opt_array_bounds
- {
- $$ = cat2_str($1, $2.str);
- }
+ { $$ = cat2_str($1, $2.str); }
| SETOF SimpleTypename
- {
- $$ = cat2_str(make_str("setof"), $2);
- }
+ { $$ = cat2_str(make_str("setof"), $2); }
;
opt_array_bounds: '[' ']' opt_array_bounds
- {
- $$.index1 = 0;
- $$.index2 = $3.index1;
- $$.str = cat2_str(make_str("[]"), $3.str);
- }
+ {
+ $$.index1 = 0;
+ $$.index2 = $3.index1;
+ $$.str = cat2_str(make_str("[]"), $3.str);
+ }
| '[' Iresult ']' opt_array_bounds
- {
- char *txt = mm_alloc(20L);
+ {
+ char *txt = mm_alloc(20L);
- sprintf (txt, "%d", $2);
- $$.index1 = $2;
- $$.index2 = $4.index1;
- $$.str = cat_str(4, make_str("["), txt, make_str("]"), $4.str);
- }
+ sprintf (txt, "%d", $2);
+ $$.index1 = $2;
+ $$.index2 = $4.index1;
+ $$.str = cat_str(4, make_str("["), txt, make_str("]"), $4.str);
+ }
| /* EMPTY */
- {
- $$.index1 = -1;
- $$.index2 = -1;
- $$.str= EMPTY;
- }
+ {
+ $$.index1 = -1;
+ $$.index2 = -1;
+ $$.str= EMPTY;
+ }
;
-Iresult: PosIntConst { $$ = atol($1); }
- | '(' Iresult ')' { $$ = $2; }
- | Iresult '+' Iresult { $$ = $1 + $3; }
- | Iresult '-' Iresult { $$ = $1 - $3; }
- | Iresult '*' Iresult { $$ = $1 * $3; }
- | Iresult '/' Iresult { $$ = $1 / $3; }
- | Iresult '%' Iresult { $$ = $1 % $3; }
- ;
+Iresult: PosIntConst { $$ = atol($1); }
+ | '(' Iresult ')' { $$ = $2; }
+ | Iresult '+' Iresult { $$ = $1 + $3; }
+ | Iresult '-' Iresult { $$ = $1 - $3; }
+ | Iresult '*' Iresult { $$ = $1 * $3; }
+ | Iresult '/' Iresult { $$ = $1 / $3; }
+ | Iresult '%' Iresult { $$ = $1 % $3; }
+ ;
-SimpleTypename: ConstTypename { $$ = $1; }
- | ConstInterval opt_interval { $$ = cat2_str($1, $2); }
- | ConstInterval '(' PosIntConst ')' opt_interval { $$ = cat_str(5, $1, make_str("("), $3, make_str(")"), $5); }
- ;
+SimpleTypename: ConstTypename
+ { $$ = $1; }
+ | ConstInterval opt_interval
+ { $$ = cat2_str($1, $2); }
+ | ConstInterval '(' PosIntConst ')' opt_interval
+ { $$ = cat_str(5, $1, make_str("("), $3, make_str(")"), $5); }
+ ;
-ConstTypename: Generic { $$ = $1; }
- | ConstDatetime { $$ = $1; }
- | Numeric { $$ = $1; }
- | Bit { $$ = $1; }
- | Character { $$ = $1; }
+ConstTypename: Generic { $$ = $1; }
+ | ConstDatetime { $$ = $1; }
+ | Numeric { $$ = $1; }
+ | Bit { $$ = $1; }
+ | Character { $$ = $1; }
;
-Generic: type_name { $$ = $1; }
+Generic: type_name { $$ = $1; }
;
/* SQL92 numeric data types
* - thomas 1997-09-18
*/
Numeric: FLOAT opt_float
- {
- $$ = cat2_str(make_str("float"), $2);
- }
+ { $$ = cat2_str(make_str("float"), $2); }
| DOUBLE PRECISION
- {
- $$ = make_str("double precision");
- }
+ { $$ = make_str("double precision"); }
| DECIMAL opt_decimal
- {
- $$ = cat2_str(make_str("decimal"), $2);
- }
+ { $$ = cat2_str(make_str("decimal"), $2); }
| DEC opt_decimal
- {
- $$ = cat2_str(make_str("dec"), $2);
- }
+ { $$ = cat2_str(make_str("dec"), $2); }
| NUMERIC opt_numeric
- {
- $$ = cat2_str(make_str("numeric"), $2);
- }
+ { $$ = cat2_str(make_str("numeric"), $2); }
;
-opt_float: '(' PosIntConst ')'
- {
- $$ = cat_str(3, make_str("("), $2, make_str(")"));
- }
+opt_float: '(' PosIntConst ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
| /*EMPTY*/
- {
- $$ = EMPTY;
- }
+ { $$ = EMPTY; }
;
opt_numeric: '(' PosIntConst ',' PosIntConst ')'
- {
- $$ = cat_str(5, make_str("("), $2, make_str(","), $4, make_str(")"));
- }
+ { $$ = cat_str(5, make_str("("), $2, make_str(","), $4, make_str(")")); }
| '(' PosIntConst ')'
- {
- $$ = cat_str(3, make_str("("), $2, make_str(")"));
- }
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
| /*EMPTY*/
- {
- $$ = EMPTY;
- }
+ { $$ = EMPTY; }
;
opt_decimal: '(' PosIntConst ',' PosIntConst ')'
- {
- $$ = cat_str(5, make_str("("), $2, make_str(","), $4, make_str(")"));
- }
+ { $$ = cat_str(5, make_str("("), $2, make_str(","), $4, make_str(")")); }
| '(' PosIntConst ')'
- {
- $$ = cat_str(3, make_str("("), $2, make_str(")"));
- }
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
| /*EMPTY*/
- {
- $$ = EMPTY;
- }
+ { $$ = EMPTY; }
;
/*
* The following implements BIT() and BIT VARYING().
*/
Bit: bit '(' PosIntConst ')'
- {
- $$ = cat_str(4, $1, make_str("("), $3, make_str(")"));
- }
- | bit
- {
- $$ = $1;
- }
+ { $$ = cat_str(4, $1, make_str("("), $3, make_str(")")); }
+ | bit
+ { $$ = $1; }
;
bit: BIT opt_varying
- {
- $$ = cat2_str(make_str("bit"), $2);
- }
+ { $$ = cat2_str(make_str("bit"), $2); }
+ ;
-/*
+/*
* SQL92 character data types
* The following implements CHAR() and VARCHAR().
* - ay 6/95
*/
-Character: character '(' PosIntConst ')' opt_charset
- {
- $$ = cat_str(5, $1, make_str("("), $3, make_str(")"), $5);
- }
+Character: character '(' PosIntConst ')' opt_charset
+ { $$ = cat_str(5, $1, make_str("("), $3, make_str(")"), $5); }
| character opt_charset
- {
- $$ = cat2_str($1, $2);
- }
+ { $$ = cat2_str($1, $2); }
;
-character: CHARACTER opt_varying
- {
- $$ = cat2_str(make_str("character"), $2);
- }
- | CHAR opt_varying { $$ = cat2_str(make_str("char"), $2); }
- | VARCHAR { $$ = make_str("varchar"); }
- | NATIONAL CHARACTER opt_varying { $$ = cat2_str(make_str("national character"), $3); }
- | NATIONAL CHAR opt_varying { $$ = cat2_str(make_str("national char"), $3); }
- | NCHAR opt_varying { $$ = cat2_str(make_str("nchar"), $2); }
+character: CHARACTER opt_varying
+ { $$ = cat2_str(make_str("character"), $2); }
+ | CHAR opt_varying
+ { $$ = cat2_str(make_str("char"), $2); }
+ | VARCHAR
+ { $$ = make_str("varchar"); }
+ | NATIONAL CHARACTER opt_varying
+ { $$ = cat2_str(make_str("national character"), $3); }
+ | NATIONAL CHAR opt_varying
+ { $$ = cat2_str(make_str("national char"), $3); }
+ | NCHAR opt_varying
+ { $$ = cat2_str(make_str("nchar"), $2); }
;
-opt_varying: VARYING { $$ = make_str("varying"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_varying: VARYING
+ { $$ = make_str("varying"); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-opt_charset: CHARACTER SET ColId { $$ = cat2_str(make_str("character set"), $3); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_charset: CHARACTER SET ColId
+ { $$ = cat2_str(make_str("character set"), $3); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-opt_collate: COLLATE ColId { $$ = cat2_str(make_str("collate"), $2); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_collate: COLLATE ColId
+ { $$ = cat2_str(make_str("collate"), $2); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-
-ConstDatetime: TIMESTAMP '(' PosIntConst ')' opt_timezone
- {
- $$ = cat_str(4, make_str("timestamp("), $3, make_str(")"), $5);
- }
+
+ConstDatetime: TIMESTAMP '(' PosIntConst ')' opt_timezone
+ { $$ = cat_str(4, make_str("timestamp("), $3, make_str(")"), $5); }
| TIMESTAMP opt_timezone
- {
- $$ = cat2_str(make_str("timestamp"), $2);
- }
+ { $$ = cat2_str(make_str("timestamp"), $2); }
| TIME '(' PosIntConst ')' opt_timezone
- {
- $$ = cat_str(4, make_str("time("), $3, make_str(")"), $5);
- }
+ { $$ = cat_str(4, make_str("time("), $3, make_str(")"), $5); }
| TIME opt_timezone
- {
- $$ = cat2_str(make_str("time"), $2);
- }
+ { $$ = cat2_str(make_str("time"), $2); }
;
ConstInterval: INTERVAL
- {
- $$ = make_str("interval");
- }
+ { $$ = make_str("interval"); }
;
-opt_timezone: WITH TIME ZONE { $$ = make_str("with time zone"); }
- | WITHOUT TIME ZONE { $$ = make_str("without time zone"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_timezone: WITH TIME ZONE
+ { $$ = make_str("with time zone"); }
+ | WITHOUT TIME ZONE
+ { $$ = make_str("without time zone"); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
;
-opt_interval: YEAR_P { $$ = make_str("year"); }
- | MONTH_P { $$ = make_str("month"); }
- | DAY_P { $$ = make_str("day"); }
- | HOUR_P { $$ = make_str("hour"); }
- | MINUTE_P { $$ = make_str("minute"); }
- | SECOND_P { $$ = make_str("second"); }
+opt_interval: YEAR_P { $$ = make_str("year"); }
+ | MONTH_P { $$ = make_str("month"); }
+ | DAY_P { $$ = make_str("day"); }
+ | HOUR_P { $$ = make_str("hour"); }
+ | MINUTE_P { $$ = make_str("minute"); }
+ | SECOND_P { $$ = make_str("second"); }
| YEAR_P TO MONTH_P { $$ = make_str("year to month"); }
| DAY_P TO HOUR_P { $$ = make_str("day to hour"); }
| DAY_P TO MINUTE_P { $$ = make_str("day to minute"); }
| DAY_P TO SECOND_P { $$ = make_str("day to second"); }
- | HOUR_P TO MINUTE_P { $$ = make_str("hour to minute"); }
- | MINUTE_P TO SECOND_P { $$ = make_str("minute to second"); }
- | HOUR_P TO SECOND_P { $$ = make_str("hour to second"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+ | HOUR_P TO MINUTE_P { $$ = make_str("hour to minute"); }
+ | MINUTE_P TO SECOND_P { $$ = make_str("minute to second"); }
+ | HOUR_P TO SECOND_P { $$ = make_str("hour to second"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
/* Expressions using row descriptors
* Define row_descriptor to allow yacc to break the reduce/reduce conflict
- * with singleton expressions.
+ * with singleton expressions.
*/
row_expr: '(' row_descriptor ')' IN select_with_parens
- {
- $$ = cat_str(4, make_str("("), $2, make_str(") in "), $5);
- }
+ { $$ = cat_str(4, make_str("("), $2, make_str(") in "), $5); }
| '(' row_descriptor ')' NOT IN select_with_parens
- {
- $$ = cat_str(4, make_str("("), $2, make_str(") not in "), $6);
- }
+ { $$ = cat_str(4, make_str("("), $2, make_str(") not in "), $6); }
| '(' row_descriptor ')' all_Op sub_type select_with_parens
- {
- $$ = cat_str(6, make_str("("), $2, make_str(")"), $4, $5, $6);
- }
+ { $$ = cat_str(6, make_str("("), $2, make_str(")"), $4, $5, $6); }
| '(' row_descriptor ')' all_Op select_with_parens
- {
- $$ = cat_str(5, make_str("("), $2, make_str(")"), $4, $5);
- }
+ { $$ = cat_str(5, make_str("("), $2, make_str(")"), $4, $5); }
| '(' row_descriptor ')' all_Op '(' row_descriptor ')'
- {
- $$ = cat_str(7, make_str("("), $2, make_str(")"), $4, make_str("("), $6, make_str(")"));
- }
+ { $$ = cat_str(7, make_str("("), $2, make_str(")"), $4, make_str("("), $6, make_str(")")); }
| '(' row_descriptor ')' OVERLAPS '(' row_descriptor ')'
- {
- $$ = cat_str(5, make_str("("), $2, make_str(") overlaps ("), $6, make_str(")"));
- }
+ { $$ = cat_str(5, make_str("("), $2, make_str(") overlaps ("), $6, make_str(")")); }
;
row_descriptor: row_list ',' a_expr
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
;
-sub_type: ANY { $$ = make_str("ANY"); }
- | SOME { $$ = make_str("SOME"); }
- | ALL { $$ = make_str("ALL"); }
- ;
+sub_type: ANY { $$ = make_str("ANY"); }
+ | SOME { $$ = make_str("SOME"); }
+ | ALL { $$ = make_str("ALL"); }
+ ;
row_list: row_list ',' a_expr
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
| a_expr
- {
- $$ = $1;
- }
+ { $$ = $1; }
;
all_Op: Op | MathOp;
-MathOp: '+' { $$ = make_str("+"); }
+MathOp: '+' { $$ = make_str("+"); }
| '-' { $$ = make_str("-"); }
| '*' { $$ = make_str("*"); }
| '%' { $$ = make_str("%"); }
- | '^' { $$ = make_str("^"); }
+ | '^' { $$ = make_str("^"); }
| '/' { $$ = make_str("/"); }
| '<' { $$ = make_str("<"); }
| '>' { $$ = make_str(">"); }
*/
a_expr: c_expr
- { $$ = $1; }
+ { $$ = $1; }
| a_expr TYPECAST Typename
- { $$ = cat_str(3, $1, make_str("::"), $3); }
- | a_expr AT TIME ZONE c_expr
- { $$ = cat_str(3, $1, make_str("at time zone"), $5); }
+ { $$ = cat_str(3, $1, make_str("::"), $3); }
+ | a_expr AT TIME ZONE c_expr
+ { $$ = cat_str(3, $1, make_str("at time zone"), $5); }
/*
- * These operators must be called out explicitly in order to make use
- * of yacc/bison's automatic operator-precedence handling. All other
- * operator names are handled by the generic productions using "Op",
- * below; and all those operators will have the same precedence.
- *
- * If you add more explicitly-known operators, be sure to add them
- * also to b_expr and to the MathOp list above.
- */
+ * These operators must be called out explicitly in order to make use
+ * of yacc/bison's automatic operator-precedence handling. All other
+ * operator names are handled by the generic productions using "Op",
+ * below; and all those operators will have the same precedence.
+ *
+ * If you add more explicitly-known operators, be sure to add them
+ * also to b_expr and to the MathOp list above.
+ */
| '+' a_expr %prec UMINUS
- { $$ = cat2_str(make_str("+"), $2); }
+ { $$ = cat2_str(make_str("+"), $2); }
| '-' a_expr %prec UMINUS
- { $$ = cat2_str(make_str("-"), $2); }
+ { $$ = cat2_str(make_str("-"), $2); }
| '%' a_expr
- { $$ = cat2_str(make_str("%"), $2); }
+ { $$ = cat2_str(make_str("%"), $2); }
| '^' a_expr
- { $$ = cat2_str(make_str("^"), $2); }
+ { $$ = cat2_str(make_str("^"), $2); }
| a_expr '%'
- { $$ = cat2_str($1, make_str("%")); }
+ { $$ = cat2_str($1, make_str("%")); }
| a_expr '^'
- { $$ = cat2_str($1, make_str("^")); }
+ { $$ = cat2_str($1, make_str("^")); }
| a_expr '+' a_expr
- { $$ = cat_str(3, $1, make_str("+"), $3); }
+ { $$ = cat_str(3, $1, make_str("+"), $3); }
| a_expr '-' a_expr
- { $$ = cat_str(3, $1, make_str("-"), $3); }
+ { $$ = cat_str(3, $1, make_str("-"), $3); }
| a_expr '*' a_expr
- { $$ = cat_str(3, $1, make_str("*"), $3); }
+ { $$ = cat_str(3, $1, make_str("*"), $3); }
| a_expr '/' a_expr
- { $$ = cat_str(3, $1, make_str("/"), $3); }
+ { $$ = cat_str(3, $1, make_str("/"), $3); }
| a_expr '%' a_expr
- { $$ = cat_str(3, $1, make_str("%"), $3); }
+ { $$ = cat_str(3, $1, make_str("%"), $3); }
| a_expr '^' a_expr
- { $$ = cat_str(3, $1, make_str("^"), $3); }
+ { $$ = cat_str(3, $1, make_str("^"), $3); }
| a_expr '<' a_expr
- { $$ = cat_str(3, $1, make_str("<"), $3); }
+ { $$ = cat_str(3, $1, make_str("<"), $3); }
| a_expr '>' a_expr
- { $$ = cat_str(3, $1, make_str(">"), $3); }
+ { $$ = cat_str(3, $1, make_str(">"), $3); }
| a_expr '=' a_expr
- { $$ = cat_str(3, $1, make_str("="), $3); }
+ { $$ = cat_str(3, $1, make_str("="), $3); }
| a_expr Op a_expr
- { $$ = cat_str(3, $1, $2, $3); }
+ { $$ = cat_str(3, $1, $2, $3); }
| Op a_expr
- { $$ = cat2_str($1, $2); }
+ { $$ = cat2_str($1, $2); }
| a_expr Op %prec POSTFIXOP
- { $$ = cat2_str($1, $2); }
+ { $$ = cat2_str($1, $2); }
| a_expr AND a_expr
- { $$ = cat_str(3, $1, make_str("and"), $3); }
+ { $$ = cat_str(3, $1, make_str("and"), $3); }
| a_expr OR a_expr
- { $$ = cat_str(3, $1, make_str("or"), $3); }
+ { $$ = cat_str(3, $1, make_str("or"), $3); }
| NOT a_expr
- { $$ = cat2_str(make_str("not"), $2); }
+ { $$ = cat2_str(make_str("not"), $2); }
| a_expr LIKE a_expr
- { $$ = cat_str(3, $1, make_str("like"), $3); }
+ { $$ = cat_str(3, $1, make_str("like"), $3); }
| a_expr LIKE a_expr ESCAPE a_expr
- { $$ = cat_str(5, $1, make_str("like"), $3, make_str("escape"), $5); }
+ { $$ = cat_str(5, $1, make_str("like"), $3, make_str("escape"), $5); }
| a_expr NOT LIKE a_expr
- { $$ = cat_str(3, $1, make_str("not like"), $4); }
+ { $$ = cat_str(3, $1, make_str("not like"), $4); }
| a_expr NOT LIKE a_expr ESCAPE a_expr
- { $$ = cat_str(5, $1, make_str("not like"), $4, make_str("escape"), $6); }
+ { $$ = cat_str(5, $1, make_str("not like"), $4, make_str("escape"), $6); }
| a_expr ILIKE a_expr
- { $$ = cat_str(3, $1, make_str("ilike"), $3); }
+ { $$ = cat_str(3, $1, make_str("ilike"), $3); }
| a_expr ILIKE a_expr ESCAPE a_expr
- { $$ = cat_str(5, $1, make_str("ilike"), $3, make_str("escape"), $5); }
+ { $$ = cat_str(5, $1, make_str("ilike"), $3, make_str("escape"), $5); }
| a_expr NOT ILIKE a_expr
- { $$ = cat_str(3, $1, make_str("not ilike"), $4); }
+ { $$ = cat_str(3, $1, make_str("not ilike"), $4); }
| a_expr NOT ILIKE a_expr ESCAPE a_expr
- { $$ = cat_str(5, $1, make_str("not ilike"), $4, make_str("escape"), $6); }
+ { $$ = cat_str(5, $1, make_str("not ilike"), $4, make_str("escape"), $6); }
| a_expr ISNULL
- { $$ = cat2_str($1, make_str("isnull")); }
+ { $$ = cat2_str($1, make_str("isnull")); }
| a_expr IS NULL_P
- { $$ = cat2_str($1, make_str("is null")); }
+ { $$ = cat2_str($1, make_str("is null")); }
| a_expr NOTNULL
- { $$ = cat2_str($1, make_str("notnull")); }
+ { $$ = cat2_str($1, make_str("notnull")); }
| a_expr IS NOT NULL_P
- { $$ = cat2_str($1, make_str("is not null")); }
+ { $$ = cat2_str($1, make_str("is not null")); }
/* IS TRUE, IS FALSE, etc used to be function calls
- * but let's make them expressions to allow the optimizer
- * a chance to eliminate them if a_expr is a constant string.
+ * but let's make them expressions to allow the optimizer
+ * a chance to eliminate them if a_expr is a constant string.
* - thomas 1997-12-22
*
- * Created BooleanTest Node type, and changed handling
- * for NULL inputs
+ * Created BooleanTest Node type, and changed handling
+ * for NULL inputs
* - jec 2001-06-18
*/
| a_expr IS TRUE_P
- { $$ = cat2_str($1, make_str("is true")); }
+ { $$ = cat2_str($1, make_str("is true")); }
| a_expr IS NOT TRUE_P
- { $$ = cat2_str($1, make_str("is not true")); }
+ { $$ = cat2_str($1, make_str("is not true")); }
| a_expr IS FALSE_P
- { $$ = cat2_str($1, make_str("is false")); }
+ { $$ = cat2_str($1, make_str("is false")); }
| a_expr IS NOT FALSE_P
- { $$ = cat2_str($1, make_str("is not false")); }
+ { $$ = cat2_str($1, make_str("is not false")); }
| a_expr IS UNKNOWN
- { $$ = cat2_str($1, make_str("is unknown")); }
+ { $$ = cat2_str($1, make_str("is unknown")); }
| a_expr IS NOT UNKNOWN
- { $$ = cat2_str($1, make_str("is not unknown")); }
+ { $$ = cat2_str($1, make_str("is not unknown")); }
| a_expr BETWEEN b_expr AND b_expr %prec BETWEEN
- {
- $$ = cat_str(5, $1, make_str("between"), $3, make_str("and"), $5);
- }
+ { $$ = cat_str(5, $1, make_str("between"), $3, make_str("and"), $5); }
| a_expr NOT BETWEEN b_expr AND b_expr %prec BETWEEN
- {
- $$ = cat_str(5, $1, make_str("not between"), $4, make_str("and"), $6);
- }
- | a_expr IN in_expr
- {
- $$ = cat_str(3, $1, make_str(" in"), $3);
- }
+ { $$ = cat_str(5, $1, make_str("not between"), $4, make_str("and"), $6); }
+ | a_expr IN in_expr
+ { $$ = cat_str(3, $1, make_str(" in"), $3); }
| a_expr NOT IN in_expr
- {
- $$ = cat_str(3, $1, make_str(" not in "), $4);
- }
- | a_expr all_Op sub_type select_with_parens %prec Op
- {
- $$ = cat_str(4, $1, $2, $3, $4);
- }
+ { $$ = cat_str(3, $1, make_str(" not in "), $4); }
+ | a_expr all_Op sub_type select_with_parens %prec Op
+ { $$ = cat_str(4, $1, $2, $3, $4); }
| row_expr
- { $$ = $1; }
+ { $$ = $1; }
;
/* Restricted expressions
* just eliminate all the boolean-keyword-operator productions from b_expr.
*/
b_expr: c_expr
- {
- $$ = $1;
- }
+ { $$ = $1; }
| b_expr TYPECAST Typename
- {
- $$ = cat_str(3, $1, make_str("::"), $3);
- }
+ { $$ = cat_str(3, $1, make_str("::"), $3); }
| '-' b_expr %prec UMINUS
- { $$ = cat2_str(make_str("-"), $2); }
+ { $$ = cat2_str(make_str("-"), $2); }
| '%' b_expr
- { $$ = cat2_str(make_str("%"), $2); }
+ { $$ = cat2_str(make_str("%"), $2); }
| '^' b_expr
- { $$ = cat2_str(make_str("^"), $2); }
+ { $$ = cat2_str(make_str("^"), $2); }
| b_expr '%'
- { $$ = cat2_str($1, make_str("%")); }
+ { $$ = cat2_str($1, make_str("%")); }
| b_expr '^'
- { $$ = cat2_str($1, make_str("^")); }
+ { $$ = cat2_str($1, make_str("^")); }
| b_expr '+' b_expr
- { $$ = cat_str(3, $1, make_str("+"), $3); }
+ { $$ = cat_str(3, $1, make_str("+"), $3); }
| b_expr '-' b_expr
- { $$ = cat_str(3, $1, make_str("-"), $3); }
+ { $$ = cat_str(3, $1, make_str("-"), $3); }
| b_expr '*' b_expr
- { $$ = cat_str(3, $1, make_str("*"), $3); }
+ { $$ = cat_str(3, $1, make_str("*"), $3); }
| b_expr '/' b_expr
- { $$ = cat_str(3, $1, make_str("/"), $3); }
+ { $$ = cat_str(3, $1, make_str("/"), $3); }
| b_expr '%' b_expr
- { $$ = cat_str(3, $1, make_str("%"), $3); }
+ { $$ = cat_str(3, $1, make_str("%"), $3); }
| b_expr '^' b_expr
- { $$ = cat_str(3, $1, make_str("^"), $3); }
+ { $$ = cat_str(3, $1, make_str("^"), $3); }
| b_expr '<' b_expr
- { $$ = cat_str(3, $1, make_str("<"), $3); }
+ { $$ = cat_str(3, $1, make_str("<"), $3); }
| b_expr '>' b_expr
- { $$ = cat_str(3, $1, make_str(">"), $3); }
+ { $$ = cat_str(3, $1, make_str(">"), $3); }
| b_expr '=' b_expr
- { $$ = cat_str(3, $1, make_str("="), $3); }
+ { $$ = cat_str(3, $1, make_str("="), $3); }
| b_expr Op b_expr
- { $$ = cat_str(3, $1, $2, $3); }
+ { $$ = cat_str(3, $1, $2, $3); }
| Op b_expr
- { $$ = cat2_str($1, $2); }
+ { $$ = cat2_str($1, $2); }
| b_expr Op %prec POSTFIXOP
- { $$ = cat2_str($1, $2); }
+ { $$ = cat2_str($1, $2); }
;
/*
* Productions that can be used in both a_expr and b_expr.
*
* Note: productions that refer recursively to a_expr or b_expr mostly
- * cannot appear here. However, it's OK to refer to a_exprs that occur
+ * cannot appear here. However, it's OK to refer to a_exprs that occur
* inside parentheses, such as function arguments; that cannot introduce
* ambiguity to the b_expr syntax.
*/
c_expr: attr
- { $$ = $1; }
+ { $$ = $1; }
| ColId opt_indirection
- { $$ = cat2_str($1, $2); }
+ { $$ = cat2_str($1, $2); }
| AexprConst
- { $$ = $1; }
+ { $$ = $1; }
| '(' a_expr ')'
- { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
| 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(")")); }
| case_expr
- { $$ = $1; }
+ { $$ = $1; }
| func_name '(' ')'
- { $$ = cat2_str($1, make_str("()")); }
+ { $$ = cat2_str($1, make_str("()")); }
| func_name '(' expr_list ')'
- { $$ = cat_str(4, $1, make_str("("), $3, make_str(")")); }
+ { $$ = cat_str(4, $1, make_str("("), $3, make_str(")")); }
| func_name '(' ALL expr_list ')'
- { $$ = cat_str(4, $1, make_str("( all"), $4, make_str(")")); }
+ { $$ = cat_str(4, $1, make_str("( all"), $4, make_str(")")); }
| func_name '(' DISTINCT expr_list ')'
- { $$ = cat_str(4, $1, make_str("( distinct"), $4, make_str(")")); }
+ { $$ = cat_str(4, $1, make_str("( distinct"), $4, make_str(")")); }
| func_name '(' '*' ')'
- { $$ = cat2_str($1, make_str("(*)")); }
+ { $$ = cat2_str($1, make_str("(*)")); }
| CURRENT_DATE
- { $$ = make_str("current_date"); }
+ { $$ = make_str("current_date"); }
| CURRENT_TIME opt_empty_parentheses
- { $$ = cat2_str(make_str("current_time"), $2); }
+ { $$ = cat2_str(make_str("current_time"), $2); }
| CURRENT_TIME '(' PosIntConst ')'
- {
- $$ = make_str("current_time");
- }
+ { $$ = make_str("current_time"); }
| CURRENT_TIMESTAMP opt_empty_parentheses
- { $$ = cat2_str(make_str("current_timestamp"), $2); }
+ { $$ = cat2_str(make_str("current_timestamp"), $2); }
| CURRENT_TIMESTAMP '(' PosIntConst ')'
- {
- $$ = make_str("current_timestamp");
- }
+ { $$ = make_str("current_timestamp"); }
| CURRENT_USER opt_empty_parentheses
- { $$ = cat2_str(make_str("current_user"), $2); }
+ { $$ = cat2_str(make_str("current_user"), $2); }
| SESSION_USER opt_empty_parentheses
- { $$ = cat2_str(make_str("session_user"), $2); }
+ { $$ = cat2_str(make_str("session_user"), $2); }
| USER opt_empty_parentheses
- { $$ = cat2_str(make_str("user"), $2); }
+ { $$ = cat2_str(make_str("user"), $2); }
| EXTRACT '(' extract_list ')'
- { $$ = cat_str(3, make_str("extract("), $3, make_str(")")); }
+ { $$ = cat_str(3, make_str("extract("), $3, make_str(")")); }
| POSITION '(' position_list ')'
- { $$ = cat_str(3, make_str("position("), $3, make_str(")")); }
+ { $$ = cat_str(3, make_str("position("), $3, make_str(")")); }
| SUBSTRING '(' substr_list ')'
- { $$ = cat_str(3, make_str("substring("), $3, make_str(")")); }
+ { $$ = cat_str(3, make_str("substring("), $3, make_str(")")); }
/* various trim expressions are defined in SQL92 - thomas 1997-07-19 */
| TRIM '(' BOTH trim_list ')'
- { $$ = cat_str(3, make_str("trim(both"), $4, make_str(")")); }
+ { $$ = cat_str(3, make_str("trim(both"), $4, make_str(")")); }
| TRIM '(' LEADING trim_list ')'
- { $$ = cat_str(3, make_str("trim(leading"), $4, make_str(")")); }
+ { $$ = cat_str(3, make_str("trim(leading"), $4, make_str(")")); }
| TRIM '(' TRAILING trim_list ')'
- { $$ = cat_str(3, make_str("trim(trailing"), $4, make_str(")")); }
+ { $$ = cat_str(3, make_str("trim(trailing"), $4, make_str(")")); }
| TRIM '(' trim_list ')'
- { $$ = cat_str(3, make_str("trim("), $3, make_str(")")); }
- | select_with_parens %prec UMINUS
- { $$ = $1; }
+ { $$ = cat_str(3, make_str("trim("), $3, make_str(")")); }
+ | select_with_parens %prec UMINUS
+ { $$ = $1; }
| EXISTS select_with_parens
- { $$ = cat2_str(make_str("exists"), $2); }
+ { $$ = cat2_str(make_str("exists"), $2); }
;
-/*
+/*
* This used to use ecpg_expr, but since there is no shift/reduce conflict
* anymore, we can remove ecpg_expr. - MM
*/
opt_indirection: '[' a_expr ']' opt_indirection
- {
- $$ = cat_str(4, make_str("["), $2, make_str("]"), $4);
- }
+ { $$ = cat_str(4, make_str("["), $2, make_str("]"), $4); }
| '[' a_expr ':' a_expr ']' opt_indirection
- {
- $$ = cat_str(6, make_str("["), $2, make_str(":"), $4, make_str("]"), $6);
- }
+ { $$ = cat_str(6, make_str("["), $2, make_str(":"), $4, make_str("]"), $6); }
| /* EMPTY */
- { $$ = EMPTY; }
+ { $$ = EMPTY; }
;
-expr_list: a_expr
- { $$ = $1; }
+expr_list: a_expr
+ { $$ = $1; }
| expr_list ',' a_expr
- { $$ = cat_str(3, $1, make_str(","), $3); }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
| expr_list USING a_expr
- { $$ = cat_str(3, $1, make_str("using"), $3); }
+ { $$ = cat_str(3, $1, make_str("using"), $3); }
;
extract_list: extract_arg FROM a_expr
- {
- $$ = cat_str(3, $1, make_str("from"), $3);
- }
+ { $$ = cat_str(3, $1, make_str("from"), $3); }
| /* EMPTY */
- { $$ = EMPTY; }
+ { $$ = EMPTY; }
;
/* Allow delimited string SCONST in extract_arg as an SQL extension.
* - thomas 2001-04-12
*/
-extract_arg: IDENT { $$ = $1; }
- | YEAR_P { $$ = make_str("year"); }
- | MONTH_P { $$ = make_str("month"); }
- | DAY_P { $$ = make_str("day"); }
- | HOUR_P { $$ = make_str("hour"); }
- | MINUTE_P { $$ = make_str("minute"); }
- | SECOND_P { $$ = make_str("second"); }
- | StringConst { $$ = $1; }
+extract_arg: IDENT { $$ = $1; }
+ | YEAR_P { $$ = make_str("year"); }
+ | MONTH_P { $$ = make_str("month"); }
+ | DAY_P { $$ = make_str("day"); }
+ | HOUR_P { $$ = make_str("hour"); }
+ | MINUTE_P { $$ = make_str("minute"); }
+ | SECOND_P { $$ = make_str("second"); }
+ | StringConst { $$ = $1; }
;
/* position_list uses b_expr not a_expr to avoid conflict with general IN */
-position_list: b_expr IN b_expr
- { $$ = cat_str(3, $1, make_str("in"), $3); }
+position_list: b_expr IN b_expr
+ { $$ = cat_str(3, $1, make_str("in"), $3); }
| /* EMPTY */
- { $$ = EMPTY; }
+ { $$ = EMPTY; }
;
substr_list: a_expr substr_from substr_for
- {
- $$ = cat_str(3, $1, $2, $3);
- }
- | a_expr substr_for substr_from
- {
- $$ = cat_str(3, $1, $2, $3);
- }
- | a_expr substr_from
- {
- $$ = cat2_str($1, $2);
- }
+ { $$ = cat_str(3, $1, $2, $3); }
+ | a_expr substr_for substr_from
+ { $$ = cat_str(3, $1, $2, $3); }
+ | a_expr substr_from
+ { $$ = cat2_str($1, $2); }
| a_expr substr_for
- {
- $$ = cat2_str($1, $2);
- }
+ { $$ = cat2_str($1, $2); }
| expr_list
- {
- $$ = $1;
- }
+ { $$ = $1; }
| /* EMPTY */
- { $$ = EMPTY; }
+ { $$ = EMPTY; }
;
substr_from: FROM a_expr
- { $$ = cat2_str(make_str("from"), $2); }
+ { $$ = cat2_str(make_str("from"), $2); }
;
substr_for: FOR a_expr
- { $$ = cat2_str(make_str("for"), $2); }
+ { $$ = cat2_str(make_str("for"), $2); }
;
-trim_list: a_expr FROM expr_list
- { $$ = cat_str(3, $1, make_str("from"), $3); }
+trim_list: a_expr FROM expr_list
+ { $$ = cat_str(3, $1, make_str("from"), $3); }
| FROM expr_list
- { $$ = cat2_str(make_str("from"), $2); }
+ { $$ = cat2_str(make_str("from"), $2); }
| expr_list
- { $$ = $1; }
+ { $$ = $1; }
;
in_expr: select_with_parens
- {
- $$ = $1;
- }
+ { $$ = $1; }
| '(' in_expr_nodes ')'
- { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
;
-in_expr_nodes: a_expr
- { $$ = $1; }
+in_expr_nodes: a_expr
+ { $$ = $1; }
| in_expr_nodes ',' a_expr
- { $$ = cat_str(3, $1, make_str(","), $3);}
+ { $$ = cat_str(3, $1, make_str(","), $3);}
;
/* Case clause
* Define SQL92-style case clause.
* Allow all four forms described in the standard:
* - Full specification
- * CASE WHEN a = b THEN c ... ELSE d END
+ * CASE WHEN a = b THEN c ... ELSE d END
* - Implicit argument
- * CASE a WHEN b THEN c ... ELSE d END
+ * CASE a WHEN b THEN c ... ELSE d END
* - Conditional NULL
- * NULLIF(x,y)
- * same as CASE WHEN x = y THEN NULL ELSE x END
+ * NULLIF(x,y)
+ * same as CASE WHEN x = y THEN NULL ELSE x END
* - Conditional substitution from list, use first non-null argument
- * COALESCE(a,b,...)
+ * COALESCE(a,b,...)
* same as CASE WHEN a IS NOT NULL THEN a WHEN b IS NOT NULL THEN b ... END
* - thomas 1998-11-09
*/
-case_expr: CASE case_arg when_clause_list case_default END_TRANS
- { $$ = cat_str(5, make_str("case"), $2, $3, $4, make_str("end")); }
- | NULLIF '(' a_expr ',' a_expr ')'
- {
- $$ = cat_str(5, make_str("nullif("), $3, make_str(","), $5, make_str(")"));
- }
- | COALESCE '(' expr_list ')'
- {
- $$ = cat_str(3, make_str("coalesce("), $3, make_str(")"));
- }
+case_expr: CASE case_arg when_clause_list case_default END_TRANS
+ { $$ = cat_str(5, make_str("case"), $2, $3, $4, make_str("end")); }
+ | NULLIF '(' a_expr ',' a_expr ')'
+ { $$ = cat_str(5, make_str("nullif("), $3, make_str(","), $5, make_str(")")); }
+ | COALESCE '(' expr_list ')'
+ { $$ = cat_str(3, make_str("coalesce("), $3, make_str(")")); }
;
when_clause_list: when_clause_list when_clause
- { $$ = cat2_str($1, $2); }
- | when_clause
- { $$ = $1; }
- ;
+ { $$ = cat2_str($1, $2); }
+ | when_clause
+ { $$ = $1; }
+ ;
when_clause: WHEN a_expr THEN a_expr
- {
- $$ = cat_str(4, make_str("when"), $2, make_str("then"), $4);
- }
- ;
-
-case_default: ELSE a_expr { $$ = cat2_str(make_str("else"), $2); }
- | /*EMPTY*/ { $$ = EMPTY; }
- ;
-
-case_arg: a_expr {
- $$ = $1;
- }
- | /*EMPTY*/
- { $$ = EMPTY; }
- ;
+ { $$ = cat_str(4, make_str("when"), $2, make_str("then"), $4); }
+ ;
+
+case_default: ELSE a_expr
+ { $$ = cat2_str(make_str("else"), $2); }
+ | /*EMPTY*/
+ { $$ = EMPTY; }
+ ;
+
+case_arg: a_expr { $$ = $1; }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
attr: relation_name '.' attrs opt_indirection
- {
- $$ = cat_str(4, $1, make_str("."), $3, $4);
- }
+ { $$ = cat_str(4, $1, make_str("."), $3, $4); }
| ParamNo '.' attrs opt_indirection
- {
- $$ = cat_str(4, $1, make_str("."), $3, $4);
- }
+ { $$ = cat_str(4, $1, make_str("."), $3, $4); }
;
attrs: attr_name
- { $$ = $1; }
+ { $$ = $1; }
| attrs '.' attr_name
- { $$ = cat_str(3, $1, make_str("."), $3); }
+ { $$ = cat_str(3, $1, make_str("."), $3); }
| attrs '.' '*'
- { $$ = make2_str($1, make_str(".*")); }
+ { $$ = make2_str($1, make_str(".*")); }
;
-opt_empty_parentheses: '(' ')' { $$ = make_str("()"); }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_empty_parentheses: '(' ')' { $$ = make_str("()"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
+
/*****************************************************************************
*
/* Target lists as found in SELECT ... and INSERT VALUES ( ... ) */
target_list: target_list ',' target_el
- { $$ = cat_str(3, $1, make_str(","), $3); }
+ { $$ = cat_str(3, $1, make_str(","), $3); }
| target_el
- { $$ = $1; }
+ { $$ = $1; }
;
/* AS is not optional because shift/red conflict with unary ops */
-target_el: a_expr AS ColLabel
- {
- $$ = cat_str(3, $1, make_str("as"), $3);
- }
+target_el: a_expr AS ColLabel
+ { $$ = cat_str(3, $1, make_str("as"), $3); }
| a_expr
- {
- $$ = $1;
- }
+ { $$ = $1; }
| relation_name '.' '*'
- {
- $$ = make2_str($1, make_str(".*"));
- }
+ { $$ = make2_str($1, make_str(".*")); }
| '*'
- {
- $$ = make_str("*");
- }
+ { $$ = make_str("*"); }
;
/* Target list as found in UPDATE table SET ... */
update_target_list: update_target_list ',' update_target_el
- { $$ = cat_str(3, $1, make_str(","),$3); }
+ { $$ = cat_str(3, $1, make_str(","),$3); }
| update_target_el
- { $$ = $1; }
- | '*' { $$ = make_str("*"); }
+ { $$ = $1; }
+ | '*'
+ { $$ = make_str("*"); }
;
update_target_el: ColId opt_indirection '=' a_expr
- {
- $$ = cat_str(4, $1, $2, make_str("="), $4);
- }
+ { $$ = cat_str(4, $1, $2, make_str("="), $4); }
;
/*****************************************************************************
*
- * Names and constants
+ * Names and constants
*
*****************************************************************************/
-relation_name: SpecialRuleRelation
- {
- $$ = $1;
- }
- | ColId
- {
- $$ = $1;
- }
+relation_name: SpecialRuleRelation { $$ = $1; }
+ | ColId { $$ = $1; }
;
-name: ColId { $$ = $1; };
+name: ColId { $$ = $1; };
database_name: ColId { $$ = $1; };
access_method: ColId { $$ = $1; };
attr_name: ColId { $$ = $1; };
class: ColId { $$ = $1; };
index_name: ColId { $$ = $1; };
-file_name: StringConst { $$ = $1; };
+file_name: StringConst { $$ = $1; };
/* Constants
* Include TRUE/FALSE for SQL3 support. - thomas 1997-10-24
*/
AexprConst: PosAllConst
- {
- $$ = $1;
- }
+ { $$ = $1; }
| ConstTypename StringConst
- {
- $$ = cat2_str($1, $2);
- }
- | ConstInterval StringConst opt_interval
- {
- $$ = cat_str(3, $1, $2, $3);
- }
+ { $$ = cat2_str($1, $2); }
+ | ConstInterval StringConst opt_interval
+ { $$ = cat_str(3, $1, $2, $3); }
| ConstInterval '(' PosIntConst ')' StringConst opt_interval
- {
- $$ = cat_str(6, $1, make_str("("), $3, make_str(")"), $5, $6);
- }
+ { $$ = cat_str(6, $1, make_str("("), $3, make_str(")"), $5, $6); }
| ParamNo
- { $$ = $1; }
+ { $$ = $1; }
| TRUE_P
- {
- $$ = make_str("true");
- }
+ { $$ = make_str("true"); }
| FALSE_P
- {
- $$ = make_str("false");
- }
+ { $$ = make_str("false"); }
| NULL_P
- {
- $$ = make_str("null");
- }
+ { $$ = make_str("null"); }
| civarind
- { $$ = make_str("?"); }
+ { $$ = make_str("?"); }
;
ParamNo: PARAM opt_indirection
- {
- $$ = cat2_str(make_name(), $2);
- }
+ { $$ = cat2_str(make_name(), $2); }
+ ;
+
+Iconst: ICONST { $$ = make_name();};
+Fconst: FCONST { $$ = make_name();};
+Bitconst: BITCONST { $$ = make_name();};
+Sconst: SCONST
+ {
+ $$ = (char *)mm_alloc(strlen($1) + 3);
+ $$[0]='\'';
+ strcpy($$+1, $1);
+ $$[strlen($1)+2]='\0';
+ $$[strlen($1)+1]='\'';
+ free($1);
+ }
;
-Iconst: ICONST { $$ = make_name();};
-Fconst: FCONST { $$ = make_name();};
-Bitconst: BITCONST { $$ = make_name();};
-Sconst: SCONST {
- $$ = (char *)mm_alloc(strlen($1) + 3);
- $$[0]='\'';
- strcpy($$+1, $1);
- $$[strlen($1)+2]='\0';
- $$[strlen($1)+1]='\'';
- free($1);
- }
PosIntConst: Iconst { $$ = $1; }
- | civar { $$ = make_str("?"); }
+ | civar { $$ = make_str("?"); }
;
IntConst: PosIntConst { $$ = $1; }
;
StringConst: Sconst { $$ = $1; }
- | civar { $$ = make_str("?"); }
+ | civar { $$ = make_str("?"); }
;
-PosIntStringConst: Iconst { $$ = $1; }
- | Sconst { $$ = $1; }
- | civar { $$ = make_str("?"); }
- ;
+PosIntStringConst: Iconst { $$ = $1; }
+ | Sconst { $$ = $1; }
+ | civar { $$ = make_str("?"); }
+ ;
-NumConst: Fconst { $$ = $1; }
- | Iconst { $$ = $1; }
- | '-' Fconst { $$ = cat2_str(make_str("-"), $2); }
- | '-' Iconst { $$ = cat2_str(make_str("-"), $2); }
- | civar { $$ = make_str("?"); }
+NumConst: Fconst { $$ = $1; }
+ | Iconst { $$ = $1; }
+ | '-' Fconst { $$ = cat2_str(make_str("-"), $2); }
+ | '-' Iconst { $$ = cat2_str(make_str("-"), $2); }
+ | civar { $$ = make_str("?"); }
;
-AllConst: Sconst { $$ = $1; }
- | NumConst { $$ = $1; }
+AllConst: Sconst { $$ = $1; }
+ | NumConst { $$ = $1; }
;
-PosAllConst: Sconst { $$ = $1; }
- | Fconst { $$ = $1; }
- | Iconst { $$ = $1; }
- | Bitconst { $$ = $1; }
- | civar { $$ = make_str("?"); }
+PosAllConst: Sconst { $$ = $1; }
+ | Fconst { $$ = $1; }
+ | Iconst { $$ = $1; }
+ | Bitconst { $$ = $1; }
+ | civar { $$ = make_str("?"); }
;
-UserId: ColId { $$ = $1;};
+UserId: ColId { $$ = $1;};
SpecialRuleRelation: OLD
- {
- if (!QueryIsRule)
- mmerror(PARSE_ERROR, ET_ERROR, "OLD used in non-rule query");
+ {
+ if (!QueryIsRule)
+ mmerror(PARSE_ERROR, ET_ERROR, "OLD used in non-rule query");
- $$ = make_str("old");
- }
+ $$ = make_str("old");
+ }
| NEW
- {
- if (!QueryIsRule)
- mmerror(PARSE_ERROR, ET_ERROR, "NEW used in non-rule query");
+ {
+ if (!QueryIsRule)
+ mmerror(PARSE_ERROR, ET_ERROR, "NEW used in non-rule query");
- $$ = make_str("new");
- }
+ $$ = make_str("new");
+ }
;
/*
*/
/*
- * the exec sql connect statement: connect to the given database
+ * the exec sql connect statement: connect to the given database
*/
ECPGConnect: SQL_CONNECT TO connection_target opt_connection_name opt_user
- {
- $$ = cat_str(5, $3, make_str(","), $5, make_str(","), $4);
- }
- | SQL_CONNECT TO DEFAULT
- {
- $$ = make_str("NULL,NULL,NULL,\"DEFAULT\"");
- }
- /* also allow ORACLE syntax */
- | SQL_CONNECT ora_user
- {
- $$ = cat_str(3, make_str("NULL,"), $2, make_str(",NULL"));
- }
+ { $$ = cat_str(5, $3, make_str(","), $5, make_str(","), $4); }
+ | SQL_CONNECT TO DEFAULT
+ { $$ = make_str("NULL,NULL,NULL,\"DEFAULT\""); }
+ /* also allow ORACLE syntax */
+ | SQL_CONNECT ora_user
+ { $$ = cat_str(3, make_str("NULL,"), $2, make_str(",NULL")); }
connection_target: database_name opt_server opt_port
- {
- /* old style: dbname[@server][:port] */
- if (strlen($2) > 0 && *($2) != '@')
- {
- sprintf(errortext, "Expected '@', found '%s'", $2);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
-
- $$ = make3_str(make_str("\""), make3_str($1, $2, $3), make_str("\""));
+ {
+ /* old style: dbname[@server][:port] */
+ if (strlen($2) > 0 && *($2) != '@')
+ {
+ sprintf(errortext, "Expected '@', found '%s'", $2);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+
+ $$ = make3_str(make_str("\""), make3_str($1, $2, $3), make_str("\""));
}
- | db_prefix ':' server opt_port '/' database_name opt_options
- {
- /* new style: <tcp|unix>:postgresql://server[:port][/dbname] */
- if (strncmp($1, "unix:postgresql", strlen("unix:postgresql")) != 0 && strncmp($1, "tcp:postgresql", strlen("tcp:postgresql")) != 0)
- {
- sprintf(errortext, "only protocols 'tcp' and 'unix' and database type 'postgresql' are supported");
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
-
- if (strncmp($3, "//", strlen("//")) != 0)
- {
- sprintf(errortext, "Expected '://', found '%s'", $3);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
-
- if (strncmp($1, "unix", strlen("unix")) == 0 &&
- strncmp($3 + strlen("//"), "localhost", strlen("localhost")) != 0 &&
- strncmp($3 + strlen("//"), "127.0.0.1", strlen("127.0.0.1")) != 0)
- {
- sprintf(errortext, "unix domain sockets only work on 'localhost' but not on '%9.9s'", $3 + strlen("//"));
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
-
- $$ = make3_str(make3_str(make_str("\""), $1, make_str(":")), $3, make3_str(make3_str($4, make_str("/"), $6), $7, make_str("\"")));
+ | db_prefix ':' server opt_port '/' database_name opt_options
+ {
+ /* new style: <tcp|unix>:postgresql://server[:port][/dbname] */
+ if (strncmp($1, "unix:postgresql", strlen("unix:postgresql")) != 0 && strncmp($1, "tcp:postgresql", strlen("tcp:postgresql")) != 0)
+ {
+ sprintf(errortext, "only protocols 'tcp' and 'unix' and database type 'postgresql' are supported");
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+
+ if (strncmp($3, "//", strlen("//")) != 0)
+ {
+ sprintf(errortext, "Expected '://', found '%s'", $3);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+
+ if (strncmp($1, "unix", strlen("unix")) == 0 &&
+ strncmp($3 + strlen("//"), "localhost", strlen("localhost")) != 0 &&
+ strncmp($3 + strlen("//"), "127.0.0.1", strlen("127.0.0.1")) != 0)
+ {
+ sprintf(errortext, "unix domain sockets only work on 'localhost' but not on '%9.9s'", $3 + strlen("//"));
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+
+ $$ = make3_str(make3_str(make_str("\""), $1, make_str(":")), $3, make3_str(make3_str($4, make_str("/"), $6), $7, make_str("\"")));
}
- | StringConst
+ | StringConst
{
- if ($1[0] == '\"')
- $$ = $1;
- else if (strcmp($1, "?") == 0) /* variable */
- {
- enum ECPGttype type = argsinsert->variable->type->type;
-
- /* if array see what's inside */
- if (type == ECPGt_array)
- type = argsinsert->variable->type->u.element->type;
-
- /* handle varchars */
- if (type == ECPGt_varchar)
- $$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
- else
- $$ = mm_strdup(argsinsert->variable->name);
- }
- else
- $$ = make3_str(make_str("\""), $1, make_str("\""));
+ if ($1[0] == '\"')
+ $$ = $1;
+ else if (strcmp($1, "?") == 0) /* variable */
+ {
+ enum ECPGttype type = argsinsert->variable->type->type;
+
+ /* if array see what's inside */
+ if (type == ECPGt_array)
+ type = argsinsert->variable->type->u.element->type;
+
+ /* handle varchars */
+ if (type == ECPGt_varchar)
+ $$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
+ else
+ $$ = mm_strdup(argsinsert->variable->name);
+ }
+ else
+ $$ = make3_str(make_str("\""), $1, make_str("\""));
}
db_prefix: ident cvariable
- {
- if (strcmp($2, "postgresql") != 0 && strcmp($2, "postgres") != 0)
- {
- sprintf(errortext, "Expected 'postgresql', found '%s'", $2);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
-
- if (strcmp($1, "tcp") != 0 && strcmp($1, "unix") != 0)
- {
- sprintf(errortext, "Illegal connection type %s", $1);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
-
- $$ = make3_str($1, make_str(":"), $2);
+ {
+ if (strcmp($2, "postgresql") != 0 && strcmp($2, "postgres") != 0)
+ {
+ sprintf(errortext, "Expected 'postgresql', found '%s'", $2);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+
+ if (strcmp($1, "tcp") != 0 && strcmp($1, "unix") != 0)
+ {
+ sprintf(errortext, "Illegal connection type %s", $1);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+
+ $$ = make3_str($1, make_str(":"), $2);
}
-
+
server: Op server_name
- {
- if (strcmp($1, "@") != 0 && strcmp($1, "//") != 0)
- {
- sprintf(errortext, "Expected '@' or '://', found '%s'", $1);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
+ {
+ if (strcmp($1, "@") != 0 && strcmp($1, "//") != 0)
+ {
+ sprintf(errortext, "Expected '@' or '://', found '%s'", $1);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
- $$ = make2_str($1, $2);
- }
+ $$ = make2_str($1, $2);
+ }
-opt_server: server { $$ = $1; }
- | /* empty */ { $$ = EMPTY; }
+opt_server: server { $$ = $1; }
+ | /*EMPTY*/ { $$ = EMPTY; }
-server_name: ColId { $$ = $1; }
- | ColId '.' server_name { $$ = make3_str($1, make_str("."), $3); }
- | IP { $$ = make_name(); }
+server_name: ColId { $$ = $1; }
+ | ColId '.' server_name { $$ = make3_str($1, make_str("."), $3); }
+ | IP { $$ = make_name(); }
-opt_port: ':' PosIntConst { $$ = make2_str(make_str(":"), $2); }
- | /* empty */ { $$ = EMPTY; }
+opt_port: ':' PosIntConst { $$ = make2_str(make_str(":"), $2); }
+ | /*EMPTY*/ { $$ = EMPTY; }
opt_connection_name: AS connection_target { $$ = $2; }
- | /* empty */ { $$ = make_str("NULL"); }
+ | /*EMPTY*/ { $$ = make_str("NULL"); }
-opt_user: USER ora_user { $$ = $2; }
- | /* empty */ { $$ = make_str("NULL,NULL"); }
+opt_user: USER ora_user { $$ = $2; }
+ | /*EMPTY*/ { $$ = make_str("NULL,NULL"); }
ora_user: user_name
+ { $$ = cat2_str($1, make_str(", NULL")); }
+ | user_name '/' user_name
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ | user_name SQL_IDENTIFIED BY user_name
+ { $$ = cat_str(3, $1, make_str(","), $4); }
+ | user_name USING user_name
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ ;
+
+user_name: UserId
{
- $$ = cat2_str($1, make_str(", NULL"));
- }
- | user_name '/' user_name
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
- | user_name SQL_IDENTIFIED BY user_name
- {
- $$ = cat_str(3, $1, make_str(","), $4);
- }
- | user_name USING user_name
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
-
-user_name: UserId {
- if ($1[0] == '\"')
+ if ($1[0] == '\"')
$$ = $1;
- else
+ else
$$ = make3_str(make_str("\""), $1, make_str("\""));
- }
- | StringConst {
- if ($1[0] == '\"')
+ }
+ | StringConst
+ {
+ if ($1[0] == '\"')
$$ = $1;
- else if (strcmp($1, "?") == 0) /* variable */
- {
- enum ECPGttype type = argsinsert->variable->type->type;
-
- /* if array see what's inside */
- if (type == ECPGt_array)
- type = argsinsert->variable->type->u.element->type;
-
- /* handle varchars */
- if (type == ECPGt_varchar)
- $$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
- else
- $$ = mm_strdup(argsinsert->variable->name);
- }
- else
- $$ = make3_str(make_str("\""), $1, make_str("\""));
+ else if (strcmp($1, "?") == 0) /* variable */
+ {
+ enum ECPGttype type = argsinsert->variable->type->type;
+
+ /* if array see what's inside */
+ if (type == ECPGt_array)
+ type = argsinsert->variable->type->u.element->type;
+
+ /* handle varchars */
+ if (type == ECPGt_varchar)
+ $$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
+ else
+ $$ = mm_strdup(argsinsert->variable->name);
}
+ else
+ $$ = make3_str(make_str("\""), $1, make_str("\""));
+ }
+ ;
char_variable: cvariable
- { /* check if we have a char variable */
+ {
+ /* check if we have a char variable */
struct variable *p = find_variable($1);
enum ECPGttype type = p->type->type;
if (type == ECPGt_array)
type = p->type->u.element->type;
- switch (type)
- {
- case ECPGt_char:
- case ECPGt_unsigned_char:
- $$ = $1;
- break;
- case ECPGt_varchar:
- $$ = make2_str($1, make_str(".arr"));
- break;
- default:
- mmerror(PARSE_ERROR, ET_ERROR, "invalid datatype");
- break;
- }
+ switch (type)
+ {
+ case ECPGt_char:
+ case ECPGt_unsigned_char:
+ $$ = $1;
+ break;
+ case ECPGt_varchar:
+ $$ = make2_str($1, make_str(".arr"));
+ break;
+ default:
+ mmerror(PARSE_ERROR, ET_ERROR, "invalid datatype");
+ break;
+ }
}
+ ;
opt_options: Op ColId
{
if (strlen($1) == 0)
mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement");
-
+
if (strcmp($1, "?") != 0)
{
sprintf(errortext, "unrecognised token '%s'", $1);
mmerror(PARSE_ERROR, ET_ERROR, errortext);
}
-
+
$$ = make2_str(make_str("?"), $2);
}
- | /* empty */ { $$ = EMPTY; }
- ;
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
/*
* Declare a prepared cursor. The syntax is different from the standard
* declare statement, so we create a new rule.
*/
ECPGCursorStmt: DECLARE name opt_cursor CURSOR FOR ident
- {
- struct cursor *ptr, *this;
- struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
+ {
+ struct cursor *ptr, *this;
+ struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
- for (ptr = cur; ptr != NULL; ptr = ptr->next)
- {
- if (strcmp($2, ptr->name) == 0)
- {
- /* re-definition is a bug */
- sprintf(errortext, "cursor %s already defined", $2);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
- }
-
- this = (struct cursor *) mm_alloc(sizeof(struct cursor));
-
- /* initial definition */
- this->next = cur;
- this->name = $2;
- this->connection = connection;
- this->command = cat_str(4, make_str("declare"), mm_strdup($2), $3, make_str("cursor for ?"));
- this->argsresult = NULL;
-
- thisquery->type = &ecpg_query;
- thisquery->brace_level = 0;
- thisquery->next = NULL;
- thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(\"\")") + strlen($6));
- sprintf(thisquery->name, "ECPGprepared_statement(\"%s\")", $6);
-
- this->argsinsert = NULL;
- add_variable(&(this->argsinsert), thisquery, &no_indicator);
-
- cur = this;
-
- $$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
+ for (ptr = cur; ptr != NULL; ptr = ptr->next)
+ {
+ if (strcmp($2, ptr->name) == 0)
+ {
+ /* re-definition is a bug */
+ sprintf(errortext, "cursor %s already defined", $2);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
}
+ }
+
+ this = (struct cursor *) mm_alloc(sizeof(struct cursor));
+
+ /* initial definition */
+ this->next = cur;
+ this->name = $2;
+ this->connection = connection;
+ this->command = cat_str(4, make_str("declare"), mm_strdup($2), $3, make_str("cursor for ?"));
+ this->argsresult = NULL;
+
+ thisquery->type = &ecpg_query;
+ thisquery->brace_level = 0;
+ thisquery->next = NULL;
+ thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(\"\")") + strlen($6));
+ sprintf(thisquery->name, "ECPGprepared_statement(\"%s\")", $6);
+
+ this->argsinsert = NULL;
+ add_variable(&(this->argsinsert), thisquery, &no_indicator);
+
+ cur = this;
+
+ $$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
+ }
;
/*
* the exec sql deallocate prepare command to deallocate a previously
* prepared statement
*/
-ECPGDeallocate: SQL_DEALLOCATE SQL_PREPARE ident { $$ = cat_str(3, make_str("ECPGdeallocate(__LINE__, \""), $3, make_str("\");")); };
+ECPGDeallocate: SQL_DEALLOCATE SQL_PREPARE ident
+ { $$ = cat_str(3, make_str("ECPGdeallocate(__LINE__, \""), $3, make_str("\");")); };
/*
* variable declaration inside the exec sql declare block
*/
ECPGDeclaration: sql_startdeclare
- {
- fputs("/* exec sql begin declare section */", yyout);
- }
- variable_declarations sql_enddeclare
- {
- fprintf(yyout, "%s/* exec sql end declare section */", $3);
- free($3);
- output_line_number();
- };
+ { fputs("/* exec sql begin declare section */", yyout); }
+ variable_declarations sql_enddeclare
+ {
+ fprintf(yyout, "%s/* exec sql end declare section */", $3);
+ free($3);
+ output_line_number();
+ }
+ ;
sql_startdeclare: ecpgstart BEGIN_TRANS DECLARE SQL_SECTION ';' {};
sql_enddeclare: ecpgstart END_TRANS DECLARE SQL_SECTION ';' {};
-variable_declarations: /* empty */ { $$ = EMPTY; }
- | declarations { $$ = $1; }
- ;
+variable_declarations: /*EMPTY*/ { $$ = EMPTY; }
+ | declarations { $$ = $1; }
+ ;
-declarations: declaration { $$ = $1; }
- | declarations declaration { $$ = cat2_str($1, $2); }
- ;
+declarations: declaration { $$ = $1; }
+ | declarations declaration { $$ = cat2_str($1, $2); }
+ ;
declaration: storage_clause storage_modifier
- {
- actual_storage[struct_level] = cat2_str(mm_strdup($1), mm_strdup($2));
- actual_startline[struct_level] = hashline_number();
- }
- type
- {
- actual_type[struct_level].type_enum = $4.type_enum;
- actual_type[struct_level].type_dimension = $4.type_dimension;
- actual_type[struct_level].type_index = $4.type_index;
+ {
+ actual_storage[struct_level] = cat2_str(mm_strdup($1), mm_strdup($2));
+ actual_startline[struct_level] = hashline_number();
+ }
+ type
+ {
+ actual_type[struct_level].type_enum = $4.type_enum;
+ actual_type[struct_level].type_dimension = $4.type_dimension;
+ actual_type[struct_level].type_index = $4.type_index;
- /* we do not need the string "varchar" for output */
- /* so replace it with an empty string */
- if ($4.type_enum == ECPGt_varchar)
+ /* we do not need the string "varchar" for output */
+ /* so replace it with an empty string */
+ if ($4.type_enum == ECPGt_varchar)
+ {
+ free($4.type_str);
+ $4.type_str=EMPTY;
+ }
+ }
+ variable_list ';'
{
- free($4.type_str);
- $4.type_str=EMPTY;
+ $$ = cat_str(6, actual_startline[struct_level], $1, $2, $4.type_str, $6, make_str(";\n"));
}
- }
- variable_list ';'
- {
- $$ = cat_str(6, actual_startline[struct_level], $1, $2, $4.type_str, $6, make_str(";\n"));
- };
+ ;
-storage_clause : S_EXTERN { $$ = make_str("extern"); }
- | S_STATIC { $$ = make_str("static"); }
- | S_REGISTER { $$ = make_str("register"); }
- | S_AUTO { $$ = make_str("auto"); }
- | /* empty */ { $$ = EMPTY; }
- ;
+storage_clause : S_EXTERN { $$ = make_str("extern"); }
+ | S_STATIC { $$ = make_str("static"); }
+ | S_REGISTER { $$ = make_str("register"); }
+ | S_AUTO { $$ = make_str("auto"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
-storage_modifier : S_CONST { $$ = make_str("const"); }
- | S_VOLATILE { $$ = make_str("volatile"); }
- | /* empty */ { $$ = EMPTY; }
- ;
+storage_modifier : S_CONST { $$ = make_str("const"); }
+ | S_VOLATILE { $$ = make_str("volatile"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
type: simple_type
{
$$.type_enum = $1;
$$.type_str = mm_strdup(ECPGtype_name($1));
$$.type_dimension = -1;
- $$.type_index = -1;
+ $$.type_index = -1;
}
- | struct_type
+ | struct_type
{
$$.type_enum = ECPGt_struct;
$$.type_str = $1;
$$.type_dimension = -1;
- $$.type_index = -1;
+ $$.type_index = -1;
}
- | union_type
+ | union_type
{
$$.type_enum = ECPGt_union;
$$.type_str = $1;
$$.type_dimension = -1;
- $$.type_index = -1;
+ $$.type_index = -1;
}
- | enum_type
+ | enum_type
{
$$.type_str = $1;
$$.type_enum = ECPGt_int;
$$.type_dimension = -1;
- $$.type_index = -1;
+ $$.type_index = -1;
}
- | ECPGColLabel
+ | ECPGColLabel
{
/*
* Check for type names that the SQL grammar treats as
struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
}
}
- ;
+ ;
enum_type: SQL_ENUM opt_symbol enum_definition
- {
- $$ = cat_str(3, make_str("enum"), $2, $3);
- }
- | SQL_ENUM symbol
- {
- $$ = cat2_str(make_str("enum"), $2);
- }
- ;
+ { $$ = cat_str(3, make_str("enum"), $2, $3); }
+ | SQL_ENUM symbol
+ { $$ = cat2_str(make_str("enum"), $2); }
+ ;
-enum_definition: '{' c_list '}' { $$ = cat_str(3, make_str("{"), $2, make_str("}")); };
+enum_definition: '{' c_list '}'
+ { $$ = cat_str(3, make_str("{"), $2, make_str("}")); };
struct_type: s_struct '{' variable_declarations '}'
- {
- ECPGfree_struct_member(struct_member_list[struct_level]);
- free(actual_storage[struct_level--]);
- $$ = cat_str(4, $1, make_str("{"), $3, make_str("}"));
- };
+ {
+ ECPGfree_struct_member(struct_member_list[struct_level]);
+ free(actual_storage[struct_level--]);
+ $$ = cat_str(4, $1, make_str("{"), $3, make_str("}"));
+ }
+ ;
union_type: s_union '{' variable_declarations '}'
- {
- ECPGfree_struct_member(struct_member_list[struct_level]);
- free(actual_storage[struct_level--]);
- $$ = cat_str(4, $1, make_str("{"), $3, make_str("}"));
- };
+ {
+ ECPGfree_struct_member(struct_member_list[struct_level]);
+ free(actual_storage[struct_level--]);
+ $$ = cat_str(4, $1, make_str("{"), $3, make_str("}"));
+ }
+ ;
s_struct: SQL_STRUCT opt_symbol
- {
- struct_member_list[struct_level++] = NULL;
- $$ = cat2_str(make_str("struct"), $2);
- ECPGstruct_sizeof = cat_str(3, make_str("sizeof("), strdup($$), make_str(")"));
- if (struct_level >= STRUCT_DEPTH)
- mmerror(PARSE_ERROR, ET_ERROR, "Too many levels in nested structure definition");
- };
+ {
+ struct_member_list[struct_level++] = NULL;
+ $$ = cat2_str(make_str("struct"), $2);
+ ECPGstruct_sizeof = cat_str(3, make_str("sizeof("), strdup($$), make_str(")"));
+ if (struct_level >= STRUCT_DEPTH)
+ mmerror(PARSE_ERROR, ET_ERROR, "Too many levels in nested structure definition");
+ }
+ ;
s_union: UNION opt_symbol
- {
- struct_member_list[struct_level++] = NULL;
- if (struct_level >= STRUCT_DEPTH)
- mmerror(PARSE_ERROR, ET_ERROR, "Too many levels in nested structure definition");
+ {
+ struct_member_list[struct_level++] = NULL;
+ if (struct_level >= STRUCT_DEPTH)
+ mmerror(PARSE_ERROR, ET_ERROR, "Too many levels in nested structure definition");
- $$ = cat2_str(make_str("union"), $2);
- };
+ $$ = cat2_str(make_str("union"), $2);
+ }
+ ;
-simple_type: unsigned_type { $$=$1; }
- | opt_signed signed_type { $$=$2; }
- ;
+simple_type: unsigned_type { $$=$1; }
+ | opt_signed signed_type { $$=$2; }
+ ;
-unsigned_type: SQL_UNSIGNED SQL_SHORT { $$ = ECPGt_unsigned_short; }
- | SQL_UNSIGNED SQL_SHORT SQL_INT { $$ = ECPGt_unsigned_short; }
- | SQL_UNSIGNED { $$ = ECPGt_unsigned_int; }
+unsigned_type: SQL_UNSIGNED SQL_SHORT { $$ = ECPGt_unsigned_short; }
+ | SQL_UNSIGNED SQL_SHORT SQL_INT { $$ = ECPGt_unsigned_short; }
+ | SQL_UNSIGNED { $$ = ECPGt_unsigned_int; }
| SQL_UNSIGNED SQL_INT { $$ = ECPGt_unsigned_int; }
| SQL_UNSIGNED SQL_LONG { $$ = ECPGt_unsigned_long; }
- | SQL_UNSIGNED SQL_LONG SQL_INT { $$ = ECPGt_unsigned_long; }
- | SQL_UNSIGNED SQL_LONG SQL_LONG {
+ | SQL_UNSIGNED SQL_LONG SQL_INT { $$ = ECPGt_unsigned_long; }
+ | SQL_UNSIGNED SQL_LONG SQL_LONG
+ {
#ifdef HAVE_LONG_LONG_INT_64
- $$ = ECPGt_unsigned_long_long;
+ $$ = ECPGt_unsigned_long_long;
#else
- $$ = ECPGt_unsigned_long;
+ $$ = ECPGt_unsigned_long;
#endif
- }
- | SQL_UNSIGNED SQL_LONG SQL_LONG SQL_INT {
+ }
+ | SQL_UNSIGNED SQL_LONG SQL_LONG SQL_INT
+ {
#ifdef HAVE_LONG_LONG_INT_64
- $$ = ECPGt_unsigned_long_long;
+ $$ = ECPGt_unsigned_long_long;
#else
- $$ = ECPGt_unsigned_long;
+ $$ = ECPGt_unsigned_long;
#endif
- }
- | SQL_UNSIGNED CHAR { $$ = ECPGt_unsigned_char; }
+ }
+ | SQL_UNSIGNED CHAR { $$ = ECPGt_unsigned_char; }
;
-signed_type: SQL_SHORT { $$ = ECPGt_short; }
- | SQL_SHORT SQL_INT { $$ = ECPGt_short; }
- | SQL_INT { $$ = ECPGt_int; }
- | SQL_LONG { $$ = ECPGt_long; }
- | SQL_LONG SQL_INT { $$ = ECPGt_long; }
- | SQL_LONG SQL_LONG {
+signed_type: SQL_SHORT { $$ = ECPGt_short; }
+ | SQL_SHORT SQL_INT { $$ = ECPGt_short; }
+ | SQL_INT { $$ = ECPGt_int; }
+ | SQL_LONG { $$ = ECPGt_long; }
+ | SQL_LONG SQL_INT { $$ = ECPGt_long; }
+ | SQL_LONG SQL_LONG
+ {
#ifdef HAVE_LONG_LONG_INT_64
- $$ = ECPGt_long_long;
+ $$ = ECPGt_long_long;
#else
- $$ = ECPGt_long;
+ $$ = ECPGt_long;
#endif
- }
- | SQL_LONG SQL_LONG SQL_INT {
+ }
+ | SQL_LONG SQL_LONG SQL_INT
+ {
#ifdef HAVE_LONG_LONG_INT_64
- $$ = ECPGt_long_long;
+ $$ = ECPGt_long_long;
#else
- $$ = ECPGt_long;
+ $$ = ECPGt_long;
#endif
- }
- | SQL_BOOL { $$ = ECPGt_bool; }
- | CHAR { $$ = ECPGt_char; }
- ;
+ }
+ | SQL_BOOL { $$ = ECPGt_bool; }
+ | CHAR { $$ = ECPGt_char; }
+ ;
-opt_signed: SQL_SIGNED
- | /* EMPTY */
- ;
+opt_signed: SQL_SIGNED
+ | /* EMPTY */
+ ;
-variable_list: variable
- {
- $$ = $1;
- }
- | variable_list ',' variable
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
- ;
+variable_list: variable
+ { $$ = $1; }
+ | variable_list ',' variable
+ { $$ = cat_str(3, $1, make_str(","), $3); }
+ ;
variable: opt_pointer ECPGColLabel opt_array_bounds opt_initializer
{
struct ECPGtype * type;
- int dimension = $3.index1; /* dimension of array */
- int length = $3.index2; /* lenght of string */
- char dim[14L], ascii_len[12];
+ int dimension = $3.index1; /* dimension of array */
+ int length = $3.index2; /* lenght of string */
+ char dim[14L], ascii_len[12];
adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen($1));
switch (actual_type[struct_level].type_enum)
{
- case ECPGt_struct:
- case ECPGt_union:
- if (dimension < 0)
- type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, ECPGstruct_sizeof);
- else
- type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, ECPGstruct_sizeof), dimension);
-
- $$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
- break;
- case ECPGt_varchar:
- if (dimension < 0)
- type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
- else
- type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
-
- switch(dimension)
- {
- case 0:
- case -1:
- case 1:
- *dim = '\0';
- break;
- default:
- sprintf(dim, "[%d]", dimension);
- break;
- }
- sprintf(ascii_len, "%d", length);
-
- if (length == 0)
- mmerror(PARSE_ERROR, ET_ERROR, "pointer to varchar are not implemented");
-
- if (dimension == 0)
- $$ = cat_str(7, mm_strdup(actual_storage[struct_level]), make2_str(make_str(" struct varchar_"), mm_strdup($2)), make_str(" { int len; char arr["), mm_strdup(ascii_len), make_str("]; } *"), mm_strdup($2), $4);
- else
- $$ = cat_str(8, mm_strdup(actual_storage[struct_level]), make2_str(make_str(" struct varchar_"), mm_strdup($2)), make_str(" { int len; char arr["), mm_strdup(ascii_len), make_str("]; } "), mm_strdup($2), mm_strdup(dim), $4);
-
- break;
- case ECPGt_char:
- case ECPGt_unsigned_char:
- if (dimension == -1)
- type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
- else
- type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
-
- $$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
- break;
- default:
- if (dimension < 0)
- type = ECPGmake_simple_type(actual_type[struct_level].type_enum, 1);
- else
- type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, 1), dimension);
-
- $$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
- break;
+ case ECPGt_struct:
+ case ECPGt_union:
+ if (dimension < 0)
+ type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, ECPGstruct_sizeof);
+ else
+ type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, ECPGstruct_sizeof), dimension);
+
+ $$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
+ break;
+
+ case ECPGt_varchar:
+ if (dimension < 0)
+ type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
+ else
+ type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
+
+ switch(dimension)
+ {
+ case 0:
+ case -1:
+ case 1:
+ *dim = '\0';
+ break;
+ default:
+ sprintf(dim, "[%d]", dimension);
+ break;
+ }
+ sprintf(ascii_len, "%d", length);
+
+ if (length == 0)
+ mmerror(PARSE_ERROR, ET_ERROR, "pointer to varchar are not implemented");
+
+ if (dimension == 0)
+ $$ = cat_str(7, mm_strdup(actual_storage[struct_level]), make2_str(make_str(" struct varchar_"), mm_strdup($2)), make_str(" { int len; char arr["), mm_strdup(ascii_len), make_str("]; } *"), mm_strdup($2), $4);
+ else
+ $$ = cat_str(8, mm_strdup(actual_storage[struct_level]), make2_str(make_str(" struct varchar_"), mm_strdup($2)), make_str(" { int len; char arr["), mm_strdup(ascii_len), make_str("]; } "), mm_strdup($2), mm_strdup(dim), $4);
+ break;
+
+ case ECPGt_char:
+ case ECPGt_unsigned_char:
+ if (dimension == -1)
+ type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length);
+ else
+ type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length), dimension);
+
+ $$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
+ break;
+
+ default:
+ if (dimension < 0)
+ type = ECPGmake_simple_type(actual_type[struct_level].type_enum, 1);
+ else
+ type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, 1), dimension);
+
+ $$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
+ break;
}
if (struct_level == 0)
ECPGmake_struct_member($2, type, &(struct_member_list[struct_level - 1]));
free($2);
- };
+ }
+ ;
-opt_initializer: /* empty */ { $$ = EMPTY; }
- | '=' c_term {
- initializer = 1;
- $$ = cat2_str(make_str("="), $2);
- }
- ;
+opt_initializer: /*EMPTY*/
+ { $$ = EMPTY; }
+ | '=' c_term
+ {
+ initializer = 1;
+ $$ = cat2_str(make_str("="), $2);
+ }
+ ;
-opt_pointer: /* empty */ { $$ = EMPTY; }
- | '*' { $$ = make_str("*"); }
- | '*' '*' { $$ = make_str("**"); }
- ;
+opt_pointer: /*EMPTY*/ { $$ = EMPTY; }
+ | '*' { $$ = make_str("*"); }
+ | '*' '*' { $$ = make_str("**"); }
+ ;
/*
* As long as the prepare statement is not supported by the backend, we will
- * try to simulate it here so we get dynamic SQL
+ * try to simulate it here so we get dynamic SQL
*/
ECPGDeclare: DECLARE STATEMENT ident
- {
- /* this is only supported for compatibility */
- $$ = cat_str(3, make_str("/* declare statement"), $3, make_str("*/"));
- };
+ {
+ /* this is only supported for compatibility */
+ $$ = cat_str(3, make_str("/* declare statement"), $3, make_str("*/"));
+ }
+ ;
/*
- * the exec sql disconnect statement: disconnect from the given database
+ * the exec sql disconnect statement: disconnect from the given database
*/
ECPGDisconnect: SQL_DISCONNECT dis_name { $$ = $2; }
-dis_name: connection_object { $$ = $1; }
- | CURRENT { $$ = make_str("\"CURRENT\""); }
- | ALL { $$ = make_str("\"ALL\""); }
- | /* empty */ { $$ = make_str("\"CURRENT\""); }
- ;
+dis_name: connection_object { $$ = $1; }
+ | CURRENT { $$ = make_str("\"CURRENT\""); }
+ | ALL { $$ = make_str("\"ALL\""); }
+ | /*EMPTY*/ { $$ = make_str("\"CURRENT\""); }
+ ;
-connection_object: connection_target { $$ = $1; }
- | DEFAULT { $$ = make_str("\"DEFAULT\""); }
- ;
+connection_object: connection_target { $$ = $1; }
+ | DEFAULT { $$ = make_str("\"DEFAULT\""); }
+ ;
/*
* execute a given string as sql command
*/
ECPGExecute : EXECUTE IMMEDIATE execstring
- {
- struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
+ {
+ struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
- thisquery->type = &ecpg_query;
- thisquery->brace_level = 0;
- thisquery->next = NULL;
- thisquery->name = $3;
+ thisquery->type = &ecpg_query;
+ thisquery->brace_level = 0;
+ thisquery->next = NULL;
+ thisquery->name = $3;
- add_variable(&argsinsert, thisquery, &no_indicator);
+ add_variable(&argsinsert, thisquery, &no_indicator);
- $$ = make_str("?");
- }
- | EXECUTE ident
- {
- struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
+ $$ = make_str("?");
+ }
+ | EXECUTE ident
+ {
+ struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
- thisquery->type = &ecpg_query;
- thisquery->brace_level = 0;
- thisquery->next = NULL;
- thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(\"\")") + strlen($2));
- sprintf(thisquery->name, "ECPGprepared_statement(\"%s\")", $2);
+ thisquery->type = &ecpg_query;
+ thisquery->brace_level = 0;
+ thisquery->next = NULL;
+ thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(\"\")") + strlen($2));
+ sprintf(thisquery->name, "ECPGprepared_statement(\"%s\")", $2);
- add_variable(&argsinsert, thisquery, &no_indicator);
- } ecpg_using opt_ecpg_into
- {
- $$ = make_str("?");
- }
- ;
+ add_variable(&argsinsert, thisquery, &no_indicator);
+ }
+ ecpg_using opt_ecpg_into
+ {
+ $$ = make_str("?");
+ }
+ ;
-execstring: char_variable { $$ = $1; }
- | CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
- ;
+execstring: char_variable
+ { $$ = $1; }
+ | CSTRING
+ { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
+ ;
/*
* the exec sql free command to deallocate a previously
*/
ECPGOpen: SQL_OPEN name ecpg_using { $$ = $2; };
-ecpg_using: /* empty */ { $$ = EMPTY; }
- | USING variablelist {
- /* mmerror ("open cursor with variables not implemented yet"); */
- $$ = EMPTY;
- }
- ;
+ecpg_using: /*EMPTY*/ { $$ = EMPTY; }
+ | USING variablelist
+ {
+ /* mmerror ("open cursor with variables not implemented yet"); */
+ $$ = EMPTY;
+ }
+ ;
-opt_sql: /* empty */ | SQL_SQL;
+opt_sql: /*EMPTY*/ | SQL_SQL;
-ecpg_into: INTO into_list {
- $$ = EMPTY;
- }
- | INTO opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
- {
- add_variable(&argsresult, descriptor_variable($4,0), &no_indicator);
- $$ = EMPTY;
- }
- ;
+ecpg_into: INTO into_list
+ {
+ $$ = EMPTY;
+ }
+ | INTO opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
+ {
+ add_variable(&argsresult, descriptor_variable($4,0), &no_indicator);
+ $$ = EMPTY;
+ }
+ ;
-opt_ecpg_into: /* empty */ { $$ = EMPTY; }
- | ecpg_into { $$ = $1; }
+opt_ecpg_into: /*EMPTY*/ { $$ = EMPTY; }
+ | ecpg_into { $$ = $1; }
;
-variable: civarind | civar
+variable: civarind | civar
variablelist: variable | variable ',' variablelist;
/*
* As long as the prepare statement is not supported by the backend, we will
- * try to simulate it here so we get dynamic SQL
+ * try to simulate it here so we get dynamic SQL
*/
ECPGPrepare: SQL_PREPARE ident FROM execstring
- {
- $$ = cat2_str(make3_str(make_str("\""), $2, make_str("\",")), $4);
- };
+ { $$ = cat2_str(make3_str(make_str("\""), $2, make_str("\",")), $4); }
+ ;
/*
* dynamic SQL: descriptor based access
- * written by Christof Petig <christof.petig@wtal.de>
+ * written by Christof Petig <christof.petig@wtal.de>
*/
/*
{
drop_descriptor($3,connection);
$$ = $3;
- };
+ }
+ ;
/*
* allocate a descriptor
* read from descriptor
*/
-ECPGGetDescHeaderItem: cvariable '=' desc_header_item { push_assignment($1, $3); };
+ECPGGetDescHeaderItem: cvariable '=' desc_header_item
+ { push_assignment($1, $3); }
+ ;
-desc_header_item: SQL_COUNT { $$ = ECPGd_count; };
+desc_header_item: SQL_COUNT { $$ = ECPGd_count; }
+ ;
-ECPGGetDescItem: cvariable '=' descriptor_item { push_assignment($1, $3); };
+ECPGGetDescItem: cvariable '=' descriptor_item { push_assignment($1, $3); };
-descriptor_item: SQL_CARDINALITY { $$ = ECPGd_cardinality; }
- | SQL_DATA { $$ = ECPGd_data; }
- | SQL_DATETIME_INTERVAL_CODE { $$ = ECPGd_di_code; }
- | SQL_DATETIME_INTERVAL_PRECISION { $$ = ECPGd_di_precision; }
- | SQL_INDICATOR { $$ = ECPGd_indicator; }
- | SQL_KEY_MEMBER { $$ = ECPGd_key_member; }
- | SQL_LENGTH { $$ = ECPGd_length; }
- | SQL_NAME { $$ = ECPGd_name; }
- | SQL_NULLABLE { $$ = ECPGd_nullable; }
- | SQL_OCTET_LENGTH { $$ = ECPGd_octet; }
- | PRECISION { $$ = ECPGd_precision; }
- | SQL_RETURNED_LENGTH { $$ = ECPGd_length; }
- | SQL_RETURNED_OCTET_LENGTH { $$ = ECPGd_ret_octet; }
- | SQL_SCALE { $$ = ECPGd_scale; }
- | TYPE_P { $$ = ECPGd_type; }
+descriptor_item: SQL_CARDINALITY { $$ = ECPGd_cardinality; }
+ | SQL_DATA { $$ = ECPGd_data; }
+ | SQL_DATETIME_INTERVAL_CODE { $$ = ECPGd_di_code; }
+ | SQL_DATETIME_INTERVAL_PRECISION { $$ = ECPGd_di_precision; }
+ | SQL_INDICATOR { $$ = ECPGd_indicator; }
+ | SQL_KEY_MEMBER { $$ = ECPGd_key_member; }
+ | SQL_LENGTH { $$ = ECPGd_length; }
+ | SQL_NAME { $$ = ECPGd_name; }
+ | SQL_NULLABLE { $$ = ECPGd_nullable; }
+ | SQL_OCTET_LENGTH { $$ = ECPGd_octet; }
+ | PRECISION { $$ = ECPGd_precision; }
+ | SQL_RETURNED_LENGTH { $$ = ECPGd_length; }
+ | SQL_RETURNED_OCTET_LENGTH { $$ = ECPGd_ret_octet; }
+ | SQL_SCALE { $$ = ECPGd_scale; }
+ | TYPE_P { $$ = ECPGd_type; }
;
ECPGGetDescHeaderItems: ECPGGetDescHeaderItem
- | ECPGGetDescHeaderItems ',' ECPGGetDescHeaderItem
- ;
-
+ | ECPGGetDescHeaderItems ',' ECPGGetDescHeaderItem
+ ;
+
ECPGGetDescItems: ECPGGetDescItem
- | ECPGGetDescItems ',' ECPGGetDescItem
- ;
-
-ECPGGetDescriptorHeader: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar ECPGGetDescHeaderItems
- { $$ = $3; };
-
-ECPGGetDescriptor: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar SQL_VALUE cvariable ECPGGetDescItems
- { $$.str = $5; $$.name = $3; }
- | SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar SQL_VALUE Iconst ECPGGetDescItems
- { $$.str = $5; $$.name = $3; }
- ;
+ | ECPGGetDescItems ',' ECPGGetDescItem
+ ;
+
+ECPGGetDescriptorHeader: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar
+ ECPGGetDescHeaderItems
+ { $$ = $3; }
+ ;
+
+ECPGGetDescriptor: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar
+ SQL_VALUE cvariable ECPGGetDescItems
+ { $$.str = $5; $$.name = $3; }
+ | SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar SQL_VALUE Iconst ECPGGetDescItems
+ { $$.str = $5; $$.name = $3; }
+ ;
/*
* for compatibility with ORACLE we will also allow the keyword RELEASE
*/
ECPGRelease: TransactionStmt SQL_RELEASE
- {
- if (strcmp($1, "begin") == 0)
- mmerror(PARSE_ERROR, ET_ERROR, "RELEASE does not make sense when beginning a transaction");
-
- fprintf(yyout, "ECPGtrans(__LINE__, %s, \"%s\");",
- connection ? connection : "NULL", $1);
- whenever_action(0);
- fprintf(yyout, "ECPGdisconnect(__LINE__, \"\");");
- whenever_action(0);
- free($1);
- };
-
-/*
+ {
+ if (strcmp($1, "begin") == 0)
+ mmerror(PARSE_ERROR, ET_ERROR, "RELEASE does not make sense when beginning a transaction");
+
+ fprintf(yyout, "ECPGtrans(__LINE__, %s, \"%s\");",
+ connection ? connection : "NULL", $1);
+ whenever_action(0);
+ fprintf(yyout, "ECPGdisconnect(__LINE__, \"\");");
+ whenever_action(0);
+ free($1);
+ }
+ ;
+
+/*
* set/reset the automatic transaction mode, this needs a differnet handling
* as the other set commands
*/
-ECPGSetAutocommit: SET SQL_AUTOCOMMIT to_equal on_off
- {
- $$ = $4;
- };
+ECPGSetAutocommit: SET SQL_AUTOCOMMIT to_equal on_off { $$ = $4; }
+ ;
-on_off: ON { $$ = make_str("on"); }
- | OFF { $$ = make_str("off"); }
- ;
+on_off: ON { $$ = make_str("on"); }
+ | OFF { $$ = make_str("off"); }
+ ;
to_equal: TO | '=';
-/*
+/*
* set the actual connection, this needs a differnet handling as the other
* set commands
*/
-ECPGSetConnection: SET SQL_CONNECTION to_equal connection_object
- {
- $$ = $4;
- };
+ECPGSetConnection: SET SQL_CONNECTION to_equal connection_object { $$ = $4; }
+ ;
/*
* define a new type for embedded SQL
*/
ECPGTypedef: TYPE_P
- {
- /* reset this variable so we see if there was */
- /* an initializer specified */
- initializer = 0;
- }
- ColLabel IS type opt_type_array_bounds opt_reference
- {
- /* add entry to list */
- struct typedefs *ptr, *this;
- int dimension = $6.index1;
- int length = $6.index2;
-
- if (($5.type_enum == ECPGt_struct ||
- $5.type_enum == ECPGt_union) &&
- initializer == 1)
{
- mmerror(PARSE_ERROR, ET_ERROR, "Initializer not allowed in EXEC SQL VAR command");
+ /* reset this variable so we see if there was */
+ /* an initializer specified */
+ initializer = 0;
}
- else
+ ColLabel IS type opt_type_array_bounds opt_reference
{
- for (ptr = types; ptr != NULL; ptr = ptr->next)
+ /* add entry to list */
+ struct typedefs *ptr, *this;
+ int dimension = $6.index1;
+ int length = $6.index2;
+
+ if (($5.type_enum == ECPGt_struct ||
+ $5.type_enum == ECPGt_union) &&
+ initializer == 1)
+ mmerror(PARSE_ERROR, ET_ERROR, "Initializer not allowed in EXEC SQL VAR command");
+ else
{
- if (strcmp($3, ptr->name) == 0)
+ for (ptr = types; ptr != NULL; ptr = ptr->next)
{
- /* re-definition is a bug */
- sprintf(errortext, "Type %s already defined", $3);
- mmerror(PARSE_ERROR, ET_ERROR, errortext);
- }
- }
+ if (strcmp($3, ptr->name) == 0)
+ {
+ /* re-definition is a bug */
+ sprintf(errortext, "Type %s already defined", $3);
+ mmerror(PARSE_ERROR, ET_ERROR, errortext);
+ }
+ }
- adjust_array($5.type_enum, &dimension, &length, $5.type_dimension, $5.type_index, *$7?1:0);
+ adjust_array($5.type_enum, &dimension, &length, $5.type_dimension, $5.type_index, *$7?1:0);
- this = (struct typedefs *) mm_alloc(sizeof(struct typedefs));
+ this = (struct typedefs *) mm_alloc(sizeof(struct typedefs));
- /* initial definition */
- this->next = types;
- this->name = $3;
- this->type = (struct this_type *) mm_alloc(sizeof(struct this_type));
- this->type->type_enum = $5.type_enum;
- this->type->type_str = mm_strdup($3);
- this->type->type_dimension = dimension; /* dimension of array */
- this->type->type_index = length; /* lenght of string */
- this->struct_member_list = ($5.type_enum == ECPGt_struct || $5.type_enum == ECPGt_union) ?
- struct_member_list[struct_level] : NULL;
+ /* initial definition */
+ this->next = types;
+ this->name = $3;
+ this->type = (struct this_type *) mm_alloc(sizeof(struct this_type));
+ this->type->type_enum = $5.type_enum;
+ this->type->type_str = mm_strdup($3);
+ this->type->type_dimension = dimension; /* dimension of array */
+ this->type->type_index = length; /* lenght of string */
+ this->struct_member_list = ($5.type_enum == ECPGt_struct || $5.type_enum == ECPGt_union) ?
+ struct_member_list[struct_level] : NULL;
- if ($5.type_enum != ECPGt_varchar &&
- $5.type_enum != ECPGt_char &&
- $5.type_enum != ECPGt_unsigned_char &&
- this->type->type_index >= 0)
- mmerror(PARSE_ERROR, ET_ERROR, "No multi-dimensional array support for simple data types");
+ if ($5.type_enum != ECPGt_varchar &&
+ $5.type_enum != ECPGt_char &&
+ $5.type_enum != ECPGt_unsigned_char &&
+ this->type->type_index >= 0)
+ mmerror(PARSE_ERROR, ET_ERROR, "No multi-dimensional array support for simple data types");
- types = this;
- }
+ types = this;
+ }
- $$ = cat_str(7, make_str("/* exec sql type"), mm_strdup($3), make_str("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, make_str("*/"));
- };
+ $$ = cat_str(7, make_str("/* exec sql type"), mm_strdup($3), make_str("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, make_str("*/"));
+ }
+ ;
-opt_type_array_bounds: '[' ']' opt_type_array_bounds
- {
- $$.index1 = 0;
- $$.index2 = $3.index1;
- $$.str = cat2_str(make_str("[]"), $3.str);
- }
+opt_type_array_bounds: '[' ']' opt_type_array_bounds
+ {
+ $$.index1 = 0;
+ $$.index2 = $3.index1;
+ $$.str = cat2_str(make_str("[]"), $3.str);
+ }
| '(' ')' opt_type_array_bounds
- {
- $$.index1 = 0;
- $$.index2 = $3.index1;
- $$.str = cat2_str(make_str("[]"), $3.str);
- }
+ {
+ $$.index1 = 0;
+ $$.index2 = $3.index1;
+ $$.str = cat2_str(make_str("[]"), $3.str);
+ }
| '[' Iresult ']' opt_type_array_bounds
- {
- char *txt = mm_alloc(20L);
+ {
+ char *txt = mm_alloc(20L);
- sprintf (txt, "%d", $2);
- $$.index1 = $2;
- $$.index2 = $4.index1;
- $$.str = cat_str(4, make_str("["), txt, make_str("]"), $4.str);
- }
+ sprintf (txt, "%d", $2);
+ $$.index1 = $2;
+ $$.index2 = $4.index1;
+ $$.str = cat_str(4, make_str("["), txt, make_str("]"), $4.str);
+ }
| '(' Iresult ')' opt_type_array_bounds
- {
- char *txt = mm_alloc(20L);
+ {
+ char *txt = mm_alloc(20L);
- sprintf (txt, "%d", $2);
- $$.index1 = $2;
- $$.index2 = $4.index1;
- $$.str = cat_str(4, make_str("["), txt, make_str("]"), $4.str);
- }
+ sprintf (txt, "%d", $2);
+ $$.index1 = $2;
+ $$.index2 = $4.index1;
+ $$.str = cat_str(4, make_str("["), txt, make_str("]"), $4.str);
+ }
| /* EMPTY */
- {
- $$.index1 = -1;
- $$.index2 = -1;
- $$.str= EMPTY;
- }
+ {
+ $$.index1 = -1;
+ $$.index2 = -1;
+ $$.str= EMPTY;
+ }
;
-opt_reference: SQL_REFERENCE { $$ = make_str("reference"); }
- | /* empty */ { $$ = EMPTY; }
- ;
+opt_reference: SQL_REFERENCE { $$ = make_str("reference"); }
+ | /*EMPTY*/ { $$ = EMPTY; }
+ ;
/*
* define the type of one variable for embedded SQL
*/
ECPGVar: SQL_VAR
- {
- /* reset this variable so we see if there was */
- /* an initializer specified */
- initializer = 0;
- }
- ColLabel IS type opt_type_array_bounds opt_reference
- {
- struct variable *p = find_variable($3);
- int dimension = $6.index1;
- int length = $6.index2;
- struct ECPGtype * type;
-
- if (($5.type_enum == ECPGt_struct ||
- $5.type_enum == ECPGt_union) &&
- initializer == 1)
{
- mmerror(PARSE_ERROR, ET_ERROR, "Initializer not allowed in EXEC SQL VAR command");
+ /* reset this variable so we see if there was */
+ /* an initializer specified */
+ initializer = 0;
}
- else
+ ColLabel IS type opt_type_array_bounds opt_reference
{
- adjust_array($5.type_enum, &dimension, &length, $5.type_dimension, $5.type_index, *$7?1:0);
+ struct variable *p = find_variable($3);
+ int dimension = $6.index1;
+ int length = $6.index2;
+ struct ECPGtype * type;
- switch ($5.type_enum)
+ if (($5.type_enum == ECPGt_struct ||
+ $5.type_enum == ECPGt_union) &&
+ initializer == 1)
+ mmerror(PARSE_ERROR, ET_ERROR, "Initializer not allowed in EXEC SQL VAR command");
+ else
{
- case ECPGt_struct:
- case ECPGt_union:
- if (dimension < 0)
- type = ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, ECPGstruct_sizeof);
- else
- type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, ECPGstruct_sizeof), dimension);
- break;
- case ECPGt_varchar:
- if (dimension == -1)
- type = ECPGmake_simple_type($5.type_enum, length);
- else
- type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length), dimension);
-
- break;
- case ECPGt_char:
- case ECPGt_unsigned_char:
- if (dimension == -1)
- type = ECPGmake_simple_type($5.type_enum, length);
- else
- type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length), dimension);
-
- break;
- default:
- if (length >= 0)
- mmerror(PARSE_ERROR, ET_ERROR, "No multi-dimensional array support for simple data types");
-
- if (dimension < 0)
- type = ECPGmake_simple_type($5.type_enum, 1);
- else
- type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, 1), dimension);
-
- break;
- }
-
- ECPGfree_type(p->type);
- p->type = type;
- }
+ adjust_array($5.type_enum, &dimension, &length, $5.type_dimension, $5.type_index, *$7?1:0);
+
+ switch ($5.type_enum)
+ {
+ case ECPGt_struct:
+ case ECPGt_union:
+ if (dimension < 0)
+ type = ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, ECPGstruct_sizeof);
+ else
+ type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, ECPGstruct_sizeof), dimension);
+ break;
+
+ case ECPGt_varchar:
+ if (dimension == -1)
+ type = ECPGmake_simple_type($5.type_enum, length);
+ else
+ type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length), dimension);
+ break;
- $$ = cat_str(7, make_str("/* exec sql var"), mm_strdup($3), make_str("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, make_str("*/"));
- };
+ case ECPGt_char:
+ case ECPGt_unsigned_char:
+ if (dimension == -1)
+ type = ECPGmake_simple_type($5.type_enum, length);
+ else
+ type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length), dimension);
+ break;
+
+ default:
+ if (length >= 0)
+ mmerror(PARSE_ERROR, ET_ERROR, "No multi-dimensional array support for simple data types");
+
+ if (dimension < 0)
+ type = ECPGmake_simple_type($5.type_enum, 1);
+ else
+ type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, 1), dimension);
+ break;
+ }
+
+ ECPGfree_type(p->type);
+ p->type = type;
+ }
+
+ $$ = cat_str(7, make_str("/* exec sql var"), mm_strdup($3), make_str("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, make_str("*/"));
+ }
+ ;
/*
* whenever statement: decide what to do in case of error/no data found
* according to SQL standards we lack: SQLSTATE, CONSTRAINT and SQLEXCEPTION
*/
ECPGWhenever: SQL_WHENEVER SQL_SQLERROR action
- {
- when_error.code = $<action>3.code;
- when_error.command = $<action>3.command;
- $$ = cat_str(3, make_str("/* exec sql whenever sqlerror "), $3.str, make_str("; */\n"));
- }
- | SQL_WHENEVER NOT SQL_FOUND action
- {
- when_nf.code = $<action>4.code;
- when_nf.command = $<action>4.command;
- $$ = cat_str(3, make_str("/* exec sql whenever not found "), $4.str, make_str("; */\n"));
- }
- | SQL_WHENEVER SQL_SQLWARNING action
- {
- when_warn.code = $<action>3.code;
- when_warn.command = $<action>3.command;
- $$ = cat_str(3, make_str("/* exec sql whenever sql_warning "), $3.str, make_str("; */\n"));
- }
- ;
+ {
+ when_error.code = $<action>3.code;
+ when_error.command = $<action>3.command;
+ $$ = cat_str(3, make_str("/* exec sql whenever sqlerror "), $3.str, make_str("; */\n"));
+ }
+ | SQL_WHENEVER NOT SQL_FOUND action
+ {
+ when_nf.code = $<action>4.code;
+ when_nf.command = $<action>4.command;
+ $$ = cat_str(3, make_str("/* exec sql whenever not found "), $4.str, make_str("; */\n"));
+ }
+ | SQL_WHENEVER SQL_SQLWARNING action
+ {
+ when_warn.code = $<action>3.code;
+ when_warn.command = $<action>3.command;
+ $$ = cat_str(3, make_str("/* exec sql whenever sql_warning "), $3.str, make_str("; */\n"));
+ }
+ ;
action : SQL_CONTINUE
- {
- $<action>$.code = W_NOTHING;
- $<action>$.command = NULL;
- $<action>$.str = make_str("continue");
- }
- | SQL_SQLPRINT
- {
- $<action>$.code = W_SQLPRINT;
- $<action>$.command = NULL;
- $<action>$.str = make_str("sqlprint");
- }
- | SQL_STOP
- {
- $<action>$.code = W_STOP;
- $<action>$.command = NULL;
- $<action>$.str = make_str("stop");
- }
- | SQL_GOTO name
- {
- $<action>$.code = W_GOTO;
- $<action>$.command = strdup($2);
- $<action>$.str = cat2_str(make_str("goto "), $2);
- }
- | SQL_GO TO name
- {
- $<action>$.code = W_GOTO;
- $<action>$.command = strdup($3);
- $<action>$.str = cat2_str(make_str("goto "), $3);
- }
- | DO name '(' c_args ')'
- {
- $<action>$.code = W_DO;
- $<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
- $<action>$.str = cat2_str(make_str("do"), mm_strdup($<action>$.command));
- }
- | DO SQL_BREAK
- {
- $<action>$.code = W_BREAK;
- $<action>$.command = NULL;
- $<action>$.str = make_str("break");
- }
- | SQL_CALL name '(' c_args ')'
- {
- $<action>$.code = W_DO;
- $<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
- $<action>$.str = cat2_str(make_str("call"), mm_strdup($<action>$.command));
- }
- ;
+ {
+ $<action>$.code = W_NOTHING;
+ $<action>$.command = NULL;
+ $<action>$.str = make_str("continue");
+ }
+ | SQL_SQLPRINT
+ {
+ $<action>$.code = W_SQLPRINT;
+ $<action>$.command = NULL;
+ $<action>$.str = make_str("sqlprint");
+ }
+ | SQL_STOP
+ {
+ $<action>$.code = W_STOP;
+ $<action>$.command = NULL;
+ $<action>$.str = make_str("stop");
+ }
+ | SQL_GOTO name
+ {
+ $<action>$.code = W_GOTO;
+ $<action>$.command = strdup($2);
+ $<action>$.str = cat2_str(make_str("goto "), $2);
+ }
+ | SQL_GO TO name
+ {
+ $<action>$.code = W_GOTO;
+ $<action>$.command = strdup($3);
+ $<action>$.str = cat2_str(make_str("goto "), $3);
+ }
+ | DO name '(' c_args ')'
+ {
+ $<action>$.code = W_DO;
+ $<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
+ $<action>$.str = cat2_str(make_str("do"), mm_strdup($<action>$.command));
+ }
+ | DO SQL_BREAK
+ {
+ $<action>$.code = W_BREAK;
+ $<action>$.command = NULL;
+ $<action>$.str = make_str("break");
+ }
+ | SQL_CALL name '(' c_args ')'
+ {
+ $<action>$.code = W_DO;
+ $<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
+ $<action>$.str = cat2_str(make_str("call"), mm_strdup($<action>$.command));
+ }
+ ;
/* some other stuff for ecpg */
| SQL_PREPARE { $$ = make_str("prepare"); }
| SQL_RELEASE { $$ = make_str("release"); }
| SQL_RETURNED_LENGTH { $$ = make_str("returned_length"); }
- | SQL_RETURNED_OCTET_LENGTH { $$ = make_str("returned_octet_length"); }
+ | SQL_RETURNED_OCTET_LENGTH { $$ = make_str("returned_octet_length"); }
| SQL_SCALE { $$ = make_str("scale"); }
| SQL_SECTION { $$ = make_str("section"); }
| SQL_SQLERROR { $$ = make_str("sqlerror"); }
;
/* additional keywords that can be SQL type names (but not ECPGColLabels) */
-ECPGTypeName: SQL_BOOL { $$ = make_str("bool"); }
- | SQL_INT { $$ = make_str("int"); }
- | SQL_LONG { $$ = make_str("long"); }
- | SQL_SHORT { $$ = make_str("short"); }
- | SQL_STRUCT { $$ = make_str("struct"); }
- | SQL_SIGNED { $$ = make_str("signed"); }
- | SQL_UNSIGNED { $$ = make_str("unsigned"); }
+ECPGTypeName: SQL_BOOL { $$ = make_str("bool"); }
+ | SQL_INT { $$ = make_str("int"); }
+ | SQL_LONG { $$ = make_str("long"); }
+ | SQL_SHORT { $$ = make_str("short"); }
+ | SQL_STRUCT { $$ = make_str("struct"); }
+ | SQL_SIGNED { $$ = make_str("signed"); }
+ | SQL_UNSIGNED { $$ = make_str("unsigned"); }
;
-opt_symbol: symbol { $$ = $1; }
- | /*EMPTY*/ { $$ = EMPTY; }
+opt_symbol: symbol { $$ = $1; }
+ | /*EMPTY*/ { $$ = EMPTY; }
;
-symbol: ColLabel { $$ = $1; };
+symbol: ColLabel { $$ = $1; }
+ ;
/*
* Name classification hierarchy.
*
* IDENT is the lexeme returned by the lexer for identifiers that match
* no known keyword. In most cases, we can accept certain keywords as
- * names, not only IDENTs. We prefer to accept as many such keywords
+ * names, not only IDENTs. We prefer to accept as many such keywords
* as possible to minimize the impact of "reserved words" on programmers.
* So, we divide names into several possible classes. The classification
* is chosen in part to make keywords acceptable as names wherever possible.
/* Column identifier --- names that can be column, table, etc names.
*/
-ColId: ident { $$ = $1; }
+ColId: ident { $$ = $1; }
| unreserved_keyword { $$ = $1; }
| col_name_keyword { $$ = $1; }
- | ECPGKeywords { $$ = $1; }
+ | ECPGKeywords { $$ = $1; }
| CHAR { $$ = make_str("char"); }
;
/* Type identifier --- names that can be type names.
*/
-type_name: ident { $$ = $1; }
+type_name: ident { $$ = $1; }
| unreserved_keyword { $$ = $1; }
- | ECPGKeywords { $$ = $1; }
+ | ECPGKeywords { $$ = $1; }
| ECPGTypeName { $$ = $1; }
;
/* Function identifier --- names that can be function names.
*/
-func_name: ident { $$ = $1; }
+func_name: ident { $$ = $1; }
| unreserved_keyword { $$ = $1; }
| func_name_keyword { $$ = $1; }
- | ECPGKeywords { $$ = $1; }
+ | ECPGKeywords { $$ = $1; }
;
/* Column label --- allowed labels in "AS" clauses.
| col_name_keyword { $$ = $1; }
| func_name_keyword { $$ = $1; }
| reserved_keyword { $$ = $1; }
- | ECPGKeywords { $$ = $1; }
+ | ECPGKeywords { $$ = $1; }
;
| STATISTICS { $$ = make_str("statistics"); }
| STDIN { $$ = make_str("stdin"); }
| STDOUT { $$ = make_str("stdout"); }
- | STORAGE { $$ = make_str("storage"); }
+ | STORAGE { $$ = make_str("storage"); }
| SYSID { $$ = make_str("sysid"); }
| TEMP { $$ = make_str("temp"); }
| TEMPLATE { $$ = make_str("template"); }
*
* Do not include POSITION, SUBSTRING, etc here since they have explicit
* productions in a_expr to support the goofy SQL9x argument syntax.
- * - thomas 2000-11-28
+ * - thomas 2000-11-28
*/
func_name_keyword:
BETWEEN { $$ = make_str("between"); }
;
-into_list : coutputvariable | into_list ',' coutputvariable;
+into_list : coutputvariable | into_list ',' coutputvariable
+ ;
-ecpgstart: SQL_START { reset_variables(); };
+ecpgstart: SQL_START { reset_variables(); }
+ ;
-c_args: /* empty */ { $$ = EMPTY; }
- | c_list { $$ = $1; }
- ;
+c_args: /*EMPTY*/ { $$ = EMPTY; }
+ | c_list { $$ = $1; }
+ ;
coutputvariable: cvariable indicator
- {
- add_variable(&argsresult, find_variable($1), find_variable($2));
- }
- | cvariable
- {
- add_variable(&argsresult, find_variable($1), &no_indicator);
- }
- ;
+ { add_variable(&argsresult, find_variable($1), find_variable($2)); }
+ | cvariable
+ { add_variable(&argsresult, find_variable($1), &no_indicator); }
+ ;
civarind: cvariable indicator
- {
- if ($2 != NULL && (find_variable($2))->type->type == ECPGt_array)
- mmerror(PARSE_ERROR, ET_ERROR, "arrays of indicators are not allowed on input");
+ {
+ if ($2 != NULL && (find_variable($2))->type->type == ECPGt_array)
+ mmerror(PARSE_ERROR, ET_ERROR, "arrays of indicators are not allowed on input");
- add_variable(&argsinsert, find_variable($1), ($2 == NULL) ? &no_indicator : find_variable($2));
- };
+ add_variable(&argsinsert, find_variable($1), ($2 == NULL) ? &no_indicator : find_variable($2));
+ }
+ ;
civar: cvariable
- {
- add_variable(&argsinsert, find_variable($1), &no_indicator);
- $$ = $1;
- };
+ {
+ add_variable(&argsinsert, find_variable($1), &no_indicator);
+ $$ = $1;
+ }
+ ;
-cvariable: CVARIABLE { $$ = $1; }
+cvariable: CVARIABLE { $$ = $1; }
-indicator: CVARIABLE { check_indicator((find_variable($1))->type); $$ = $1; }
- | SQL_INDICATOR cvariable { check_indicator((find_variable($2))->type); $$ = $2; }
- | SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
- ;
+indicator: CVARIABLE { check_indicator((find_variable($1))->type); $$ = $1; }
+ | SQL_INDICATOR cvariable { check_indicator((find_variable($2))->type); $$ = $2; }
+ | SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
+ ;
-ident: IDENT { $$ = $1; }
- | CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
- ;
+ident: IDENT { $$ = $1; }
+ | CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
+ ;
-quoted_ident_stringvar: IDENT { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
- | CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
- | char_variable
- { $$ = make3_str(make_str("("), $1, make_str(")"));
- }
- ;
+quoted_ident_stringvar: IDENT
+ { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
+ | CSTRING
+ { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
+ | char_variable
+ { $$ = make3_str(make_str("("), $1, make_str(")")); }
+ ;
/*
* C stuff
cpp_line: CPP_LINE { $$ = $1; };
-c_stuff_item: c_anything { $$ = $1; }
- | '(' ')' { $$ = make_str("()"); }
- | '(' c_stuff ')'
- {
- $$ = cat_str(3, make_str("("), $2, make_str(")"));
- }
- ;
+c_stuff_item: c_anything { $$ = $1; }
+ | '(' ')' { $$ = make_str("()"); }
+ | '(' c_stuff ')'
+ { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
+ ;
-c_stuff: c_stuff_item { $$ = $1; }
- | c_stuff c_stuff_item
- {
- $$ = cat2_str($1, $2);
- }
- ;
+c_stuff: c_stuff_item { $$ = $1; }
+ | c_stuff c_stuff_item
+ { $$ = cat2_str($1, $2); }
+ ;
-c_list: c_term { $$ = $1; }
- | c_list ',' c_term { $$ = cat_str(3, $1, make_str(","), $3); }
- ;
+c_list: c_term { $$ = $1; }
+ | c_list ',' c_term { $$ = cat_str(3, $1, make_str(","), $3); }
+ ;
-c_term: c_stuff { $$ = $1; }
- | '{' c_list '}' { $$ = cat_str(3, make_str("{"), $2, make_str("}")); }
- ;
+c_term: c_stuff { $$ = $1; }
+ | '{' c_list '}' { $$ = cat_str(3, make_str("{"), $2, make_str("}")); }
+ ;
c_thing: c_anything { $$ = $1; }
- | '(' { $$ = make_str("("); }
- | ')' { $$ = make_str(")"); }
- | ',' { $$ = make_str(","); }
- | ';' { $$ = make_str(";"); }
- ;
-
-c_anything: IDENT { $$ = $1; }
- | CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
- | PosIntConst { $$ = $1; }
- | Fconst { $$ = $1; }
- | Sconst { $$ = $1; }
- | '*' { $$ = make_str("*"); }
- | '+' { $$ = make_str("+"); }
- | '-' { $$ = make_str("-"); }
- | '/' { $$ = make_str("/"); }
- | '%' { $$ = make_str("%"); }
- | NULL_P { $$ = make_str("NULL"); }
- | S_ADD { $$ = make_str("+="); }
- | S_AND { $$ = make_str("&&"); }
- | S_ANYTHING { $$ = make_name(); }
- | S_AUTO { $$ = make_str("auto"); }
- | S_CONST { $$ = make_str("const"); }
- | S_DEC { $$ = make_str("--"); }
- | S_DIV { $$ = make_str("/="); }
- | S_DOTPOINT { $$ = make_str(".*"); }
- | S_EQUAL { $$ = make_str("=="); }
- | S_EXTERN { $$ = make_str("extern"); }
- | S_INC { $$ = make_str("++"); }
- | S_LSHIFT { $$ = make_str("<<"); }
- | S_MEMBER { $$ = make_str("->"); }
- | S_MEMPOINT { $$ = make_str("->*"); }
- | S_MOD { $$ = make_str("%="); }
- | S_MUL { $$ = make_str("*="); }
- | S_NEQUAL { $$ = make_str("!="); }
- | S_OR { $$ = make_str("||"); }
- | S_REGISTER { $$ = make_str("register"); }
- | S_RSHIFT { $$ = make_str(">>"); }
- | S_STATIC { $$ = make_str("static"); }
- | S_SUB { $$ = make_str("-="); }
- | SQL_BOOL { $$ = make_str("bool"); }
- | SQL_ENUM { $$ = make_str("enum"); }
- | SQL_INT { $$ = make_str("int"); }
- | SQL_LONG { $$ = make_str("long"); }
- | SQL_SHORT { $$ = make_str("short"); }
- | SQL_SIGNED { $$ = make_str("signed"); }
- | SQL_STRUCT { $$ = make_str("struct"); }
- | SQL_UNSIGNED { $$ = make_str("unsigned"); }
- | CHAR { $$ = make_str("char"); }
- | DOUBLE { $$ = make_str("double"); }
- | FLOAT { $$ = make_str("float"); }
- | UNION { $$ = make_str("union"); }
- | VARCHAR { $$ = make_str("varchar"); }
- | '[' { $$ = make_str("["); }
- | ']' { $$ = make_str("]"); }
- | '=' { $$ = make_str("="); }
- ;
+ | '(' { $$ = make_str("("); }
+ | ')' { $$ = make_str(")"); }
+ | ',' { $$ = make_str(","); }
+ | ';' { $$ = make_str(";"); }
+ ;
+
+c_anything: IDENT { $$ = $1; }
+ | CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
+ | PosIntConst { $$ = $1; }
+ | Fconst { $$ = $1; }
+ | Sconst { $$ = $1; }
+ | '*' { $$ = make_str("*"); }
+ | '+' { $$ = make_str("+"); }
+ | '-' { $$ = make_str("-"); }
+ | '/' { $$ = make_str("/"); }
+ | '%' { $$ = make_str("%"); }
+ | NULL_P { $$ = make_str("NULL"); }
+ | S_ADD { $$ = make_str("+="); }
+ | S_AND { $$ = make_str("&&"); }
+ | S_ANYTHING { $$ = make_name(); }
+ | S_AUTO { $$ = make_str("auto"); }
+ | S_CONST { $$ = make_str("const"); }
+ | S_DEC { $$ = make_str("--"); }
+ | S_DIV { $$ = make_str("/="); }
+ | S_DOTPOINT { $$ = make_str(".*"); }
+ | S_EQUAL { $$ = make_str("=="); }
+ | S_EXTERN { $$ = make_str("extern"); }
+ | S_INC { $$ = make_str("++"); }
+ | S_LSHIFT { $$ = make_str("<<"); }
+ | S_MEMBER { $$ = make_str("->"); }
+ | S_MEMPOINT { $$ = make_str("->*"); }
+ | S_MOD { $$ = make_str("%="); }
+ | S_MUL { $$ = make_str("*="); }
+ | S_NEQUAL { $$ = make_str("!="); }
+ | S_OR { $$ = make_str("||"); }
+ | S_REGISTER { $$ = make_str("register"); }
+ | S_RSHIFT { $$ = make_str(">>"); }
+ | S_STATIC { $$ = make_str("static"); }
+ | S_SUB { $$ = make_str("-="); }
+ | SQL_BOOL { $$ = make_str("bool"); }
+ | SQL_ENUM { $$ = make_str("enum"); }
+ | SQL_INT { $$ = make_str("int"); }
+ | SQL_LONG { $$ = make_str("long"); }
+ | SQL_SHORT { $$ = make_str("short"); }
+ | SQL_SIGNED { $$ = make_str("signed"); }
+ | SQL_STRUCT { $$ = make_str("struct"); }
+ | SQL_UNSIGNED { $$ = make_str("unsigned"); }
+ | CHAR { $$ = make_str("char"); }
+ | DOUBLE { $$ = make_str("double"); }
+ | FLOAT { $$ = make_str("float"); }
+ | UNION { $$ = make_str("union"); }
+ | VARCHAR { $$ = make_str("varchar"); }
+ | '[' { $$ = make_str("["); }
+ | ']' { $$ = make_str("]"); }
+ | '=' { $$ = make_str("="); }
+ ;
blockstart : '{'
- {
- braces_open++;
- $$ = make_str("{");
- };
+ {
+ braces_open++;
+ $$ = make_str("{");
+ };
blockend : '}'
- {
- remove_variables(braces_open--);
- $$ = make_str("}");
- };
+ {
+ remove_variables(braces_open--);
+ $$ = make_str("}");
+ };
%%
void yyerror( char * error)
-{ char buf[1024];
- snprintf(buf,sizeof buf,"%s at or near \"%s\"",error,yytext);
- buf[sizeof(buf)-1]=0;
+{
+ char buf[1024];
+
+ snprintf(buf,sizeof buf,"%s at or near \"%s\"",error,yytext);
+ buf[sizeof(buf)-1]=0;
mmerror(PARSE_ERROR, ET_ERROR, buf);
}