Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8e72a87

Browse files
author
Michael Meskes
committed
Synced preproc.y with gram.y
1 parent77ac0a8 commit8e72a87

File tree

2 files changed

+54
-101
lines changed

2 files changed

+54
-101
lines changed

‎src/interfaces/ecpg/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,5 +956,9 @@ Wed Oct 4 14:36:51 CEST 2000
956956

957957
- Added patch by Christof Petig <christof.petig@wtal.de> to fix
958958
missing NOTICE.
959+
960+
Wed Oct 11 16:49:36 CEST 2000
961+
962+
- Synced preproc.y with gram.y.
959963
- Set ecpg version to 2.8.0.
960964
- Set library version to 3.2.0.

‎src/interfaces/ecpg/preproc/preproc.y

Lines changed: 50 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ charerrortext[128];
2424
char*connection =NULL;
2525
char *input_filename =NULL;
2626

27-
staticint QueryIsRule =0, ForUpdateNotAllowed =0, FoundInto =0;
28-
staticintFoundSort =0;
27+
staticint QueryIsRule =0, FoundInto =0;
2928
staticintinitializer =0;
3029
staticstructthis_type actual_type[STRUCT_DEPTH];
3130
staticchar *actual_storage[STRUCT_DEPTH];
@@ -300,7 +299,7 @@ make_name(void)
300299
%type<str>opt_decimalCharactercharacteropt_varyingopt_charset
301300
%type<str>opt_collatedatetimeopt_timezoneopt_intervaltable_ref
302301
%type<str>row_exprrow_descriptorrow_listConstDatetimeopt_chain
303-
%type<str>SelectStmtSubSelectresultOptTempConstraintAttributeSpec
302+
%type<str>SelectStmtselect_subclauseresultOptTempConstraintAttributeSpec
304303
%type<str>opt_tableopt_allsort_clausesortby_listConstraintAttr
305304
%type<str>sortbyOptUseOpopt_inh_starrelation_name_listname_list
306305
%type<str>group_clausehaving_clausefrom_clauseopt_distinct
@@ -1972,33 +1971,15 @@ func_args_list: func_arg{ $$ = $1; }
19721971
{$$ = cat_str(3,$1, make_str(","),$3); }
19731972
;
19741973

1975-
/* Would be nice to use the full Typename production for these fields,
1976-
* but that one sometimes dives into the catalogs looking for valid types.
1977-
* Arguments like "opaque" are valid when defining functions,
1978-
* so that won't work here. The only thing we give up is array notation,
1979-
* which isn't meaningful in this context anyway.
1980-
* - thomas 2000-03-25
1981-
* The following productions are difficult, since it is difficult to
1982-
* distinguish between TokenId and SimpleTypename:
1983-
opt_arg TokenId SimpleTypename
1984-
{
1985-
$$ = $3;
1986-
}
1987-
| TokenId SimpleTypename
1988-
{
1989-
$$ = $2;
1990-
}
1991-
*/
1992-
1993-
func_arg:opt_argSimpleTypename
1974+
func_arg:opt_argTypename
19941975
{
19951976
/* We can catch over-specified arguments here if we want to,
19961977
* but for now better to silently swallow typmod, etc.
19971978
* - thomas 2000-03-22
19981979
*/
19991980
$$ = cat2_str($1,$2);
20001981
}
2001-
|SimpleTypename
1982+
|Typename
20021983
{
20031984
$$ =$1;
20041985
}
@@ -2020,19 +2001,14 @@ opt_arg: IN { $$ = make_str("in"); }
20202001
func_as:Sconst{$$ =$1; }
20212002
|Sconst','Sconst{$$ = cat_str(3,$1, make_str(","),$3); }
20222003

2023-
func_return:SimpleTypename
2004+
func_return:Typename
20242005
{
20252006
/* We can catch over-specified arguments here if we want to,
20262007
* but for now better to silently swallow typmod, etc.
20272008
* - thomas 2000-03-22
20282009
*/
20292010
$$ =$1;
20302011
}
2031-
|SETOFSimpleTypename
2032-
{
2033-
2034-
$$ = cat2_str(make_str("setof"),$2);
2035-
}
20362012
;
20372013

20382014
/*****************************************************************************
@@ -2071,7 +2047,7 @@ RemoveAggrStmt: DROP AGGREGATE name aggr_argtype
20712047
}
20722048
;
20732049

2074-
aggr_argtype:name{$$ =$1; }
2050+
aggr_argtype:Typename{$$ =$1; }
20752051
|'*'{$$ = make_str("*"); }
20762052
;
20772053

@@ -2089,15 +2065,15 @@ RemoveOperStmt: DROP OPERATOR all_Op '(' oper_argtypes ')'
20892065
}
20902066
;
20912067

2092-
oper_argtypes:name
2068+
oper_argtypes:Typename
20932069
{
20942070
mmerror(ET_ERROR,"parser: argument type missing (use NONE for unary operators)");
20952071
}
2096-
|name','name
2072+
|Typename','Typename
20972073
{$$ = cat_str(3,$1, make_str(","),$3); }
2098-
|NONE','name/* left unary*/
2074+
|NONE','Typename/* left unary*/
20992075
{$$ = cat2_str(make_str("none,"),$3); }
2100-
|name','NONE/* right unary*/
2076+
|Typename','NONE/* right unary*/
21012077
{$$ = cat2_str($1, make_str(", none")); }
21022078
;
21032079

@@ -2471,14 +2447,8 @@ insert_rest: VALUES '(' target_list ')'
24712447
{
24722448
$$ = make_str("default values");
24732449
}
2474-
/* We want the full power of SelectStatements including INTERSECT and EXCEPT
2475-
* for insertion. However, we can't support sort or limit clauses.
2476-
*/
24772450
|SelectStmt
24782451
{
2479-
if (FoundSort !=0)
2480-
mmerror(ET_ERROR,"ORDER BY is not allowed in INSERT/SELECT");
2481-
24822452
$$ =$1;
24832453
}
24842454
|'('columnList')'VALUES'('target_list')'
@@ -2487,9 +2457,6 @@ insert_rest: VALUES '(' target_list ')'
24872457
}
24882458
|'('columnList')'SelectStmt
24892459
{
2490-
if (FoundSort !=0)
2491-
mmerror(ET_ERROR,"ORDER BY is not all owed in INSERT/SELECT");
2492-
24932460
$$ = cat_str(4, make_str("("),$2, make_str(")"),$4);
24942461
}
24952462
;
@@ -2568,9 +2535,7 @@ UpdateStmt: UPDATE opt_only relation_name
25682535
*CURSOR STATEMENTS
25692536
*
25702537
*****************************************************************************/
2571-
CursorStmt:DECLAREnameopt_cursorCURSORFOR
2572-
{ ForUpdateNotAllowed =1; }
2573-
SelectStmt
2538+
CursorStmt:DECLAREnameopt_cursorCURSORFORSelectStmt
25742539
{
25752540
structcursor *ptr, *this;
25762541

@@ -2590,7 +2555,7 @@ CursorStmt: DECLARE name opt_cursor CURSOR FOR
25902555
this->next = cur;
25912556
this->name =$2;
25922557
this->connection = connection;
2593-
this->command = cat_str(5, make_str("declare"), mm_strdup($2),$3, make_str("cursor for"),$7);
2558+
this->command = cat_str(5, make_str("declare"), mm_strdup($2),$3, make_str("cursor for"),$6);
25942559
this->argsinsert = argsinsert;
25952560
this->argsresult = argsresult;
25962561
argsinsert = argsresult =NULL;
@@ -2615,70 +2580,55 @@ opt_cursor: BINARY { $$ = make_str("binary"); }
26152580
*
26162581
*****************************************************************************/
26172582

2618-
/* The new 'SelectStmt' rule adapted for the optional use of INTERSECT EXCEPT a nd UNION
2619-
* accepts the use of '(' and ')' to select an order of set operations.
2620-
* The rule returns a SelectStmt Node having the set operations attached to
2621-
* unionClause and intersectClause (NIL if no set operations were present)
2622-
*/
2623-
2624-
SelectStmt:select_clause
2625-
{ FoundSort =0; }
2626-
sort_clausefor_update_clauseopt_select_limit
2583+
SelectStmt:select_clausesort_clausefor_update_clauseopt_select_limit
26272584
{
2628-
if (strlen($4) >0 && ForUpdateNotAllowed !=0)
2629-
mmerror(ET_ERROR,"FOR UPDATE is not allowed in this context");
2630-
2631-
ForUpdateNotAllowed =0;
2632-
$$ = cat_str(4,$1,$3,$4,$5);
2585+
$$ = cat_str(4,$1,$2,$3,$4);
26332586
}
26342587

26352588
/* This rule parses Select statements including UNION INTERSECT and EXCEPT.
26362589
* '(' and ')' can be used to specify the order of the operations
26372590
* (UNION EXCEPT INTERSECT). Without the use of '(' and ')' we want the
26382591
* operations to be ordered per the precedence specs at the head of this file.
26392592
*
2640-
* The sort_clause is not handled here!
2593+
* Since parentheses around SELECTs also appear in the expression grammar,
2594+
* there is a parse ambiguity if parentheses are allowed at the top level of a
2595+
* select_clause: are the parens part of the expression or part of the select?
2596+
* We separate select_clause into two levels to resolve this: select_clause
2597+
* can have top-level parentheses, select_subclause cannot.
2598+
* Note that sort clauses cannot be included at this level --- a sort clau
2599+
* can only appear at the end of the complete Select, and it will be handl
2600+
* by the topmost SelectStmt rule. Likewise FOR UPDATE and LIMIT.
26412601
*/
2642-
select_clause:'('select_clause')'
2602+
2603+
select_clause:'('select_subclause')'
26432604
{
26442605
$$ = cat_str(3, make_str("("),$2, make_str(")"));
26452606
}
2646-
|SubSelect
2607+
|select_subclause
26472608
{
2648-
FoundInto =0;
2609+
FoundInto =0;
26492610
$$ =$1;
26502611
}
2651-
|select_clauseEXCEPTopt_allselect_clause
2652-
{
2653-
if (strlen($3) !=0)
2654-
mmerror(ET_WARN,"EXCEPT ALL is not implemented yet.");
2655-
2656-
$$ = cat_str(4,$1, make_str("except"),$3,$4);
2657-
ForUpdateNotAllowed =1;
2658-
}
2659-
|select_clauseUNIONopt_allselect_clause
2660-
{
2661-
$$ = cat_str(4,$1, make_str("union"),$3,$4);
2662-
ForUpdateNotAllowed =1;
2663-
}
2664-
|select_clauseINTERSECTopt_allselect_clause
2665-
{
2666-
if (strlen($3) !=0)
2667-
mmerror(ET_WARN,"INTERSECT ALL is not implemented yet.");
2668-
2669-
$$ = cat_str(4,$1, make_str("intersect"),$3,$4);
2670-
ForUpdateNotAllowed =1;
2671-
}
26722612
;
26732613

2674-
SubSelect:SELECTopt_distincttarget_list
2614+
select_subclause:SELECTopt_distincttarget_list
26752615
resultfrom_clausewhere_clause
26762616
group_clausehaving_clause
26772617
{
2678-
if (strlen($7) >0 || strlen($8) >0)
2679-
ForUpdateNotAllowed =1;
26802618
$$ = cat_str(8, make_str("select"),$2,$3,$4,$5,$6,$7,$8);
26812619
}
2620+
|select_clauseUNIONopt_allselect_clause
2621+
{
2622+
$$ = cat_str(4,$1, make_str("union"),$3,$4);
2623+
}
2624+
|select_clauseINTERSECTopt_allselect_clause
2625+
{
2626+
$$ = cat_str(4,$1, make_str("intersect"),$3,$4);
2627+
}
2628+
|select_clauseEXCEPTopt_allselect_clause
2629+
{
2630+
$$ = cat_str(4,$1, make_str("except"),$3,$4);
2631+
}
26822632
;
26832633

26842634
result:INTOOptTempTableName {
@@ -2747,7 +2697,6 @@ opt_distinct: DISTINCT{ $$ = make_str("distinct"); }
27472697
;
27482698

27492699
sort_clause:ORDERBYsortby_list{
2750-
FoundSort =1;
27512700
$$ = cat2_str(make_str("order by"),$3);
27522701
}
27532702
|/*EMPTY*/{$$ = EMPTY; }
@@ -2880,7 +2829,7 @@ table_ref: relation_expr
28802829
{
28812830
cat2_str($1, $2);
28822831
}
2883-
|'('select_clause')'alias_clause
2832+
|'('select_subclause')'alias_clause
28842833
{
28852834
cat_str(4, make_str("("), $2, make_str(")"), $4);
28862835
}
@@ -3299,19 +3248,19 @@ opt_interval: datetime{ $$ = $1; }
32993248
* Define row_descriptor to allow yacc to break the reduce/reduce conflict
33003249
* with singleton expressions.
33013250
*/
3302-
row_expr:'('row_descriptor')'IN'('SubSelect')'
3251+
row_expr:'('row_descriptor')'IN'('select_subclause')'
33033252
{
33043253
$$ = cat_str(5, make_str("("),$2, make_str(") in ("),$6, make_str(")"));
33053254
}
3306-
|'('row_descriptor')'NOTIN'('SubSelect')'
3255+
|'('row_descriptor')'NOTIN'('select_subclause')'
33073256
{
33083257
$$ = cat_str(5, make_str("("),$2, make_str(") not in ("),$7, make_str(")"));
33093258
}
3310-
|'('row_descriptor')'all_Opsub_type'('SubSelect')'
3259+
|'('row_descriptor')'all_Opsub_type'('select_subclause')'
33113260
{
33123261
$$ = cat_str(8, make_str("("),$2, make_str(")"),$4,$5, make_str("("),$7, make_str(")"));
33133262
}
3314-
|'('row_descriptor')'all_Op'('SubSelect')'
3263+
|'('row_descriptor')'all_Op'('select_subclause')'
33153264
{
33163265
$$ = cat_str(7, make_str("("),$2, make_str(")"),$4, make_str("("),$6, make_str(")"));
33173266
}
@@ -3491,7 +3440,7 @@ a_expr: c_expr
34913440
{
34923441
$$ = cat_str(4,$1, make_str(" not in ("),$5, make_str(")"));
34933442
}
3494-
|a_exprall_Opsub_type'('SubSelect')'
3443+
|a_exprall_Opsub_type'('select_subclause')'
34953444
{
34963445
$$ = cat_str(6,$1,$2,$3, make_str("("),$5, make_str(")"));
34973446
}
@@ -3638,9 +3587,9 @@ c_expr: attr
36383587
{$$ = cat_str(3, make_str("trim(trailing"),$4, make_str(")")); }
36393588
|TRIM'('trim_list')'
36403589
{$$ = cat_str(3, make_str("trim("),$3, make_str(")")); }
3641-
|'('SubSelect')'
3590+
|'('select_subclause')'
36423591
{$$ = cat_str(3, make_str("("),$2, make_str(")")); }
3643-
|EXISTS'('SubSelect')'
3592+
|EXISTS'('select_subclause')'
36443593
{$$ = cat_str(3, make_str("exists("),$3, make_str(")")); }
36453594
;
36463595
/*
@@ -3719,7 +3668,7 @@ trim_list: a_expr FROM expr_list
37193668
{$$ =$1; }
37203669
;
37213670

3722-
in_expr:SubSelect
3671+
in_expr:select_subclause
37233672
{
37243673
$$ =$1;
37253674
}
@@ -5164,6 +5113,7 @@ ECPGColId: ident{ $$ = $1; }
51645113
|TokenId{$$ =$1; }
51655114
|INTERVAL{$$ = make_str("interval"); }
51665115
|NATIONAL{$$ = make_str("national"); }
5116+
|NONE{$$ = make_str("none"); }
51675117
|PATH_P{$$ = make_str("path_p"); }
51685118
|SERIAL{$$ = make_str("serial"); }
51695119
|TIME{$$ = make_str("time"); }
@@ -5177,7 +5127,7 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
51775127
|ANALYZE {$$ = make_str("analyze"); }
51785128
|ANY{$$ = make_str("any"); }
51795129
|ASC{$$ = make_str("asc"); }
5180-
|BETWEEN {$$ = make_str("between"); }
5130+
|BETWEEN {$$ = make_str("between"); }
51815131
|BINARY {$$ = make_str("binary"); }
51825132
|BIT {$$ = make_str("bit"); }
51835133
|BOTH{$$ = make_str("both"); }
@@ -5236,7 +5186,6 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
52365186
|NATURAL{$$ = make_str("natural"); }
52375187
|NCHAR{$$ = make_str("nchar"); }
52385188
|NEW{$$ = make_str("new"); }
5239-
|NONE{$$ = make_str("none"); }
52405189
|NOT{$$ = make_str("not"); }
52415190
|NOTNULL {$$ = make_str("notnull"); }
52425191
|NULLIF{$$ = make_str("nullif"); }

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp