*sigh*
I actually attached the diff this time...
Chris
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]On Behalf Of Christopher
> Kings-Lynne
> Sent: Wednesday, 3 April 2002 12:26 PM
> To: Hackers
> Subject: [HACKERS] BETWEEN SYMMETRIC/ASYMMETRIC
>
>
> Hi All,
>
> As part of my ongoing quest to understand grammar files, I've
> been trying to
> implement BETWEEN SYMMETRIC/ASYMMETRIC.
>
> I've attached my current work. Can someone please look and tell me if I'm
> on the right track? With this patch, I get parse errors after
> BETWEEN if I
> go:
>
> SELECT 2 BETWEEN ASYMMETRIC 1 and 3;
>
> or
>
> SELECT 2 BETWEEN SYMMETRIC 1 and 3;
>
> So it doesn't seem to be working - I don't know why!!
>
> Don't look at the NOT BETWEEN stuff - I've not done it yet.
>
> I was forced to put SYMMETRIC and ASYMMETRIC as reserved words - anything
> else seemed to give shift/reduce errors. Is there anything I can do about
> that?
>
> Chris
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])
>
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.299
diff -c -r2.299 gram.y
*** src/backend/parser/gram.y 2002/04/01 04:35:38 2.299
--- src/backend/parser/gram.y 2002/04/03 04:21:13
***************
*** 148,154 ****
simple_select
%type <node> alter_column_default
! %type <ival> drop_behavior, opt_drop_behavior
%type <list> createdb_opt_list, createdb_opt_item
%type <boolean> opt_equal
--- 148,154 ----
simple_select
%type <node> alter_column_default
! %type <ival> drop_behavior, opt_drop_behavior, opt_asymmetry
%type <list> createdb_opt_list, createdb_opt_item
%type <boolean> opt_equal
***************
*** 344,350 ****
IMMEDIATE, INITIALLY, INOUT,
OFF, OUT,
PATH_P, PENDANT,
! REPLACE, RESTRICT,
TRIGGER,
WITHOUT
--- 344,350 ----
IMMEDIATE, INITIALLY, INOUT,
OFF, OUT,
PATH_P, PENDANT,
! REPLACE, RESTRICT, SYMMETRIC, ASYMMETRIC,
TRIGGER,
WITHOUT
***************
*** 4948,4964 ****
b->booltesttype = IS_NOT_UNKNOWN;
$$ = (Node *)b;
}
! | 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
{
$$ = makeA_Expr(OR, NULL,
! makeA_Expr(OP, "<", $1, $4),
! makeA_Expr(OP, ">", $1, $6));
}
| a_expr IN in_expr
{
--- 4948,4975 ----
b->booltesttype = IS_NOT_UNKNOWN;
$$ = (Node *)b;
}
! | a_expr BETWEEN opt_asymmetry b_expr AND b_expr
%prec BETWEEN
{
! if ($3 == SYMMETRIC)
! $$ = 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))
! );
! else
! $$ = makeA_Expr(AND, NULL,
! makeA_Expr(OP, ">=",
$1, $4),
! makeA_Expr(OP, "<=",
$1, $6));
!
}
! | a_expr NOT BETWEEN opt_asymmetry b_expr AND b_expr %prec
BETWEEN
{
$$ = makeA_Expr(OR, NULL,
! makeA_Expr(OP, "<", $1, $5),
! makeA_Expr(OP, ">", $1, $7));
}
| a_expr IN in_expr
{
***************
*** 5663,5668 ****
--- 5674,5685 ----
| /*EMPTY*/ { $$ = TRUE; }
;
+ opt_asymmetry: ASYMMETRIC { $$ = ASYMMETRIC; }
+ | SYMMETRIC { $$ =
+SYMMETRIC; }
+ | /* EMPTY */ { $$ = ASYMMETRIC; /*
+default */ }
+ ;
+
+
/*****************************************************************************
*
* target lists
***************
*** 6190,6195 ****
--- 6207,6213 ----
| AND { $$ = "and"; }
| ANY { $$ = "any"; }
| AS { $$ = "as"; }
+ | ASYMMETRIC { $$ =
+"asymmetric"; }
| ASC { $$ = "asc"; }
| BOTH { $$ = "both";
}
| CASE { $$ = "case";
}
***************
*** 6238,6243 ****
--- 6256,6262 ----
| SELECT { $$ =
"select"; }
| SESSION_USER { $$ = "session_user";
}
| SOME { $$ = "some";
}
+ | SYMMETRIC { $$ =
+"symmetric"; }
| TABLE { $$ =
"table"; }
| THEN { $$ = "then";
}
| TO { $$ = "to"; }
---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster