Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
cf8da4e9
Commit
cf8da4e9
authored
Oct 21, 2002
by
Michael Meskes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merged ecpg_big_bison back into HEAD
parent
79382cb9
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
549 additions
and
279 deletions
+549
-279
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/ChangeLog
+29
-1
src/interfaces/ecpg/lib/execute.c
src/interfaces/ecpg/lib/execute.c
+2
-2
src/interfaces/ecpg/preproc/Makefile
src/interfaces/ecpg/preproc/Makefile
+3
-2
src/interfaces/ecpg/preproc/ecpg_keywords.c
src/interfaces/ecpg/preproc/ecpg_keywords.c
+1
-4
src/interfaces/ecpg/preproc/keywords.c
src/interfaces/ecpg/preproc/keywords.c
+15
-2
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/pgc.l
+6
-18
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/preproc/preproc.y
+493
-250
No files found.
src/interfaces/ecpg/ChangeLog
View file @
cf8da4e9
...
...
@@ -1271,11 +1271,39 @@ Mon Jun 17 15:23:51 CEST 2002
- Fixed parser bug in pgc.l. Octal numbers in single quotes are now
correctly handled.
Sat Jul 20 10:09:58 CEST 2002
Tue Jun 18 15:13:15 CEST 2002
- Fixed parser bug concerning foreign keys.
- Synced preproc.y with gram.y.
- Synced pgc.l with scan.l.
- Synced keywords.c.
Sun Aug 18 16:09:06 CEST 2002
- Synced preproc.y with gram.y.
- Synced pgc.l with scan.l.
- Synced keywords.c.
Tue Aug 20 14:13:34 CEST 2002
- Removed ',' from preproc.y for bison 1.49b.
Sun Sep 1 11:13:04 CEST 2002
- Synced preproc.y with gram.y.
- Synced keywords.c.
Wed Sep 11 10:43:17 CEST 2002
- Synced preproc.y with gram.y.
Fri Sep 20 07:57:42 CEST 2002
- Synced preproc.y with gram.y.
- Synced keywords.c.
- Deactivated backend functions PREPARE, EXECUTE and DEALLOCATE for
the time being.
- Set ecpg version to 2.10.0.
- Set library version to 3.4.0.
src/interfaces/ecpg/lib/execute.c
View file @
cf8da4e9
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.
39 2002/09/04 20:31:46 momjian
Exp $ */
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.
40 2002/10/21 13:09:31 meskes
Exp $ */
/*
* The aim is to get a simpler inteface to the database routines.
...
...
@@ -89,7 +89,7 @@ quote_postgres(char *arg, int lineno)
res
[
ri
++
]
=
'\''
;
res
[
ri
]
=
'\0'
;
return
res
;
}
...
...
src/interfaces/ecpg/preproc/Makefile
View file @
cf8da4e9
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.8
5 2002/07/27 20:10:05 petere
Exp $
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.8
6 2002/10/21 13:09:31 meskes
Exp $
subdir
=
src/interfaces/ecpg/preproc
top_builddir
=
../../../..
...
...
@@ -18,7 +18,8 @@ override CFLAGS += -Wno-error
endif
OBJS
=
preproc.o pgc.o type.o ecpg.o ecpg_keywords.o output.o
\
keywords.o c_keywords.o ../lib/typename.o descriptor.o variable.o
keywords.o c_keywords.o ../lib/typename.o descriptor.o variable.o
\
$(SNPRINTF)
$(STRDUP)
all
:
submake-libpgport ecpg
...
...
src/interfaces/ecpg/preproc/ecpg_keywords.c
View file @
cf8da4e9
...
...
@@ -4,7 +4,7 @@
* lexical token lookup for reserved words in postgres embedded SQL
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg_keywords.c,v 1.2
6 2002/05/19 20:00:53
meskes Exp $
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg_keywords.c,v 1.2
7 2002/10/21 13:09:31
meskes Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -38,13 +38,11 @@ static ScanKeyword ScanKeywords[] = {
{
"data"
,
SQL_DATA
},
{
"datetime_interval_code"
,
SQL_DATETIME_INTERVAL_CODE
},
{
"datetime_interval_precision"
,
SQL_DATETIME_INTERVAL_PRECISION
},
{
"deallocate"
,
SQL_DEALLOCATE
},
{
"descriptor"
,
SQL_DESCRIPTOR
},
{
"disconnect"
,
SQL_DISCONNECT
},
{
"enum"
,
SQL_ENUM
},
{
"found"
,
SQL_FOUND
},
{
"free"
,
SQL_FREE
},
{
"get"
,
SQL_GET
},
{
"go"
,
SQL_GO
},
{
"goto"
,
SQL_GOTO
},
{
"identified"
,
SQL_IDENTIFIED
},
...
...
@@ -56,7 +54,6 @@ static ScanKeyword ScanKeywords[] = {
{
"nullable"
,
SQL_NULLABLE
},
{
"octet_length"
,
SQL_OCTET_LENGTH
},
{
"open"
,
SQL_OPEN
},
{
"prepare"
,
SQL_PREPARE
},
{
"reference"
,
SQL_REFERENCE
},
{
"release"
,
SQL_RELEASE
},
{
"returned_length"
,
SQL_RETURNED_LENGTH
},
...
...
src/interfaces/ecpg/preproc/keywords.c
View file @
cf8da4e9
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.5
4 2002/07/21 11:09:4
1 meskes Exp $
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.5
5 2002/10/21 13:09:3
1 meskes Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -44,6 +44,7 @@ static ScanKeyword ScanKeywords[] = {
{
"as"
,
AS
},
{
"asc"
,
ASC
},
{
"assertion"
,
ASSERTION
},
{
"assignment"
,
ASSIGNMENT
},
{
"at"
,
AT
},
{
"authorization"
,
AUTHORIZATION
},
{
"backward"
,
BACKWARD
},
...
...
@@ -67,6 +68,7 @@ static ScanKeyword ScanKeywords[] = {
{
"characteristics"
,
CHARACTERISTICS
},
{
"check"
,
CHECK
},
{
"checkpoint"
,
CHECKPOINT
},
{
"class"
,
CLASS
},
{
"close"
,
CLOSE
},
{
"cluster"
,
CLUSTER
},
{
"coalesce"
,
COALESCE
},
...
...
@@ -77,6 +79,8 @@ static ScanKeyword ScanKeywords[] = {
{
"committed"
,
COMMITTED
},
{
"constraint"
,
CONSTRAINT
},
{
"constraints"
,
CONSTRAINTS
},
{
"conversion"
,
CONVERSION_P
},
{
"convert"
,
CONVERT
},
{
"copy"
,
COPY
},
{
"create"
,
CREATE
},
{
"createdb"
,
CREATEDB
},
...
...
@@ -90,6 +94,7 @@ static ScanKeyword ScanKeywords[] = {
{
"cycle"
,
CYCLE
},
{
"database"
,
DATABASE
},
{
"day"
,
DAY_P
},
{
"deallocate"
,
DEALLOCATE
},
{
"dec"
,
DEC
},
{
"decimal"
,
DECIMAL
},
{
"declare"
,
DECLARE
},
...
...
@@ -98,6 +103,7 @@ static ScanKeyword ScanKeywords[] = {
{
"deferred"
,
DEFERRED
},
{
"definer"
,
DEFINER
},
{
"delete"
,
DELETE_P
},
{
"delimiter"
,
DELIMITER
},
{
"delimiters"
,
DELIMITERS
},
{
"desc"
,
DESC
},
{
"distinct"
,
DISTINCT
},
...
...
@@ -129,6 +135,7 @@ static ScanKeyword ScanKeywords[] = {
{
"from"
,
FROM
},
{
"full"
,
FULL
},
{
"function"
,
FUNCTION
},
{
"get"
,
GET
},
{
"global"
,
GLOBAL
},
{
"grant"
,
GRANT
},
{
"group"
,
GROUP_P
},
...
...
@@ -138,7 +145,7 @@ static ScanKeyword ScanKeywords[] = {
{
"ilike"
,
ILIKE
},
{
"immediate"
,
IMMEDIATE
},
{
"immutable"
,
IMMUTABLE
},
{
"implicit"
,
IMPLICIT
},
{
"implicit"
,
IMPLICIT
_P
},
{
"in"
,
IN_P
},
{
"increment"
,
INCREMENT
},
{
"index"
,
INDEX
},
...
...
@@ -218,6 +225,7 @@ static ScanKeyword ScanKeywords[] = {
{
"pendant"
,
PENDANT
},
{
"position"
,
POSITION
},
{
"precision"
,
PRECISION
},
{
"prepare"
,
PREPARE
},
{
"primary"
,
PRIMARY
},
{
"prior"
,
PRIOR
},
{
"privileges"
,
PRIVILEGES
},
...
...
@@ -225,6 +233,7 @@ static ScanKeyword ScanKeywords[] = {
{
"procedure"
,
PROCEDURE
},
{
"read"
,
READ
},
{
"real"
,
REAL
},
{
"recheck"
,
RECHECK
},
{
"references"
,
REFERENCES
},
{
"reindex"
,
REINDEX
},
{
"relative"
,
RELATIVE
},
...
...
@@ -251,6 +260,8 @@ static ScanKeyword ScanKeywords[] = {
{
"setof"
,
SETOF
},
{
"share"
,
SHARE
},
{
"show"
,
SHOW
},
{
"similar"
,
SIMILAR
},
{
"simple"
,
SIMPLE
},
{
"smallint"
,
SMALLINT
},
{
"some"
,
SOME
},
{
"stable"
,
STABLE
},
...
...
@@ -274,6 +285,7 @@ static ScanKeyword ScanKeywords[] = {
{
"toast"
,
TOAST
},
{
"trailing"
,
TRAILING
},
{
"transaction"
,
TRANSACTION
},
{
"treat"
,
TREAT
},
{
"trigger"
,
TRIGGER
},
{
"trim"
,
TRIM
},
{
"true"
,
TRUE_P
},
...
...
@@ -304,6 +316,7 @@ static ScanKeyword ScanKeywords[] = {
{
"with"
,
WITH
},
{
"without"
,
WITHOUT
},
{
"work"
,
WORK
},
{
"write"
,
WRITE
},
{
"year"
,
YEAR_P
},
{
"zone"
,
ZONE
},
};
...
...
src/interfaces/ecpg/preproc/pgc.l
View file @
cf8da4e9
...
...
@@ -12,7 +12,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.
99 2002/09/02 06:11:42 momjian
Exp $
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.
100 2002/10/21 13:09:31 meskes
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -117,7 +117,7 @@ xbcat {quote}{whitespace_with_newline}{quote}
*/
xhstart [xX]{quote}
xhstop {quote}
xhinside [^']
+
xhinside [^']
*
xhcat {quote}{whitespace_with_newline}{quote}
/* National character
...
...
@@ -333,7 +333,7 @@ cppline {space}*#(.*\\{space})*.*
if (literalbuf[strspn(literalbuf, "01") + 1] != '\0')
mmerror(PARSE_ERROR, ET_ERROR, "invalid bit string input.");
yylval.str = literalbuf;
return B
IT
CONST;
return BCONST;
}
<xh>{xhinside} |
...
...
@@ -346,23 +346,11 @@ cppline {space}*#(.*\\{space})*.*
token_start = yytext;
BEGIN(xh);
startlit();
addlitchar('x');
}
<xh>{xhstop} {
long val;
char* endptr;
BEGIN(SQL);
errno = 0;
val = strtol(literalbuf, &endptr, 16);
if (*endptr != '\0' || errno == ERANGE
#ifdef HAVE_LONG_INT_64
/* if long > 32 bits, check for overflow of int4 */
|| val != (long) ((int32) val)
#endif
)
mmerror(PARSE_ERROR, ET_ERROR, "Bad hexadecimal integer input");
yylval.ival = val;
return ICONST;
yylval.str = literalbuf;
return XCONST;
}
<xh><<EOF>> { mmerror(PARSE_ERROR, ET_ERROR, "Unterminated hexadecimal integer"); }
...
...
src/interfaces/ecpg/preproc/preproc.y
View file @
cf8da4e9
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.19
8 2002/09/22 21:54:31 tgl
Exp $ */
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.19
9 2002/10/21 13:09:31 meskes
Exp $ */
/* Copyright comment */
%{
...
...
@@ -155,12 +155,12 @@ make_name(void)
SQL_CALL SQL_CARDINALITY SQL_CONNECT SQL_CONNECTION
SQL_CONTINUE SQL_COUNT SQL_CURRENT SQL_DATA
SQL_DATETIME_INTERVAL_CODE
SQL_DATETIME_INTERVAL_PRECISION
SQL_DEALLOCATE
SQL_DATETIME_INTERVAL_PRECISION
SQL_DESCRIPTOR SQL_DISCONNECT SQL_ENUM SQL_FOUND
SQL_FREE SQL_G
ET SQL_G
O SQL_GOTO SQL_IDENTIFIED
SQL_FREE SQL_GO SQL_GOTO SQL_IDENTIFIED
SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH
SQL_LONG SQL_NAME SQL_NULLABLE SQL_OCTET_LENGTH
SQL_OPEN SQL_
PREPARE SQL_
RELEASE SQL_REFERENCE
SQL_OPEN 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
...
...
@@ -178,30 +178,32 @@ make_name(void)
/* ordinary key words in alphabetical order */
%token <keyword> ABORT_TRANS ABSOLUTE ACCESS ACTION ADD AFTER
AGGREGATE ALL ALTER ANALYSE ANALYZE AND ANY AS ASC
ASSERTION
AT AUTHORIZATION
AGGREGATE ALL ALTER ANALYSE ANALYZE AND ANY AS ASC
ASSERTION ASSIGNMENT
AT AUTHORIZATION
BACKWARD BEFORE BEGIN_TRANS BETWEEN BIGINT BINARY BIT BOTH
BOOLEAN BY
CACHE CALLED CASCADE CASE CAST CHAIN CHAR_P CHARACTER
CHARACTERISTICS CHECK CHECKPOINT CLOSE CLUSTER COALESCE COLLATE
COLUMN COMMENT COMMIT COMMITTED CONSTRAINT CONSTRAINTS COPY
CACHE CALLED CASCADE CASE CAST CHAIN CHAR_P
CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT
COMMITTED CONSTRAINT CONSTRAINTS CONVERSION_P CONVERT COPY
CREATE CREATEDB CREATEUSER CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
DATABASE DAY_P DEC DECIMAL DECLARE DEFAULT DEFERRABLE DEFERRED
DEFINER DELETE_P DELIMITERS DESC DISTINCT DO DOMAIN_P DOUBLE DROP
DATABASE DAY_P DEALLOCATE DEC DECIMAL DECLARE DEFAULT
DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS
DESC DISTINCT DO DOMAIN_P DOUBLE DROP
EACH ELSE ENCODING ENCRYPTED END_TRANS ESCAPE EXCEPT EXCLUSIVE
EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT
FALSE_P FETCH FLOAT_P FOR FORCE FOREIGN FORWARD FREEZE FROM
FULL FUNCTION
GLOBAL GRANT GROUP_P
G
ET G
LOBAL GRANT GROUP_P
HANDLER HAVING HOUR_P
ILIKE IMMEDIATE IMMUTABLE IMPLICIT IN_P INCREMENT INDEX INHERITS
ILIKE IMMEDIATE IMMUTABLE IMPLICIT
_P
IN_P INCREMENT INDEX INHERITS
INITIALLY INNER_P INOUT INPUT INSENSITIVE INSERT INSTEAD INT
INTEGER INTERSECT INTERVAL INTO INVOKER IS ISNULL ISOLATION
...
...
@@ -218,26 +220,26 @@ make_name(void)
NUMERIC
OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR ORDER
OUT_P OUTER_P OVERLAPS OWNER
OUT_P OUTER_P OVERLAPS O
VERLAY O
WNER
PARTIAL PASSWORD PATH_P PENDANT P
OSITION PRECISION PRIMARY
PRIOR PRIVILEGES PROCEDURE PROCEDURAL
PARTIAL PASSWORD PATH_P PENDANT P
LACING POSITION PRECISION PREPARE
PRI
MARY PRI
OR PRIVILEGES PROCEDURE PROCEDURAL
READ REAL RE
FERENCES REINDEX RELATIVE RENAME REPLACE RESET
RESTRICT RETURNS REVOKE RIGHT ROLLBACK ROW RULE
READ REAL RE
CHECK REFERENCES REINDEX RELATIVE RENAME REPLACE
RESET
RESTRICT RETURNS REVOKE RIGHT ROLLBACK ROW RULE
SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE
SESSION SESSION_USER SET SETOF SHARE SHOW SMALLINT SOME
SESSION SESSION_USER SET SETOF SHARE SHOW S
IMILAR SIMPLE S
MALLINT SOME
STABLE START STATEMENT STATISTICS STDIN STDOUT STORAGE STRICT
SUBSTRING SYSID
TABLE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP TO TOAST
TRAILING TRANSACTION TRIGGER TRIM TRUE_P TRUNCATE TRUSTED TYPE_P
TRAILING TRANSACTION TR
EAT TR
IGGER TRIM TRUE_P TRUNCATE TRUSTED TYPE_P
UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL UPDATE USAGE
USER USING
VACUUM VALID VALUES VARCHAR VARYING VERBOSE VERSION VIEW VOLATILE
WHEN WHERE WITH WITHOUT WORK
WHEN WHERE WITH WITHOUT WORK
WRITE
YEAR_P
ZONE
...
...
@@ -248,29 +250,25 @@ make_name(void)
%token UNIONJOIN
/* Special keywords, not in the query language - see the "lex" file */
%token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP B
IT
CONST
%token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP B
CONST X
CONST
%token <ival> ICONST PARAM
%token <dval> FCONST
/* these are not real. they are here so that they get generated as #define's*/
%token OP
/* precedence: lowest to highest */
%left UNION EXCEPT
%left INTERSECT
%left JOIN UNIONJOIN CROSS LEFT FULL RIGHT INNER_P NATURAL
%left OR
%left AND
%right NOT
%right '='
%nonassoc '<' '>'
%nonassoc LIKE ILIKE
%nonassoc LIKE ILIKE
SIMILAR
%nonassoc ESCAPE
%nonassoc OVERLAPS
%nonassoc BETWEEN
%nonassoc IN_P
%left
POSTFIXOP /* dummy for postfix Op rules */
%left Op /* multi-character ops and user-defined operators */
%left POSTFIXOP /* dummy for postfix Op rules */
%left Op
OPERATOR
/* multi-character ops and user-defined operators */
%nonassoc NOTNULL
%nonassoc ISNULL
%nonassoc IS NULL_P TRUE_P FALSE_P UNKNOWN
...
...
@@ -284,14 +282,15 @@ make_name(void)
%left '(' ')'
%left TYPECAST
%left '.'
%left JOIN UNIONJOIN CROSS LEFT FULL RIGHT INNER_P NATURAL
%type <str> Iconst Fconst Sconst TransactionStmt CreateStmt UserId
%type <str> CreateAsElement OptCreateAs CreateAsList CreateAsStmt
%type <str>
key_reference comment_text ConstraintDeferrabilitySpec
%type <str>
comment_text ConstraintDeferrabilitySpec TableElementList
%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
%type <str> ColConstraint ColConstraintElem drop_type B
itconst
%type <str>
OptTableElementList OptTableElement TableConstraint
%type <str> ConstraintElem key_actions ColQualList type_name
DropSchemaStmt
%type <str> ColConstraint ColConstraintElem drop_type B
const
%type <str>
TableConstraint OptTableElementList Xconst
%type <str> ConstraintElem key_actions ColQualList type_name
%type <str> target_list target_el update_target_list alias_clause
%type <str> update_target_el opt_id qualified_name database_name
%type <str> access_method attr_name index_name name func_name
...
...
@@ -299,11 +298,11 @@ make_name(void)
%type <str> in_expr_nodes a_expr b_expr TruncateStmt CommentStmt
%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 attrs
drop_behavior
%type <str> Typename SimpleTypename
Generic
Numeric opt_float opt_numeric
%type <str> trim_list in_expr substr_for attrs
TableFuncElement
%type <str> Typename SimpleTypename Numeric opt_float opt_numeric
%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> opt_collate opt_timezone opt_interval table_ref
%type <str> row_
descriptor row_list ConstDatetime trans_options
%type <str> SelectStmt into_clause OptTemp ConstraintAttributeSpec
%type <str> opt_table opt_all sort_clause sortby_list ConstraintAttr
%type <str> sortby OptUseOp qualified_name_list name_list ColId_or_Sconst
...
...
@@ -311,44 +310,44 @@ make_name(void)
%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> NotifyStmt columnElem
UnlistenStmt TableElement rowdefinition
%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>
FetchStmt direction fetch_how_many from_in CreateOpClassStmt
%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 def_arg
%type <str> func_args_list func_args opt_with def_arg
overlay_placing
%type <str> def_elem def_list definition DefineStmt select_with_parens
%type <str> opt_instead event RuleActionList opt_using CreateAssertStmt
%type <str> RuleActionStmtOrEmpty RuleActionMulti func_as reindex_type
%type <str> RuleStmt opt_column opt_name oper_argtypes NumConst
%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> RemoveAggrStmt opt_procedural select_no_parens
CreateCastStmt
%type <str> RemoveOperStmt RenameStmt all_Op opt_Trusted opt_lancompiler
%type <str> VariableSetStmt var_value zone_value VariableShowStmt
%type <str> VariableResetStmt AlterTableStmt from_list
%type <str> VariableResetStmt AlterTableStmt from_list
overlay_list
%type <str> opt_trans user_list OptUserList OptUserElem relation_name
%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> TriggerActionTime CreateTrigStmt DropPLangStmt
DropCastStmt
%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> function_with_argtypes_list function_with_argtypes
%type <str> DropdbStmt ClusterStmt grantee RevokeStmt Bit
%type <str> DropdbStmt ClusterStmt grantee RevokeStmt Bit
DropOpClassStmt
%type <str> GrantStmt privileges PosAllConst constraints_set_list
%type <str> opt_cursor ConstraintsSetStmt AllConst CreateDomainStmt
%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
opt_recheck
%type <str> ConstraintTimeSpec AlterDatabaseSetStmt DropAssertStmt
%type <str> select_offset_value ReindexStmt join_type opt_boolean
%type <str> join_qual update_list
AlterSchemaStmt joined_table
%type <str> opt_l
evel opt_l
ock lock_type OptGroupList OptGroupElem
%type <str> join_qual update_list
joined_table opclass_item
%type <str> opt_lock lock_type OptGroupList OptGroupElem
%type <str> OptConstrFromTable OptTempTableName StringConst
%type <str> constraints_set_mode comment_type opt_empty_parentheses
%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
...
...
@@ -361,17 +360,25 @@ make_name(void)
%type <str> insert_target_list insert_column_item DropRuleStmt
%type <str> createfunc_opt_item set_rest var_list_or_default
%type <str> CreateFunctionStmt createfunc_opt_list func_table
%type <str> DropUserStmt
%type <str> DropUserStmt copy_from copy_opt_list opt_mode copy_opt_item
%type <str> opt_oids TableLikeClause key_action opt_definition
%type <str> cast_context row r_expr qual_Op qual_all_Op opt_default
%type <str> CreateConversionStmt any_operator opclass_item_list
%type <str> iso_level convert_list
%type <str> convert_args type_list CharacterWithLength ConstCharacter
%type <str> CharacterWithoutLength BitWithLength BitWithoutLength
%type <str> ConstBit GenericType TableFuncElementList
%type <str> opt_sort_clause
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
%type <str> indicator ECPGExecute ECPGPrepare ecpg_using ecpg_into
%type <str> indicator ECPGExecute ECPGPrepare
opt_
ecpg_using ecpg_into
%type <str> storage_clause opt_initializer c_anything
%type <str> 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>
quoted_ident_stringvar var_type_declarations
%type <str>
var_type_declarations quoted_ident_stringvar
%type <str> db_prefix server opt_options opt_connection_name c_list
%type <str> ECPGSetConnection ECPGTypedef c_args ECPGKeywords
%type <str> enum_type civar civarind ECPGCursorStmt ECPGDeallocate
...
...
@@ -398,6 +405,7 @@ make_name(void)
%type <index> opt_array_bounds opt_type_array_bounds
%type <ival> Iresult
%%
prog: statements;
...
...
@@ -428,7 +436,6 @@ opt_at: AT connection_target
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); }
| AlterUserStmt { output_statement($1, 0, connection); }
| AlterUserSetStmt { output_statement($1, 0, connection); }
...
...
@@ -437,6 +444,7 @@ stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
| CopyStmt { output_statement($1, 0, connection); }
| CreateStmt { output_statement($1, 0, connection); }
| CreateAsStmt { output_statement($1, 0, connection); }
| CreateCastStmt { output_statement($1, 0, connection); }
| CreateDomainStmt { output_statement($1, 0, connection); }
| CreateFunctionStmt { output_statement($1, 0, connection); }
| CreateSchemaStmt { output_statement($1, 0, connection); }
...
...
@@ -444,20 +452,23 @@ stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
| CreateSeqStmt { output_statement($1, 0, connection); }
| CreatePLangStmt { output_statement($1, 0, connection); }
| CreateAssertStmt { output_statement($1, 0, connection); }
| CreateOpClassStmt { output_statement($1, 0, connection); }
| CreateTrigStmt { output_statement($1, 0, connection); }
| CreateUserStmt { output_statement($1, 0, connection); }
| ClusterStmt { output_statement($1, 0, connection); }
/*| DeallocateStmt { 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); }
| DropCastStmt { output_statement($1, 0, connection); }
| DropGroupStmt { output_statement($1, 0, connection); }
| DropOpClassStmt { output_statement($1, 0, connection); }
| DropPLangStmt { output_statement($1, 0, connection); }
| DropAssertStmt { output_statement($1, 0, connection); }
| DropTrigStmt { output_statement($1, 0, connection); }
| DropRuleStmt { output_statement($1, 0, connection); }
| DropUserStmt { output_statement($1, 0, connection); }
| ExplainStmt { output_statement($1, 0, connection); }
| ExplainStmt { output_statement($1, 0, connection); }
/* | ExecuteStmt { output_statement($1, 0, connection); }*/
| FetchStmt { output_statement($1, 1, connection); }
| GrantStmt { output_statement($1, 0, connection); }
| IndexStmt { output_statement($1, 0, connection); }
...
...
@@ -465,6 +476,7 @@ stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
| UnlistenStmt { output_statement($1, 0, connection); }
| LockStmt { output_statement($1, 0, connection); }
| NotifyStmt { output_statement($1, 0, connection); }
/* | PrepareStmt { output_statement($1, 0, connection); }*/
| ReindexStmt { output_statement($1, 0, connection); }
| RemoveAggrStmt { output_statement($1, 0, connection); }
| RemoveOperStmt { output_statement($1, 0, connection); }
...
...
@@ -496,6 +508,7 @@ stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
| VariableResetStmt { output_statement($1, 0, connection); }
| ConstraintsSetStmt { output_statement($1, 0, connection); }
| CheckPointStmt { output_statement($1, 0, connection); }
| CreateConversionStmt { output_statement($1, 0, connection); }
| ECPGAllocateDescr
{
fprintf(yyout,"ECPGallocate_desc(__LINE__, %s);",$1);
...
...
@@ -657,12 +670,15 @@ stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
*
*****************************************************************************/
CreateUserStmt: CREATE USER UserId OptUserList
{ $$ = cat_str(3, make_str("create user"), $3, $4); }
| CREATE USER UserId WITH OptUserList
CreateUserStmt: CREATE USER UserId opt_with OptUserList
{ $$ = cat_str(4, make_str("create user"), $3, make_str("with"), $5); }
;
opt_with: WITH { $$ = make_str("with"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
/*****************************************************************************
*
* Alter a postgresql DBMS user
...
...
@@ -701,7 +717,7 @@ OptUserList: OptUserList OptUserElem { $$ = cat2_str($1, $2); }
OptUserElem: PASSWORD Sconst
{ $$ = cat2_str(make_str("password"), $2); }
| SYSID
Ic
onst
| SYSID
PosIntC
onst
{ $$ = cat2_str(make_str("sysid"), $2); }
| CREATEDB
{ $$ = make_str("createdb"); }
...
...
@@ -744,7 +760,7 @@ OptGroupList: OptGroupList OptGroupElem { $$ = cat2_str($1, $2); }
OptGroupElem: USER user_list
{ $$ = cat2_str(make_str("user"), $2); }
| SYSID
Iconst
| SYSID
PosIntConst
{ $$ = cat2_str(make_str("sysid"), $2); }
;
...
...
@@ -784,14 +800,6 @@ CreateSchemaStmt: CREATE SCHEMA UserId OptSchemaName AUTHORIZATION UserId OptSc
{ $$ = cat_str(3, make_str("create scheme"), $3, $4); }
;
AlterSchemaStmt: ALTER SCHEMA ColId
{ $$ = cat2_str(make_str("alter scheme"), $3); }
;
DropSchemaStmt: DROP SCHEMA ColId
{ $$ = cat2_str(make_str("drop scheme"), $3); }
;
OptSchemaName: ColId { $$ = $1; }
| /* EMPTY */ { $$ = EMPTY; }
;
...
...
@@ -833,9 +841,9 @@ set_rest: ColId TO var_list_or_default
{ $$ = cat_str(3, $1, make_str("="), $3); }
| TIME ZONE zone_value
{ $$ = cat2_str(make_str("time zone"), $3); }
| TRANSACTION ISOLATION LEVEL
opt_level
{ $$ = cat
2_str(make_str("transaction isolation level"), $4
); }
| SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL
opt
_level
| TRANSACTION ISOLATION LEVEL
iso_level opt_mode
{ $$ = cat
_str(3, make_str("transaction isolation level"), $4, $5
); }
| SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL
iso
_level
{ $$ = cat2_str(make_str("session characteristics as transaction isolation level"), $7); }
| NAMES opt_encoding
{ $$ = cat2_str(make_str("names"), $2); }
...
...
@@ -857,11 +865,16 @@ var_list: var_value
{ $$ = cat_str(3, $1, make_str(","), $3); }
;
opt
_level: READ COMMITTED { $$ = make_str("read committed"); }
iso
_level: READ COMMITTED { $$ = make_str("read committed"); }
| SERIALIZABLE { $$ = make_str("serializable"); }
;
opt_mode: READ WRITE { $$ = make_str("read write"); }
| READ ONLY { mmerror(PARSE_ERROR, ET_ERROR, "SET TRANSACTION/READ ONLY is not yet supported");
$$ = make_str("read only"); }
| /* EMPTY */ { $$ = EMPTY; }
;
var_value: opt_boolean { $$ = $1; }
| AllConst { $$ = $1; }
| ColId { $$ = $1; }
...
...
@@ -881,7 +894,7 @@ opt_boolean: TRUE_P { $$ = make_str("true"); }
* so use IDENT and reject anything which is a reserved word.
*/
zone_value: AllConst { $$ = $1; }
|
IDENT
{ $$ = $1; }
|
ident
{ $$ = $1; }
| ConstInterval StringConst opt_interval
{ $$ = cat_str(3, $1, $2, $3); }
| ConstInterval '(' PosIntConst ')' StringConst opt_interval
...
...
@@ -965,20 +978,20 @@ AlterTableStmt:
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */
| ALTER TABLE relation_expr ALTER opt_column ColId SET NOT NULL_P
{ $$ = cat_str(6, make_str("alter table"), $3, make_str("alter"), $5, $6, make_str("set not null")); }
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <I
const
> */
| ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS
Ic
onst
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <I
ntegerOnly
> */
| ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS
PosIntC
onst
{ $$ = 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> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */
| ALTER TABLE relation_expr DROP opt_column ColId drop_behavior
| ALTER TABLE relation_expr DROP opt_column ColId
opt_
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> DROP CONSTRAINT ... */
| ALTER TABLE relation_expr DROP CONSTRAINT name drop_behavior
| ALTER TABLE relation_expr DROP CONSTRAINT name
opt_
drop_behavior
{ $$ = cat_str(5, make_str("alter table"), $3, make_str("drop constraint"), $6, $7); }
/* ALTER TABLE <name> CREATE TOAST TABLE */
| ALTER TABLE qualified_name CREATE TOAST TABLE
...
...
@@ -993,10 +1006,6 @@ alter_column_default:
| DROP DEFAULT { $$ = make_str("drop default"); }
;
drop_behavior: CASCADE { $$ = make_str("cascade"); }
| RESTRICT { $$ = make_str("restrict"); }
;
opt_drop_behavior: CASCADE { $$ = make_str("cascade"); }
| RESTRICT { $$ = make_str("restrict"); }
| /* EMPTY */ { $$ = EMPTY; }
...
...
@@ -1024,11 +1033,12 @@ opt_id: ColId { $$ = $1; }
*
*****************************************************************************/
CopyStmt: COPY opt_binary qualified_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); }
CopyStmt: COPY opt_binary qualified_name opt_oids copy_from
copy_file_name copy_delimiter opt_with copy_opt_list
{ $$ = cat_str(9, make_str("copy"), $2, $3, $4, $5, $6, $7, $8, $9); }
;
copy_
dirn
: TO { $$ = make_str("to"); }
copy_
from
: TO { $$ = make_str("to"); }
| FROM { $$ = make_str("from"); }
;
...
...
@@ -1042,14 +1052,27 @@ copy_file_name: StringConst { $$ = $1; }
| STDOUT { $$ = make_str("stdout"); }
;
opt_binary: BINARY { $$ = make_str("binary"); }
| /*EMPTY*/ { $$ = EMPTY; }
copy_opt_list: copy_opt_list copy_opt_item { $$ = cat2_str($1, $2); }
| /* EMPTY */ { $$ = EMPTY; }
;
copy_opt_item: BINARY { $$ = make_str("binary"); }
| OIDS { $$ = make_str("oids"); }
| DELIMITER opt_as StringConst
{ $$ = cat_str(3, make_str("delimiter"), $2, $3); }
| NULL_P opt_as StringConst
{ $$ = cat_str(3, make_str("null"), $2, $3); }
;
opt_
with_copy: WITH OIDS { $$ = make_str("with oids
"); }
| /*
EMPTY*/
{ $$ = EMPTY; }
opt_
binary: BINARY { $$ = make_str("binary
"); }
| /*
EMPTY */
{ $$ = EMPTY; }
;
opt_oids: WITH OIDS { $$ = make_str("with oids"); }
| /* EMPTY */ { $$ = EMPTY; }
;
/*
* the default copy delimiter is tab but the user can configure it
*/
...
...
@@ -1063,12 +1086,6 @@ 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; }
;
/*****************************************************************************
*
* QUERY :
...
...
@@ -1079,6 +1096,9 @@ copy_null: WITH NULL_P AS StringConst
CreateStmt: CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')'
OptInherit OptWithOids
{ $$ = cat_str(9, make_str("create"), $2, make_str("table"), $4, make_str("("), $6, make_str(")"), $8, $9); }
| CREATE OptTemp TABLE qualified_name OF qualified_name
'(' OptTableElementList ')' OptWithOids
{ $$ = cat_str(10, make_str("create"), $2, make_str("table"), $4, make_str("of"), $6, make_str("("), $8, make_str(")"), $10); }
;
/*
...
...
@@ -1103,16 +1123,21 @@ OptTemp: TEMPORARY { $$ = make_str("temporary"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
OptTableElementList: OptTableElementList ',' OptTableElement
{ $$ = cat_str(3, $1, make_str(","), $3); }
| OptTableElement
OptTableElementList: TableElementList
{ $$ = $1; }
| /*EMPTY*/
{ $$ = EMPTY; }
;
OptTableElement: columnDef { $$ = $1; }
| TableConstraint { $$ = $1; }
TableElementList: TableElement
{ $$ = $1; }
| TableElementList ',' TableElement
{ $$ = cat_str(3, $1, make_str(","), $3); }
;
TableElement: columnDef { $$ = $1; }
| TableLikeClause { $$ = $1; }
| TableConstraint { $$ = $1; }
;
columnDef: ColId Typename ColQualList opt_collate
...
...
@@ -1180,6 +1205,13 @@ ConstraintAttr: DEFERRABLE { $$ = make_str("deferrable"); }
| INITIALLY IMMEDIATE { $$ = make_str("initially immediate"); }
;
TableLikeClause: LIKE any_name
{
mmerror(PARSE_ERROR, ET_ERROR, "LIKE in table definitions not yet supported");
$$ = cat2_str(make_str("like"), $2);
}
;
/* ConstraintElem specifies constraint syntax which is not embedded into
* a column definition. ColConstraintElem specifies the embedded form.
* - thomas 1997-12-03
...
...
@@ -1232,15 +1264,15 @@ key_actions: key_delete { $$ = $1; }
| /*EMPTY*/ { $$ = EMPTY; }
;
key_delete: ON DELETE_P key_
reference
key_delete: ON DELETE_P key_
action
{ $$ = cat2_str(make_str("on delete"), $3); }
;
key_update: ON UPDATE key_
reference
key_update: ON UPDATE key_
action
{ $$ = cat2_str(make_str("on update"), $3); }
;
key_
reference
: NO ACTION { $$ = make_str("no action"); }
key_
action
: NO ACTION { $$ = make_str("no action"); }
| RESTRICT { $$ = make_str("restrict"); }
| CASCADE { $$ = make_str("cascade"); }
| SET DEFAULT { $$ = make_str("set default"); }
...
...
@@ -1352,8 +1384,8 @@ opt_lancompiler: LANCOMPILER StringConst
{ $$ = ""; }
;
DropPLangStmt: DROP opt_procedural LANGUAGE StringConst
{ $$ = cat_str(
4, make_str("drop"), $2, make_str("language"), $4
); }
DropPLangStmt: DROP opt_procedural LANGUAGE StringConst
opt_drop_behavior
{ $$ = cat_str(
5, make_str("drop"), $2, make_str("language"), $4, $5
); }
;
opt_procedural: PROCEDURAL { $$ = make_str("prcedural"); }
...
...
@@ -1418,8 +1450,8 @@ TriggerFuncArgs: TriggerFuncArg
{ $$ = EMPTY; }
;
TriggerFuncArg: PosAllConst { $$ = $1; }
| ColId
{ $$ = $1; }
TriggerFuncArg: PosAllConst
{ $$ = $1; }
| ColId { $$ = $1; }
;
OptConstrFromTable: /* Empty */ { $$ = EMPTY; }
...
...
@@ -1456,8 +1488,8 @@ ConstraintTimeSpec: INITIALLY IMMEDIATE
{ $$ = make_str("initially deferred"); }
;
DropTrigStmt: DROP TRIGGER name ON qualified_name
{ $$ = cat_str(
4, make_str("drop trigger"), $3, make_str("on"), $5
); }
DropTrigStmt: DROP TRIGGER name ON qualified_name
opt_drop_behavior
{ $$ = cat_str(
5, make_str("drop trigger"), $3, make_str("on"), $5, $6
); }
;
/*****************************************************************************
...
...
@@ -1496,6 +1528,14 @@ DefineStmt: CREATE AGGREGATE func_name definition
{ $$ = cat_str(3, make_str("create operator"), $3, $4); }
| CREATE TYPE_P any_name definition
{ $$ = cat_str(3, make_str("create type"), $3, $4); }
| CREATE TYPE_P any_name AS rowdefinition
{ $$ = cat_str(4, make_str("create type"), $3, make_str("as"), $5); }
| CREATE CHARACTER SET opt_as any_name GET definition opt_collate
{ $$ = cat_str(6, make_str("create character set"), $4, $5, make_str("get"), $7, $8); }
;
rowdefinition: '(' TableFuncElementList ')'
{ $$ = cat_str(3, make_str("("), $2, make_str(")"));}
;
definition: '(' def_list ')'
...
...
@@ -1512,10 +1552,43 @@ def_elem: ColLabel '=' def_arg { $$ = cat_str(3, $1, make_str("="), $3); }
/* Note: any simple identifier will be returned as a type name! */
def_arg: func_return { $$ = $1; }
| all_Op { $$ = $1; }
|
qual_
all_Op { $$ = $1; }
| AllConst { $$ = $1; }
;
CreateOpClassStmt: CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename
USING access_method AS opclass_item_list
{
$$ = cat_str(9, make_str("create operator class"), $4, $5, make_str("for type"), $8, make_str("using"), $10, make_str("as"), $12);
}
;
opclass_item_list: opclass_item { $$ = $1; }
| opclass_item_list ',' opclass_item { $$ = cat_str(3, $1, make_str(","), $3); }
;
opclass_item: OPERATOR PosIntConst any_operator opt_recheck
{ $$ = cat_str(4, make_str("operator"), $2, $3, $4); }
| OPERATOR PosIntConst any_operator '(' oper_argtypes ')' opt_recheck
{ $$ = cat_str(7, make_str("operator"), $2, $3, make_str("("), $5, make_str(")"), $7); }
| FUNCTION PosIntConst func_name func_args
{ $$ = cat_str(4, make_str("function"), $2, $3, $4); }
| STORAGE Typename
{ $$ = cat2_str(make_str("storage"), $2); }
;
opt_default: DEFAULT { $$ = make_str("default"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
opt_recheck: RECHECK { $$ = make_str("recheck"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
DropOpClassStmt: DROP OPERATOR CLASS any_name USING access_method opt_drop_behavior
{ $$ = cat_str(5,make_str("drop operator class"), $4, make_str("using"), $6, $7); }
;
/*****************************************************************************
*
* QUERY:
...
...
@@ -1534,6 +1607,8 @@ drop_type: TABLE { $$ = make_str("table"); }
| INDEX { $$ = make_str("index"); }
| TYPE_P { $$ = make_str("type"); }
| DOMAIN_P { $$ = make_str("domain"); }
| CONVERSION_P { $$ = make_str("conversion"); }
| SCHEMA { $$ = make_str("schema"); }
;
any_name_list: any_name
...
...
@@ -1633,7 +1708,7 @@ CommentStmt: COMMENT ON comment_type name IS comment_text
{ $$ = 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); }
| COMMENT ON TRIGGER name ON
qualified
_name IS comment_text
| COMMENT ON TRIGGER name ON
any
_name IS comment_text
{ $$ = cat_str(6, make_str("comment on trigger"), $4, make_str("on"), $6, make_str("is"), $8); }
| COMMENT ON RULE name ON any_name IS comment_text
{ $$ = cat_str(6, make_str("comment on rule"), $4, make_str("on"), $6, make_str("is"), $8); }
...
...
@@ -1791,33 +1866,8 @@ opt_class: any_name { $$ = $1; }
| /*EMPTY*/ { $$ = EMPTY; }
;
/*****************************************************************************
*
* QUERY:
* execute recipe <recipeName>
*
*****************************************************************************/
/* NOT USED
RecipeStmt: EXECUTE RECIPE recipe_name
{
$$ = cat2_str(make_str("execute recipe"), $3);
}
;
*/
/*****************************************************************************
*
* QUERY:
* create [or replace] function <fname>
* [(<type-1> { , <type-n>})]
* returns <type-r>
* as <filename or code in language as appropriate>
* language <lang> [with parameters]
*
*****************************************************************************/
CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args
RETURNS func_return createfunc_opt_list opt_
with
RETURNS func_return createfunc_opt_list opt_
definition
{ $$ = cat_str(8, make_str("create"), $2, make_str("function"), $4, $5, make_str("returns"), $7, $8); }
;
...
...
@@ -1825,10 +1875,6 @@ opt_or_replace: OR REPLACE { $$ = make_str("or replace"); }
| /*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(")")); }
| '(' ')'
...
...
@@ -1920,10 +1966,12 @@ createfunc_opt_item: AS func_as
{ $$ = make_str("security definer"); }
| SECURITY INVOKER
{ $$ = make_str("security invoker"); }
| IMPLICIT CAST
{ $$ = make_str("implicit cast"); }
;
opt_definition: WITH definition { $$ = cat2_str(make_str("with"), $2); }
| /*EMPTY*/ { $$ = EMPTY; }
;
/*****************************************************************************
*
* QUERY:
...
...
@@ -1934,12 +1982,12 @@ createfunc_opt_item: AS func_as
*
*****************************************************************************/
RemoveFuncStmt: DROP FUNCTION func_name func_args
{ $$ = cat_str(
3, make_str("drop function"), $3, $4
); }
RemoveFuncStmt: DROP FUNCTION func_name func_args
opt_drop_behavior
{ $$ = cat_str(
4, make_str("drop function"), $3, $4, $5
); }
;
RemoveAggrStmt: DROP AGGREGATE func_name '(' aggr_argtype ')'
{ $$ = cat_str(
5, make_str("drop aggregate"), $3, make_str("("), $5, make_str(")")
); }
RemoveAggrStmt: DROP AGGREGATE func_name '(' aggr_argtype ')'
opt_drop_behavior
{ $$ = cat_str(
6, make_str("drop aggregate"), $3, make_str("("), $5, make_str(")"), $7
); }
;
aggr_argtype: Typename { $$ = $1; }
...
...
@@ -1947,8 +1995,8 @@ aggr_argtype: Typename { $$ = $1; }
;
RemoveOperStmt: DROP OPERATOR all_Op '(' oper_argtypes ')'
{ $$ = cat_str(
5, make_str("drop operator"), $3, make_str("("), $5, make_str(")")
); }
RemoveOperStmt: DROP OPERATOR all_Op '(' oper_argtypes ')'
opt_drop_behavior
{ $$ = cat_str(
6, make_str("drop operator"), $3, make_str("("), $5, make_str(")"), $7
); }
;
oper_argtypes: Typename
...
...
@@ -1961,6 +2009,30 @@ oper_argtypes: Typename
{ $$ = cat2_str($1, make_str(", none")); }
;
any_operator:
all_Op
{ $$ = $1; }
| ColId '.' any_operator
{ $$ = cat_str(3, $1, make_str("."), $3); }
;
CreateCastStmt: CREATE CAST '(' ConstTypename AS ConstTypename ')'
WITH FUNCTION function_with_argtypes cast_context
{ $$ = cat_str(6, make_str("create cast ("), $4, make_str("as"), $6, make_str(") with function"), $10); }
| CREATE CAST '(' ConstTypename AS ConstTypename ')'
WITHOUT FUNCTION cast_context
{ $$ = cat_str(6, make_str("create cast ("), $4, make_str("as"), $6, make_str(") without function"), $10); }
;
cast_context: AS ASSIGNMENT { $$ = make_str("as assignment"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
DropCastStmt: DROP CAST '(' ConstTypename AS ConstTypename ')' opt_drop_behavior
{ $$ = cat_str(6, make_str("drop cast ("), $4, make_str("as"), $6, make_str(")"), $8); }
;
/*****************************************************************************
*
* QUERY:
...
...
@@ -2011,13 +2083,13 @@ opt_column: COLUMN { $$ = make_str("column"); }
*
*****************************************************************************/
RuleStmt: CREATE RULE name AS
RuleStmt: CREATE
opt_or_replace
RULE name AS
{ QueryIsRule=1; }
ON event TO qualified_name where_clause
DO opt_instead RuleActionList
{
QueryIsRule=0;
$$ = cat_str(1
0, make_str("create rule"), $3, make_str("as on"), $7, make_str("to"), $9, $10, make_str("do"), $12, $13
);
$$ = cat_str(1
2, make_str("create"), $2, make_str("rule"), $4, make_str("as on"), $8, make_str("to"), $10, $11, make_str("do"), $13, $14
);
}
;
...
...
@@ -2055,8 +2127,8 @@ opt_instead: INSTEAD { $$ = make_str("instead"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
DropRuleStmt: DROP RULE name ON qualified_name
{ $$ = cat_str(
4, make_str("drop rule"), $3, make_str("on"), $5
);}
DropRuleStmt: DROP RULE name ON qualified_name
opt_drop_behavior
{ $$ = cat_str(
5, make_str("drop rule"), $3, make_str("on"), $5, $6
);}
;
/*****************************************************************************
...
...
@@ -2090,30 +2162,22 @@ UnlistenStmt: UNLISTEN qualified_name
* (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); }
TransactionStmt: ABORT_TRANS opt_trans { $$ = make_str("rollback"); }
| BEGIN_TRANS opt_trans { $$ = make_str("begin transaction"); }
| START TRANSACTION trans_options { $$ = cat2_str(make_str("start transaction"), $3); }
| COMMIT opt_trans { $$ = make_str("commit"); }
| END_TRANS opt_trans { $$ = make_str("commit"); }
| ROLLBACK opt_trans { $$ = make_str("rollback"); }
;
trans_options: ISOLATION LEVEL iso_level { $$ = cat2_str(make_str("isolation level"), $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");
}
;
/*****************************************************************************
*
* QUERY:
...
...
@@ -2121,8 +2185,8 @@ opt_chain: AND NO CHAIN
*
*****************************************************************************/
ViewStmt: CREATE VIEW qualified_name opt_column_list AS SelectStmt
{ $$ = cat_str(
5, make_str("create view"), $3, $4, make_str("as"), $6
); }
ViewStmt: CREATE
opt_or_replace
VIEW qualified_name opt_column_list AS SelectStmt
{ $$ = cat_str(
7, make_str("create"), $2, make_str("view"), $4, $5, make_str("as"), $7
); }
;
...
...
@@ -2220,7 +2284,13 @@ CreateDomainStmt: CREATE DOMAIN_P any_name opt_as Typename ColQualList opt_coll
opt_as: AS {$$ = make_str("as"); }
| /* EMPTY */ {$$ = EMPTY; }
;
CreateConversionStmt:
CREATE opt_default CONVERSION_P any_name FOR StringConst
TO StringConst FROM any_name
{ $$ = cat_str(10, make_str("create"), $2, make_str("conversion"), $4, make_str("for"), $6, make_str("to"), $8, make_str("from"), $10); }
;
/*****************************************************************************
*
* QUERY:
...
...
@@ -2291,6 +2361,38 @@ ExplainStmt: EXPLAIN opt_verbose OptimizableStmt
{ $$ = cat_str(4, make_str("explain"), $2, $3, $4); }
;
/*
conflicts with ecpg
PrepareStmt: PREPARE name prep_type_clause AS OptimizableStmt
{ $$ = cat_str(5, make_str("prepare"), $2, $3, make_str("as"), $5); }
;
prep_type_clause: '(' prep_type_list ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
| /* EMPTY * / { $$ = EMPTY; }
;
prep_type_list: Typename { $$ = $1; }
| prep_type_list ',' Typename { $$ = cat_str(3, $1, make_str(","), $3); }
;
ExecuteStmt: EXECUTE name execute_param_clause into_clause
{ $$ = cat_str(4, make_str("execute"), $2, $3, $4); }
;
execute_param_clause: '(' execute_param_list ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
| /* EMPTY * / { $$ = EMPTY; }
;
execute_param_list: a_expr { $$ = $1; }
| execute_param_list ',' a_expr { $$ = cat_str(3, $1, make_str(","), $3); }
;
DeallocateStmt: DEALLOCATE name { $$ = cat2_str(make_str("deallocate"), $2); }
| DEALLOCATE PREPARE name { $$ = cat2_str(make_str("deallocate prepare"), $3); }
;
*/
/*****************************************************************************
* *
...
...
@@ -2456,12 +2558,12 @@ select_with_parens: '(' select_no_parens ')'
select_no_parens: simple_select
{ $$ = $1; }
| select_clause sort_clause opt_for_update_clause opt_select_limit
{ $$ = 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
| select_clause sort_clause
{ $$ = cat2_str($1, $2); }
| select_clause opt_sort_clause for_update_clause opt_select_limit
{ $$ = cat_str(4, $1, $2, $3, $4); }
| select_clause opt_sort_clause select_limit opt_for_update_clause
{ $$ = cat_str(4, $1, $2, $3, $4); }
;
select_clause: simple_select { $$ = $1; }
...
...
@@ -2538,6 +2640,10 @@ opt_distinct: DISTINCT
{ $$ = EMPTY; }
;
opt_sort_clause: sort_clause { $$ = $1; }
| /* EMPTY */ { $$ = EMPTY; }
;
sort_clause: ORDER BY sortby_list
{ $$ = cat2_str(make_str("order by"), $3); }
;
...
...
@@ -2654,7 +2760,13 @@ table_ref: relation_expr
| func_table
{ $$ = $1; }
| func_table alias_clause
{ $$= cat2_str($1, $2); }
{ $$= cat2_str($1, $2); }
| func_table AS '(' TableFuncElementList ')'
{ $$=cat_str(4, $1, make_str("as ("), $4, make_str(")")); }
| func_table AS ColId '(' TableFuncElementList ')'
{ $$=cat_str(6, $1, make_str("as"), $3, make_str("("), $5, make_str(")")); }
| func_table ColId '(' TableFuncElementList ')'
{ $$=cat_str(5, $1, $2, make_str("("), $4, make_str(")")); }
| select_with_parens
{mmerror(PARSE_ERROR, ET_ERROR, "sub-SELECT in FROM must have an alias");}
| select_with_parens alias_clause
...
...
@@ -2737,7 +2849,9 @@ relation_expr: qualified_name
| qualified_name '*'
{ /* inheritance query */ $$ = cat2_str($1, make_str("*")); }
| ONLY qualified_name
{ /* inheritance query */ $$ = cat2_str(make_str("ONLY "), $2); }
{ /* inheritance query */ $$ = cat2_str(make_str("only "), $2); }
| ONLY '(' qualified_name ')'
{ /* inheritance query */ $$ = cat_str(3, make_str("only ("), $3, make_str(")")); }
;
func_table: func_name '(' ')'
...
...
@@ -2750,6 +2864,14 @@ where_clause: WHERE a_expr { $$ = cat2_str(make_str("where"), $2); }
| /*EMPTY*/ { $$ = EMPTY; /* no qualifiers */ }
;
TableFuncElementList: TableFuncElement
{ $$ = $1; }
| TableFuncElementList ',' TableFuncElement
{ $$ = cat_str(3, $1, ',', $3); }
;
TableFuncElement: ColId Typename { $$ = cat2_str($1, $2); }
;
/*****************************************************************************
*
...
...
@@ -2800,8 +2922,11 @@ Iresult: PosIntConst { $$ = atol($1); }
| Iresult '%' Iresult { $$ = $1 % $3; }
;
SimpleTypename: ConstTypename
{ $$ = $1; }
SimpleTypename: GenericType { $$ = $1; }
| ConstDatetime { $$ = $1; }
| Numeric { $$ = $1; }
| Bit { $$ = $1; }
| Character { $$ = $1; }
| ConstInterval opt_interval
{ $$ = cat2_str($1, $2); }
| ConstInterval '(' PosIntConst ')' opt_interval
...
...
@@ -2810,14 +2935,14 @@ SimpleTypename: ConstTypename
{ $$ = cat2_str($1, $2);}
;
ConstTypename: Generic { $$ = $1; }
ConstTypename: Generic
Type
{ $$ = $1; }
| ConstDatetime { $$ = $1; }
| Numeric
{ $$ = $1; }
|
Bit
{ $$ = $1; }
| C
haracter
{ $$ = $1; }
| Numeric { $$ = $1; }
|
ConstBit
{ $$ = $1; }
| C
onstCharacter
{ $$ = $1; }
;
Generic: type_name { $$ = $1; }
Generic
Type
: type_name { $$ = $1; }
;
/* SQL92 numeric data types
...
...
@@ -2875,9 +3000,20 @@ opt_decimal: '(' PosIntConst ',' PosIntConst ')'
* SQL92 bit-field data types
* The following implements BIT() and BIT VARYING().
*/
Bit: BIT opt_varying '(' PosIntConst ')'
Bit: BitWithLength { $$ = $1; }
| BitWithoutLength { $$ = $1; }
;
ConstBit: BitWithLength { $$ = $1; }
| BitWithoutLength { $$ = $1; }
;
BitWithLength: BIT opt_varying '(' PosIntConst ')'
{ $$ = cat_str(5, make_str("bit"), $2, make_str("("), $4, make_str(")")); }
| BIT opt_varying
;
BitWithoutLength: BIT opt_varying
{ $$ = cat2_str(make_str("bit"), $2); }
;
...
...
@@ -2886,9 +3022,19 @@ Bit: BIT opt_varying '(' PosIntConst ')'
* The following implements CHAR() and VARCHAR().
* - ay 6/95
*/
Character: character '(' PosIntConst ')' opt_charset
Character: CharacterWithLength { $$ = $1; }
| CharacterWithoutLength { $$ = $1; }
;
ConstCharacter: CharacterWithLength { $$ = $1; }
| CharacterWithoutLength { $$ = $1; }
;
CharacterWithLength: character '(' PosIntConst ')' opt_charset
{ $$ = cat_str(5, $1, make_str("("), $3, make_str(")"), $5); }
| character opt_charset
;
CharacterWithoutLength: character opt_charset
{ $$ = cat2_str($1, $2); }
;
...
...
@@ -2973,37 +3119,54 @@ opt_interval: YEAR_P { $$ = make_str("year"); }
* Define row_descriptor to allow yacc to break the reduce/reduce conflict
* with singleton expressions.
*/
row_expr: '(' row_descriptor ')' IN_P select_with_parens
{ $$ = cat_str(4, make_str("("), $2, make_str(") in "), $5); }
| '(' row_descriptor ')' NOT IN_P select_with_parens
{ $$ = 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); }
| '(' row_descriptor ')' all_Op select_with_parens
{ $$ = 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(")")); }
| '(' row_descriptor ')' OVERLAPS '(' row_descriptor ')'
{ $$ = cat_str(5, make_str("("), $2, make_str(") overlaps ("), $6, make_str(")")); }
;
r_expr: row IN_P select_with_parens
{ $$ = cat_str(3, $1, make_str("in"), $3); }
| row NOT IN_P select_with_parens
{ $$ = cat_str(3, $1, make_str("not in"), $4); }
| row qual_all_Op sub_type select_with_parens %prec Op
{ $$ = cat_str(4, $1, $2, $3, $4); }
| row qual_all_Op select_with_parens %prec Op
{ $$ = cat_str(3, $1, $2, $3); }
| row qual_all_Op row %prec Op
{ $$ = cat_str(3, $1, $2, $3); }
| row IS NULL_P
{ $$ = cat2_str($1, make_str("is null")); }
| row IS NOT NULL_P
{ $$ = cat2_str($1, make_str("is not null")); }
| row OVERLAPS row
{ $$ = cat_str(3, $1, make_str("overlaps"), $3); }
| row IS DISTINCT FROM row %prec IS
{ $$ = cat_str(3, $1, make_str("is distinct from"), $5); }
;
row: ROW '(' row_descriptor ')'
{ $$ = cat_str(3, make_str("row ("), $3, make_str(")")); }
| ROW '(' a_expr ')'
{ $$ = cat_str(3, make_str("row ("), $3, make_str(")")); }
| ROW '(' ')'
{ $$ = make_str("row()"); }
| '(' row_descriptor ')'
{ $$ = cat_str(3, make_str("("), $2, make_str(")")); }
;
row_descriptor: row_list ',' a_expr
{ $$ = cat_str(3, $1, make_str(","), $3); }
;
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); }
| a_expr
{ $$ = $1; }
;
sub_type: ANY { $$ = make_str("ANY"); }
| SOME { $$ = make_str("SOME"); }
| ALL { $$ = make_str("ALL"); }
;
all_Op: Op | MathOp;
all_Op: Op { $$ = $1; }
| MathOp { $$ = $1; }
;
MathOp: '+' { $$ = make_str("+"); }
| '-' { $$ = make_str("-"); }
...
...
@@ -3016,6 +3179,14 @@ MathOp: '+' { $$ = make_str("+"); }
| '=' { $$ = make_str("="); }
;
qual_Op: Op { $$ = $1; }
| OPERATOR '(' any_operator ')' { $$ = cat_str(3, make_str("operator ("), $3, make_str(")")); }
;
qual_all_Op: all_Op { $$ = $1; }
| OPERATOR '(' any_operator ')' { $$ = cat_str(3, make_str("operator ("), $3, make_str(")")); }
;
/* General expressions
* This is the heart of the expression syntax.
*
...
...
@@ -3077,11 +3248,11 @@ a_expr: c_expr
{ $$ = cat_str(3, $1, make_str(">"), $3); }
| a_expr '=' a_expr
{ $$ = cat_str(3, $1, make_str("="), $3); }
| a_expr
Op a_expr
| a_expr
qual_Op a_expr %prec Op
{ $$ = cat_str(3, $1, $2, $3); }
|
Op a_expr
|
qual_Op a_expr %prec Op
{ $$ = cat2_str($1, $2); }
| a_expr Op %prec POSTFIXOP
| a_expr
qual_
Op %prec POSTFIXOP
{ $$ = cat2_str($1, $2); }
| a_expr AND a_expr
{ $$ = cat_str(3, $1, make_str("and"), $3); }
...
...
@@ -3105,6 +3276,14 @@ a_expr: c_expr
{ $$ = 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); }
| a_expr SIMILAR TO a_expr %prec SIMILAR
{ $$ = cat_str(3, $1, make_str("similar to"), $4); }
| a_expr SIMILAR TO a_expr ESCAPE a_expr
{ $$ = cat_str(5, $1, make_str("similar to"), $4, make_str("escape"), $6); }
| a_expr NOT SIMILAR TO a_expr %prec SIMILAR
{ $$ = cat_str(3, $1, make_str("not similar to"), $5); }
| a_expr NOT SIMILAR TO a_expr ESCAPE a_expr
{ $$ = cat_str(5, $1, make_str("not similar to"), $5, make_str("escape"), $7); }
| a_expr ISNULL
{ $$ = cat2_str($1, make_str("isnull")); }
| a_expr IS NULL_P
...
...
@@ -3134,17 +3313,25 @@ a_expr: c_expr
{ $$ = cat2_str($1, make_str("is unknown")); }
| a_expr IS NOT UNKNOWN
{ $$ = cat2_str($1, make_str("is not unknown")); }
| a_expr IS DISTINCT FROM a_expr %prec IS
{ $$ = cat_str(3, $1, make_str("is distinct from"), $5); }
| a_expr IS OF '(' type_list ')' %prec IS
{ $$ = cat_str(4, $1, make_str("is of ("), $5, make_str(")")); }
| a_expr IS NOT OF '(' type_list ')' %prec IS
{ $$ = cat_str(4, $1, make_str("is not of ("), $6, make_str(")")); }
| a_expr BETWEEN b_expr AND b_expr %prec BETWEEN
{ $$ = 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_P in_expr
{ $$ = cat_str(3, $1, make_str("
in"), $3); }
{ $$ = cat_str(3, $1, make_str("in"), $3); }
| a_expr NOT IN_P in_expr
{ $$ = cat_str(3, $1, make_str("
not in
"), $4); }
| a_expr all_Op sub_type select_with_parens %prec Op
{ $$ = cat_str(3, $1, make_str("
not in
"), $4); }
| a_expr
qual_
all_Op sub_type select_with_parens %prec Op
{ $$ = cat_str(4, $1, $2, $3, $4); }
| row_expr
| UNIQUE select_with_parens %prec Op
{ $$ = cat2_str(make_str("unique"), $2); }
| r_expr
{ $$ = $1; }
;
...
...
@@ -3190,10 +3377,16 @@ b_expr: c_expr
{ $$ = cat_str(3, $1, make_str("="), $3); }
| b_expr Op b_expr
{ $$ = cat_str(3, $1, $2, $3); }
|
Op b_expr
|
qual_Op b_expr %prec Op
{ $$ = cat2_str($1, $2); }
| b_expr Op %prec POSTFIXOP
| b_expr
qual_
Op %prec POSTFIXOP
{ $$ = cat2_str($1, $2); }
| b_expr IS DISTINCT FROM b_expr %prec IS
{ $$ = cat_str(3, $1, make_str("is distinct from"), $5); }
| b_expr IS OF '(' b_expr ')' %prec IS
{ $$ = cat_str(4, $1, make_str("is of ("), $5, make_str(")")); }
| b_expr IS NOT OF '(' b_expr ')' %prec IS
{ $$ = cat_str(4, $1, make_str("is not of ("), $6, make_str(")")); }
;
/*
...
...
@@ -3214,8 +3407,6 @@ c_expr: columnref
{ $$ = cat_str(3, make_str("("), $2, make_str(")")); }
| '(' a_expr ')' attrs opt_indirection
{ $$ = cat_str(5, make_str("("), $2, make_str(")"), $4, $5); }
| CAST '(' a_expr AS Typename ')'
{ $$ = cat_str(5, make_str("cast("), $3, make_str("as"), $5, make_str(")")); }
| case_expr
{ $$ = $1; }
| func_name '(' ')'
...
...
@@ -3244,12 +3435,18 @@ c_expr: columnref
{ $$ = cat2_str(make_str("session_user"), $2); }
| USER opt_empty_parentheses
{ $$ = cat2_str(make_str("user"), $2); }
| CAST '(' a_expr AS Typename ')'
{ $$ = cat_str(5, make_str("cast("), $3, make_str("as"), $5, make_str(")")); }
| EXTRACT '(' extract_list ')'
{ $$ = cat_str(3, make_str("extract("), $3, make_str(")")); }
| OVERLAY '(' overlay_list ')'
{ $$ = cat_str(3, make_str("overlay("), $3, make_str(")")); }
| POSITION '(' position_list ')'
{ $$ = cat_str(3, make_str("position("), $3, make_str(")")); }
| SUBSTRING '(' substr_list ')'
{ $$ = cat_str(3, make_str("substring("), $3, make_str(")")); }
| TREAT '(' a_expr AS Typename ')'
{ $$ = cat_str(5, make_str("treat("), $3, make_str("as"), $5, 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(")")); }
...
...
@@ -3259,6 +3456,8 @@ c_expr: columnref
{ $$ = cat_str(3, make_str("trim(trailing"), $4, make_str(")")); }
| TRIM '(' trim_list ')'
{ $$ = cat_str(3, make_str("trim("), $3, make_str(")")); }
| CONVERT '(' convert_list ')'
{ $$ = cat_str(3, make_str("convert("), $3, make_str(")")); }
| select_with_parens %prec UMINUS
{ $$ = $1; }
| EXISTS select_with_parens
...
...
@@ -3290,11 +3489,17 @@ extract_list: extract_arg FROM a_expr
{ $$ = EMPTY; }
;
type_list: type_list ',' Typename
{ $$ = cat_str(3, $1, ',', $3); }
| Typename
{ $$ = $1; }
;
/* Allow delimited string SCONST in extract_arg as an SQL extension.
* - thomas 2001-04-12
*/
extract_arg:
IDENT
{ $$ = $1; }
extract_arg:
ident
{ $$ = $1; }
| YEAR_P { $$ = make_str("year"); }
| MONTH_P { $$ = make_str("month"); }
| DAY_P { $$ = make_str("day"); }
...
...
@@ -3304,6 +3509,17 @@ extract_arg: IDENT { $$ = $1; }
| StringConst { $$ = $1; }
;
overlay_list:
a_expr overlay_placing substr_from substr_for
{ $$ = cat_str(4, $1, 42, $3, $4); }
| a_expr overlay_placing substr_from
{ $$ = cat_str(3, $1, $2, $3); }
;
overlay_placing:
PLACING a_expr { $$ = cat2_str(make_str("placing"), $2); }
;
/* position_list uses b_expr not a_expr to avoid conflict with general IN */
position_list: b_expr IN_P b_expr
{ $$ = cat_str(3, $1, make_str("in"), $3); }
...
...
@@ -3341,6 +3557,19 @@ trim_list: a_expr FROM expr_list
{ $$ = $1; }
;
convert_list:
a_expr USING any_name
{ $$ = cat_str(3, $1, make_str("using"), $3); }
| convert_args
{ $$ = $1; }
| /* EMPTY */
{ $$ = EMPTY; }
;
convert_args: a_expr { $$ = $1; }
| convert_args ',' a_expr { $$ = cat_str(3, $1, ',', $3); }
;
in_expr: select_with_parens
{ $$ = $1; }
| '(' in_expr_nodes ')'
...
...
@@ -3542,7 +3771,8 @@ AexprConst: PosAllConst
Iconst: ICONST { $$ = make_name();};
Fconst: FCONST { $$ = make_name();};
Bitconst: BITCONST { $$ = make_name();};
Bconst: BCONST { $$ = make_name();};
Xconst: XCONST { $$ = make_name();};
Sconst: SCONST
{
$$ = (char *)mm_alloc(strlen($1) + 3);
...
...
@@ -3583,10 +3813,11 @@ AllConst: Sconst { $$ = $1; }
;
PosAllConst: Sconst { $$ = $1; }
| Fconst { $$ = $1; }
| Iconst { $$ = $1; }
| Bitconst { $$ = $1; }
| civar { $$ = make_str("?"); }
| Fconst { $$ = $1; }
| Iconst { $$ = $1; }
| Bconst { $$ = $1; }
| Xconst { $$ = $1; }
| civar { $$ = make_str("?"); }
;
UserId: ColId { $$ = $1;};
...
...
@@ -3863,8 +4094,11 @@ ECPGCursorStmt: DECLARE name opt_cursor CURSOR FOR ident
* 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: DEALLOCATE PREPARE ident
{ $$ = cat_str(3, make_str("ECPGdeallocate(__LINE__, \""), $3, make_str("\");")); }
| DEALLOCATE ident
{ $$ = cat_str(2, make_str("ECPGdeallocate(__LINE__, \""), $2, make_str("\");")); }
;
/*
* variable declaration inside the exec sql declare block
...
...
@@ -4317,7 +4551,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
$$ = make_str("?");
}
| EXECUTE
ident
| EXECUTE
name
{
struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
...
...
@@ -4329,7 +4563,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
add_variable(&argsinsert, thisquery, &no_indicator);
}
ecpg_using opt_ecpg_into
opt_
ecpg_using opt_ecpg_into
{
$$ = make_str("?");
}
...
...
@@ -4345,14 +4579,14 @@ execstring: char_variable
* the exec sql free command to deallocate a previously
* prepared statement
*/
ECPGFree: SQL_FREE
ident
{ $$ = $2; };
ECPGFree: SQL_FREE
name
{ $$ = $2; };
/*
* open is an open cursor, at the moment this has to be removed
*/
ECPGOpen: SQL_OPEN name ecpg_using { $$ = $2; };
ECPGOpen: SQL_OPEN name
opt_
ecpg_using { $$ = $2; };
ecpg_using: /*EMPTY*/ { $$ = EMPTY; }
opt_
ecpg_using: /*EMPTY*/ { $$ = EMPTY; }
| USING variablelist
{
/* mmerror ("open cursor with variables not implemented yet"); */
...
...
@@ -4385,7 +4619,7 @@ 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
*/
ECPGPrepare:
SQL_PREPARE ident
FROM execstring
ECPGPrepare:
PREPARE name
FROM execstring
{ $$ = cat2_str(make3_str(make_str("\""), $2, make_str("\",")), $4); }
;
...
...
@@ -4397,7 +4631,7 @@ ECPGPrepare: SQL_PREPARE ident FROM execstring
/*
* deallocate a descriptor
*/
ECPGDeallocateDescr:
SQL_
DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
ECPGDeallocateDescr: DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
{
drop_descriptor($3,connection);
$$ = $3;
...
...
@@ -4451,15 +4685,14 @@ ECPGGetDescItems: ECPGGetDescItem
| ECPGGetDescItems ',' ECPGGetDescItem
;
ECPGGetDescriptorHeader:
SQL_
GET SQL_DESCRIPTOR quoted_ident_stringvar
ECPGGetDescriptorHeader: GET SQL_DESCRIPTOR quoted_ident_stringvar
ECPGGetDescHeaderItems
{ $$ = $3; }
;
ECPGGetDescriptor: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar
SQL_VALUE CVARIABLE ECPGGetDescItems
ECPGGetDescriptor: 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
| GET SQL_DESCRIPTOR quoted_ident_stringvar SQL_VALUE Iconst ECPGGetDescItems
{ $$.str = $5; $$.name = $3; }
;
...
...
@@ -4762,7 +4995,6 @@ ECPGKeywords: SQL_BREAK { $$ = make_str("break"); }
| SQL_DATA { $$ = make_str("data"); }
| SQL_DATETIME_INTERVAL_CODE { $$ = make_str("datetime_interval_code"); }
| SQL_DATETIME_INTERVAL_PRECISION { $$ = make_str("datetime_interval_precision"); }
| SQL_DEALLOCATE { $$ = make_str("deallocate"); }
| SQL_DISCONNECT { $$ = make_str("disconnect"); }
| SQL_FOUND { $$ = make_str("found"); }
| SQL_GO { $$ = make_str("go"); }
...
...
@@ -4775,7 +5007,6 @@ ECPGKeywords: SQL_BREAK { $$ = make_str("break"); }
| SQL_NULLABLE { $$ = make_str("nullable"); }
| SQL_OCTET_LENGTH { $$ = make_str("octet_length"); }
| SQL_OPEN { $$ = make_str("open"); }
| 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"); }
...
...
@@ -4880,7 +5111,8 @@ unreserved_keyword:
| AFTER { $$ = make_str("after"); }
| AGGREGATE { $$ = make_str("aggregate"); }
| ALTER { $$ = make_str("alter"); }
| ASSERTION { $$ = make_str("assertion"); }
| ASSERTION { $$ = make_str("assertion"); }
| ASSIGNMENT { $$ = make_str("assignment"); }
| AT { $$ = make_str("at"); }
| BACKWARD { $$ = make_str("backward"); }
| BEFORE { $$ = make_str("before"); }
...
...
@@ -4891,12 +5123,14 @@ unreserved_keyword:
| CHAIN { $$ = make_str("chain"); }
| CHARACTERISTICS { $$ = make_str("characteristics"); }
| CHECKPOINT { $$ = make_str("checkpoint"); }
| CLASS { $$ = make_str("class"); }
| CLOSE { $$ = make_str("close"); }
| CLUSTER { $$ = make_str("cluster"); }
| COMMENT { $$ = make_str("comment"); }
| COMMIT { $$ = make_str("commit"); }
| COMMITTED { $$ = make_str("committed"); }
| CONSTRAINTS { $$ = make_str("constraints"); }
| CONSTRAINTS { $$ = make_str("constraints"); }
| CONVERSION_P { $$ = make_str("conversion"); }
| COPY { $$ = make_str("copy"); }
| CREATEDB { $$ = make_str("createdb"); }
| CREATEUSER { $$ = make_str("createuser"); }
...
...
@@ -4904,9 +5138,11 @@ unreserved_keyword:
| CYCLE { $$ = make_str("cycle"); }
| DATABASE { $$ = make_str("database"); }
| DAY_P { $$ = make_str("day"); }
| DEALLOCATE { $$ = make_str("deallocate"); }
| DECLARE { $$ = make_str("declare"); }
| DEFERRED { $$ = make_str("deferred"); }
| DELETE_P { $$ = make_str("delete"); }
| DELIMITER { $$ = make_str("delimiter"); }
| DELIMITERS { $$ = make_str("delimiters"); }
| DOMAIN_P { $$ = make_str("domain"); }
| DOUBLE { $$ = make_str("double"); }
...
...
@@ -4926,6 +5162,8 @@ unreserved_keyword:
| HANDLER { $$ = make_str("handler"); }
| HOUR_P { $$ = make_str("hour"); }
| IMMEDIATE { $$ = make_str("immediate"); }
| IMMUTABLE { $$ = make_str("immutable"); }
| IMPLICIT_P { $$ = make_str("implicit"); }
| INCREMENT { $$ = make_str("increment"); }
| INDEX { $$ = make_str("index"); }
| INHERITS { $$ = make_str("inherits"); }
...
...
@@ -4969,11 +5207,13 @@ unreserved_keyword:
| PATH_P { $$ = make_str("path"); }
| PENDANT { $$ = make_str("pendant"); }
| PRECISION { $$ = make_str("precision"); }
| PREPARE { $$ = make_str("prepare"); }
| PRIOR { $$ = make_str("prior"); }
| PRIVILEGES { $$ = make_str("privileges"); }
| PROCEDURAL { $$ = make_str("procedural"); }
| PROCEDURE { $$ = make_str("procedure"); }
| READ { $$ = make_str("read"); }
| RECHECK { $$ = make_str("recheck"); }
| REINDEX { $$ = make_str("reindex"); }
| RELATIVE { $$ = make_str("relative"); }
| RENAME { $$ = make_str("rename"); }
...
...
@@ -4983,7 +5223,6 @@ unreserved_keyword:
| RETURNS { $$ = make_str("returns"); }
| REVOKE { $$ = make_str("revoke"); }
| ROLLBACK { $$ = make_str("rollback"); }
| ROW { $$ = make_str("row"); }
| RULE { $$ = make_str("rule"); }
| SCHEMA { $$ = make_str("schema"); }
| SCROLL { $$ = make_str("scroll"); }
...
...
@@ -4994,6 +5233,8 @@ unreserved_keyword:
| SET { $$ = make_str("set"); }
| SHARE { $$ = make_str("share"); }
| SHOW { $$ = make_str("show"); }
| SIMPLE { $$ = make_str("simple"); }
| STABLE { $$ = make_str("stable"); }
| START { $$ = make_str("start"); }
| STATEMENT { $$ = make_str("statement"); }
| STATISTICS { $$ = make_str("statistics"); }
...
...
@@ -5024,6 +5265,7 @@ unreserved_keyword:
| VIEW { $$ = make_str("view"); }
| WITH { $$ = make_str("with"); }
| WITHOUT { $$ = make_str("without"); }
| WRITE { $$ = make_str("write"); }
| WORK { $$ = make_str("work"); }
| YEAR_P { $$ = make_str("year"); }
| ZONE { $$ = make_str("zone"); }
...
...
@@ -5063,11 +5305,13 @@ col_name_keyword:
| NUMERIC { $$ = make_str("numeric"); }
| POSITION { $$ = make_str("position"); }
| REAL { $$ = make_str("real"); }
| ROW { $$ = make_str("row"); }
| SETOF { $$ = make_str("setof"); }
| SMALLINT { $$ = make_str("smallint"); }
| SUBSTRING { $$ = make_str("substring"); }
| TIME { $$ = make_str("time"); }
| TIMESTAMP { $$ = make_str("timestamp"); }
| TREAT { $$ = make_str("treat"); }
| TRIM { $$ = make_str("trim"); }
| VARCHAR { $$ = make_str("varchar"); }
;
...
...
@@ -5102,6 +5346,7 @@ func_name_keyword:
| OUTER_P { $$ = make_str("outer"); }
| OVERLAPS { $$ = make_str("overlaps"); }
| RIGHT { $$ = make_str("right"); }
| SIMILAR { $$ = make_str("similar"); }
| VERBOSE { $$ = make_str("verbose"); }
;
...
...
@@ -5220,13 +5465,11 @@ indicator: CVARIABLE { check_indicator((find_variable($1))->type); $$ = $1; }
| SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
;
ident: IDENT { $$ = $1; }
ident: IDENT { $$ = $1; }
| CSTRING { $$ = make3_str(make_str("\""), $1, make_str("\"")); }
;
quoted_ident_stringvar: IDENT
{ $$ = make3_str(make_str("\""), $1, make_str("\"")); }
| CSTRING
quoted_ident_stringvar: name
{ $$ = make3_str(make_str("\""), $1, make_str("\"")); }
| char_variable
{ $$ = make3_str(make_str("("), $1, make_str(")")); }
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment