1
- /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.190.2.5 2002/09/01 09:31:58 meskes Exp $*/
1
+ /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.190.2.6 2002/09/11 08:50:29 meskes Exp $*/
2
2
3
3
/* Copyright comment*/
4
4
%{
@@ -155,12 +155,12 @@ make_name(void)
155
155
SQL_CALL SQL_CARDINALITY SQL_CONNECT SQL_CONNECTION
156
156
SQL_CONTINUE SQL_COUNT SQL_CURRENT SQL_DATA
157
157
SQL_DATETIME_INTERVAL_CODE
158
- SQL_DATETIME_INTERVAL_PRECISION SQL_DEALLOCATE
158
+ SQL_DATETIME_INTERVAL_PRECISION
159
159
SQL_DESCRIPTOR SQL_DISCONNECT SQL_ENUM SQL_FOUND
160
160
SQL_FREE SQL_GO SQL_GOTO SQL_IDENTIFIED
161
161
SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH
162
162
SQL_LONG SQL_NAME SQL_NULLABLE SQL_OCTET_LENGTH
163
- SQL_OPEN SQL_PREPARE SQL_RELEASE SQL_REFERENCE
163
+ SQL_OPEN SQL_RELEASE SQL_REFERENCE
164
164
SQL_RETURNED_LENGTH SQL_RETURNED_OCTET_LENGTH SQL_SCALE
165
165
SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQL SQL_SQLERROR
166
166
SQL_SQLPRINT SQL_SQLWARNING SQL_START SQL_STOP
@@ -257,7 +257,6 @@ make_name(void)
257
257
/* precedence: lowest to highest*/
258
258
%left UNION EXCEPT
259
259
%left INTERSECT
260
- %left JOIN UNIONJOIN CROSS LEFT FULL RIGHT INNER_P NATURAL
261
260
%left OR
262
261
%left AND
263
262
%right NOT
@@ -266,7 +265,7 @@ make_name(void)
266
265
%nonassoc LIKE ILIKE SIMILAR
267
266
%nonassoc ESCAPE
268
267
%nonassoc OVERLAPS
269
- %nonassoc BETWEEN DISTINCT
268
+ %nonassoc BETWEEN
270
269
%nonassoc IN_P
271
270
%left POSTFIXOP /* dummy for postfix Op rules*/
272
271
%left Op OPERATOR /* multi-character ops and user-defined operators*/
@@ -283,6 +282,7 @@ make_name(void)
283
282
%left ' (' ' )'
284
283
%left TYPECAST
285
284
%left ' .'
285
+ %left JOIN UNIONJOIN CROSS LEFT FULL RIGHT INNER_P NATURAL
286
286
287
287
%type <str> Iconst Fconst Sconst TransactionStmt CreateStmt UserId
288
288
%type <str> CreateAsElement OptCreateAs CreateAsList CreateAsStmt
@@ -371,14 +371,14 @@ make_name(void)
371
371
%type <str> execute_param_list opt_sort_clause
372
372
373
373
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
374
- %type <str> indicator ECPGExecute ECPGPrepare ecpg_using ecpg_into
374
+ %type <str> indicator ECPGExecute ECPGPrepare opt_ecpg_using ecpg_into
375
375
%type <str> storage_clause opt_initializer c_anything
376
376
%type <str> variable_list variable c_thing c_term
377
377
%type <str> opt_pointer ECPGDisconnect dis_name storage_modifier
378
378
%type <str> stmt ECPGRelease execstring server_name
379
379
%type <str> connection_object opt_server opt_port c_stuff c_stuff_item
380
380
%type <str> user_name opt_user char_variable ora_user ident opt_reference
381
- %type <str> quoted_ident_stringvar var_type_declarations
381
+ %type <str> var_type_declarations quoted_ident_stringvar
382
382
%type <str> db_prefix server opt_options opt_connection_name c_list
383
383
%type <str> ECPGSetConnection ECPGTypedef c_args ECPGKeywords
384
384
%type <str> enum_type civar civarind ECPGCursorStmt ECPGDeallocate
@@ -2085,13 +2085,13 @@ opt_column: COLUMN{ $$ = make_str("column"); }
2085
2085
*
2086
2086
*****************************************************************************/
2087
2087
2088
- RuleStmt :CREATE RULE name AS
2088
+ RuleStmt :CREATE opt_or_replace RULE name AS
2089
2089
{ QueryIsRule=1 ; }
2090
2090
ON event TO qualified_name where_clause
2091
2091
DO opt_instead RuleActionList
2092
2092
{
2093
2093
QueryIsRule=0 ;
2094
- $$ = cat_str(10 , make_str(" create rule" ),$3 , make_str(" as on" ),$7 , make_str(" to" ),$9 ,$10 , make_str(" do" ),$12 ,$13 );
2094
+ $$ = cat_str(12 , make_str(" create" ), $2 , make_str( " rule" ),$4 , make_str(" as on" ),$8 , make_str(" to" ),$10 ,$11 , make_str(" do" ),$13 ,$14 );
2095
2095
}
2096
2096
;
2097
2097
@@ -2187,8 +2187,8 @@ opt_trans: WORK{ $$ = EMPTY; }
2187
2187
*
2188
2188
*****************************************************************************/
2189
2189
2190
- ViewStmt :CREATE VIEW qualified_name opt_column_list AS SelectStmt
2191
- {$$ = cat_str(5 , make_str(" create view" ),$3 ,$4 , make_str(" as" ),$6 ); }
2190
+ ViewStmt :CREATE opt_or_replace VIEW qualified_name opt_column_list AS SelectStmt
2191
+ {$$ = cat_str(7 , make_str(" create" ), $2 , make_str( " view" ),$4 ,$5 , make_str(" as" ),$7 ); }
2192
2192
;
2193
2193
2194
2194
@@ -3153,7 +3153,7 @@ r_expr: row IN_P select_with_parens
3153
3153
{$$ = cat2_str($1 , make_str(" is not null" )); }
3154
3154
| row OVERLAPS row
3155
3155
{$$ = cat_str(3 ,$1 , make_str(" overlaps" ),$3 ); }
3156
- | row IS DISTINCT FROM row
3156
+ | row IS DISTINCT FROM row % prec IS
3157
3157
{$$ = cat_str(3 ,$1 , make_str(" is distinct from" ),$5 ); }
3158
3158
;
3159
3159
@@ -3331,11 +3331,11 @@ a_expr: c_expr
3331
3331
{$$ = cat2_str($1 , make_str(" is unknown" )); }
3332
3332
| a_expr IS NOT UNKNOWN
3333
3333
{$$ = cat2_str($1 , make_str(" is not unknown" )); }
3334
- | a_expr IS DISTINCT FROM a_expr %prec DISTINCT
3334
+ | a_expr IS DISTINCT FROM a_expr %prec IS
3335
3335
{$$ = cat_str(3 ,$1 , make_str(" is distinct from" ),$5 ); }
3336
- | a_expr IS OF ' (' type_list ' )'
3336
+ | a_expr IS OF ' (' type_list ' )' % prec IS
3337
3337
{$$ = cat_str(4 ,$1 , make_str(" is of (" ),$5 , make_str(" )" )); }
3338
- | a_expr IS NOT OF ' (' type_list ' )'
3338
+ | a_expr IS NOT OF ' (' type_list ' )' % prec IS
3339
3339
{$$ = cat_str(4 ,$1 , make_str(" is not of (" ),$6 , make_str(" )" )); }
3340
3340
| a_expr BETWEEN b_expr AND b_expr %prec BETWEEN
3341
3341
{$$ = cat_str(5 ,$1 , make_str(" between" ),$3 , make_str(" and" ),$5 ); }
@@ -3399,11 +3399,11 @@ b_expr: c_expr
3399
3399
{$$ = cat2_str($1 ,$2 ); }
3400
3400
| b_expr qual_Op %prec POSTFIXOP
3401
3401
{$$ = cat2_str($1 ,$2 ); }
3402
- | b_expr IS DISTINCT FROM b_expr %prec Op
3402
+ | b_expr IS DISTINCT FROM b_expr %prec IS
3403
3403
{$$ = cat_str(3 ,$1 , make_str(" is distinct from" ),$5 ); }
3404
- | b_expr IS OF ' (' b_expr ' )'
3404
+ | b_expr IS OF ' (' b_expr ' )' % prec IS
3405
3405
{$$ = cat_str(4 ,$1 , make_str(" is of (" ),$5 , make_str(" )" )); }
3406
- | b_expr IS NOT OF ' (' b_expr ' )'
3406
+ | b_expr IS NOT OF ' (' b_expr ' )' % prec IS
3407
3407
{$$ = cat_str(4 ,$1 , make_str(" is not of (" ),$6 , make_str(" )" )); }
3408
3408
;
3409
3409
@@ -4111,7 +4111,7 @@ ECPGCursorStmt: DECLARE name opt_cursor CURSOR FOR ident
4111
4111
* the exec sql deallocate prepare command to deallocate a previously
4112
4112
* prepared statement
4113
4113
*/
4114
- ECPGDeallocate :SQL_DEALLOCATE SQL_PREPARE ident
4114
+ ECPGDeallocate :DEALLOCATE PREPARE ident
4115
4115
{$$ = cat_str(3 , make_str(" ECPGdeallocate(__LINE__,\" " ),$3 , make_str(" \" );" )); };
4116
4116
4117
4117
/*
@@ -4565,7 +4565,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
4565
4565
4566
4566
$$ = make_str(" ?" );
4567
4567
}
4568
- | EXECUTE ident
4568
+ | EXECUTE name
4569
4569
{
4570
4570
struct variable *thisquery = (struct variable *)mm_alloc(sizeof (struct variable ));
4571
4571
@@ -4577,7 +4577,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
4577
4577
4578
4578
add_variable (&argsinsert, thisquery, &no_indicator);
4579
4579
}
4580
- ecpg_using opt_ecpg_into
4580
+ opt_ecpg_using opt_ecpg_into
4581
4581
{
4582
4582
$$ = make_str(" ?" );
4583
4583
}
@@ -4593,14 +4593,14 @@ execstring: char_variable
4593
4593
* the exec sql free command to deallocate a previously
4594
4594
* prepared statement
4595
4595
*/
4596
- ECPGFree :SQL_FREE ident {$$ =$2 ; };
4596
+ ECPGFree :SQL_FREE name {$$ =$2 ; };
4597
4597
4598
4598
/*
4599
4599
* open is an open cursor, at the moment this has to be removed
4600
4600
*/
4601
- ECPGOpen :SQL_OPEN name ecpg_using {$$ =$2 ; };
4601
+ ECPGOpen :SQL_OPEN name opt_ecpg_using {$$ =$2 ; };
4602
4602
4603
- ecpg_using :/* EMPTY*/ {$$ = EMPTY; }
4603
+ opt_ecpg_using :/* EMPTY*/ {$$ = EMPTY; }
4604
4604
| USING variablelist
4605
4605
{
4606
4606
/* mmerror ("open cursor with variables not implemented yet");*/
@@ -4633,7 +4633,7 @@ variablelist: variable | variable ',' variablelist;
4633
4633
* As long as the prepare statement is not supported by the backend, we will
4634
4634
* try to simulate it here so we get dynamic SQL
4635
4635
*/
4636
- ECPGPrepare :SQL_PREPARE ident FROM execstring
4636
+ ECPGPrepare :PREPARE name FROM execstring
4637
4637
{$$ = cat2_str(make3_str(make_str(" \" " ),$2 , make_str(" \" ," )),$4 ); }
4638
4638
;
4639
4639
@@ -4645,7 +4645,7 @@ ECPGPrepare: SQL_PREPARE ident FROM execstring
4645
4645
/*
4646
4646
* deallocate a descriptor
4647
4647
*/
4648
- ECPGDeallocateDescr :SQL_DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
4648
+ ECPGDeallocateDescr :DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
4649
4649
{
4650
4650
drop_descriptor ($3 ,connection);
4651
4651
$$ =$3 ;
@@ -4704,8 +4704,7 @@ ECPGGetDescriptorHeader:GET SQL_DESCRIPTOR quoted_ident_stringvar
4704
4704
{$$ =$3 ; }
4705
4705
;
4706
4706
4707
- ECPGGetDescriptor :GET SQL_DESCRIPTOR quoted_ident_stringvar
4708
- SQL_VALUE CVARIABLE ECPGGetDescItems
4707
+ ECPGGetDescriptor :GET SQL_DESCRIPTOR quoted_ident_stringvar SQL_VALUE CVARIABLE ECPGGetDescItems
4709
4708
{$$ .str =$5 ;$$ .name =$3 ; }
4710
4709
| GET SQL_DESCRIPTOR quoted_ident_stringvar SQL_VALUE Iconst ECPGGetDescItems
4711
4710
{$$ .str =$5 ;$$ .name =$3 ; }
@@ -5010,7 +5009,6 @@ ECPGKeywords: SQL_BREAK{ $$ = make_str("break"); }
5010
5009
| SQL_DATA {$$ = make_str(" data" ); }
5011
5010
| SQL_DATETIME_INTERVAL_CODE {$$ = make_str(" datetime_interval_code" ); }
5012
5011
| SQL_DATETIME_INTERVAL_PRECISION {$$ = make_str(" datetime_interval_precision" ); }
5013
- | SQL_DEALLOCATE {$$ = make_str(" deallocate" ); }
5014
5012
| SQL_DISCONNECT {$$ = make_str(" disconnect" ); }
5015
5013
| SQL_FOUND {$$ = make_str(" found" ); }
5016
5014
| SQL_GO {$$ = make_str(" go" ); }
@@ -5023,7 +5021,6 @@ ECPGKeywords: SQL_BREAK{ $$ = make_str("break"); }
5023
5021
| SQL_NULLABLE {$$ = make_str(" nullable" ); }
5024
5022
| SQL_OCTET_LENGTH {$$ = make_str(" octet_length" ); }
5025
5023
| SQL_OPEN {$$ = make_str(" open" ); }
5026
- | SQL_PREPARE {$$ = make_str(" prepare" ); }
5027
5024
| SQL_RELEASE {$$ = make_str(" release" ); }
5028
5025
| SQL_RETURNED_LENGTH {$$ = make_str(" returned_length" ); }
5029
5026
| SQL_RETURNED_OCTET_LENGTH {$$ = make_str(" returned_octet_length" ); }
@@ -5485,9 +5482,7 @@ ident: IDENT{ $$ = $1; }
5485
5482
| CSTRING {$$ = make3_str(make_str(" \" " ),$1 , make_str(" \" " )); }
5486
5483
;
5487
5484
5488
- quoted_ident_stringvar :IDENT
5489
- {$$ = make3_str(make_str(" \" " ),$1 , make_str(" \" " )); }
5490
- | CSTRING
5485
+ quoted_ident_stringvar :name
5491
5486
{$$ = make3_str(make_str(" \" " ),$1 , make_str(" \" " )); }
5492
5487
| char_variable
5493
5488
{$$ = make3_str(make_str(" (" ),$1 , make_str(" )" )); }