*** ../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 row_descriptor, row_list %type row_expr + %type RowOp, row_opt %type OptCreateAs, CreateAsList %type CreateAsElement %type 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; } ;