Skip to content

Commit c8bd630

Browse files
author
Michael Meskes
committed
*** empty log message ***
1 parent 564842a commit c8bd630

File tree

3 files changed

+57
-102
lines changed

3 files changed

+57
-102
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,10 @@ Fri Mai 7 07:11:38 CEST 1999
574574

575575
- Synced preproc.y with gram.y.
576576
- Fixed small bug in parser.
577+
578+
Thu Mai 13 13:51:26 CEST 1999
579+
580+
- Synced preproc.y with gram.y.
577581
- Set library version to 3.0.0
578582
- Set ecpg version to 2.6.0
579583

src/interfaces/ecpg/preproc/preproc.y

Lines changed: 52 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
683683
DAY_P, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISTINCT, DOUBLE, DROP,
684684
ELSE, END_TRANS, EXCEPT, EXECUTE, EXISTS, EXTRACT,
685685
FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
686-
GRANT, GROUP, HAVING, HOUR_P,
686+
GLOBAL, GRANT, GROUP, HAVING, HOUR_P,
687687
IN, INNER_P, INSENSITIVE, INSERT, INTERSECT, INTERVAL, INTO, IS,
688688
ISOLATION, JOIN, KEY, LANGUAGE, LEADING, LEFT, LEVEL, LIKE, LOCAL,
689689
MATCH, MINUTE_P, MONTH_P, NAMES,
@@ -702,24 +702,28 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
702702
%token TRIGGER
703703

704704
/* Keywords (in SQL92 non-reserved words) */
705-
%token TYPE_P
705+
%token COMMITTED, SERIALIZABLE, TYPE_P
706706

707707
/* Keywords for Postgres support (not in SQL92 reserved words)
708708
*
709709
* The CREATEDB and CREATEUSER tokens should go away
710710
* when some sort of pg_privileges relation is introduced.
711711
* - Todd A. Brandys 1998-01-01?
712712
*/
713-
%token ABORT_TRANS, AFTER, AGGREGATE, ANALYZE, BACKWARD, BEFORE, BINARY,
713+
%token ABORT_TRANS, ACCESS, AFTER, AGGREGATE, ANALYZE,
714+
BACKWARD, BEFORE, BINARY,
714715
CACHE, CLUSTER, COPY, CREATEDB, CREATEUSER, CYCLE,
715-
DATABASE, DELIMITERS, DO, EACH, ENCODING, EXPLAIN, EXTEND,
716+
DATABASE, DELIMITERS, DO,
717+
EACH, ENCODING, EXCLUSIVE, EXPLAIN, EXTEND,
716718
FORWARD, FUNCTION, HANDLER,
717719
INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
718-
LANCOMPILER, LIMIT, LISTEN, UNLISTEN, LOAD, LOCATION, LOCK_P, MAXVALUE, MINVALUE, MOVE,
720+
LANCOMPILER, LIMIT, LISTEN, UNLISTEN, LOAD, LOCATION, LOCK_P,
721+
MAXVALUE, MINVALUE, MODE, MOVE,
719722
NEW, NOCREATEDB, NOCREATEUSER, NONE, NOTHING, NOTIFY, NOTNULL,
720723
OFFSET, OIDS, OPERATOR, PASSWORD, PROCEDURAL,
721724
RENAME, RESET, RETURNS, ROW, RULE,
722-
SERIAL, SEQUENCE, SETOF, SHOW, START, STATEMENT, STDIN, STDOUT, TRUSTED,
725+
SERIAL, SEQUENCE, SETOF, SHARE, SHOW, START, STATEMENT, STDIN, STDOUT,
726+
TRUSTED,
723727
UNLISTEN, UNTIL, VACUUM, VALID, VERBOSE, VERSION
724728

725729
/* Special keywords, not in the query language - see the "lex" file */
@@ -776,7 +780,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
776780
%type <str> opt_decimal Character character opt_varying opt_charset
777781
%type <str> opt_collate Datetime datetime opt_timezone opt_interval
778782
%type <str> numeric a_expr_or_null row_expr row_descriptor row_list
779-
%type <str> SelectStmt SubSelect result OptTemp
783+
%type <str> SelectStmt SubSelect result OptTemp OptTempType OptTempScope
780784
%type <str> opt_table opt_union opt_unique sort_clause sortby_list
781785
%type <str> sortby OptUseOp opt_inh_star relation_name_list name_list
782786
%type <str> group_clause having_clause from_clause c_list
@@ -812,10 +816,11 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
812816
%type <str> GrantStmt privileges operation_commalist operation
813817
%type <str> cursor_clause opt_cursor opt_readonly opt_of opt_lmode
814818
%type <str> case_expr when_clause_list case_default case_arg when_clause
815-
%type <str> select_clause opt_select_limit select_limit_value,
819+
%type <str> select_clause opt_select_limit select_limit_value
816820
%type <str> select_offset_value table_list using_expr join_expr
817821
%type <str> using_list from_expr table_expr join_clause join_type
818822
%type <str> join_qual update_list join_clause join_clause_with_union
823+
%type <str> opt_level opt_lock lock_type
819824

820825
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen opt_using
821826
%type <str> indicator ECPGExecute ecpg_expr dotext ECPGPrepare
@@ -1126,25 +1131,9 @@ VariableSetStmt: SET ColId TO var_value
11261131
{
11271132
$$ = cat2_str(make1_str("set time zone"), $4);
11281133
}
1129-
| SET TRANSACTION ISOLATION LEVEL READ ColId
1134+
| SET TRANSACTION ISOLATION LEVEL opt_level
11301135
{
1131-
if (strcasecmp($6, "COMMITTED"))
1132-
{
1133-
sprintf(errortext, "syntax error at or near \"%s\"", $6);
1134-
yyerror(errortext);
1135-
}
1136-
1137-
$$ = cat2_str(make1_str("set transaction isolation level read"), $6);
1138-
}
1139-
| SET TRANSACTION ISOLATION LEVEL ColId
1140-
{
1141-
if (strcasecmp($5, "SERIALIZABLE"))
1142-
{
1143-
sprintf(errortext, "syntax error at or near \"%s\"", $5);
1144-
yyerror(errortext);
1145-
}
1146-
1147-
$$ = cat2_str(make1_str("set transaction isolation level read"), $5);
1136+
$$ = cat2_str(make1_str("set transaction isolation level"), $5);
11481137
}
11491138
| SET NAMES encoding
11501139
{
@@ -1156,6 +1145,11 @@ VariableSetStmt: SET ColId TO var_value
11561145
}
11571146
;
11581147

1148+
opt_level: READ COMMITTED { $$ = make1_str("read committed"); }
1149+
| SERIALIZABLE { $$ = make1_str("serializable"); }
1150+
;
1151+
1152+
11591153
var_value: Sconst { $$ = $1; }
11601154
| DEFAULT { $$ = make1_str("default"); }
11611155
;
@@ -1300,11 +1294,24 @@ CreateStmt: CREATE OptTemp TABLE relation_name '(' OptTableElementList ')'
13001294
}
13011295
;
13021296

1303-
OptTemp: TEMP { $$ = make1_str("temp"); }
1297+
OptTemp: OptTempType { $$ = $1; }
1298+
| OptTempScope OptTempType { $$ = cat2_str($1,$2); }
1299+
;
1300+
1301+
OptTempType: TEMP { $$ = make1_str("temp"); }
13041302
| TEMPORARY { $$ = make1_str("temporary"); }
13051303
| /* EMPTY */ { $$ = make1_str(""); }
13061304
;
13071305

1306+
OptTempScope: GLOBAL
1307+
{
1308+
yyerror("GLOBAL TEMPORARY TABLE is not currently supported");
1309+
$$ = make1_str("global");
1310+
}
1311+
| LOCAL { $$ = make1_str("local"); }
1312+
;
1313+
1314+
13081315
OptTableElementList: OptTableElementList ',' OptTableElement
13091316
{
13101317
$$ = cat3_str($1, make1_str(","), $3);
@@ -2674,84 +2681,25 @@ DeleteStmt: DELETE FROM relation_name
26742681
}
26752682
;
26762683

2677-
LockStmt: LOCK_P opt_table relation_name
2678-
{
2679-
$$ = cat3_str(make1_str("lock"), $2, $3);
2680-
}
2681-
| LOCK_P opt_table relation_name IN opt_lmode ROW IDENT IDENT
2682-
{
2683-
if (strcasecmp($8, "MODE"))
2684-
{
2685-
sprintf(errortext, "syntax error at or near \"%s\"", $8);
2686-
yyerror(errortext);
2687-
}
2688-
if ($5 != NULL)
2689-
{
2690-
if (strcasecmp($5, "SHARE"))
2691-
{
2692-
sprintf(errortext, "syntax error at or near \"%s\"", $5);
2693-
yyerror(errortext);
2694-
}
2695-
if (strcasecmp($7, "EXCLUSIVE"))
2696-
{
2697-
sprintf(errortext, "syntax error at or near \"%s\"", $7);
2698-
yyerror(errortext);
2699-
}
2700-
}
2701-
else
2702-
{
2703-
if (strcasecmp($7, "SHARE") && strcasecmp($7, "EXCLUSIVE"))
2704-
{
2705-
sprintf(errortext, "syntax error at or near \"%s\"", $7);
2706-
yyerror(errortext);
2707-
}
2708-
}
2709-
2710-
$$=cat4_str(cat5_str(make1_str("lock"), $2, $3, make1_str("in"), $5), make1_str("row"), $7, $8);
2711-
}
2712-
| LOCK_P opt_table relation_name IN IDENT IDENT IDENT
2713-
{
2714-
if (strcasecmp($7, "MODE"))
2715-
{
2716-
sprintf(errortext, "syntax error at or near \"%s\"", $7);
2717-
yyerror(errortext);
2718-
}
2719-
if (strcasecmp($5, "ACCESS"))
2720-
{
2721-
sprintf(errortext, "syntax error at or near \"%s\"", $5);
2722-
yyerror(errortext);
2723-
}
2724-
if (strcasecmp($6, "SHARE") && strcasecmp($6, "EXCLUSIVE"))
2725-
{
2726-
sprintf(errortext, "syntax error at or near \"%s\"", $6);
2727-
yyerror(errortext);
2728-
}
2729-
2730-
$$=cat3_str(cat5_str(make1_str("lock"), $2, $3, make1_str("in"), $5), $6, $7);
2731-
}
2732-
| LOCK_P opt_table relation_name IN IDENT IDENT
2684+
LockStmt: LOCK_P opt_table relation_name opt_lock
27332685
{
2734-
if (strcasecmp($6, "MODE"))
2735-
{
2736-
sprintf(errortext, "syntax error at or near \"%s\"", $6);
2737-
yyerror(errortext);
2738-
}
2739-
if (strcasecmp($5, "SHARE") && strcasecmp($5, "EXCLUSIVE"))
2740-
{
2741-
sprintf(errortext, "syntax error at or near \"%s\"", $5);
2742-
yyerror(errortext);
2743-
}
2744-
2745-
$$=cat2_str(cat5_str(make1_str("lock"), $2, $3, make1_str("in"), $5), $6);
2686+
$$ = cat4_str(make1_str("lock"), $2, $3, $4);
27462687
}
27472688
;
27482689

2749-
opt_lmode: IDENT { $$ = $1; }
2750-
| /*EMPTY*/ { $$ = make1_str(""); }
2690+
opt_lock: lock_type MODE { $$ = cat2_str($1, make1_str("mode")); }
2691+
| /*EMPTY*/ { $$ = make1_str("");}
27512692
;
27522693

2694+
lock_type: SHARE ROW EXCLUSIVE { $$ = make1_str("share row exclusive"); }
2695+
| ROW opt_lmode { $$ = cat2_str(make1_str("row"), $2);}
2696+
| ACCESS opt_lmode { $$ = cat2_str(make1_str("access"), $2);}
2697+
| opt_lmode { $$ = $1; }
2698+
;
27532699

2754-
2700+
opt_lmode: SHARE { $$ = make1_str("share"); }
2701+
| EXCLUSIVE { $$ = make1_str("exclusive"); }
2702+
;
27552703

27562704
/*****************************************************************************
27572705
*
@@ -3397,9 +3345,6 @@ opt_decimal: '(' Iconst ',' Iconst ')'
33973345

33983346
/* SQL92 character data types
33993347
* The following implements CHAR() and VARCHAR().
3400-
* We do it here instead of the 'Generic' production
3401-
* because we don't want to allow arrays of VARCHAR().
3402-
* I haven't thought about whether that will work or not.
34033348
* - ay 6/95
34043349
*/
34053350
Character: character '(' Iconst ')'
@@ -4427,12 +4372,14 @@ TypeId: ColId
44274372
ColId: ident { $$ = $1; }
44284373
| datetime { $$ = $1; }
44294374
| ABSOLUTE { $$ = make1_str("absolute"); }
4375+
| ACCESS { $$ = make1_str("access"); }
44304376
| ACTION { $$ = make1_str("action"); }
44314377
| AFTER { $$ = make1_str("after"); }
44324378
| AGGREGATE { $$ = make1_str("aggregate"); }
44334379
| BACKWARD { $$ = make1_str("backward"); }
44344380
| BEFORE { $$ = make1_str("before"); }
44354381
| CACHE { $$ = make1_str("cache"); }
4382+
| COMMITTED { $$ = make1_str("committed"); }
44364383
| CREATEDB { $$ = make1_str("createdb"); }
44374384
| CREATEUSER { $$ = make1_str("createuser"); }
44384385
| CYCLE { $$ = make1_str("cycle"); }
@@ -4441,6 +4388,7 @@ ColId: ident { $$ = $1; }
44414388
| DOUBLE { $$ = make1_str("double"); }
44424389
| EACH { $$ = make1_str("each"); }
44434390
| ENCODING { $$ = make1_str("encoding"); }
4391+
| EXCLUSIVE { $$ = make1_str("exclusive"); }
44444392
| FORWARD { $$ = make1_str("forward"); }
44454393
| FUNCTION { $$ = make1_str("function"); }
44464394
| HANDLER { $$ = make1_str("handler"); }
@@ -4457,6 +4405,7 @@ ColId: ident { $$ = $1; }
44574405
| MATCH { $$ = make1_str("match"); }
44584406
| MAXVALUE { $$ = make1_str("maxvalue"); }
44594407
| MINVALUE { $$ = make1_str("minvalue"); }
4408+
| MODE { $$ = make1_str("mode"); }
44604409
| NEXT { $$ = make1_str("next"); }
44614410
| NOCREATEDB { $$ = make1_str("nocreatedb"); }
44624411
| NOCREATEUSER { $$ = make1_str("nocreateuser"); }
@@ -4481,6 +4430,8 @@ ColId: ident { $$ = $1; }
44814430
| SCROLL { $$ = make1_str("scroll"); }
44824431
| SEQUENCE { $$ = make1_str("sequence"); }
44834432
| SERIAL { $$ = make1_str("serial"); }
4433+
| SERIALIZABLE { $$ = make1_str("serializable"); }
4434+
| SHARE { $$ = make1_str("share"); }
44844435
| START { $$ = make1_str("start"); }
44854436
| STATEMENT { $$ = make1_str("statement"); }
44864437
| STDIN { $$ = make1_str("stdin"); }

src/interfaces/ecpg/test/test3.pgc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ exec sql end declare section;
7474
exec sql close cur;
7575

7676
/* and now the same query with prepare */
77-
exec sql prepare MM from :query;
77+
exec sql prepare MM from "select name, born, age, married, children from meskes where name = ?";
7878
exec sql declare prep cursor for MM;
7979

8080
strcpy(msg, "open");

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy