Re: [HACKERS] Re: subselects
От | Thomas G. Lockhart |
---|---|
Тема | Re: [HACKERS] Re: subselects |
Дата | |
Msg-id | 34B85F68.9C015ED9@alumni.caltech.edu обсуждение исходный текст |
Ответ на | Re: subselects (Bruce Momjian <maillist@candle.pha.pa.us>) |
Список | pgsql-hackers |
Here are context diffs of gram.y and keywords.c; sorry about sending the full files. These start sending lists of arguments toward the backend from the parser to implement row descriptors and subselects. They should apply OK even over Bruce's recent changes... - Tom *** ../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; } ; *** ../src/backend/parser/keywords.c.orig Mon Jan 5 07:51:33 1998 --- ../src/backend/parser/keywords.c Sat Jan 10 19:22:07 1998 *************** *** 39,44 **** --- 39,45 ---- {"alter", ALTER}, {"analyze", ANALYZE}, {"and", AND}, + {"any", ANY}, {"append", APPEND}, {"archive", ARCHIVE}, {"as", AS}, *************** *** 178,183 **** --- 179,185 ---- {"set", SET}, {"setof", SETOF}, {"show", SHOW}, + {"some", SOME}, {"stdin", STDIN}, {"stdout", STDOUT}, {"substring", SUBSTRING},
В списке pgsql-hackers по дате отправления: