Re: [HACKERS] Re: subselects - Mailing list pgsql-hackers

From Thomas G. Lockhart
Subject Re: [HACKERS] Re: subselects
Date
Msg-id 34B85F68.9C015ED9@alumni.caltech.edu
Whole thread Raw
In response to Re: subselects  (Bruce Momjian <maillist@candle.pha.pa.us>)
List 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 by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: subselects
Next
From: "Thomas G. Lockhart"
Date:
Subject: Re: [HACKERS] 6.3 patches