1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-12 15:23:02 +03:00

Fix the omitted declarations to allow '^' and '|' as math operators.

Problem was introduced when precedence was added for these.
How did *those* changes get into the stable tree in the first place??
This commit is contained in:
Thomas G. Lockhart
1999-09-24 15:08:59 +00:00
parent b8e2e3fb18
commit 4efb2ff001

View File

@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.88.2.2 1999/09/14 06:07:35 thomas Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.88.2.3 1999/09/24 15:08:59 thomas Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
@@ -221,7 +221,6 @@ Oid param_type(int t); /* used in parse_expr.c */
having_clause having_clause
%type <list> row_descriptor, row_list, c_list, c_expr %type <list> row_descriptor, row_list, c_list, c_expr
%type <node> row_expr %type <node> row_expr
%type <str> row_op
%type <node> case_expr, case_arg, when_clause, case_default %type <node> case_expr, case_arg, when_clause, case_default
%type <list> when_clause_list %type <list> when_clause_list
%type <ival> sub_type %type <ival> sub_type
@@ -970,12 +969,14 @@ default_expr: AexprConst
{ $$ = nconc( $1, lcons( makeString( "-"), $3)); } { $$ = nconc( $1, lcons( makeString( "-"), $3)); }
| default_expr '/' default_expr | default_expr '/' default_expr
{ $$ = nconc( $1, lcons( makeString( "/"), $3)); } { $$ = nconc( $1, lcons( makeString( "/"), $3)); }
| default_expr '%' default_expr
{ $$ = nconc( $1, lcons( makeString( "%"), $3)); }
| default_expr '*' default_expr | default_expr '*' default_expr
{ $$ = nconc( $1, lcons( makeString( "*"), $3)); } { $$ = nconc( $1, lcons( makeString( "*"), $3)); }
| default_expr '%' default_expr
{ $$ = nconc( $1, lcons( makeString( "%"), $3)); }
| default_expr '^' default_expr | default_expr '^' default_expr
{ $$ = nconc( $1, lcons( makeString( "^"), $3)); } { $$ = nconc( $1, lcons( makeString( "^"), $3)); }
| default_expr '|' default_expr
{ $$ = nconc( $1, lcons( makeString( "|"), $3)); }
| default_expr '=' default_expr | default_expr '=' default_expr
{ elog(ERROR,"boolean expressions not supported in DEFAULT"); } { elog(ERROR,"boolean expressions not supported in DEFAULT"); }
| default_expr '<' default_expr | default_expr '<' default_expr
@@ -1120,12 +1121,14 @@ constraint_expr: AexprConst
{ $$ = nconc( $1, lcons( makeString( "-"), $3)); } { $$ = nconc( $1, lcons( makeString( "-"), $3)); }
| constraint_expr '/' constraint_expr | constraint_expr '/' constraint_expr
{ $$ = nconc( $1, lcons( makeString( "/"), $3)); } { $$ = nconc( $1, lcons( makeString( "/"), $3)); }
| constraint_expr '%' constraint_expr
{ $$ = nconc( $1, lcons( makeString( "%"), $3)); }
| constraint_expr '*' constraint_expr | constraint_expr '*' constraint_expr
{ $$ = nconc( $1, lcons( makeString( "*"), $3)); } { $$ = nconc( $1, lcons( makeString( "*"), $3)); }
| constraint_expr '%' constraint_expr
{ $$ = nconc( $1, lcons( makeString( "%"), $3)); }
| constraint_expr '^' constraint_expr | constraint_expr '^' constraint_expr
{ $$ = nconc( $1, lcons( makeString( "^"), $3)); } { $$ = nconc( $1, lcons( makeString( "^"), $3)); }
| constraint_expr '|' constraint_expr
{ $$ = nconc( $1, lcons( makeString( "|"), $3)); }
| constraint_expr '=' constraint_expr | constraint_expr '=' constraint_expr
{ $$ = nconc( $1, lcons( makeString( "="), $3)); } { $$ = nconc( $1, lcons( makeString( "="), $3)); }
| constraint_expr '<' constraint_expr | constraint_expr '<' constraint_expr
@@ -2020,9 +2023,11 @@ MathOp: '+' { $$ = "+"; }
| '-' { $$ = "-"; } | '-' { $$ = "-"; }
| '*' { $$ = "*"; } | '*' { $$ = "*"; }
| '/' { $$ = "/"; } | '/' { $$ = "/"; }
| '%' { $$ = "%"; }
| '<' { $$ = "<"; } | '<' { $$ = "<"; }
| '>' { $$ = ">"; } | '>' { $$ = ">"; }
| '%' { $$ = "%"; }
| '^' { $$ = "^"; }
| '|' { $$ = "|"; }
| '=' { $$ = "="; } | '=' { $$ = "="; }
; ;
@@ -3528,7 +3533,7 @@ a_expr_or_null: a_expr
/* Expressions using row descriptors /* Expressions using row descriptors
* Define row_descriptor to allow yacc to break the reduce/reduce conflict * Define row_descriptor to allow yacc to break the reduce/reduce conflict
* with singleton expressions. * with singleton expressions.
* Eliminated lots of code by defining row_op and sub_type clauses. * Eliminated lots of code by defining sub_type clauses.
* However, can not consolidate EXPR_LINK case with others subselects * However, can not consolidate EXPR_LINK case with others subselects
* due to shift/reduce conflict with the non-subselect clause (the parser * due to shift/reduce conflict with the non-subselect clause (the parser
* would have to look ahead more than one token to resolve the conflict). * would have to look ahead more than one token to resolve the conflict).
@@ -3554,7 +3559,7 @@ row_expr: '(' row_descriptor ')' IN '(' SubSelect ')'
n->subselect = $7; n->subselect = $7;
$$ = (Node *)n; $$ = (Node *)n;
} }
| '(' row_descriptor ')' row_op sub_type '(' SubSelect ')' | '(' row_descriptor ')' all_Op sub_type '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
n->lefthand = $2; n->lefthand = $2;
@@ -3567,7 +3572,7 @@ row_expr: '(' row_descriptor ')' IN '(' SubSelect ')'
n->subselect = $7; n->subselect = $7;
$$ = (Node *)n; $$ = (Node *)n;
} }
| '(' row_descriptor ')' row_op '(' SubSelect ')' | '(' row_descriptor ')' all_Op '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
n->lefthand = $2; n->lefthand = $2;
@@ -3580,7 +3585,7 @@ row_expr: '(' row_descriptor ')' IN '(' SubSelect ')'
n->subselect = $6; n->subselect = $6;
$$ = (Node *)n; $$ = (Node *)n;
} }
| '(' row_descriptor ')' row_op '(' row_descriptor ')' | '(' row_descriptor ')' all_Op '(' row_descriptor ')'
{ {
$$ = makeRowExpr($4, $2, $6); $$ = makeRowExpr($4, $2, $6);
} }
@@ -3602,17 +3607,6 @@ row_list: row_list ',' a_expr
} }
; ;
row_op: Op { $$ = $1; }
| '<' { $$ = "<"; }
| '=' { $$ = "="; }
| '>' { $$ = ">"; }
| '+' { $$ = "+"; }
| '-' { $$ = "-"; }
| '*' { $$ = "*"; }
| '/' { $$ = "/"; }
| '%' { $$ = "%"; }
;
sub_type: ANY { $$ = ANY_SUBLINK; } sub_type: ANY { $$ = ANY_SUBLINK; }
| ALL { $$ = ALL_SUBLINK; } | ALL { $$ = ALL_SUBLINK; }
; ;
@@ -3658,12 +3652,14 @@ a_expr: attr opt_indirection
{ $$ = makeA_Expr(OP, "-", $1, $3); } { $$ = makeA_Expr(OP, "-", $1, $3); }
| a_expr '/' a_expr | a_expr '/' a_expr
{ $$ = makeA_Expr(OP, "/", $1, $3); } { $$ = makeA_Expr(OP, "/", $1, $3); }
| a_expr '%' a_expr
{ $$ = makeA_Expr(OP, "%", $1, $3); }
| a_expr '*' a_expr | a_expr '*' a_expr
{ $$ = makeA_Expr(OP, "*", $1, $3); } { $$ = makeA_Expr(OP, "*", $1, $3); }
| a_expr '%' a_expr
{ $$ = makeA_Expr(OP, "%", $1, $3); }
| a_expr '^' a_expr | a_expr '^' a_expr
{ $$ = makeA_Expr(OP, "^", $1, $3); } { $$ = makeA_Expr(OP, "^", $1, $3); }
| a_expr '|' a_expr
{ $$ = makeA_Expr(OP, "|", $1, $3); }
| a_expr '<' a_expr | a_expr '<' a_expr
{ $$ = makeA_Expr(OP, "<", $1, $3); } { $$ = makeA_Expr(OP, "<", $1, $3); }
| a_expr '>' a_expr | a_expr '>' a_expr
@@ -4049,6 +4045,16 @@ a_expr: attr opt_indirection
n->subselect = $4; n->subselect = $4;
$$ = (Node *)n; $$ = (Node *)n;
} }
| a_expr '*' '(' SubSelect ')'
{
SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1, NULL);
n->oper = lcons("*",NIL);
n->useor = false;
n->subLinkType = EXPR_SUBLINK;
n->subselect = $4;
$$ = (Node *)n;
}
| a_expr '%' '(' SubSelect ')' | a_expr '%' '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
@@ -4059,11 +4065,21 @@ a_expr: attr opt_indirection
n->subselect = $4; n->subselect = $4;
$$ = (Node *)n; $$ = (Node *)n;
} }
| a_expr '*' '(' SubSelect ')' | a_expr '^' '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1, NULL); n->lefthand = lcons($1, NULL);
n->oper = lcons("*",NIL); n->oper = lcons("^",NIL);
n->useor = false;
n->subLinkType = EXPR_SUBLINK;
n->subselect = $4;
$$ = (Node *)n;
}
| a_expr '|' '(' SubSelect ')'
{
SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1, NULL);
n->oper = lcons("|",NIL);
n->useor = false; n->useor = false;
n->subLinkType = EXPR_SUBLINK; n->subLinkType = EXPR_SUBLINK;
n->subselect = $4; n->subselect = $4;
@@ -4139,6 +4155,16 @@ a_expr: attr opt_indirection
n->subselect = $5; n->subselect = $5;
$$ = (Node *)n; $$ = (Node *)n;
} }
| a_expr '*' ANY '(' SubSelect ')'
{
SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1,NIL);
n->oper = lcons("*",NIL);
n->useor = false;
n->subLinkType = ANY_SUBLINK;
n->subselect = $5;
$$ = (Node *)n;
}
| a_expr '%' ANY '(' SubSelect ')' | a_expr '%' ANY '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
@@ -4149,11 +4175,21 @@ a_expr: attr opt_indirection
n->subselect = $5; n->subselect = $5;
$$ = (Node *)n; $$ = (Node *)n;
} }
| a_expr '*' ANY '(' SubSelect ')' | a_expr '^' ANY '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1,NIL); n->lefthand = lcons($1,NIL);
n->oper = lcons("*",NIL); n->oper = lcons("^",NIL);
n->useor = false;
n->subLinkType = ANY_SUBLINK;
n->subselect = $5;
$$ = (Node *)n;
}
| a_expr '|' ANY '(' SubSelect ')'
{
SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1,NIL);
n->oper = lcons("|",NIL);
n->useor = false; n->useor = false;
n->subLinkType = ANY_SUBLINK; n->subLinkType = ANY_SUBLINK;
n->subselect = $5; n->subselect = $5;
@@ -4229,6 +4265,16 @@ a_expr: attr opt_indirection
n->subselect = $5; n->subselect = $5;
$$ = (Node *)n; $$ = (Node *)n;
} }
| a_expr '*' ALL '(' SubSelect ')'
{
SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1, NULL);
n->oper = lcons("*",NIL);
n->useor = false;
n->subLinkType = ALL_SUBLINK;
n->subselect = $5;
$$ = (Node *)n;
}
| a_expr '%' ALL '(' SubSelect ')' | a_expr '%' ALL '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
@@ -4239,11 +4285,21 @@ a_expr: attr opt_indirection
n->subselect = $5; n->subselect = $5;
$$ = (Node *)n; $$ = (Node *)n;
} }
| a_expr '*' ALL '(' SubSelect ')' | a_expr '^' ALL '(' SubSelect ')'
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1, NULL); n->lefthand = lcons($1, NULL);
n->oper = lcons("*",NIL); n->oper = lcons("^",NIL);
n->useor = false;
n->subLinkType = ALL_SUBLINK;
n->subselect = $5;
$$ = (Node *)n;
}
| a_expr '|' ALL '(' SubSelect ')'
{
SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1, NULL);
n->oper = lcons("|",NIL);
n->useor = false; n->useor = false;
n->subLinkType = ALL_SUBLINK; n->subLinkType = ALL_SUBLINK;
n->subselect = $5; n->subselect = $5;
@@ -4325,12 +4381,14 @@ b_expr: attr opt_indirection
{ $$ = makeA_Expr(OP, "-", $1, $3); } { $$ = makeA_Expr(OP, "-", $1, $3); }
| b_expr '/' b_expr | b_expr '/' b_expr
{ $$ = makeA_Expr(OP, "/", $1, $3); } { $$ = makeA_Expr(OP, "/", $1, $3); }
| b_expr '*' b_expr
{ $$ = makeA_Expr(OP, "*", $1, $3); }
| b_expr '%' b_expr | b_expr '%' b_expr
{ $$ = makeA_Expr(OP, "%", $1, $3); } { $$ = makeA_Expr(OP, "%", $1, $3); }
| b_expr '^' b_expr | b_expr '^' b_expr
{ $$ = makeA_Expr(OP, "^", $1, $3); } { $$ = makeA_Expr(OP, "^", $1, $3); }
| b_expr '*' b_expr | b_expr '|' b_expr
{ $$ = makeA_Expr(OP, "*", $1, $3); } { $$ = makeA_Expr(OP, "|", $1, $3); }
| ':' b_expr | ':' b_expr
{ $$ = makeA_Expr(OP, ":", NULL, $2); } { $$ = makeA_Expr(OP, ":", NULL, $2); }
| ';' b_expr | ';' b_expr
@@ -4602,10 +4660,14 @@ position_expr: attr opt_indirection
{ $$ = makeA_Expr(OP, "-", $1, $3); } { $$ = makeA_Expr(OP, "-", $1, $3); }
| position_expr '/' position_expr | position_expr '/' position_expr
{ $$ = makeA_Expr(OP, "/", $1, $3); } { $$ = makeA_Expr(OP, "/", $1, $3); }
| position_expr '%' position_expr
{ $$ = makeA_Expr(OP, "%", $1, $3); }
| position_expr '*' position_expr | position_expr '*' position_expr
{ $$ = makeA_Expr(OP, "*", $1, $3); } { $$ = makeA_Expr(OP, "*", $1, $3); }
| position_expr '%' position_expr
{ $$ = makeA_Expr(OP, "%", $1, $3); }
| position_expr '^' position_expr
{ $$ = makeA_Expr(OP, "^", $1, $3); }
| position_expr '|' position_expr
{ $$ = makeA_Expr(OP, "|", $1, $3); }
| '|' position_expr | '|' position_expr
{ $$ = makeA_Expr(OP, "|", NULL, $2); } { $$ = makeA_Expr(OP, "|", NULL, $2); }
| position_expr TYPECAST Typename | position_expr TYPECAST Typename