gram.y.patch
text/plain
*** ../src/backend/parser/gram.y.orig Sat Jan 10 05:44:36 1998
--- ../src/backend/parser/gram.y Sat Jan 10 19:29:37 1998
***************
*** 195,200 ****
--- 195,201 ----
having_clause
%type <list> row_descriptor, row_list
%type <node> row_expr
+ %type <str> RowOp, row_opt
%type <list> OptCreateAs, CreateAsList
%type <node> CreateAsElement
%type <value> NumConst
***************
*** 242,248 ****
*/
/* Keywords (in SQL92 reserved words) */
! %token ACTION, ADD, ALL, ALTER, AND, AS, ASC,
BEGIN_TRANS, BETWEEN, BOTH, BY,
CASCADE, CAST, CHAR, CHARACTER, CHECK, CLOSE, COLLATE, COLUMN, COMMIT,
CONSTRAINT, CREATE, CROSS, CURRENT, CURRENT_DATE, CURRENT_TIME,
--- 243,249 ----
*/
/* Keywords (in SQL92 reserved words) */
! %token ACTION, ADD, ALL, ALTER, AND, ANY, AS, ASC,
BEGIN_TRANS, BETWEEN, BOTH, BY,
CASCADE, CAST, CHAR, CHARACTER, CHECK, CLOSE, COLLATE, COLUMN, COMMIT,
CONSTRAINT, CREATE, CROSS, CURRENT, CURRENT_DATE, CURRENT_TIME,
***************
*** 258,264 ****
ON, OPTION, OR, ORDER, OUTER_P,
PARTIAL, POSITION, PRECISION, PRIMARY, PRIVILEGES, PROCEDURE, PUBLIC,
REFERENCES, REVOKE, RIGHT, ROLLBACK,
! SECOND_P, SELECT, SET, SUBSTRING,
TABLE, TIME, TIMESTAMP, TO, TRAILING, TRANSACTION, TRIM,
UNION, UNIQUE, UPDATE, USING,
VALUES, VARCHAR, VARYING, VERBOSE, VERSION, VIEW,
--- 259,265 ----
ON, OPTION, OR, ORDER, OUTER_P,
PARTIAL, POSITION, PRECISION, PRIMARY, PRIVILEGES, PROCEDURE, PUBLIC,
REFERENCES, REVOKE, RIGHT, ROLLBACK,
! SECOND_P, SELECT, SET, SOME, SUBSTRING,
TABLE, TIME, TIMESTAMP, TO, TRAILING, TRANSACTION, TRIM,
UNION, UNIQUE, UPDATE, USING,
VALUES, VARCHAR, VARYING, VERBOSE, VERSION, VIEW,
***************
*** 2853,2866 ****
/* Expressions using row descriptors
* Define row_descriptor to allow yacc to break the reduce/reduce conflict
* with singleton expressions.
*/
row_expr: '(' row_descriptor ')' IN '(' SubSelect ')'
{
! $$ = NULL;
}
| '(' row_descriptor ')' NOT IN '(' SubSelect ')'
{
! $$ = NULL;
}
| '(' row_descriptor ')' '=' '(' row_descriptor ')'
{
--- 2854,2878 ----
/* Expressions using row descriptors
* Define row_descriptor to allow yacc to break the reduce/reduce conflict
* with singleton expressions.
+ *
+ * Note that "SOME" is the same as "ANY" in syntax.
+ * - thomas 1998-01-10
*/
row_expr: '(' row_descriptor ')' IN '(' SubSelect ')'
{
! $$ = makeA_Expr(OP, "=any", (Node *)$2, (Node *)$6);
}
| '(' row_descriptor ')' NOT IN '(' SubSelect ')'
{
! $$ = makeA_Expr(OP, "<>any", (Node *)$2, (Node *)$7);
! }
! | '(' row_descriptor ')' RowOp row_opt '(' SubSelect ')'
! {
! char *opr;
! opr = palloc(strlen($4)+strlen($5)+1);
! strcpy(opr, $4);
! strcat(opr, $5);
! $$ = makeA_Expr(OP, opr, (Node *)$2, (Node *)$7);
}
| '(' row_descriptor ')' '=' '(' row_descriptor ')'
{
***************
*** 2880,2885 ****
--- 2892,2907 ----
}
;
+ RowOp: '=' { $$ = "="; }
+ | '<' { $$ = "<"; }
+ | '>' { $$ = ">"; }
+ ;
+
+ row_opt: ALL { $$ = "all"; }
+ | ANY { $$ = "any"; }
+ | SOME { $$ = "any"; }
+ ;
+
row_descriptor: row_list ',' a_expr
{
$$ = lappend($1, $3);
***************
*** 3432,3441 ****
;
in_expr: SubSelect
! {
! elog(ERROR,"IN (SUBSELECT) not yet implemented");
! $$ = $1;
! }
| in_expr_nodes
{ $$ = $1; }
;
--- 3454,3460 ----
;
in_expr: SubSelect
! { $$ = makeA_Expr(OP, "=", saved_In_Expr, (Node *)$1); }
| in_expr_nodes
{ $$ = $1; }
;
***************
*** 3449,3458 ****
;
not_in_expr: SubSelect
! {
! elog(ERROR,"NOT IN (SUBSELECT) not yet implemented");
! $$ = $1;
! }
| not_in_expr_nodes
{ $$ = $1; }
;
--- 3468,3474 ----
;
not_in_expr: SubSelect
! { $$ = makeA_Expr(OP, "<>", saved_In_Expr, (Node *)$1); }
| not_in_expr_nodes
{ $$ = $1; }
;