*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