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

Commitc443231

Browse files
committed
Back out change to gram.y for parens.
1 parent88094f2 commitc443231

File tree

1 file changed

+50
-119
lines changed

1 file changed

+50
-119
lines changed

‎src/backend/parser/gram.y

Lines changed: 50 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.199 2000/10/2815:44:04 momjian Exp $
14+
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.200 2000/10/2819:41:00 momjian Exp $
1515
*
1616
* HISTORY
1717
* AUTHORDATEMAJOR EVENT
@@ -127,15 +127,14 @@ static void doNegateFloat(Value *v);
127127
DropGroupStmt,DropPLangStmt,DropSchemaStmt,DropStmt,DropTrigStmt,
128128
DropUserStmt,DropdbStmt,ExplainStmt,ExtendStmt,FetchStmt,
129129
GrantStmt,IndexStmt,InsertStmt,ListenStmt,LoadStmt,LockStmt,
130-
NotifyStmt,OptimizableStmt,ProcedureStmt
131-
QualifiedSelectStmt,ReindexStmt,
130+
NotifyStmt,OptimizableStmt,ProcedureStmt,ReindexStmt,
132131
RemoveAggrStmt,RemoveFuncStmt,RemoveOperStmt,
133132
RenameStmt,RevokeStmt,RuleActionStmt,RuleActionStmtOrEmpty,
134133
RuleStmt,SelectStmt,SetSessionStmt,TransactionStmt,TruncateStmt,
135134
UnlistenStmt,UpdateStmt,VacuumStmt,VariableResetStmt,
136135
VariableSetStmt,VariableShowStmt,ViewStmt
137136

138-
%type<node>subquery,simple_select,select_head,set_select
137+
%type<node>select_clause,select_subclause
139138

140139
%type<list>SessionList
141140
%type<node>SessionClause
@@ -178,20 +177,19 @@ static void doNegateFloat(Value *v);
178177
result,OptTempTableName,relation_name_list,OptTableElementList,
179178
OptUnder,OptInherit,definition,opt_distinct,
180179
opt_with,func_args,func_args_list,func_as,
181-
oper_argtypes,RuleActionList,RuleActionMulti,
182-
RuleActionOrSelectMulti,RuleActions,RuleActionBracket,
180+
oper_argtypes,RuleActionList,RuleActionMulti,
183181
opt_column_list,columnList,opt_va_list,va_list,
184182
sort_clause,sortby_list,index_params,index_list,name_list,
185183
from_clause,from_list,opt_array_bounds,
186184
expr_list,attrs,target_list,update_target_list,
187185
def_list,opt_indirection,group_clause,TriggerFuncArgs,
188-
opt_select_limit,select_limit
186+
opt_select_limit
189187

190188
%type<typnam>func_arg,func_return,aggr_argtype
191189

192190
%type<boolean>opt_arg,TriggerForOpt,TriggerForType,OptTemp
193191

194-
%type<list>opt_for_update_clause,for_update_clause,update_list
192+
%type<list>for_update_clause,update_list
195193
%type<boolean>opt_all
196194
%type<boolean>opt_table
197195
%type<boolean>opt_chain,opt_trans
@@ -2662,7 +2660,7 @@ opt_column: COLUMN{ $$ = COLUMN; }
26622660
RuleStmt:CREATERULEnameAS
26632661
{ QueryIsRule=TRUE; }
26642662
ONeventTOevent_objectwhere_clause
2665-
DOopt_insteadRuleActions
2663+
DOopt_insteadRuleActionList
26662664
{
26672665
RuleStmt *n = makeNode(RuleStmt);
26682666
n->rulename =$3;
@@ -2675,78 +2673,28 @@ RuleStmt: CREATE RULE name AS
26752673
}
26762674
;
26772675

2678-
RuleActions:NOTHING{$$ = NIL; }
2679-
|RuleActionStmt{$$ = makeList1($1); }
2680-
|SelectStmt{$$ = makeList1($1); }
2681-
|RuleActionList
2682-
|RuleActionBracket
2683-
;
2684-
2685-
/* LEGACY: Version 7.0 did not like SELECT statements in these lists,
2686-
* but because of an oddity in the syntax for select_clause, allowed
2687-
* certain forms like "DO INSTEAD (select 1)", and this is used in
2688-
* the regression tests.
2689-
* Here, we're allowing just one SELECT in parentheses, to preserve
2690-
* any such expectations, and make the regression tests work.
2691-
* ++ KO'G
2692-
*/
2693-
RuleActionList:'('RuleActionMulti')'{$$ =$2; }
2694-
|'('SelectStmt')'{$$ = makeList1($2); }
2695-
;
2696-
2697-
/* An undocumented feature, bracketed lists are allowed to contain
2698-
* SELECT statements on the same basis as the others. Before this,
2699-
* they were the same as parenthesized lists, and did not allow
2700-
* SelectStmts. Anybody know why they were here originally? Or if
2701-
* they're in the regression tests at all?
2702-
* ++ KO'G
2703-
*/
2704-
RuleActionBracket:'['RuleActionOrSelectMulti']'{$$ =$2; }
2676+
RuleActionList:NOTHING{$$ = NIL; }
2677+
|SelectStmt{$$ = makeList1($1); }
2678+
|RuleActionStmt{$$ = makeList1($1); }
2679+
|'['RuleActionMulti']'{$$ =$2; }
2680+
|'('RuleActionMulti')'{$$ =$2; }
27052681
;
27062682

27072683
/* the thrashing around here is to discard "empty" statements...*/
27082684
RuleActionMulti:RuleActionMulti';'RuleActionStmtOrEmpty
27092685
{if ($3 != (Node *)NULL)
2710-
if ($1 != NIL)
2711-
$$ = lappend($1,$3);
2712-
else
2713-
$$ = makeList1($3);
2714-
else
2715-
$$ =$1;
2716-
}
2717-
|RuleActionStmtOrEmpty
2718-
{if ($1 != (Node *)NULL)
2719-
$$ = makeList1($1);
2720-
else
2721-
$$ = NIL;
2722-
}
2723-
;
2724-
2725-
RuleActionOrSelectMulti:RuleActionOrSelectMulti';'RuleActionStmtOrEmpty
2726-
{if ($3 != (Node *)NULL)
2727-
if ($1 != NIL)
2728-
$$ = lappend($1,$3);
2729-
else
2730-
$$ = makeList1($3);
2686+
$$ = lappend($1,$3);
27312687
else
27322688
$$ =$1;
27332689
}
2734-
|RuleActionOrSelectMulti';'SelectStmt
2735-
{if ($1 != NIL)
2736-
$$ = lappend($1,$3);
2737-
else
2738-
$$ = makeList1($3);
2739-
}
27402690
|RuleActionStmtOrEmpty
27412691
{if ($1 != (Node *)NULL)
27422692
$$ = makeList1($1);
27432693
else
27442694
$$ = NIL;
27452695
}
2746-
|SelectStmt{$$ = makeList1($1); }
27472696
;
27482697

2749-
27502698
RuleActionStmt:InsertStmt
27512699
|UpdateStmt
27522700
|DeleteStmt
@@ -3300,12 +3248,7 @@ opt_cursor: BINARY{ $$ = TRUE; }
33003248
* However, this is not checked by the grammar; parse analysis must check it.
33013249
*/
33023250

3303-
SelectStmt:QualifiedSelectStmt
3304-
|select_head
3305-
;
3306-
3307-
QualifiedSelectStmt:
3308-
select_headsort_clauseopt_for_update_clauseopt_select_limit
3251+
SelectStmt:select_clausesort_clausefor_update_clauseopt_select_limit
33093252
{
33103253
SelectStmt *n = findLeftmostSelect($1);
33113254

@@ -3315,35 +3258,34 @@ QualifiedSelectStmt:
33153258
n->limitCount = nth(1,$4);
33163259
$$ =$1;
33173260
}
3318-
|select_headfor_update_clauseopt_select_limit
3319-
{
3320-
SelectStmt *n = findLeftmostSelect($1);
3261+
;
33213262

3322-
n->sortClause =NULL;
3323-
n->forUpdate =$2;
3324-
n->limitOffset = nth(0,$3);
3325-
n->limitCount = nth(1,$3);
3326-
$$ =$1;
3263+
/* This rule parses Select statements that can appear within set operations,
3264+
* including UNION, INTERSECT and EXCEPT. '(' and ')' can be used to specify
3265+
* the ordering of the set operations. Without '(' and ')' we want the
3266+
* operations to be ordered per the precedence specs at the head of this file.
3267+
*
3268+
* Since parentheses around SELECTs also appear in the expression grammar,
3269+
* there is a parse ambiguity if parentheses are allowed at the top level of a
3270+
* select_clause: are the parens part of the expression or part of the select?
3271+
* We separate select_clause into two levels to resolve this: select_clause
3272+
* can have top-level parentheses, select_subclause cannot.
3273+
*
3274+
* Note that sort clauses cannot be included at this level --- a sort clause
3275+
* can only appear at the end of the complete Select, and it will be handled
3276+
* by the topmost SelectStmt rule. Likewise FOR UPDATE and LIMIT.
3277+
*/
3278+
select_clause:'('select_subclause')'
3279+
{
3280+
$$ =$2;
33273281
}
3328-
|select_headselect_limit
3282+
|select_subclause
33293283
{
3330-
SelectStmt *n = findLeftmostSelect($1);
3331-
3332-
n->sortClause =NULL;
3333-
n->forUpdate =NULL;
3334-
n->limitOffset = nth(0,$2);
3335-
n->limitCount = nth(1,$2);
3336-
$$ =$1;
3284+
$$ =$1;
33373285
}
33383286
;
33393287

3340-
subquery:'('subquery')'{$$ =$2; }
3341-
|'('QualifiedSelectStmt')'{$$ =$2; }
3342-
|'('set_select')'{$$ =$2; }
3343-
|simple_select{$$ =$1; }
3344-
;
3345-
3346-
simple_select:SELECTopt_distincttarget_list
3288+
select_subclause:SELECTopt_distincttarget_list
33473289
resultfrom_clausewhere_clause
33483290
group_clausehaving_clause
33493291
{
@@ -3358,13 +3300,7 @@ simple_select: SELECT opt_distinct target_list
33583300
n->havingClause =$8;
33593301
$$ = (Node *)n;
33603302
}
3361-
;
3362-
3363-
select_head:simple_select{$$ =$1; }
3364-
|set_select{$$ =$1; }
3365-
;
3366-
3367-
set_select:select_headUNIONopt_allsubquery
3303+
|select_clauseUNIONopt_allselect_clause
33683304
{
33693305
SetOperationStmt *n = makeNode(SetOperationStmt);
33703306
n->op = SETOP_UNION;
@@ -3373,7 +3309,7 @@ set_select: select_head UNION opt_all subquery
33733309
n->rarg =$4;
33743310
$$ = (Node *) n;
33753311
}
3376-
|select_headINTERSECTopt_allsubquery
3312+
|select_clauseINTERSECTopt_allselect_clause
33773313
{
33783314
SetOperationStmt *n = makeNode(SetOperationStmt);
33793315
n->op = SETOP_INTERSECT;
@@ -3382,7 +3318,7 @@ set_select: select_head UNION opt_all subquery
33823318
n->rarg =$4;
33833319
$$ = (Node *) n;
33843320
}
3385-
|select_headEXCEPTopt_allsubquery
3321+
|select_clauseEXCEPTopt_allselect_clause
33863322
{
33873323
SetOperationStmt *n = makeNode(SetOperationStmt);
33883324
n->op = SETOP_EXCEPT;
@@ -3447,6 +3383,7 @@ opt_distinct: DISTINCT{ $$ = makeList1(NIL); }
34473383
;
34483384

34493385
sort_clause:ORDERBYsortby_list{$$ =$3; }
3386+
|/*EMPTY*/{$$ = NIL; }
34503387
;
34513388

34523389
sortby_list:sortby{$$ = makeList1($1); }
@@ -3468,7 +3405,7 @@ OptUseOp: USING all_Op{ $$ = $2; }
34683405
;
34693406

34703407

3471-
select_limit:LIMITselect_limit_value','select_offset_value
3408+
opt_select_limit:LIMITselect_limit_value','select_offset_value
34723409
{$$ = makeList2($4,$2); }
34733410
|LIMITselect_limit_valueOFFSETselect_offset_value
34743411
{$$ = makeList2($4,$2); }
@@ -3478,9 +3415,6 @@ select_limit:LIMIT select_limit_value ',' select_offset_value
34783415
{$$ = makeList2($2,$4); }
34793416
|OFFSETselect_offset_value
34803417
{$$ = makeList2($2,NULL); }
3481-
;
3482-
3483-
opt_select_limit:select_limit{$$ =$1; }
34843418
|/* EMPTY*/
34853419
{$$ = makeList2(NULL,NULL); }
34863420
;
@@ -3580,9 +3514,6 @@ having_clause: HAVING a_expr
35803514

35813515
for_update_clause:FORUPDATEupdate_list{$$ =$3; }
35823516
|FORREADONLY{$$ =NULL; }
3583-
;
3584-
3585-
opt_for_update_clause:for_update_clause{$$ =$1; }
35863517
|/* EMPTY*/{$$ =NULL; }
35873518
;
35883519

@@ -3626,7 +3557,7 @@ table_ref: relation_expr
36263557
$1->name =$2;
36273558
$$ = (Node *)$1;
36283559
}
3629-
|'('SelectStmt')'alias_clause
3560+
|'('select_subclause')'alias_clause
36303561
{
36313562
RangeSubselect *n = makeNode(RangeSubselect);
36323563
n->subquery =$2;
@@ -4162,7 +4093,7 @@ opt_interval: datetime{ $$ = makeList1($1); }
41624093
* Define row_descriptor to allow yacc to break the reduce/reduce conflict
41634094
* with singleton expressions.
41644095
*/
4165-
row_expr:'('row_descriptor')'IN'('SelectStmt')'
4096+
row_expr:'('row_descriptor')'IN'('select_subclause')'
41664097
{
41674098
SubLink *n = makeNode(SubLink);
41684099
n->lefthand =$2;
@@ -4172,7 +4103,7 @@ row_expr: '(' row_descriptor ')' IN '(' SelectStmt ')'
41724103
n->subselect =$6;
41734104
$$ = (Node *)n;
41744105
}
4175-
|'('row_descriptor')'NOTIN'('SelectStmt')'
4106+
|'('row_descriptor')'NOTIN'('select_subclause')'
41764107
{
41774108
SubLink *n = makeNode(SubLink);
41784109
n->lefthand =$2;
@@ -4182,7 +4113,7 @@ row_expr: '(' row_descriptor ')' IN '(' SelectStmt ')'
41824113
n->subselect =$7;
41834114
$$ = (Node *)n;
41844115
}
4185-
|'('row_descriptor')'all_Opsub_type'('SelectStmt')'
4116+
|'('row_descriptor')'all_Opsub_type'('select_subclause')'
41864117
{
41874118
SubLink *n = makeNode(SubLink);
41884119
n->lefthand =$2;
@@ -4195,7 +4126,7 @@ row_expr: '(' row_descriptor ')' IN '(' SelectStmt ')'
41954126
n->subselect =$7;
41964127
$$ = (Node *)n;
41974128
}
4198-
|'('row_descriptor')'all_Op'('SelectStmt')'
4129+
|'('row_descriptor')'all_Op'('select_subclause')'
41994130
{
42004131
SubLink *n = makeNode(SubLink);
42014132
n->lefthand =$2;
@@ -4526,7 +4457,7 @@ a_expr: c_expr
45264457
$$ = n;
45274458
}
45284459
}
4529-
|a_exprall_Opsub_type'('SelectStmt')'
4460+
|a_exprall_Opsub_type'('select_subclause')'
45304461
{
45314462
SubLink *n = makeNode(SubLink);
45324463
n->lefthand = makeList1($1);
@@ -4922,7 +4853,7 @@ c_expr: attr
49224853
n->agg_distinct =FALSE;
49234854
$$ = (Node *)n;
49244855
}
4925-
|'('SelectStmt')'
4856+
|'('select_subclause')'
49264857
{
49274858
SubLink *n = makeNode(SubLink);
49284859
n->lefthand = NIL;
@@ -4932,7 +4863,7 @@ c_expr: attr
49324863
n->subselect =$2;
49334864
$$ = (Node *)n;
49344865
}
4935-
|EXISTS'('SelectStmt')'
4866+
|EXISTS'('select_subclause')'
49364867
{
49374868
SubLink *n = makeNode(SubLink);
49384869
n->lefthand = NIL;
@@ -5031,7 +4962,7 @@ trim_list: a_expr FROM expr_list
50314962
{$$ =$1; }
50324963
;
50334964

5034-
in_expr:SelectStmt
4965+
in_expr:select_subclause
50354966
{
50364967
SubLink *n = makeNode(SubLink);
50374968
n->subselect =$1;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp