Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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)