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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy