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 alter_column_default ! %type drop_behavior, opt_drop_behavior %type createdb_opt_list, createdb_opt_item %type opt_equal --- 148,154 ---- simple_select %type alter_column_default ! %type drop_behavior, opt_drop_behavior, opt_asymmetry %type createdb_opt_list, createdb_opt_item %type 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"; }