Hi all,

I've attached a patch for doing BETWEEN SYM/ASYM, however it just doesn't
work!!!

test=# select 2 between 1 and 3;
 ?column?
----------
 t
(1 row)

test=# select 2 between 3 and 1;
 ?column?
----------
 f
(1 row)

test=# select 2 between symmetric 3 and 1;
ERROR:  parser: parse error at or near "3"
test=# select 2 between asymmetric 3 and 1;
ERROR:  parser: parse error at or near "3"
test=# select 2 not between  3 and 1;
 ?column?
----------
 t
(1 row)

test=# select 2 not between symmetric 3 and 1;
ERROR:  parser: parse error at or near "3"

Can anyone see what's wrong?

Chris
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.301
diff -c -r2.301 gram.y
*** src/backend/parser/gram.y   2002/04/09 20:35:51     2.301
--- src/backend/parser/gram.y   2002/04/10 02:58:38
***************
*** 346,352 ****
                IMMEDIATE, INITIALLY, INOUT,
                OFF, OUT,
                PATH_P, PENDANT,
!               REPLACE, RESTRICT,
          TRIGGER,
                WITHOUT
  
--- 346,352 ----
                IMMEDIATE, INITIALLY, INOUT,
                OFF, OUT,
                PATH_P, PENDANT,
!               REPLACE, RESTRICT, SYMMETRIC, ASYMMETRIC,
          TRIGGER,
                WITHOUT
  
***************
*** 4916,4923 ****
                | a_expr BETWEEN b_expr AND b_expr                      %prec BETWEEN
                                {
                                        $$ = makeA_Expr(AND, NULL,
!                                               makeA_Expr(OP, ">=", $1, $3),
!                                               makeA_Expr(OP, "<=", $1, $5));
                                }
                | a_expr NOT BETWEEN b_expr AND b_expr          %prec BETWEEN
                                {
--- 4916,4942 ----
                | a_expr BETWEEN b_expr AND b_expr                      %prec BETWEEN
                                {
                                        $$ = makeA_Expr(AND, NULL,
!                                                       makeA_Expr(OP, ">=", $1, $3),
!                                                       makeA_Expr(OP, "<=", $1, $5));
! 
!                               }
!               | a_expr BETWEEN ASYMMETRIC b_expr AND b_expr                   %prec 
BETWEEN
!                               {
!                                       $$ = makeA_Expr(AND, NULL,
!                                                       makeA_Expr(OP, ">=", $1, $4),
!                                                       makeA_Expr(OP, "<=", $1, $6));
! 
!                               }
!               | a_expr BETWEEN SYMMETRIC b_expr AND b_expr                    %prec 
BETWEEN
!                               {
!                                       $$ = makeA_Expr(OR, NULL,
!                                               makeA_Expr(AND, NULL,
!                                                       makeA_Expr(OP, ">=", $1, $4),
!                                                       makeA_Expr(OP, "<=", $1, $6)),
!                                               makeA_Expr(AND, NULL,
!                                                       makeA_Expr(OP, ">=", $1, $6),
!                                                       makeA_Expr(OP, "<=", $1, $4))
!                                       );
                                }
                | a_expr NOT BETWEEN b_expr AND b_expr          %prec BETWEEN
                                {
***************
*** 4925,4930 ****
--- 4944,4966 ----
                                                makeA_Expr(OP, "<", $1, $4),
                                                makeA_Expr(OP, ">", $1, $6));
                                }
+               | a_expr NOT BETWEEN ASYMMETRIC b_expr AND b_expr               %prec 
+BETWEEN
+                               {
+                                       $$ = makeA_Expr(OR, NULL,
+                                               makeA_Expr(OP, "<", $1, $5),
+                                               makeA_Expr(OP, ">", $1, $7));
+                               }
+               | a_expr NOT BETWEEN SYMMETRIC b_expr AND b_expr                %prec 
+BETWEEN
+                               {
+                                       $$ = makeA_Expr(AND, NULL,
+                                               makeA_Expr(OR, NULL,
+                                                       makeA_Expr(OP, "<", $1, $5),
+                                                       makeA_Expr(OP, ">", $1, $7)),
+                                               makeA_Expr(OR, NULL,
+                                                       makeA_Expr(OP, "<", $1, $7),
+                                                       makeA_Expr(OP, ">", $1, $5))
+                                       );
+                               }
                | a_expr IN in_expr
                                {
                                        /* in_expr returns a SubLink or a list of 
a_exprs */
***************
*** 6093,6099 ****
   * looks too much like a function call for an LR(1) parser.
   */
  col_name_keyword:
!                 BIT                                                   { $$ = "bit"; }
                | CHAR                                                  { $$ = "char"; 
}
                | CHARACTER                                             { $$ = 
"character"; }
                | COALESCE                                              { $$ = 
"coalesce"; }
--- 6129,6135 ----
   * looks too much like a function call for an LR(1) parser.
   */
  col_name_keyword:
!                BIT                                                    { $$ = "bit"; }
                | CHAR                                                  { $$ = "char"; 
}
                | CHARACTER                                             { $$ = 
"character"; }
                | COALESCE                                              { $$ = 
"coalesce"; }
***************
*** 6127,6133 ****
   *  - thomas 2000-11-28
   */
  func_name_keyword:
!                 AUTHORIZATION                                 { $$ = 
"authorization"; }
                | BETWEEN                                               { $$ = 
"between"; }
                | BINARY                                                { $$ = 
"binary"; }
                | CROSS                                                 { $$ = 
"cross"; }
--- 6163,6169 ----
   *  - thomas 2000-11-28
   */
  func_name_keyword:
!                AUTHORIZATION                                  { $$ = 
"authorization"; }
                | BETWEEN                                               { $$ = 
"between"; }
                | BINARY                                                { $$ = 
"binary"; }
                | CROSS                                                 { $$ = 
"cross"; }
***************
*** 6163,6168 ****
--- 6199,6205 ----
                | AND                                                   { $$ = "and"; }
                | ANY                                                   { $$ = "any"; }
                | AS                                                    { $$ = "as"; }
+               | ASYMMETRIC                                            { $$ = 
+"asymmetric"; }
                | ASC                                                   { $$ = "asc"; }
                | BOTH                                                  { $$ = "both"; 
}
                | CASE                                                  { $$ = "case"; 
}
***************
*** 6211,6216 ****
--- 6248,6254 ----
                | SELECT                                                { $$ = 
"select"; }
                | SESSION_USER                                  { $$ = "session_user"; 
}
                | SOME                                                  { $$ = "some"; 
}
+               | SYMMETRIC                                             { $$ = 
+"symmetric"; }
                | TABLE                                                 { $$ = 
"table"; }
                | THEN                                                  { $$ = "then"; 
}
                | TO                                                    { $$ = "to"; }

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to