diff -c -r --new-file pgsql.new/src/backend/parser/gram.y pgsql.old/src/backend/parser/gram.y *** pgsql.old/src/backend/parser/gram.y 2005-05-07 04:22:46.000000000 +0200 --- pgsql.new/src/backend/parser/gram.y 2005-06-01 00:05:37.000000000 +0200 *************** *** 338,344 **** /* ordinary key words in alphabetical order */ %token ABORT_P ABSOLUTE_P ACCESS ACTION ADD AFTER AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC ! ASSERTION ASSIGNMENT AT AUTHORIZATION BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT BOOLEAN_P BOTH BY --- 338,344 ---- /* ordinary key words in alphabetical order */ %token ABORT_P ABSOLUTE_P ACCESS ACTION ADD AFTER AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC ! ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT BOOLEAN_P BOTH BY *************** *** 399,405 **** SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT ! STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SYSID TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP TO TOAST TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P --- 399,406 ---- SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT ! STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SYMMETRIC ! SYSID TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP TO TOAST TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P *************** *** 6341,6358 **** { $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "!=", $1, (Node *) $6); } ! | a_expr BETWEEN b_expr AND b_expr %prec BETWEEN { $$ = (Node *) makeA_Expr(AEXPR_AND, NIL, ! (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $3), ! (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $5)); } ! | a_expr NOT BETWEEN b_expr AND b_expr %prec BETWEEN { $$ = (Node *) makeA_Expr(AEXPR_OR, NIL, ! (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $4), ! (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $6)); } | a_expr IN_P in_expr { /* in_expr returns a SubLink or a list of a_exprs */ --- 6342,6382 ---- { $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "!=", $1, (Node *) $6); } ! | a_expr BETWEEN opt_asymmetric b_expr AND b_expr %prec BETWEEN { $$ = (Node *) makeA_Expr(AEXPR_AND, NIL, ! (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $4), ! (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $6)); } ! | a_expr NOT BETWEEN opt_asymmetric b_expr AND b_expr %prec BETWEEN { $$ = (Node *) makeA_Expr(AEXPR_OR, NIL, ! (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $5), ! (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $7)); } + + | a_expr BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN + { + $$ = (Node *) makeA_Expr(AEXPR_OR, NIL, + (Node *) makeA_Expr(AEXPR_AND, NIL, + (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $4), + (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $6)), + (Node *) makeA_Expr(AEXPR_AND, NIL, + (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $6), + (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $4))); + } + | a_expr NOT BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN + { + $$ = (Node *) makeA_Expr(AEXPR_OR, NIL, + (Node *) makeA_Expr(AEXPR_AND, NIL, + (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $5), + (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $7)), + (Node *) makeA_Expr(AEXPR_AND, NIL, + (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $7), + (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $5))); + } + + | a_expr IN_P in_expr { /* in_expr returns a SubLink or a list of a_exprs */ *************** *** 6451,6456 **** --- 6475,6485 ---- } ; + opt_asymmetric: ASYMMETRIC {} + | /*EMPTY*/ {} + ; + + /* * Restricted expressions * diff -c -r --new-file pgsql.old/src/backend/parser/keywords.c pgsql.new/src/backend/parser/keywords.c *** pgsql.old/src/backend/parser/keywords.c 2005-05-07 04:22:47.000000000 +0200 --- pgsql.new/src/backend/parser/keywords.c 2005-05-31 22:39:44.000000000 +0200 *************** *** 49,54 **** --- 49,55 ---- {"asc", ASC}, {"assertion", ASSERTION}, {"assignment", ASSIGNMENT}, + {"asymmetric", ASYMMETRIC}, {"at", AT}, {"authorization", AUTHORIZATION}, {"backward", BACKWARD}, *************** *** 296,301 **** --- 297,303 ---- {"storage", STORAGE}, {"strict", STRICT_P}, {"substring", SUBSTRING}, + {"symmetric", SYMMETRIC}, {"sysid", SYSID}, {"table", TABLE}, {"tablespace", TABLESPACE},