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])
