Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita4656b3

Browse files
committed
anyelements works for arrays
1 parent003fb02 commita4656b3

File tree

4 files changed

+59
-9
lines changed

4 files changed

+59
-9
lines changed

‎src/backend/parser/gram.y

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -659,9 +659,9 @@ static SelectStmt * makeElementSubselect(Node *of, const char *aliasname,
659659
* NOT_LA exists so that productions such as NOT LIKE can be given the same
660660
* precedence as LIKE; otherwise they'd effectively have the same precedence
661661
* as NOT, at least with respect to their left-hand subexpression.
662-
* NULLS_LAandWITH_LA are needed to make the grammar LALR(1).
662+
* NULLS_LA, WITH_LAandANY_EL are needed to make the grammar LALR(1).
663663
*/
664-
%tokenNOT_LANULLS_LAWITH_LA
664+
%tokenNOT_LANULLS_LAWITH_LAANY_EL
665665

666666

667667
/* Precedence: lowest to highest*/
@@ -726,8 +726,6 @@ static SelectStmt * makeElementSubselect(Node *of, const char *aliasname,
726726
%leftJOINCROSSLEFTFULLRIGHTINNER_PNATURAL
727727
/* kluge to keep xml_whitespace_option from causing shift/reduce conflicts*/
728728
%rightPRESERVESTRIP_P
729-
%rightELEMENT
730-
%nonassocANY
731729

732730
%%
733731

@@ -12060,7 +12058,7 @@ c_expr:columnref{ $$ = $1; }
1206012058
g->location =@1;
1206112059
$$ = (Node *)g;
1206212060
}
12063-
|ANYELEMENTOFa_exprASColIdSATISFIES'('a_expr')'
12061+
|ANY_ELELEMENTOFb_exprASColIdSATISFIES'('a_expr')'
1206412062
{
1206512063
SubLink*n = makeNode(SubLink);
1206612064

@@ -12072,7 +12070,7 @@ c_expr:columnref{ $$ = $1; }
1207212070
n->location =@1;
1207312071
$$ = (Node *)n;
1207412072
}
12075-
|EACHELEMENTOFa_exprASColIdSATISFIES'('a_expr')'
12073+
|EACHELEMENTOFb_exprASColIdSATISFIES'('a_expr')'
1207612074
{
1207712075
SubLink*n = makeNode(SubLink);
1207812076

‎src/backend/parser/parser.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,16 @@ base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner)
107107
*/
108108
switch (cur_token)
109109
{
110+
caseANY:
110111
caseNOT:
111112
cur_token_length=3;
112113
break;
113-
caseNULLS_P:
114-
cur_token_length=5;
115-
break;
116114
caseWITH:
117115
cur_token_length=4;
118116
break;
117+
caseNULLS_P:
118+
cur_token_length=5;
119+
break;
119120
default:
120121
returncur_token;
121122
}
@@ -189,6 +190,10 @@ base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner)
189190
break;
190191
}
191192
break;
193+
caseANY:
194+
if (next_token==ELEMENT)
195+
cur_token=ANY_EL;
196+
break;
192197
}
193198

194199
returncur_token;

‎src/test/regress/expected/arrays.out

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,47 @@ SELECT * FROM array_op_test WHERE t <@ '{}' ORDER BY seqno;
943943
101 | {} | {}
944944
(1 row)
945945

946+
--each/any element
947+
SELECT * FROM array_op_test WHERE ANY ELEMENT OF t AS e SATISFIES (e = 'AAAAAAAAAAAAAAAAA764') ORDER BY seqno;
948+
seqno | i | t
949+
-------+--------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------
950+
11 | {41,86,74,48,22,74,47,50} | {AAAAAAAA9523,AAAAAAAAAAAA37562,AAAAAAAAAAAAAAAA14047,AAAAAAAAAAA46154,AAAA41702,AAAAAAAAAAAAAAAAA764,AAAAA62737,39557}
951+
23 | {40,90,5,38,72,40,30,10,43,55} | {A6053,AAAAAAAAAAA6119,AA44673,AAAAAAAAAAAAAAAAA764,AA17009,AAAAA17383,AAAAA70514,AAAAA33250,AAAAA95309,AAAAAAAAAAAA37562}
952+
52 | {89,0} | {AAAAAAAAAAAAAAAAAA47955,AAAAAAA48038,AAAAAAAAAAAAAAAAA43052,AAAAAAAAAAAAA73084,AAAAA70466,AAAAAAAAAAAAAAAAA764,AAAAAAAAAAA46154,AA66862}
953+
95 | {47,77} | {AAAAAAAAAAAAAAAAA764,AAAAAAAAAAA74076,AAAAAAAAAA18107,AAAAA40681,AAAAAAAAAAAAAAA35875,AAAAA60038,AAAAAAA56483}
954+
(4 rows)
955+
956+
SELECT * FROM array_op_test WHERE ANY ELEMENT OF i AS e SATISFIES (e = 11) ORDER BY seqno;
957+
seqno | i | t
958+
-------+--------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------
959+
3 | {37,64,95,43,3,41,13,30,11,43} | {AAAAAAAAAA48845,AAAAA75968,AAAAA95309,AAA54451,AAAAAAAAAA22292,AAAAAAA99836,A96617,AA17009,AAAAAAAAAAAAAA95246}
960+
16 | {14,63,85,11} | {AAAAAA66777}
961+
22 | {11,6,56,62,53,30} | {AAAAAAAA72908}
962+
25 | {31,1,10,11,27,79,38} | {AAAAAAAAAAAAAAAAAA59334,45449}
963+
37 | {53,11,81,39,3,78,58,64,74} | {AAAAAAAAAAAAAAAAAAA17075,AAAAAAA66161,AAAAAAAA23648,AAAAAAAAAAAAAA10611}
964+
63 | {11,4,61,87} | {AAAAAAAAA27249,AAAAAAAAAAAAAAAAAA32918,AAAAAAAAAAAAAAA13198,AAA20874,39557,51533,AAAAAAAAAAA53908,AAAAAAAAAAAAAA96505,AAAAAAAA78938}
965+
84 | {11,83,35,13,96,94} | {AAAAA95309,AAAAAAAAAAAAAAAAAA32918,AAAAAAAAAAAAAAAAAA24183}
966+
93 | {11} | {AAAAAAAAAAA176,AAAAAAAAAAAAAA8666,AAAAAAAAAAAAAAA453,AAAAAAAAAAAAA85723,A68938,AAAAAAAAAAAAA9821,AAAAAAA48038,AAAAAAAAAAAAAAAAA59387,AA99927,AAAAA17383}
967+
(8 rows)
968+
969+
SELECT * FROM array_op_test WHERE EACH ELEMENT OF t AS e SATISFIES (e = 'AAAAAA66777') ORDER BY seqno;
970+
seqno | i | t
971+
-------+---------------+---------------
972+
16 | {14,63,85,11} | {AAAAAA66777}
973+
101 | {} | {}
974+
102 | {NULL} | {NULL}
975+
103 | |
976+
(4 rows)
977+
978+
SELECT * FROM array_op_test WHERE EACH ELEMENT OF i AS e SATISFIES (e = 11) ORDER BY seqno;
979+
seqno | i | t
980+
-------+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------
981+
93 | {11} | {AAAAAAAAAAA176,AAAAAAAAAAAAAA8666,AAAAAAAAAAAAAAA453,AAAAAAAAAAAAA85723,A68938,AAAAAAAAAAAAA9821,AAAAAAA48038,AAAAAAAAAAAAAAAAA59387,AA99927,AAAAA17383}
982+
101 | {} | {}
983+
102 | {NULL} | {NULL}
984+
103 | |
985+
(4 rows)
986+
946987
-- array casts
947988
SELECT ARRAY[1,2,3]::text[]::int[]::float8[] AS "{1,2,3}";
948989
{1,2,3}

‎src/test/regress/sql/arrays.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,12 @@ SELECT * FROM array_op_test WHERE t @> '{}' ORDER BY seqno;
260260
SELECT*FROM array_op_testWHERE t &&'{}'ORDER BY seqno;
261261
SELECT*FROM array_op_testWHERE t<@'{}'ORDER BY seqno;
262262

263+
--each/any element
264+
SELECT*FROM array_op_testWHERE ANY ELEMENT OF tAS e SATISFIES (e='AAAAAAAAAAAAAAAAA764')ORDER BY seqno;
265+
SELECT*FROM array_op_testWHERE ANY ELEMENT OF iAS e SATISFIES (e=11)ORDER BY seqno;
266+
SELECT*FROM array_op_testWHERE EACH ELEMENT OF tAS e SATISFIES (e='AAAAAA66777')ORDER BY seqno;
267+
SELECT*FROM array_op_testWHERE EACH ELEMENT OF iAS e SATISFIES (e=11)ORDER BY seqno;
268+
263269
-- array casts
264270
SELECT ARRAY[1,2,3]::text[]::int[]::float8[]AS"{1,2,3}";
265271
SELECT ARRAY[1,2,3]::text[]::int[]::float8[] is of (float8[])as"TRUE";

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp