Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 8b84aeb

Browse files
committed
Add BETWEEN SYMMETRIC.
Pavel Stehule
1 parent 495f9aa commit 8b84aeb

File tree

3 files changed

+50
-11
lines changed

3 files changed

+50
-11
lines changed

doc/src/sgml/func.sgml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.255 2005/06/14 21:04:38 momjian Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.256 2005/06/14 23:47:39 momjian Exp $
33
PostgreSQL documentation
44
-->
55

@@ -282,6 +282,12 @@ PostgreSQL documentation
282282
There is no difference between the two respective forms apart from
283283
the <acronym>CPU</acronym> cycles required to rewrite the first one
284284
into the second one internally.
285+
<indexterm>
286+
<primary>BETWEEN SYMETRIC</primary>
287+
</indexterm>
288+
<token>BETWEEN SYMMETRIC</> is the same as <literal>BETWEEN</>
289+
except there is no requirement that the argument to the left of <literal>AND</> be less than
290+
or equal to the argument on the right; the proper range is automatically determined.
285291
</para>
286292

287293
<para>

src/backend/parser/gram.y

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.492 2005/06/08 21:15:28 tgl Exp $
14+
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.493 2005/06/14 23:47:39 momjian Exp $
1515
*
1616
* HISTORY
1717
* AUTHOR DATE MAJOR EVENT
@@ -338,7 +338,7 @@ static void doNegateFloat(Value *v);
338338
/* ordinary key words in alphabetical order */
339339
%token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD AFTER
340340
AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC
341-
ASSERTION ASSIGNMENT AT AUTHORIZATION
341+
ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION
342342

343343
BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
344344
BOOLEAN_P BOTH BY
@@ -399,7 +399,8 @@ static void doNegateFloat(Value *v);
399399
SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE
400400
SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
401401
SHOW SIMILAR SIMPLE SMALLINT SOME STABLE START STATEMENT
402-
STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SYSID
402+
STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SYMMETRIC
403+
SYSID
403404

404405
TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP
405406
TO TOAST TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P
@@ -6333,18 +6334,41 @@ a_expr: c_expr { $$ = $1; }
63336334
{
63346335
$$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "!=", $1, (Node *) $6);
63356336
}
6336-
| a_expr BETWEEN b_expr AND b_expr %prec BETWEEN
6337+
| a_expr BETWEEN opt_asymmetric b_expr AND b_expr %prec BETWEEN
63376338
{
63386339
$$ = (Node *) makeA_Expr(AEXPR_AND, NIL,
6339-
(Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $3),
6340-
(Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $5));
6340+
(Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $4),
6341+
(Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $6));
63416342
}
6342-
| a_expr NOT BETWEEN b_expr AND b_expr %prec BETWEEN
6343+
| a_expr NOT BETWEEN opt_asymmetric b_expr AND b_expr %prec BETWEEN
63436344
{
63446345
$$ = (Node *) makeA_Expr(AEXPR_OR, NIL,
6345-
(Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $4),
6346-
(Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $6));
6346+
(Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $5),
6347+
(Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $7));
63476348
}
6349+
6350+
| a_expr BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN
6351+
{
6352+
$$ = (Node *) makeA_Expr(AEXPR_OR, NIL,
6353+
(Node *) makeA_Expr(AEXPR_AND, NIL,
6354+
(Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $4),
6355+
(Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $6)),
6356+
(Node *) makeA_Expr(AEXPR_AND, NIL,
6357+
(Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $6),
6358+
(Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $4)));
6359+
}
6360+
| a_expr NOT BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN
6361+
{
6362+
$$ = (Node *) makeA_Expr(AEXPR_AND, NIL,
6363+
(Node *) makeA_Expr(AEXPR_OR, NIL,
6364+
(Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $5),
6365+
(Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $7)),
6366+
(Node *) makeA_Expr(AEXPR_OR, NIL,
6367+
(Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $7),
6368+
(Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $5)));
6369+
}
6370+
6371+
63486372
| a_expr IN_P in_expr
63496373
{
63506374
/* in_expr returns a SubLink or a list of a_exprs */
@@ -6443,6 +6467,11 @@ a_expr: c_expr { $$ = $1; }
64436467
}
64446468
;
64456469

6470+
opt_asymmetric: ASYMMETRIC {}
6471+
| /*EMPTY*/ {}
6472+
;
6473+
6474+
64466475
/*
64476476
* Restricted expressions
64486477
*
@@ -7721,6 +7750,7 @@ unreserved_keyword:
77217750
| ALTER
77227751
| ASSERTION
77237752
| ASSIGNMENT
7753+
| ASYMMETRIC
77247754
| AT
77257755
| BACKWARD
77267756
| BEFORE
@@ -7867,6 +7897,7 @@ unreserved_keyword:
78677897
| STDIN
78687898
| STDOUT
78697899
| STORAGE
7900+
| SYMMETRIC
78707901
| SYSID
78717902
| STRICT_P
78727903
| TABLESPACE

src/backend/parser/keywords.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.155 2005/05/07 02:22:47 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.156 2005/06/14 23:47:39 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -49,6 +49,7 @@ static const ScanKeyword ScanKeywords[] = {
4949
{"asc", ASC},
5050
{"assertion", ASSERTION},
5151
{"assignment", ASSIGNMENT},
52+
{"asymmetric", ASYMMETRIC},
5253
{"at", AT},
5354
{"authorization", AUTHORIZATION},
5455
{"backward", BACKWARD},
@@ -296,6 +297,7 @@ static const ScanKeyword ScanKeywords[] = {
296297
{"storage", STORAGE},
297298
{"strict", STRICT_P},
298299
{"substring", SUBSTRING},
300+
{"symmetric", SYMMETRIC},
299301
{"sysid", SYSID},
300302
{"table", TABLE},
301303
{"tablespace", TABLESPACE},

0 commit comments

Comments
 (0)