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
a4f59da1
Commit
a4f59da1
authored
Oct 08, 1999
by
Michael Meskes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
parent
7395d9ab
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
293 additions
and
441 deletions
+293
-441
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/ChangeLog
+26
-5
src/interfaces/ecpg/lib/Makefile.in
src/interfaces/ecpg/lib/Makefile.in
+2
-2
src/interfaces/ecpg/lib/ecpglib.c
src/interfaces/ecpg/lib/ecpglib.c
+0
-3
src/interfaces/ecpg/preproc/Makefile
src/interfaces/ecpg/preproc/Makefile
+1
-1
src/interfaces/ecpg/preproc/ecpg_keywords.c
src/interfaces/ecpg/preproc/ecpg_keywords.c
+0
-1
src/interfaces/ecpg/preproc/keywords.c
src/interfaces/ecpg/preproc/keywords.c
+8
-1
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/pgc.l
+8
-124
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/preproc/preproc.y
+237
-293
src/interfaces/ecpg/test/test1.pgc
src/interfaces/ecpg/test/test1.pgc
+11
-11
No files found.
src/interfaces/ecpg/ChangeLog
View file @
a4f59da1
Tue Aug 24 15:53:28 MEST 1999
- made NULL a valid bool value
- check for indicator variables on NULL
Wed Feb 11 10:58:13 CET 1998
Wed Feb 11 10:58:13 CET 1998
- Added '-d' option to turn on debugging.
- Added '-d' option to turn on debugging.
...
@@ -653,3 +648,29 @@ Mon Sep 27 07:40:20 CEST 1999
...
@@ -653,3 +648,29 @@ Mon Sep 27 07:40:20 CEST 1999
- Synced preproc.y with gram.y.
- Synced preproc.y with gram.y.
- Synced keyword.c.
- Synced keyword.c.
- Set ecpg version to 2.6.5
- Set ecpg version to 2.6.5
Tue Sep 28 17:58:37 CEST 1999
- Synced preproc.y with gram.y.
- Synced pgc.l with scan.l.
Fri Oct 1 18:34:30 CEST 1999
- Synced preproc.y with gram.y.
- Synced keyword.c.
- Include patch by Christof Petig <christof.petig@wtal.de>:
- made NULL a valid bool value
- check for indicator variables on NULL
Wed Oct 6 18:28:40 CEST 1999
- Synced preproc.y with gram.y.
Thu Oct 7 15:12:58 CEST 1999
- Fixed bug that caused mixed case relation names to be converted to
upper case.
- Synced preproc.y with gram.y.
- Set ecpg version to 2.6.6
- Set library version to 3.0.4
src/interfaces/ecpg/lib/Makefile.in
View file @
a4f59da1
...
@@ -6,13 +6,13 @@
...
@@ -6,13 +6,13 @@
# Copyright (c) 1994, Regents of the University of California
# Copyright (c) 1994, Regents of the University of California
#
#
# IDENTIFICATION
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.4
7 1999/09/17 18:28:10
meskes Exp $
# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.4
8 1999/10/08 11:04:59
meskes Exp $
#
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
NAME
=
ecpg
NAME
=
ecpg
SO_MAJOR_VERSION
=
3
SO_MAJOR_VERSION
=
3
SO_MINOR_VERSION
=
0.
3
SO_MINOR_VERSION
=
0.
4
SRCDIR
=
@top_srcdir@
SRCDIR
=
@top_srcdir@
include
$(SRCDIR)/Makefile.global
include
$(SRCDIR)/Makefile.global
...
...
src/interfaces/ecpg/lib/ecpglib.c
View file @
a4f59da1
...
@@ -802,7 +802,6 @@ ECPGexecute(struct statement * stmt)
...
@@ -802,7 +802,6 @@ ECPGexecute(struct statement * stmt)
else
else
res
=
0L
;
res
=
0L
;
/* Again?! Yes */
switch
(
var
->
type
)
switch
(
var
->
type
)
{
{
case
ECPGt_short
:
case
ECPGt_short
:
...
@@ -837,7 +836,6 @@ ECPGexecute(struct statement * stmt)
...
@@ -837,7 +836,6 @@ ECPGexecute(struct statement * stmt)
else
else
ures
=
0L
;
ures
=
0L
;
/* Again?! Yes */
switch
(
var
->
type
)
switch
(
var
->
type
)
{
{
case
ECPGt_unsigned_short
:
case
ECPGt_unsigned_short
:
...
@@ -872,7 +870,6 @@ ECPGexecute(struct statement * stmt)
...
@@ -872,7 +870,6 @@ ECPGexecute(struct statement * stmt)
else
else
dres
=
0
.
0
;
dres
=
0
.
0
;
/* Again?! Yes */
switch
(
var
->
type
)
switch
(
var
->
type
)
{
{
case
ECPGt_float
:
case
ECPGt_float
:
...
...
src/interfaces/ecpg/preproc/Makefile
View file @
a4f59da1
...
@@ -3,7 +3,7 @@ include $(SRCDIR)/Makefile.global
...
@@ -3,7 +3,7 @@ include $(SRCDIR)/Makefile.global
MAJOR_VERSION
=
2
MAJOR_VERSION
=
2
MINOR_VERSION
=
6
MINOR_VERSION
=
6
PATCHLEVEL
=
5
PATCHLEVEL
=
6
CFLAGS
+=
-I
../include
-DMAJOR_VERSION
=
$(MAJOR_VERSION)
\
CFLAGS
+=
-I
../include
-DMAJOR_VERSION
=
$(MAJOR_VERSION)
\
-DMINOR_VERSION
=
$(MINOR_VERSION)
-DPATCHLEVEL
=
$(PATCHLEVEL)
\
-DMINOR_VERSION
=
$(MINOR_VERSION)
-DPATCHLEVEL
=
$(PATCHLEVEL)
\
...
...
src/interfaces/ecpg/preproc/ecpg_keywords.c
View file @
a4f59da1
...
@@ -35,7 +35,6 @@ static ScanKeyword ScanKeywords[] = {
...
@@ -35,7 +35,6 @@ static ScanKeyword ScanKeywords[] = {
{
"go"
,
SQL_GO
},
{
"go"
,
SQL_GO
},
{
"goto"
,
SQL_GOTO
},
{
"goto"
,
SQL_GOTO
},
{
"identified"
,
SQL_IDENTIFIED
},
{
"identified"
,
SQL_IDENTIFIED
},
{
"immediate"
,
SQL_IMMEDIATE
},
{
"indicator"
,
SQL_INDICATOR
},
{
"indicator"
,
SQL_INDICATOR
},
{
"int"
,
SQL_INT
},
{
"int"
,
SQL_INT
},
{
"long"
,
SQL_LONG
},
{
"long"
,
SQL_LONG
},
...
...
src/interfaces/ecpg/preproc/keywords.c
View file @
a4f59da1
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.1
7 1999/09/27 10:41
:02 meskes Exp $
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.1
8 1999/10/08 11:05
:02 meskes Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -64,6 +64,7 @@ static ScanKeyword ScanKeywords[] = {
...
@@ -64,6 +64,7 @@ static ScanKeyword ScanKeywords[] = {
{
"commit"
,
COMMIT
},
{
"commit"
,
COMMIT
},
{
"committed"
,
COMMITTED
},
{
"committed"
,
COMMITTED
},
{
"constraint"
,
CONSTRAINT
},
{
"constraint"
,
CONSTRAINT
},
{
"constraints"
,
CONSTRAINTS
},
{
"copy"
,
COPY
},
{
"copy"
,
COPY
},
{
"create"
,
CREATE
},
{
"create"
,
CREATE
},
{
"createdb"
,
CREATEDB
},
{
"createdb"
,
CREATEDB
},
...
@@ -80,6 +81,8 @@ static ScanKeyword ScanKeywords[] = {
...
@@ -80,6 +81,8 @@ static ScanKeyword ScanKeywords[] = {
{
"decimal"
,
DECIMAL
},
{
"decimal"
,
DECIMAL
},
{
"declare"
,
DECLARE
},
{
"declare"
,
DECLARE
},
{
"default"
,
DEFAULT
},
{
"default"
,
DEFAULT
},
{
"deferrable"
,
DEFERRABLE
},
{
"deferred"
,
DEFERRED
},
{
"delete"
,
DELETE
},
{
"delete"
,
DELETE
},
{
"delimiters"
,
DELIMITERS
},
{
"delimiters"
,
DELIMITERS
},
{
"desc"
,
DESC
},
{
"desc"
,
DESC
},
...
@@ -113,10 +116,12 @@ static ScanKeyword ScanKeywords[] = {
...
@@ -113,10 +116,12 @@ static ScanKeyword ScanKeywords[] = {
{
"handler"
,
HANDLER
},
{
"handler"
,
HANDLER
},
{
"having"
,
HAVING
},
{
"having"
,
HAVING
},
{
"hour"
,
HOUR_P
},
{
"hour"
,
HOUR_P
},
{
"immediate"
,
IMMEDIATE
},
{
"in"
,
IN
},
{
"in"
,
IN
},
{
"increment"
,
INCREMENT
},
{
"increment"
,
INCREMENT
},
{
"index"
,
INDEX
},
{
"index"
,
INDEX
},
{
"inherits"
,
INHERITS
},
{
"inherits"
,
INHERITS
},
{
"initially"
,
INITIALLY
},
{
"inner"
,
INNER_P
},
{
"inner"
,
INNER_P
},
{
"insensitive"
,
INSENSITIVE
},
{
"insensitive"
,
INSENSITIVE
},
{
"insert"
,
INSERT
},
{
"insert"
,
INSERT
},
...
@@ -178,6 +183,7 @@ static ScanKeyword ScanKeywords[] = {
...
@@ -178,6 +183,7 @@ static ScanKeyword ScanKeywords[] = {
{
"outer"
,
OUTER_P
},
{
"outer"
,
OUTER_P
},
{
"partial"
,
PARTIAL
},
{
"partial"
,
PARTIAL
},
{
"password"
,
PASSWORD
},
{
"password"
,
PASSWORD
},
{
"pendant"
,
PENDANT
},
{
"position"
,
POSITION
},
{
"position"
,
POSITION
},
{
"precision"
,
PRECISION
},
{
"precision"
,
PRECISION
},
{
"primary"
,
PRIMARY
},
{
"primary"
,
PRIMARY
},
...
@@ -191,6 +197,7 @@ static ScanKeyword ScanKeywords[] = {
...
@@ -191,6 +197,7 @@ static ScanKeyword ScanKeywords[] = {
{
"relative"
,
RELATIVE
},
{
"relative"
,
RELATIVE
},
{
"rename"
,
RENAME
},
{
"rename"
,
RENAME
},
{
"reset"
,
RESET
},
{
"reset"
,
RESET
},
{
"restrict"
,
RESTRICT
},
{
"returns"
,
RETURNS
},
{
"returns"
,
RETURNS
},
{
"revoke"
,
REVOKE
},
{
"revoke"
,
REVOKE
},
{
"right"
,
RIGHT
},
{
"right"
,
RIGHT
},
...
...
src/interfaces/ecpg/preproc/pgc.l
View file @
a4f59da1
...
@@ -60,7 +60,6 @@ static char *old;
...
@@ -60,7 +60,6 @@ static char *old;
* <xc> extended C-style comments - tgl 1997-07-12
* <xc> extended C-style comments - tgl 1997-07-12
* <xd> delimited identifiers (double-quoted identifiers) - tgl 1997-10-27
* <xd> delimited identifiers (double-quoted identifiers) - tgl 1997-10-27
* <xh> hexadecimal numeric string - thomas 1997-11-16
* <xh> hexadecimal numeric string - thomas 1997-11-16
* <xm> numeric strings with embedded minus sign - tgl 1997-09-05
* <xq> quoted strings - tgl 1997-07-30
* <xq> quoted strings - tgl 1997-07-30
*
*
* The "extended comment" syntax closely resembles allowable operator syntax.
* The "extended comment" syntax closely resembles allowable operator syntax.
...
@@ -75,7 +74,6 @@ static char *old;
...
@@ -75,7 +74,6 @@ static char *old;
%x xd
%x xd
%x xdc
%x xdc
%x xh
%x xh
%x xm
%x xq
%x xq
/* Binary number
/* Binary number
...
@@ -128,7 +126,6 @@ xcinside [^*]*
...
@@ -128,7 +126,6 @@ xcinside [^*]*
xcstar [^/]
xcstar [^/]
digit [0-9]
digit [0-9]
number [-+.0-9Ee]
letter [\200-\377_A-Za-z]
letter [\200-\377_A-Za-z]
letter_or_digit [\200-\377_A-Za-z0-9]
letter_or_digit [\200-\377_A-Za-z0-9]
...
@@ -140,13 +137,15 @@ self [,()\[\].;$\:\+\-\*\/\%\^\<\>\=\|]
...
@@ -140,13 +137,15 @@ self [,()\[\].;$\:\+\-\*\/\%\^\<\>\=\|]
op_and_self [\~\!\@\#\^\&\|\`\?\$\:\+\-\*\/\%\<\>\=]
op_and_self [\~\!\@\#\^\&\|\`\?\$\:\+\-\*\/\%\<\>\=]
operator {op_and_self}+
operator {op_and_self}+
xmstop -
/* we do not allow unary minus in numbers.
* instead we pass it verbatim to parser. there it gets
integer [\-]?{digit}+
* coerced via doNegate() -- Leon aug 20 1999
decimal [\-]?(({digit}*\.{digit}+)|({digit}+\.{digit}*))
*/
real [\-]?((({digit}*\.{digit}+)|({digit}+\.{digit}*)|({digit}+))([Ee][-+]?{digit}+))
integer {digit}+
decimal (({digit}*\.{digit}+)|({digit}+\.{digit}*))
real ((({digit}*\.{digit}+)|({digit}+\.{digit}*)|({digit}+))([Ee][-+]?{digit}+))
/*
/*
real
[\-]?
(((({digit}*\.{digit}+)|({digit}+\.{digit}*))([Ee][-+]?{digit}+)?)|({digit}+[Ee][-+]?{digit}+))
real (((({digit}*\.{digit}+)|({digit}+\.{digit}*))([Ee][-+]?{digit}+)?)|({digit}+[Ee][-+]?{digit}+))
*/
*/
param \${integer}
param \${integer}
...
@@ -291,18 +290,7 @@ cppline {space}*#.*(\\{space}*\n)*\n*
...
@@ -291,18 +290,7 @@ cppline {space}*#.*(\\{space}*\n)*\n*
memcpy(literal+llen, yytext, yyleng+1);
memcpy(literal+llen, yytext, yyleng+1);
llen += yyleng;
llen += yyleng;
}
}
<xm>{space}* { /* ignore */ }
<xm>{xmstop} {
BEGIN(SQL);
return yytext[0];
}
<SQL>{typecast} { return TYPECAST; }
<SQL>{typecast} { return TYPECAST; }
<SQL>{self}/{space}*-[\.0-9] {
BEGIN(xm);
return yytext[0];
}
<SQL>{self} { /*
<SQL>{self} { /*
* We may find a ';' inside a structure
* We may find a ';' inside a structure
* definition in a TYPE or VAR statement.
* definition in a TYPE or VAR statement.
...
@@ -312,10 +300,6 @@ cppline {space}*#.*(\\{space}*\n)*\n*
...
@@ -312,10 +300,6 @@ cppline {space}*#.*(\\{space}*\n)*\n*
BEGIN C;
BEGIN C;
return yytext[0];
return yytext[0];
}
}
<SQL>{operator}/-[\.0-9] {
yylval.str = mm_strdup((char*)yytext);
return Op;
}
<SQL>{operator} {
<SQL>{operator} {
if (strcmp((char*)yytext,"!=") == 0)
if (strcmp((char*)yytext,"!=") == 0)
yylval.str = mm_strdup("<>"); /* compatability */
yylval.str = mm_strdup("<>"); /* compatability */
...
@@ -327,106 +311,6 @@ cppline {space}*#.*(\\{space}*\n)*\n*
...
@@ -327,106 +311,6 @@ cppline {space}*#.*(\\{space}*\n)*\n*
yylval.ival = atoi((char*)&yytext[1]);
yylval.ival = atoi((char*)&yytext[1]);
return PARAM;
return PARAM;
}
}
<SQL>{identifier}/{space}*-{number} {
int i;
ScanKeyword *keyword;
char lower_text[NAMEDATALEN];
BEGIN(xm);
/* this should leave the last byte set to '\0' */
strncpy(lower_text, yytext, NAMEDATALEN-1);
for(i = 0; lower_text[i]; i++)
if (isascii((unsigned char)lower_text[i]) && isupper(lower_text[i]))
lower_text[i] = tolower(lower_text[i]);
keyword = ScanKeywordLookup((char*)lower_text);
if (keyword != NULL) {
return keyword->value;
}
else
{
keyword = ScanECPGKeywordLookup((char*)lower_text);
if (keyword != NULL) {
return keyword->value;
}
else
{
struct _defines *ptr;
for (ptr = defines; ptr; ptr = ptr->next)
{
if (strcmp(yytext, ptr->old) == 0)
{
struct _yy_buffer *yb;
yb = mm_alloc(sizeof(struct _yy_buffer));
yb->buffer = YY_CURRENT_BUFFER;
yb->lineno = yylineno;
yb->filename = mm_strdup(input_filename);
yb->next = yy_buffer;
yy_buffer = yb;
yy_scan_string(ptr->new);
break;
}
}
if (ptr == NULL)
{
yylval.str = mm_strdup((char*)yytext);
return IDENT;
}
}
}
}
<C,SQL>{integer}/{space}*-{number} {
char* endptr;
BEGIN(xm);
errno = 0;
yylval.ival = strtol((char *)yytext,&endptr,10);
if (*endptr != '\0' || errno == ERANGE)
{
errno = 0;
#if 0
yylval.dval = strtod(((char *)yytext),&endptr);
if (*endptr != '\0' || errno == ERANGE)
yyerror("ERROR: Bad integer input");
yyerror("WARNING: Integer input is out of range; promoted to float");
return FCONST;
#endif
yylval.str = mm_strdup((char*)yytext);
return SCONST;
}
return ICONST;
}
{decimal}/{space}*-{number} {
char* endptr;
BEGIN(xm);
if (strlen((char *)yytext) <= 17)
{
errno = 0;
yylval.dval = strtod(((char *)yytext),&endptr);
if (*endptr != '\0' || errno == ERANGE)
yyerror("ERROR: Bad float8 input");
return FCONST;
}
yylval.str = mm_strdup((char*)yytext);
return SCONST;
}
<C,SQL>{real}/{space}*-{number} {
char* endptr;
BEGIN(xm);
errno = 0;
yylval.dval = strtod(((char *)yytext),&endptr);
if (*endptr != '\0' || errno == ERANGE)
yyerror("ERROR: Bad float8 input");
return FCONST;
}
<C,SQL>{integer} {
<C,SQL>{integer} {
char* endptr;
char* endptr;
...
...
src/interfaces/ecpg/preproc/preproc.y
View file @
a4f59da1
...
@@ -531,9 +531,13 @@ output_statement(char * stmt, int mode)
...
@@ -531,9 +531,13 @@ output_statement(char * stmt, int mode)
fprintf(yyout, "{ ECPGdo(__LINE__, %s, \"", connection ? connection : "NULL");
fprintf(yyout, "{ ECPGdo(__LINE__, %s, \"", connection ? connection : "NULL");
/* do this char by char as we have to filter '\"' */
/* do this char by char as we have to filter '\"' */
for (i = 0;i < j; i++)
for (i = 0;i < j; i++)
{
if (stmt[i] != '\"')
if (stmt[i] != '\"')
fputc(stmt[i], yyout);
fputc(stmt[i], yyout);
else
fputs("\\\"", yyout);
}
fputs("\", ", yyout);
fputs("\", ", yyout);
/* dump variables to C file*/
/* dump variables to C file*/
...
@@ -662,7 +666,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
...
@@ -662,7 +666,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
%token SQL_CALL SQL_CONNECT SQL_CONNECTION SQL_CONTINUE
%token SQL_CALL SQL_CONNECT SQL_CONNECTION SQL_CONTINUE
%token SQL_DEALLOCATE SQL_DISCONNECT SQL_ENUM
%token SQL_DEALLOCATE SQL_DISCONNECT SQL_ENUM
%token SQL_FOUND SQL_FREE SQL_GO SQL_GOTO
%token SQL_FOUND SQL_FREE SQL_GO SQL_GOTO
%token SQL_IDENTIFIED SQL_I
MMEDIATE SQL_I
NDICATOR SQL_INT SQL_LONG
%token SQL_IDENTIFIED SQL_INDICATOR SQL_INT SQL_LONG
%token SQL_OFF SQL_OPEN SQL_PREPARE SQL_RELEASE SQL_REFERENCE
%token SQL_OFF SQL_OPEN SQL_PREPARE SQL_RELEASE SQL_REFERENCE
%token SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQLERROR SQL_SQLPRINT
%token SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQLERROR SQL_SQLPRINT
%token SQL_SQLWARNING SQL_START SQL_STOP SQL_STRUCT SQL_UNSIGNED
%token SQL_SQLWARNING SQL_START SQL_STOP SQL_STRUCT SQL_UNSIGNED
...
@@ -682,8 +686,8 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
...
@@ -682,8 +686,8 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
BEGIN_TRANS, BETWEEN, BOTH, BY,
BEGIN_TRANS, BETWEEN, BOTH, BY,
CASCADE, CASE, CAST, CHAR, CHARACTER, CHECK, CLOSE,
CASCADE, CASE, CAST, CHAR, CHARACTER, CHECK, CLOSE,
COALESCE, COLLATE, COLUMN, COMMIT,
COALESCE, COLLATE, COLUMN, COMMIT,
CONSTRAINT, C
REATE, CROSS, CURRENT, CURRENT_DATE, CURRENT_TIME,
CONSTRAINT, C
ONSTRAINTS, CREATE, CROSS, CURRENT, CURRENT_DATE,
CURRENT_TIMESTAMP, CURRENT_USER, CURSOR,
CURRENT_TIME
, CURRENT_TIME
STAMP, CURRENT_USER, CURSOR,
DAY_P, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISTINCT, DOUBLE, DROP,
DAY_P, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISTINCT, DOUBLE, DROP,
ELSE, END_TRANS, EXCEPT, EXECUTE, EXISTS, EXTRACT,
ELSE, END_TRANS, EXCEPT, EXECUTE, EXISTS, EXTRACT,
FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
...
@@ -703,7 +707,11 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
...
@@ -703,7 +707,11 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
WHEN, WHERE, WITH, WORK, YEAR_P, ZONE
WHEN, WHERE, WITH, WORK, YEAR_P, ZONE
/* Keywords (in SQL3 reserved words) */
/* Keywords (in SQL3 reserved words) */
%token TRIGGER
%token DEFERRABLE, DEFERRED,
IMMEDIATE, INITIALLY,
PENDANT,
RESTRICT,
TRIGGER
/* Keywords (in SQL92 non-reserved words) */
/* Keywords (in SQL92 non-reserved words) */
%token COMMITTED, SERIALIZABLE, TYPE_P
%token COMMITTED, SERIALIZABLE, TYPE_P
...
@@ -768,11 +776,11 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
...
@@ -768,11 +776,11 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
%type <str> Iconst Fconst Sconst TransactionStmt CreateStmt UserId
%type <str> Iconst Fconst Sconst TransactionStmt CreateStmt UserId
%type <str> CreateAsElement OptCreateAs CreateAsList CreateAsStmt
%type <str> CreateAsElement OptCreateAs CreateAsList CreateAsStmt
%type <str> OptInherit key_reference key_action
%type <str> OptInherit key_reference key_action
%type <str> key_match
constraint_expr
ColLabel SpecialRuleRelation
%type <str> key_match ColLabel SpecialRuleRelation
%type <str> ColId
default_expr
ColQualifier columnDef ColQualList
%type <str> ColId ColQualifier columnDef ColQualList
%type <str> ColConstraint ColConstraintElem
default_list
NumericOnly FloatOnly
%type <str> ColConstraint ColConstraintElem NumericOnly FloatOnly
%type <str> OptTableElementList OptTableElement TableConstraint
%type <str> OptTableElementList OptTableElement TableConstraint
%type <str> ConstraintElem key_actions
constraint_list
ColPrimaryKey
%type <str> ConstraintElem key_actions ColPrimaryKey
%type <str> target_list target_el update_target_list
%type <str> target_list target_el update_target_list
%type <str> update_target_el opt_id relation_name database_name
%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> access_method attr_name class index_name name func_name
...
@@ -788,21 +796,21 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
...
@@ -788,21 +796,21 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
%type <str> SelectStmt SubSelect result OptTemp OptTempType OptTempScope
%type <str> SelectStmt SubSelect result OptTemp OptTempType OptTempScope
%type <str> opt_table opt_union opt_unique sort_clause sortby_list
%type <str> opt_table opt_union opt_unique sort_clause sortby_list
%type <str> sortby OptUseOp opt_inh_star relation_name_list name_list
%type <str> sortby OptUseOp opt_inh_star relation_name_list name_list
%type <str> group_clause having_clause from_clause
c_list
%type <str> group_clause having_clause from_clause
%type <str> table_list join_outer where_clause relation_expr row_op sub_type
%type <str> table_list join_outer where_clause relation_expr row_op sub_type
%type <str> opt_column_list insert_rest InsertStmt OptimizableStmt
%type <str> opt_column_list insert_rest InsertStmt OptimizableStmt
%type <str> columnList DeleteStmt LockStmt UpdateStmt CursorStmt
%type <str> columnList DeleteStmt LockStmt UpdateStmt CursorStmt
%type <str> NotifyStmt columnElem copy_dirn
c_expr
UnlistenStmt
%type <str> NotifyStmt columnElem copy_dirn UnlistenStmt
%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
%type <str> opt_with_copy FetchStmt opt_direction fetch_how_many opt_portal_name
%type <str> opt_with_copy FetchStmt opt_direction fetch_how_many opt_portal_name
%type <str> ClosePortalStmt DestroyStmt VacuumStmt opt_verbose
%type <str> ClosePortalStmt DestroyStmt VacuumStmt opt_verbose
%type <str> opt_analyze opt_va_list va_list ExplainStmt index_params
%type <str> opt_analyze opt_va_list va_list ExplainStmt index_params
%type <str> index_list func_index index_elem opt_type opt_class access_method_clause
%type <str> index_list func_index index_elem opt_type opt_class access_method_clause
%type <str> index_opt_unique IndexStmt set_opt func_return def_rest
%type <str> index_opt_unique IndexStmt set_opt func_return def_rest
%type <str> func_a
s func_a
rgs_list func_args opt_with ProcedureStmt def_arg
%type <str> func_args_list func_args opt_with ProcedureStmt def_arg
%type <str> def_elem def_list definition def_name def_type DefineStmt
%type <str> def_elem def_list definition def_name def_type DefineStmt
%type <str> opt_instead event event_object RuleActionList,
%type <str> opt_instead event event_object RuleActionList,
%type <str> RuleAction
Block RuleActionMulti join_list
%type <str> RuleAction
StmtOrEmpty RuleActionMulti join_list func_as
%type <str> RuleStmt opt_column opt_name oper_argtypes
%type <str> RuleStmt opt_column opt_name oper_argtypes
%type <str> MathOp RemoveFuncStmt aggr_argtype for_update_clause
%type <str> MathOp RemoveFuncStmt aggr_argtype for_update_clause
%type <str> RemoveAggrStmt remove_type RemoveStmt ExtendStmt
%type <str> RemoveAggrStmt remove_type RemoveStmt ExtendStmt
...
@@ -819,13 +827,16 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
...
@@ -819,13 +827,16 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
%type <str> ViewStmt LoadStmt CreatedbStmt opt_database1 opt_database2 location
%type <str> ViewStmt LoadStmt CreatedbStmt opt_database1 opt_database2 location
%type <str> DestroydbStmt ClusterStmt grantee RevokeStmt encoding
%type <str> DestroydbStmt ClusterStmt grantee RevokeStmt encoding
%type <str> GrantStmt privileges operation_commalist operation
%type <str> GrantStmt privileges operation_commalist operation
%type <str> opt_cursor opt_lmode
%type <str> opt_cursor opt_lmode
ConstraintsSetStmt
%type <str> case_expr when_clause_list case_default case_arg when_clause
%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> select_offset_value table_list using_expr join_expr
%type <str> select_offset_value table_list using_expr join_expr
%type <str> using_list from_expr table_expr join_clause join_type
%type <str> using_list from_expr table_expr join_clause join_type
%type <str> join_qual update_list join_clause join_clause_with_union
%type <str> join_qual update_list join_clause join_clause_with_union
%type <str> opt_level opt_lock lock_type
%type <str> opt_level opt_lock lock_type OptConstrTrigDeferrable,
%type <str> OptConstrTrigInitdeferred OptConstrFromTable
%type <str> constraints_set_list constraints_set_namelist
%type <str> constraints_set_mode
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen opt_using
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen opt_using
%type <str> indicator ECPGExecute ecpg_expr dotext ECPGPrepare
%type <str> indicator ECPGExecute ecpg_expr dotext ECPGPrepare
...
@@ -920,6 +931,7 @@ stmt: AddAttrStmt { output_statement($1, 0); }
...
@@ -920,6 +931,7 @@ stmt: AddAttrStmt { output_statement($1, 0); }
| VariableSetStmt { output_statement($1, 0); }
| VariableSetStmt { output_statement($1, 0); }
| VariableShowStmt { output_statement($1, 0); }
| VariableShowStmt { output_statement($1, 0); }
| VariableResetStmt { output_statement($1, 0); }
| VariableResetStmt { output_statement($1, 0); }
| ConstraintsSetStmt { output_statement($1, 0); }
| ECPGConnect {
| ECPGConnect {
if (connection)
if (connection)
yyerror("no at option for connect statement.\n");
yyerror("no at option for connect statement.\n");
...
@@ -1193,6 +1205,42 @@ VariableResetStmt: RESET ColId
...
@@ -1193,6 +1205,42 @@ VariableResetStmt: RESET ColId
}
}
;
;
ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode
{
$$ = cat3_str(make1_str("set constraints"), $3, $4);
}
;
constraints_set_list: ALL
{
$$ = make1_str("all");
}
| constraints_set_namelist
{
$$ = $1;
}
;
constraints_set_namelist: IDENT
{
$$ = $1;
}
| constraints_set_namelist ',' IDENT
{
$$ = cat3_str($1, make1_str(","), $3);
}
;
constraints_set_mode: DEFERRED
{
$$ = make1_str("deferred");
}
| IMMEDIATE
{
$$ = make1_str("immediate");
}
;
/*****************************************************************************
/*****************************************************************************
*
*
...
@@ -1217,7 +1265,7 @@ alter_clause: ADD opt_column columnDef
...
@@ -1217,7 +1265,7 @@ alter_clause: ADD opt_column columnDef
}
}
| DROP opt_column ColId
| DROP opt_column ColId
{ yyerror("ALTER TABLE/DROP COLUMN not yet implemented"); }
{ yyerror("ALTER TABLE/DROP COLUMN not yet implemented"); }
| ALTER opt_column ColId SET DEFAULT
default
_expr
| ALTER opt_column ColId SET DEFAULT
a
_expr
{ yyerror("ALTER TABLE/ALTER COLUMN/SET DEFAULT not yet implemented"); }
{ yyerror("ALTER TABLE/ALTER COLUMN/SET DEFAULT not yet implemented"); }
| ALTER opt_column ColId DROP DEFAULT
| ALTER opt_column ColId DROP DEFAULT
{ yyerror("ALTER TABLE/ALTER COLUMN/DROP DEFAULT not yet implemented"); }
{ yyerror("ALTER TABLE/ALTER COLUMN/DROP DEFAULT not yet implemented"); }
...
@@ -1382,8 +1430,11 @@ ColConstraint:
...
@@ -1382,8 +1430,11 @@ ColConstraint:
* that a column may have that value. WITH NULL leads to
* that a column may have that value. WITH NULL leads to
* shift/reduce conflicts with WITH TIME ZONE anyway.
* shift/reduce conflicts with WITH TIME ZONE anyway.
* - thomas 1999-01-08
* - thomas 1999-01-08
* DEFAULT expression must be b_expr not a_expr to prevent shift/reduce
* conflict on NOT (since NOT might start a subsequent NOT NULL constraint,
* or be part of a_expr NOT LIKE or similar constructs).
*/
*/
ColConstraintElem: CHECK '('
constraint
_expr ')'
ColConstraintElem: CHECK '('
a
_expr ')'
{
{
$$ = make3_str(make1_str("check("), $3, make1_str(")"));
$$ = make3_str(make1_str("check("), $3, make1_str(")"));
}
}
...
@@ -1391,7 +1442,7 @@ ColConstraintElem: CHECK '(' constraint_expr ')'
...
@@ -1391,7 +1442,7 @@ ColConstraintElem: CHECK '(' constraint_expr ')'
{
{
$$ = make1_str("default null");
$$ = make1_str("default null");
}
}
| DEFAULT
default
_expr
| DEFAULT
b
_expr
{
{
$$ = cat2_str(make1_str("default"), $2);
$$ = cat2_str(make1_str("default"), $2);
}
}
...
@@ -1414,101 +1465,6 @@ ColConstraintElem: CHECK '(' constraint_expr ')'
...
@@ -1414,101 +1465,6 @@ ColConstraintElem: CHECK '(' constraint_expr ')'
}
}
;
;
default_list: default_list ',' default_expr
{
$$ = cat3_str($1, make1_str(","), $3);
}
| default_expr
{
$$ = $1;
}
;
/* The Postgres default column value is NULL.
* Rather than carrying DEFAULT NULL forward as a clause,
* let's just have it be a no-op.
| NULL_P
{ $$ = make1_str("null"); }
* - thomas 1998-09-13
*/
default_expr: AexprConst
{ $$ = $1; }
| '-' default_expr %prec UMINUS
{ $$ = cat2_str(make1_str("-"), $2); }
| default_expr '+' default_expr
{ $$ = cat3_str($1, make1_str("+"), $3); }
| default_expr '-' default_expr
{ $$ = cat3_str($1, make1_str("-"), $3); }
| default_expr '/' default_expr
{ $$ = cat3_str($1, make1_str("/"), $3); }
| default_expr '%' default_expr
{ $$ = cat3_str($1, make1_str("%"), $3); }
| default_expr '*' default_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| default_expr '^' default_expr
{ $$ = cat3_str($1, make1_str("^"), $3); }
| default_expr '=' default_expr
{ yyerror("boolean expressions not supported in DEFAULT"); }
| default_expr '<' default_expr
{ yyerror("boolean expressions not supported in DEFAULT"); }
| default_expr '>' default_expr
{ yyerror("boolean expressions not supported in DEFAULT"); }
/* not possible in embedded sql
| ':' default_expr
{ $$ = cat2_str(make1_str(":"), $2); }
*/
| ';' default_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| '|' default_expr
{ $$ = cat2_str(make1_str("|"), $2); }
| default_expr TYPECAST Typename
{ $$ = cat3_str($1, make1_str("::"), $3); }
| CAST '(' default_expr AS Typename ')'
{
$$ = cat3_str(make2_str(make1_str("cast("), $3) , make1_str("as"), make2_str($5, make1_str(")")));
}
| '(' default_expr ')'
{ $$ = make3_str(make1_str("("), $2, make1_str(")")); }
| func_name '(' ')'
{ $$ = cat2_str($1, make1_str("()")); }
| func_name '(' default_list ')'
{ $$ = cat2_str($1, make3_str(make1_str("("), $3, make1_str(")"))); }
| default_expr Op default_expr
{
if (!strcmp("<=", $2) || !strcmp(">=", $2))
yyerror("boolean expressions not supported in DEFAULT");
$$ = cat3_str($1, $2, $3);
}
| Op default_expr
{ $$ = cat2_str($1, $2); }
| default_expr Op
{ $$ = cat2_str($1, $2); }
/* XXX - thomas 1997-10-07 v6.2 function-specific code to be changed */
| CURRENT_DATE
{ $$ = make1_str("current_date"); }
| CURRENT_TIME
{ $$ = make1_str("current_time"); }
| CURRENT_TIME '(' Iconst ')'
{
if ($3 != 0)
fprintf(stderr, "CURRENT_TIME(%s) precision not implemented; zero used instead",$3);
$$ = "current_time";
}
| CURRENT_TIMESTAMP
{ $$ = make1_str("current_timestamp"); }
| CURRENT_TIMESTAMP '(' Iconst ')'
{
if ($3 != 0)
fprintf(stderr, "CURRENT_TIMESTAMP(%s) precision not implemented; zero used instead",$3);
$$ = "current_timestamp";
}
| CURRENT_USER
{ $$ = make1_str("current_user"); }
| USER
{ $$ = make1_str("user"); }
;
/* ConstraintElem specifies constraint syntax which is not embedded into
/* 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
* - thomas 1997-12-03
...
@@ -1521,7 +1477,7 @@ TableConstraint: CONSTRAINT name ConstraintElem
...
@@ -1521,7 +1477,7 @@ TableConstraint: CONSTRAINT name ConstraintElem
{ $$ = $1; }
{ $$ = $1; }
;
;
ConstraintElem: CHECK '('
constraint
_expr ')'
ConstraintElem: CHECK '('
a
_expr ')'
{
{
$$ = make3_str(make1_str("check("), $3, make1_str(")"));
$$ = make3_str(make1_str("check("), $3, make1_str(")"));
}
}
...
@@ -1540,125 +1496,6 @@ ConstraintElem: CHECK '(' constraint_expr ')'
...
@@ -1540,125 +1496,6 @@ ConstraintElem: CHECK '(' constraint_expr ')'
}
}
;
;
constraint_list: constraint_list ',' constraint_expr
{
$$ = cat3_str($1, make1_str(","), $3);
}
| constraint_expr
{
$$ = $1;
}
;
constraint_expr: AexprConst
{ $$ = $1; }
| NULL_P
{ $$ = make1_str("null"); }
| ColId
{
$$ = $1;
}
| '-' constraint_expr %prec UMINUS
{ $$ = cat2_str(make1_str("-"), $2); }
| constraint_expr '+' constraint_expr
{ $$ = cat3_str($1, make1_str("+"), $3); }
| constraint_expr '-' constraint_expr
{ $$ = cat3_str($1, make1_str("-"), $3); }
| constraint_expr '/' constraint_expr
{ $$ = cat3_str($1, make1_str("/"), $3); }
| constraint_expr '%' constraint_expr
{ $$ = cat3_str($1, make1_str("%"), $3); }
| constraint_expr '*' constraint_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| constraint_expr '^' constraint_expr
{ $$ = cat3_str($1, make1_str("^"), $3); }
| constraint_expr '=' constraint_expr
{ $$ = cat3_str($1, make1_str("="), $3); }
| constraint_expr '<' constraint_expr
{ $$ = cat3_str($1, make1_str("<"), $3); }
| constraint_expr '>' constraint_expr
{ $$ = cat3_str($1, make1_str(">"), $3); }
/* this one doesn't work with embedded sql anyway
| ':' constraint_expr
{ $$ = cat2_str(make1_str(":"), $2); }
*/
| ';' constraint_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| '|' constraint_expr
{ $$ = cat2_str(make1_str("|"), $2); }
| constraint_expr TYPECAST Typename
{
$$ = cat3_str($1, make1_str("::"), $3);
}
| CAST '(' constraint_expr AS Typename ')'
{
$$ = cat3_str(make2_str(make1_str("cast("), $3), make1_str("as"), make2_str($5, make1_str(")")));
}
| '(' constraint_expr ')'
{ $$ = make3_str(make1_str("("), $2, make1_str(")")); }
| func_name '(' ')'
{
{ $$ = cat2_str($1, make1_str("()")); }
}
| func_name '(' constraint_list ')'
{
$$ = cat2_str($1, make3_str(make1_str("("), $3, make1_str(")")));
}
| constraint_expr Op constraint_expr
{ $$ = cat3_str($1, $2, $3); }
| constraint_expr LIKE constraint_expr
{ $$ = cat3_str($1, make1_str("like"), $3); }
| constraint_expr NOT LIKE constraint_expr
{ $$ = cat3_str($1, make1_str("not like"), $4); }
| constraint_expr AND constraint_expr
{ $$ = cat3_str($1, make1_str("and"), $3); }
| constraint_expr OR constraint_expr
{ $$ = cat3_str($1, make1_str("or"), $3); }
| NOT constraint_expr
{ $$ = cat2_str(make1_str("not"), $2); }
| Op constraint_expr
{ $$ = cat2_str($1, $2); }
| constraint_expr Op
{ $$ = cat2_str($1, $2); }
| constraint_expr ISNULL
{ $$ = cat2_str($1, make1_str("isnull")); }
| constraint_expr IS NULL_P
{ $$ = cat2_str($1, make1_str("is null")); }
| constraint_expr NOTNULL
{ $$ = cat2_str($1, make1_str("notnull")); }
| constraint_expr IS NOT NULL_P
{ $$ = cat2_str($1, make1_str("is not null")); }
| constraint_expr IS TRUE_P
{ $$ = cat2_str($1, make1_str("is true")); }
| constraint_expr IS FALSE_P
{ $$ = cat2_str($1, make1_str("is false")); }
| constraint_expr IS NOT TRUE_P
{ $$ = cat2_str($1, make1_str("is not true")); }
| constraint_expr IS NOT FALSE_P
{ $$ = cat2_str($1, make1_str("is not false")); }
| constraint_expr IN '(' c_list ')'
{ $$ = cat4_str($1, make1_str("in ("), $4, make1_str(")")); }
| constraint_expr NOT IN '(' c_list ')'
{ $$ = cat4_str($1, make1_str("not in ("), $5, make1_str(")")); }
| constraint_expr BETWEEN c_expr AND c_expr
{ $$ = cat5_str($1, make1_str("between"), $3, make1_str("and"), $5); }
| constraint_expr NOT BETWEEN c_expr AND c_expr
{ $$ = cat5_str($1, make1_str("not between"), $4, make1_str("and"), $6); }
;
c_list: c_list ',' c_expr
{
$$ = make3_str($1, make1_str(", "), $3);
}
| c_expr
{
$$ = $1;
}
c_expr: AexprConst
{
$$ = $1;
}
key_match: MATCH FULL { $$ = make1_str("match full"); }
key_match: MATCH FULL { $$ = make1_str("match full"); }
| MATCH PARTIAL { $$ = make1_str("match partial"); }
| MATCH PARTIAL { $$ = make1_str("match partial"); }
| /*EMPTY*/ { $$ = make1_str(""); }
| /*EMPTY*/ { $$ = make1_str(""); }
...
@@ -1806,6 +1643,14 @@ CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
...
@@ -1806,6 +1643,14 @@ CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
{
{
$$ = cat2_str(cat5_str(cat5_str(make1_str("create trigger"), $3, $4, $5, make1_str("on")), $7, $8, make1_str("execute procedure"), $11), make3_str(make1_str("("), $13, make1_str(")")));
$$ = cat2_str(cat5_str(cat5_str(make1_str("create trigger"), $3, $4, $5, make1_str("on")), $7, $8, make1_str("execute procedure"), $11), make3_str(make1_str("("), $13, make1_str(")")));
}
}
| CREATE CONSTRAINT TRIGGER name AFTER TriggerOneEvent ON
relation_name OptConstrFromTable
OptConstrTrigDeferrable OptConstrTrigInitdeferred
FOR EACH ROW EXECUTE PROCEDURE
name '(' TriggerFuncArgs ')'
{
$$ = cat2_str(cat5_str(cat5_str(cat5_str(make1_str("create constraint trigger"), $4, make1_str("after"), $6, make1_str("on")), $8, $9, $10, $11), make1_str("for each row execute procedure"), $17, make1_str("("), $19), make1_str(")"));
}
;
;
TriggerActionTime: BEFORE { $$ = make1_str("before"); }
TriggerActionTime: BEFORE { $$ = make1_str("before"); }
...
@@ -1865,6 +1710,45 @@ TriggerFuncArg: Iconst
...
@@ -1865,6 +1710,45 @@ TriggerFuncArg: Iconst
| ident { $$ = $1; }
| ident { $$ = $1; }
;
;
OptConstrFromTable: /* Empty */
{
$$ = make1_str("");
}
| FROM relation_name
{
$$ = cat2_str(make1_str("from"), $2);
}
;
OptConstrTrigDeferrable: /* Empty */
{
$$ = make1_str("");
}
| DEFERRABLE
{
$$ = make1_str("deferrable");
}
| NOT DEFERRABLE
{
$$ = make1_str("not deferrable");
}
;
OptConstrTrigInitdeferred: /* Empty */
{
$$ = make1_str("");
}
| INITIALLY DEFERRED
{
$$ = make1_str("initially deferrable");
}
| INITIALLY IMMEDIATE
{
$$ = make1_str("initially immediate");
}
;
DropTrigStmt: DROP TRIGGER name ON relation_name
DropTrigStmt: DROP TRIGGER name ON relation_name
{
{
$$ = cat4_str(make1_str("drop trigger"), $3, make1_str("on"), $5);
$$ = cat4_str(make1_str("drop trigger"), $3, make1_str("on"), $5);
...
@@ -2208,7 +2092,6 @@ RecipeStmt: EXECUTE RECIPE recipe_name
...
@@ -2208,7 +2092,6 @@ RecipeStmt: EXECUTE RECIPE recipe_name
* [, iscachable])
* [, iscachable])
* [arg is (<type-1> { , <type-n>})]
* [arg is (<type-1> { , <type-n>})]
* as <filename or code in language as appropriate>
* as <filename or code in language as appropriate>
* [, <link name for dynamic loader>]
*
*
*****************************************************************************/
*****************************************************************************/
...
@@ -2231,11 +2114,8 @@ func_args_list: TypeId { $$ = $1; }
...
@@ -2231,11 +2114,8 @@ func_args_list: TypeId { $$ = $1; }
{ $$ = cat3_str($1, make1_str(","), $3); }
{ $$ = cat3_str($1, make1_str(","), $3); }
;
;
func_as: Sconst
func_as: Sconst { $$ = $1; }
{ $$ = $1; }
| Sconst ',' Sconst { $$ = cat3_str($1, make1_str(","), $3); }
| Sconst ',' Sconst
{ $$ = cat3_str($1, make1_str(","), $3); }
;
func_return: set_opt TypeId
func_return: set_opt TypeId
{
{
...
@@ -2308,6 +2188,8 @@ MathOp: '+' { $$ = make1_str("+"); }
...
@@ -2308,6 +2188,8 @@ MathOp: '+' { $$ = make1_str("+"); }
| '-' { $$ = make1_str("-"); }
| '-' { $$ = make1_str("-"); }
| '*' { $$ = make1_str("*"); }
| '*' { $$ = make1_str("*"); }
| '%' { $$ = make1_str("%"); }
| '%' { $$ = make1_str("%"); }
| '^' { $$ = make1_str("^"); }
| '|' { $$ = make1_str("|"); }
| '/' { $$ = make1_str("/"); }
| '/' { $$ = make1_str("/"); }
| '<' { $$ = make1_str("<"); }
| '<' { $$ = make1_str("<"); }
| '>' { $$ = make1_str(">"); }
| '>' { $$ = make1_str(">"); }
...
@@ -2372,19 +2254,14 @@ RuleStmt: CREATE RULE name AS
...
@@ -2372,19 +2254,14 @@ RuleStmt: CREATE RULE name AS
RuleActionList: NOTHING { $$ = make1_str("nothing"); }
RuleActionList: NOTHING { $$ = make1_str("nothing"); }
| SelectStmt { $$ = $1; }
| SelectStmt { $$ = $1; }
| RuleActionStmt { $$ = $1; }
| RuleActionStmt { $$ = $1; }
| '[' RuleAction
Block
']' { $$ = cat3_str(make1_str("["), $2, make1_str("]")); }
| '[' RuleAction
Multi
']' { $$ = cat3_str(make1_str("["), $2, make1_str("]")); }
| '(' RuleAction
Block
')' { $$ = cat3_str(make1_str("("), $2, make1_str(")")); }
| '(' RuleAction
Multi
')' { $$ = cat3_str(make1_str("("), $2, make1_str(")")); }
;
;
RuleActionBlock: RuleActionMulti { $$ = $1; }
/* the thrashing around here is to discard "empty" statements... */
| RuleActionStmt { $$ = $1; }
RuleActionMulti: RuleActionMulti ';' RuleActionStmtOrEmpty
;
{ $$ = cat3_str($1, make1_str(";"), $3); }
| RuleActionStmtOrEmpty
RuleActionMulti: RuleActionMulti RuleActionStmt
{ $$ = cat2_str($1, $2); }
| RuleActionMulti RuleActionStmt ';'
{ $$ = cat3_str($1, $2, make1_str(";")); }
| RuleActionStmt ';'
{ $$ = cat2_str($1, make1_str(";")); }
{ $$ = cat2_str($1, make1_str(";")); }
;
;
...
@@ -2393,6 +2270,9 @@ RuleActionStmt: InsertStmt
...
@@ -2393,6 +2270,9 @@ RuleActionStmt: InsertStmt
| DeleteStmt
| DeleteStmt
| NotifyStmt
| NotifyStmt
;
;
RuleActionStmtOrEmpty: RuleActionStmt { $$ = $1; }
| /*EMPTY*/ { $$ = make1_str(""); }
;
event_object: relation_name '.' attr_name
event_object: relation_name '.' attr_name
{
{
...
@@ -3218,7 +3098,6 @@ generic: ident { $$ = $1; }
...
@@ -3218,7 +3098,6 @@ generic: ident { $$ = $1; }
| SQL_GO { $$ = make1_str("go"); }
| SQL_GO { $$ = make1_str("go"); }
| SQL_GOTO { $$ = make1_str("goto"); }
| SQL_GOTO { $$ = make1_str("goto"); }
| SQL_IDENTIFIED { $$ = make1_str("identified"); }
| SQL_IDENTIFIED { $$ = make1_str("identified"); }
| SQL_IMMEDIATE { $$ = make1_str("immediate"); }
| SQL_INDICATOR { $$ = make1_str("indicator"); }
| SQL_INDICATOR { $$ = make1_str("indicator"); }
| SQL_INT { $$ = make1_str("int"); }
| SQL_INT { $$ = make1_str("int"); }
| SQL_LONG { $$ = make1_str("long"); }
| SQL_LONG { $$ = make1_str("long"); }
...
@@ -3490,6 +3369,8 @@ row_op: Op { $$ = $1; }
...
@@ -3490,6 +3369,8 @@ row_op: Op { $$ = $1; }
| '*' { $$ = "*"; }
| '*' { $$ = "*"; }
| '%' { $$ = "%"; }
| '%' { $$ = "%"; }
| '/' { $$ = "/"; }
| '/' { $$ = "/"; }
| '^' { $$ = "^"; }
| '|' { $$ = "|"; }
;
;
sub_type: ANY { $$ = make1_str("ANY"); }
sub_type: ANY { $$ = make1_str("ANY"); }
...
@@ -3534,22 +3415,33 @@ a_expr: attr
...
@@ -3534,22 +3415,33 @@ a_expr: attr
{ $$ = cat2_str(make1_str("%"), $2); }
{ $$ = cat2_str(make1_str("%"), $2); }
| '^' a_expr
| '^' a_expr
{ $$ = cat2_str(make1_str("^"), $2); }
{ $$ = cat2_str(make1_str("^"), $2); }
| '|' a_expr
{ $$ = cat2_str(make1_str("|"), $2); }
/* not possible in embedded sql | ':' a_expr
{ $$ = cat2_str(make1_str(":"), $2); }
*/
| ';' a_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| a_expr '%'
| a_expr '%'
{ $$ = cat2_str($1, make1_str("%")); }
{ $$ = cat2_str($1, make1_str("%")); }
| a_expr '^'
| a_expr '^'
{ $$ = cat2_str($1, make1_str("^")); }
{ $$ = cat2_str($1, make1_str("^")); }
| a_expr '|'
{ $$ = cat2_str($1, make1_str("|")); }
| a_expr '+' a_expr
| a_expr '+' a_expr
{ $$ = cat3_str($1, make1_str("+"), $3); }
{ $$ = cat3_str($1, make1_str("+"), $3); }
| a_expr '-' a_expr
| a_expr '-' a_expr
{ $$ = cat3_str($1, make1_str("-"), $3); }
{ $$ = cat3_str($1, make1_str("-"), $3); }
| a_expr '*' a_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| a_expr '/' a_expr
| a_expr '/' a_expr
{ $$ = cat3_str($1, make1_str("/"), $3); }
{ $$ = cat3_str($1, make1_str("/"), $3); }
| a_expr '%' a_expr
| a_expr '%' a_expr
{ $$ = cat3_str($1, make1_str("%"), $3); }
{ $$ = cat3_str($1, make1_str("%"), $3); }
| a_expr '*' a_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| a_expr '^' a_expr
| a_expr '^' a_expr
{ $$ = cat3_str($1, make1_str("^"), $3); }
{ $$ = cat3_str($1, make1_str("^"), $3); }
| a_expr '|' a_expr
{ $$ = cat3_str($1, make1_str("|"), $3); }
| a_expr '<' a_expr
| a_expr '<' a_expr
{ $$ = cat3_str($1, make1_str("<"), $3); }
{ $$ = cat3_str($1, make1_str("<"), $3); }
| a_expr '>' a_expr
| a_expr '>' a_expr
...
@@ -3560,13 +3452,6 @@ a_expr: attr
...
@@ -3560,13 +3452,6 @@ a_expr: attr
{ $$ = cat2_str(make1_str("= NULL"), $3); }
{ $$ = cat2_str(make1_str("= NULL"), $3); }
| a_expr '=' a_expr
| a_expr '=' a_expr
{ $$ = cat3_str($1, make1_str("="), $3); }
{ $$ = cat3_str($1, make1_str("="), $3); }
/* not possible in embedded sql | ':' a_expr
{ $$ = cat2_str(make1_str(":"), $2); }
*/
| ';' a_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| '|' a_expr
{ $$ = cat2_str(make1_str("|"), $2); }
| a_expr TYPECAST Typename
| a_expr TYPECAST Typename
{
{
$$ = cat3_str($1, make1_str("::"), $3);
$$ = cat3_str($1, make1_str("::"), $3);
...
@@ -3721,6 +3606,10 @@ a_expr: attr
...
@@ -3721,6 +3606,10 @@ a_expr: attr
{
{
$$ = make4_str($1, make1_str("-("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("-("), $4, make1_str(")"));
}
}
| a_expr '*' '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("*("), $4, make1_str(")"));
}
| a_expr '/' '(' SubSelect ')'
| a_expr '/' '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("/("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("/("), $4, make1_str(")"));
...
@@ -3729,9 +3618,13 @@ a_expr: attr
...
@@ -3729,9 +3618,13 @@ a_expr: attr
{
{
$$ = make4_str($1, make1_str("%("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("%("), $4, make1_str(")"));
}
}
| a_expr '
*
' '(' SubSelect ')'
| a_expr '
^
' '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("*("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("^("), $4, make1_str(")"));
}
| a_expr '|' '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("|("), $4, make1_str(")"));
}
}
| a_expr '<' '(' SubSelect ')'
| a_expr '<' '(' SubSelect ')'
{
{
...
@@ -3757,6 +3650,10 @@ a_expr: attr
...
@@ -3757,6 +3650,10 @@ a_expr: attr
{
{
$$ = make4_str($1, make1_str("- any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("- any("), $5, make1_str(")"));
}
}
| a_expr '*' ANY '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("* any("), $5, make1_str(")"));
}
| a_expr '/' ANY '(' SubSelect ')'
| a_expr '/' ANY '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("/ any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("/ any("), $5, make1_str(")"));
...
@@ -3765,9 +3662,13 @@ a_expr: attr
...
@@ -3765,9 +3662,13 @@ a_expr: attr
{
{
$$ = make4_str($1, make1_str("% any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("% any("), $5, make1_str(")"));
}
}
| a_expr '
*
' ANY '(' SubSelect ')'
| a_expr '
^
' ANY '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("* any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("^ any("), $5, make1_str(")"));
}
| a_expr '|' ANY '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("| any("), $5, make1_str(")"));
}
}
| a_expr '<' ANY '(' SubSelect ')'
| a_expr '<' ANY '(' SubSelect ')'
{
{
...
@@ -3793,6 +3694,10 @@ a_expr: attr
...
@@ -3793,6 +3694,10 @@ a_expr: attr
{
{
$$ = make4_str($1, make1_str("- all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("- all("), $5, make1_str(")"));
}
}
| a_expr '*' ALL '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("* all("), $5, make1_str(")"));
}
| a_expr '/' ALL '(' SubSelect ')'
| a_expr '/' ALL '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("/ all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("/ all("), $5, make1_str(")"));
...
@@ -3801,9 +3706,13 @@ a_expr: attr
...
@@ -3801,9 +3706,13 @@ a_expr: attr
{
{
$$ = make4_str($1, make1_str("% all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("% all("), $5, make1_str(")"));
}
}
| a_expr '
*
' ALL '(' SubSelect ')'
| a_expr '
^
' ALL '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("* all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("^ all("), $5, make1_str(")"));
}
| a_expr '|' ALL '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("| all("), $5, make1_str(")"));
}
}
| a_expr '<' ALL '(' SubSelect ')'
| a_expr '<' ALL '(' SubSelect ')'
{
{
...
@@ -3850,29 +3759,33 @@ b_expr: attr
...
@@ -3850,29 +3759,33 @@ b_expr: attr
{ $$ = cat2_str(make1_str("%"), $2); }
{ $$ = cat2_str(make1_str("%"), $2); }
| '^' b_expr
| '^' b_expr
{ $$ = cat2_str(make1_str("^"), $2); }
{ $$ = cat2_str(make1_str("^"), $2); }
/* not possible in embedded sql | ':' b_expr
{ $$ = cat2_str(make1_str(":"), $2); }
*/
| ';' b_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| '|' b_expr
{ $$ = cat2_str(make1_str("|"), $2); }
| b_expr '%'
| b_expr '%'
{ $$ = cat2_str($1, make1_str("%")); }
{ $$ = cat2_str($1, make1_str("%")); }
| b_expr '^'
| b_expr '^'
{ $$ = cat2_str($1, make1_str("^")); }
{ $$ = cat2_str($1, make1_str("^")); }
| b_expr '|'
{ $$ = cat2_str($1, make1_str("|")); }
| b_expr '+' b_expr
| b_expr '+' b_expr
{ $$ = cat3_str($1, make1_str("+"), $3); }
{ $$ = cat3_str($1, make1_str("+"), $3); }
| b_expr '-' b_expr
| b_expr '-' b_expr
{ $$ = cat3_str($1, make1_str("-"), $3); }
{ $$ = cat3_str($1, make1_str("-"), $3); }
| b_expr '*' b_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| b_expr '/' b_expr
| b_expr '/' b_expr
{ $$ = cat3_str($1, make1_str("/"), $3); }
{ $$ = cat3_str($1, make1_str("/"), $3); }
| b_expr '%' b_expr
| b_expr '%' b_expr
{ $$ = cat3_str($1, make1_str("%"), $3); }
{ $$ = cat3_str($1, make1_str("%"), $3); }
| b_expr '*' b_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| b_expr '^' b_expr
| b_expr '^' b_expr
{ $$ = cat3_str($1, make1_str("^"), $3); }
{ $$ = cat3_str($1, make1_str("^"), $3); }
/* not possible in embedded sql | ':' b_expr
| b_expr '|' b_expr
{ $$ = cat2_str(make1_str(":"), $2); }
{ $$ = cat3_str($1, make1_str("|"), $3); }
*/
| ';' b_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| '|' b_expr
{ $$ = cat2_str(make1_str("|"), $2); }
| b_expr TYPECAST Typename
| b_expr TYPECAST Typename
{
{
$$ = cat3_str($1, make1_str("::"), $3);
$$ = cat3_str($1, make1_str("::"), $3);
...
@@ -4283,10 +4196,13 @@ ColId: ident { $$ = $1; }
...
@@ -4283,10 +4196,13 @@ ColId: ident { $$ = $1; }
| BEFORE { $$ = make1_str("before"); }
| BEFORE { $$ = make1_str("before"); }
| CACHE { $$ = make1_str("cache"); }
| CACHE { $$ = make1_str("cache"); }
| COMMITTED { $$ = make1_str("committed"); }
| COMMITTED { $$ = make1_str("committed"); }
| CONSTRAINTS { $$ = make1_str("constraints"); }
| CREATEDB { $$ = make1_str("createdb"); }
| CREATEDB { $$ = make1_str("createdb"); }
| CREATEUSER { $$ = make1_str("createuser"); }
| CREATEUSER { $$ = make1_str("createuser"); }
| CYCLE { $$ = make1_str("cycle"); }
| CYCLE { $$ = make1_str("cycle"); }
| DATABASE { $$ = make1_str("database"); }
| DATABASE { $$ = make1_str("database"); }
| DEFERRABLE { $$ = make1_str("deferrable"); }
| DEFERRED { $$ = make1_str("deferred"); }
| DELIMITERS { $$ = make1_str("delimiters"); }
| DELIMITERS { $$ = make1_str("delimiters"); }
| DOUBLE { $$ = make1_str("double"); }
| DOUBLE { $$ = make1_str("double"); }
| EACH { $$ = make1_str("each"); }
| EACH { $$ = make1_str("each"); }
...
@@ -4295,9 +4211,11 @@ ColId: ident { $$ = $1; }
...
@@ -4295,9 +4211,11 @@ ColId: ident { $$ = $1; }
| FORWARD { $$ = make1_str("forward"); }
| FORWARD { $$ = make1_str("forward"); }
| FUNCTION { $$ = make1_str("function"); }
| FUNCTION { $$ = make1_str("function"); }
| HANDLER { $$ = make1_str("handler"); }
| HANDLER { $$ = make1_str("handler"); }
| IMMEDIATE { $$ = make1_str("immediate"); }
| INCREMENT { $$ = make1_str("increment"); }
| INCREMENT { $$ = make1_str("increment"); }
| INDEX { $$ = make1_str("index"); }
| INDEX { $$ = make1_str("index"); }
| INHERITS { $$ = make1_str("inherits"); }
| INHERITS { $$ = make1_str("inherits"); }
| INITIALLY { $$ = make1_str("initially"); }
| INSENSITIVE { $$ = make1_str("insensitive"); }
| INSENSITIVE { $$ = make1_str("insensitive"); }
| INSTEAD { $$ = make1_str("instead"); }
| INSTEAD { $$ = make1_str("instead"); }
| ISNULL { $$ = make1_str("isnull"); }
| ISNULL { $$ = make1_str("isnull"); }
...
@@ -4322,13 +4240,14 @@ ColId: ident { $$ = $1; }
...
@@ -4322,13 +4240,14 @@ ColId: ident { $$ = $1; }
| OPERATOR { $$ = make1_str("operator"); }
| OPERATOR { $$ = make1_str("operator"); }
| OPTION { $$ = make1_str("option"); }
| OPTION { $$ = make1_str("option"); }
| PASSWORD { $$ = make1_str("password"); }
| PASSWORD { $$ = make1_str("password"); }
| PENDANT { $$ = make1_str("pendant"); }
| PRIOR { $$ = make1_str("prior"); }
| PRIOR { $$ = make1_str("prior"); }
| PRIVILEGES { $$ = make1_str("privileges"); }
| PRIVILEGES { $$ = make1_str("privileges"); }
| PROCEDURAL { $$ = make1_str("procedural"); }
| PROCEDURAL { $$ = make1_str("procedural"); }
| READ { $$ = make1_str("read"); }
| READ { $$ = make1_str("read"); }
/* NOT USED | RECIPE { $$ = make1_str("recipe"); } */
| RELATIVE { $$ = make1_str("relative"); }
| RELATIVE { $$ = make1_str("relative"); }
| RENAME { $$ = make1_str("rename"); }
| RENAME { $$ = make1_str("rename"); }
| RESTRICT { $$ = make1_str("restrict"); }
| RETURNS { $$ = make1_str("returns"); }
| RETURNS { $$ = make1_str("returns"); }
| ROW { $$ = make1_str("row"); }
| ROW { $$ = make1_str("row"); }
| RULE { $$ = make1_str("rule"); }
| RULE { $$ = make1_str("rule"); }
...
@@ -4363,7 +4282,6 @@ ColId: ident { $$ = $1; }
...
@@ -4363,7 +4282,6 @@ ColId: ident { $$ = $1; }
| SQL_GO { $$ = make1_str("go"); }
| SQL_GO { $$ = make1_str("go"); }
| SQL_GOTO { $$ = make1_str("goto"); }
| SQL_GOTO { $$ = make1_str("goto"); }
| SQL_IDENTIFIED { $$ = make1_str("identified"); }
| SQL_IDENTIFIED { $$ = make1_str("identified"); }
| SQL_IMMEDIATE { $$ = make1_str("immediate"); }
| SQL_INDICATOR { $$ = make1_str("indicator"); }
| SQL_INDICATOR { $$ = make1_str("indicator"); }
| SQL_INT { $$ = make1_str("int"); }
| SQL_INT { $$ = make1_str("int"); }
| SQL_LONG { $$ = make1_str("long"); }
| SQL_LONG { $$ = make1_str("long"); }
...
@@ -4940,7 +4858,7 @@ connection_object: connection_target { $$ = $1; }
...
@@ -4940,7 +4858,7 @@ connection_object: connection_target { $$ = $1; }
/*
/*
* execute a given string as sql command
* execute a given string as sql command
*/
*/
ECPGExecute : EXECUTE
SQL_
IMMEDIATE execstring
ECPGExecute : EXECUTE IMMEDIATE execstring
{
{
struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
...
@@ -5484,22 +5402,30 @@ ecpg_expr: attr
...
@@ -5484,22 +5402,30 @@ ecpg_expr: attr
{ $$ = cat2_str(make1_str("%"), $2); }
{ $$ = cat2_str(make1_str("%"), $2); }
| '^' ecpg_expr
| '^' ecpg_expr
{ $$ = cat2_str(make1_str("^"), $2); }
{ $$ = cat2_str(make1_str("^"), $2); }
| ';' ecpg_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| '|' ecpg_expr
{ $$ = cat2_str(make1_str("|"), $2); }
| a_expr '%'
| a_expr '%'
{ $$ = cat2_str($1, make1_str("%")); }
{ $$ = cat2_str($1, make1_str("%")); }
| a_expr '^'
| a_expr '^'
{ $$ = cat2_str($1, make1_str("^")); }
{ $$ = cat2_str($1, make1_str("^")); }
| a_expr '|'
{ $$ = cat2_str($1, make1_str("|")); }
| a_expr '+' ecpg_expr
| a_expr '+' ecpg_expr
{ $$ = cat3_str($1, make1_str("+"), $3); }
{ $$ = cat3_str($1, make1_str("+"), $3); }
| a_expr '-' ecpg_expr
| a_expr '-' ecpg_expr
{ $$ = cat3_str($1, make1_str("-"), $3); }
{ $$ = cat3_str($1, make1_str("-"), $3); }
| a_expr '*' ecpg_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| a_expr '/' ecpg_expr
| a_expr '/' ecpg_expr
{ $$ = cat3_str($1, make1_str("/"), $3); }
{ $$ = cat3_str($1, make1_str("/"), $3); }
| a_expr '%' ecpg_expr
| a_expr '%' ecpg_expr
{ $$ = cat3_str($1, make1_str("%"), $3); }
{ $$ = cat3_str($1, make1_str("%"), $3); }
| a_expr '*' ecpg_expr
{ $$ = cat3_str($1, make1_str("*"), $3); }
| a_expr '^' ecpg_expr
| a_expr '^' ecpg_expr
{ $$ = cat3_str($1, make1_str("^"), $3); }
{ $$ = cat3_str($1, make1_str("^"), $3); }
| a_expr '|' ecpg_expr
{ $$ = cat3_str($1, make1_str("|"), $3); }
| a_expr '<' ecpg_expr
| a_expr '<' ecpg_expr
{ $$ = cat3_str($1, make1_str("<"), $3); }
{ $$ = cat3_str($1, make1_str("<"), $3); }
| a_expr '>' ecpg_expr
| a_expr '>' ecpg_expr
...
@@ -5510,12 +5436,6 @@ ecpg_expr: attr
...
@@ -5510,12 +5436,6 @@ ecpg_expr: attr
{ $$ = cat2_str(make1_str("= NULL"), $3); }
{ $$ = cat2_str(make1_str("= NULL"), $3); }
| a_expr '=' ecpg_expr
| a_expr '=' ecpg_expr
{ $$ = cat3_str($1, make1_str("="), $3); }
{ $$ = cat3_str($1, make1_str("="), $3); }
/* | ':' ecpg_expr
{ $$ = cat2_str(make1_str(":"), $2); }*/
| ';' ecpg_expr
{ $$ = cat2_str(make1_str(";"), $2); }
| '|' ecpg_expr
{ $$ = cat2_str(make1_str("|"), $2); }
| a_expr TYPECAST Typename
| a_expr TYPECAST Typename
{
{
$$ = cat3_str($1, make1_str("::"), $3);
$$ = cat3_str($1, make1_str("::"), $3);
...
@@ -5670,6 +5590,10 @@ ecpg_expr: attr
...
@@ -5670,6 +5590,10 @@ ecpg_expr: attr
{
{
$$ = make4_str($1, make1_str("-("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("-("), $4, make1_str(")"));
}
}
| a_expr '*' '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("*("), $4, make1_str(")"));
}
| a_expr '/' '(' SubSelect ')'
| a_expr '/' '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("/("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("/("), $4, make1_str(")"));
...
@@ -5678,9 +5602,13 @@ ecpg_expr: attr
...
@@ -5678,9 +5602,13 @@ ecpg_expr: attr
{
{
$$ = make4_str($1, make1_str("%("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("%("), $4, make1_str(")"));
}
}
| a_expr '
*
' '(' SubSelect ')'
| a_expr '
^
' '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("*("), $4, make1_str(")"));
$$ = make4_str($1, make1_str("^("), $4, make1_str(")"));
}
| a_expr '|' '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("|("), $4, make1_str(")"));
}
}
| a_expr '<' '(' SubSelect ')'
| a_expr '<' '(' SubSelect ')'
{
{
...
@@ -5706,6 +5634,10 @@ ecpg_expr: attr
...
@@ -5706,6 +5634,10 @@ ecpg_expr: attr
{
{
$$ = make4_str($1, make1_str("- any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("- any("), $5, make1_str(")"));
}
}
| a_expr '*' ANY '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("* any("), $5, make1_str(")"));
}
| a_expr '/' ANY '(' SubSelect ')'
| a_expr '/' ANY '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("/ any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("/ any("), $5, make1_str(")"));
...
@@ -5714,9 +5646,13 @@ ecpg_expr: attr
...
@@ -5714,9 +5646,13 @@ ecpg_expr: attr
{
{
$$ = make4_str($1, make1_str("% any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("% any("), $5, make1_str(")"));
}
}
| a_expr '
*
' ANY '(' SubSelect ')'
| a_expr '
^
' ANY '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("* any("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("^ any("), $5, make1_str(")"));
}
| a_expr '|' ANY '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("| any("), $5, make1_str(")"));
}
}
| a_expr '<' ANY '(' SubSelect ')'
| a_expr '<' ANY '(' SubSelect ')'
{
{
...
@@ -5742,6 +5678,10 @@ ecpg_expr: attr
...
@@ -5742,6 +5678,10 @@ ecpg_expr: attr
{
{
$$ = make4_str($1, make1_str("- all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("- all("), $5, make1_str(")"));
}
}
| a_expr '*' ALL '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("* all("), $5, make1_str(")"));
}
| a_expr '/' ALL '(' SubSelect ')'
| a_expr '/' ALL '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("/ all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("/ all("), $5, make1_str(")"));
...
@@ -5750,9 +5690,13 @@ ecpg_expr: attr
...
@@ -5750,9 +5690,13 @@ ecpg_expr: attr
{
{
$$ = make4_str($1, make1_str("% all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("% all("), $5, make1_str(")"));
}
}
| a_expr '
*
' ALL '(' SubSelect ')'
| a_expr '
^
' ALL '(' SubSelect ')'
{
{
$$ = make4_str($1, make1_str("* all("), $5, make1_str(")"));
$$ = make4_str($1, make1_str("^ all("), $5, make1_str(")"));
}
| a_expr '|' ALL '(' SubSelect ')'
{
$$ = make4_str($1, make1_str("| all("), $5, make1_str(")"));
}
}
| a_expr '<' ALL '(' SubSelect ')'
| a_expr '<' ALL '(' SubSelect ')'
{
{
...
@@ -5809,7 +5753,7 @@ indicator: /* empty */ { $$ = NULL; }
...
@@ -5809,7 +5753,7 @@ indicator: /* empty */ { $$ = NULL; }
| SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
| SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; }
ident: IDENT { $$ = $1; }
ident: IDENT { $$ = $1; }
| CSTRING { $$ =
$1; }
| CSTRING { $$ =
make3_str(make1_str("\""), $1, make1_str("\"")); };
/*
/*
* C stuff
* C stuff
*/
*/
...
...
src/interfaces/ecpg/test/test1.pgc
View file @
a4f59da1
...
@@ -35,8 +35,8 @@ exec sql end declare section;
...
@@ -35,8 +35,8 @@ exec sql end declare section;
exec sql connect to pm;
exec sql connect to pm;
strcpy(msg, "create");
strcpy(msg, "create");
exec sql at main create table
test
(name char(8), amount int, letter char(1));
exec sql at main create table
"Test"
(name char(8), amount int, letter char(1));
exec sql create table
test
(name char(8), amount int, letter char(1));
exec sql create table
"Test"
(name char(8), amount int, letter char(1));
strcpy(msg, "commit");
strcpy(msg, "commit");
exec sql at main commit;
exec sql at main commit;
...
@@ -46,25 +46,25 @@ exec sql end declare section;
...
@@ -46,25 +46,25 @@ exec sql end declare section;
exec sql set connection to main;
exec sql set connection to main;
strcpy(msg, "execute insert 1");
strcpy(msg, "execute insert 1");
sprintf(command, "insert into
test
(name, amount, letter) values ('db: ''mm''', 1, 'f')");
sprintf(command, "insert into
\"Test\"
(name, amount, letter) values ('db: ''mm''', 1, 'f')");
exec sql execute immediate :command;
exec sql execute immediate :command;
printf("New tuple got OID = %d\n", sqlca.sqlerrd[1]);
printf("New tuple got OID = %d\n", sqlca.sqlerrd[1]);
sprintf(command, "insert into
test
(name, amount, letter) values ('db: \\\'mm\\\'', 2, 't')");
sprintf(command, "insert into
\"Test\"
(name, amount, letter) values ('db: \\\'mm\\\'', 2, 't')");
exec sql execute immediate :command;
exec sql execute immediate :command;
strcpy(msg, "execute insert 2");
strcpy(msg, "execute insert 2");
sprintf(command, "insert into
test
(name, amount, letter) values ('db: ''pm''', 1, 'f')");
sprintf(command, "insert into
\"Test\"
(name, amount, letter) values ('db: ''pm''', 1, 'f')");
exec sql at pm execute immediate :command;
exec sql at pm execute immediate :command;
strcpy(msg, "execute insert 3");
strcpy(msg, "execute insert 3");
sprintf(command, "insert into
test(name, amount, letter) select name, amount+10, letter from test
");
sprintf(command, "insert into
\"Test\" (name, amount, letter) select name, amount+10, letter from \"Test\"
");
exec sql execute immediate :command;
exec sql execute immediate :command;
printf("Inserted %d tuples via execute immediate\n", sqlca.sqlerrd[2]);
printf("Inserted %d tuples via execute immediate\n", sqlca.sqlerrd[2]);
strcpy(msg, "execute insert 4");
strcpy(msg, "execute insert 4");
sprintf(command, "insert into
test(name, amount, letter) select name, amount+?, letter from test
");
sprintf(command, "insert into
\"Test\" (name, amount, letter) select name, amount+?, letter from \"Test\"
");
exec sql prepare I from :command;
exec sql prepare I from :command;
exec sql at pm execute I using :increment;
exec sql at pm execute I using :increment;
...
@@ -77,19 +77,19 @@ exec sql end declare section;
...
@@ -77,19 +77,19 @@ exec sql end declare section;
exec sql at pm set autocommit to off;
exec sql at pm set autocommit to off;
strcpy(msg, "select");
strcpy(msg, "select");
exec sql select name, amount, letter into :name, :amount, :letter from
test
;
exec sql select name, amount, letter into :name, :amount, :letter from
"Test"
;
for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]);
printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]);
exec sql at pm select name, amount, letter into :name, :amount, :letter from
test
;
exec sql at pm select name, amount, letter into :name, :amount, :letter from
"Test"
;
for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]);
printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, name[i], i, amount[i],i, letter[i][0]);
strcpy(msg, "drop");
strcpy(msg, "drop");
exec sql drop table
test
;
exec sql drop table
"Test"
;
exec sql at pm drop table
test
;
exec sql at pm drop table
"Test"
;
strcpy(msg, "commit");
strcpy(msg, "commit");
exec sql commit;
exec sql commit;
...
...
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