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"; }