Re: patch between symmetric (add doc) - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: patch between symmetric (add doc)
Date
Msg-id 200506142347.j5ENlqn18861@candle.pha.pa.us
Whole thread Raw
In response to patch between symmetric (add doc)  (Pavel Stehule <stehule@kix.fsv.cvut.cz>)
List pgsql-patches
Pavel Stehule wrote:
> Hello
>
>     I add doc and removed words symmetric and asymmetric from
> keywords. Corrected boolean expression too. This patch don't solve some
> problems: multiple evaluation of arguments, but its trivial and work with
> bitmap indexes.

Docs adjusted and patch applied.  Thanks.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/func.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/func.sgml,v
retrieving revision 1.255
diff -c -c -r1.255 func.sgml
*** doc/src/sgml/func.sgml    14 Jun 2005 21:04:38 -0000    1.255
--- doc/src/sgml/func.sgml    14 Jun 2005 23:46:19 -0000
***************
*** 282,287 ****
--- 282,293 ----
      There is no difference between the two respective forms apart from
      the <acronym>CPU</acronym> cycles required to rewrite the first one
      into the second one internally.
+     <indexterm>
+      <primary>BETWEEN SYMETRIC</primary>
+     </indexterm>
+     <token>BETWEEN SYMMETRIC</> is the same as <literal>BETWEEN</>
+     except there is no requirement that the argument to the left of <literal>AND</> be less than
+     or equal to the argument on the right;  the proper range is automatically determined.
     </para>

     <para>
Index: src/backend/parser/gram.y
===================================================================
RCS file: /cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.492
diff -c -c -r2.492 gram.y
*** src/backend/parser/gram.y    8 Jun 2005 21:15:28 -0000    2.492
--- src/backend/parser/gram.y    14 Jun 2005 23:46:23 -0000
***************
*** 338,344 ****
  /* ordinary key words in alphabetical order */
  %token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD AFTER
      AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC
!     ASSERTION ASSIGNMENT AT AUTHORIZATION

      BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
      BOOLEAN_P BOTH BY
--- 338,344 ----
  /* ordinary key words in alphabetical order */
  %token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD AFTER
      AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC
!     ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION

      BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
      BOOLEAN_P BOTH BY
***************
*** 399,405 ****
      SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE
      SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
      SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT
!     STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SYSID

      TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP
      TO TOAST TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P
--- 399,406 ----
      SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE
      SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
      SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT
!     STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SYMMETRIC
!     SYSID

      TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP
      TO TOAST TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P
***************
*** 6333,6350 ****
                  {
                      $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "!=", $1, (Node *) $6);
                  }
!             | a_expr BETWEEN b_expr AND b_expr            %prec BETWEEN
                  {
                      $$ = (Node *) makeA_Expr(AEXPR_AND, NIL,
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $3),
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $5));
                  }
!             | a_expr NOT BETWEEN b_expr AND b_expr        %prec BETWEEN
                  {
                      $$ = (Node *) makeA_Expr(AEXPR_OR, NIL,
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $4),
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $6));
                  }
              | a_expr IN_P in_expr
                  {
                      /* in_expr returns a SubLink or a list of a_exprs */
--- 6334,6374 ----
                  {
                      $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "!=", $1, (Node *) $6);
                  }
!             | a_expr BETWEEN opt_asymmetric b_expr AND b_expr            %prec BETWEEN
                  {
                      $$ = (Node *) makeA_Expr(AEXPR_AND, NIL,
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $4),
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $6));
                  }
!             | a_expr NOT BETWEEN opt_asymmetric b_expr AND b_expr        %prec BETWEEN
                  {
                      $$ = (Node *) makeA_Expr(AEXPR_OR, NIL,
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $5),
!                         (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $7));
                  }
+
+             | a_expr BETWEEN SYMMETRIC b_expr AND b_expr            %prec BETWEEN
+                 {
+                     $$ = (Node *) makeA_Expr(AEXPR_OR, NIL,
+                         (Node *) makeA_Expr(AEXPR_AND, NIL,
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $4),
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $6)),
+                         (Node *) makeA_Expr(AEXPR_AND, NIL,
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $6),
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $4)));
+                 }
+             | a_expr NOT BETWEEN SYMMETRIC b_expr AND b_expr        %prec BETWEEN
+                 {
+                     $$ = (Node *) makeA_Expr(AEXPR_AND, NIL,
+                         (Node *) makeA_Expr(AEXPR_OR, NIL,
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $5),
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $7)),
+                         (Node *) makeA_Expr(AEXPR_OR, NIL,
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $7),
+                             (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $5)));
+                 }
+
+
              | a_expr IN_P in_expr
                  {
                      /* in_expr returns a SubLink or a list of a_exprs */
***************
*** 6443,6448 ****
--- 6467,6477 ----
                  }
          ;

+ opt_asymmetric:        ASYMMETRIC                                    {}
+                 | /*EMPTY*/                                {}
+         ;
+
+
  /*
   * Restricted expressions
   *
***************
*** 7721,7726 ****
--- 7750,7756 ----
              | ALTER
              | ASSERTION
              | ASSIGNMENT
+             | ASYMMETRIC
              | AT
              | BACKWARD
              | BEFORE
***************
*** 7867,7872 ****
--- 7897,7903 ----
              | STDIN
              | STDOUT
              | STORAGE
+             | SYMMETRIC
              | SYSID
              | STRICT_P
              | TABLESPACE
Index: src/backend/parser/keywords.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/parser/keywords.c,v
retrieving revision 1.155
diff -c -c -r1.155 keywords.c
*** src/backend/parser/keywords.c    7 May 2005 02:22:47 -0000    1.155
--- src/backend/parser/keywords.c    14 Jun 2005 23:46:24 -0000
***************
*** 49,54 ****
--- 49,55 ----
      {"asc", ASC},
      {"assertion", ASSERTION},
      {"assignment", ASSIGNMENT},
+     {"asymmetric", ASYMMETRIC},
      {"at", AT},
      {"authorization", AUTHORIZATION},
      {"backward", BACKWARD},
***************
*** 296,301 ****
--- 297,303 ----
      {"storage", STORAGE},
      {"strict", STRICT_P},
      {"substring", SUBSTRING},
+     {"symmetric", SYMMETRIC},
      {"sysid", SYSID},
      {"table", TABLE},
      {"tablespace", TABLESPACE},

pgsql-patches by date:

Previous
From: Simon Riggs
Date:
Subject: Re: indxpath.c refactoring
Next
From: Bruce Momjian
Date:
Subject: Re: psql: \d+ show tablespace of indices