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 по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: subselects
Следующее
От: "Thomas G. Lockhart"
Дата:
Сообщение: Re: [HACKERS] 6.3 patches