Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
0969dc86
Commit
0969dc86
authored
Apr 05, 2004
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow LIKE/ILIKE to appear in more places in a query.
Fabien COELHO
parent
6165bbab
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
83 additions
and
7 deletions
+83
-7
src/backend/parser/gram.y
src/backend/parser/gram.y
+24
-7
src/test/regress/expected/arrays.out
src/test/regress/expected/arrays.out
+49
-0
src/test/regress/sql/arrays.sql
src/test/regress/sql/arrays.sql
+10
-0
No files found.
src/backend/parser/gram.y
View file @
0969dc86
...
...
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.4
49 2004/03/17 20:48:42 tgl
Exp $
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.4
50 2004/04/05 03:07:26 momjian
Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -194,7 +194,7 @@ static void doNegateFloat(Value *v);
database_name access_method_clause access_method attr_name
index_name name function_name file_name
%type <list> func_name handler_name qual_Op qual_all_Op
%type <list> func_name handler_name qual_Op qual_all_Op
subquery_Op
opt_class opt_validator
%type <range> qualified_name OptConstrFromTable
...
...
@@ -5692,7 +5692,7 @@ r_expr: row IN_P select_with_parens
/* Stick a NOT on top */
$$ = (Node *) makeA_Expr(AEXPR_NOT, NIL, NULL, (Node *) n);
}
| row
qual_all
_Op sub_type select_with_parens
| row
subquery
_Op sub_type select_with_parens
%prec Op
{
SubLink *n = makeNode(SubLink);
...
...
@@ -5702,7 +5702,7 @@ r_expr: row IN_P select_with_parens
n->subselect = $4;
$$ = (Node *)n;
}
| row
qual_all
_Op select_with_parens
| row
subquery
_Op select_with_parens
%prec Op
{
SubLink *n = makeNode(SubLink);
...
...
@@ -5712,7 +5712,7 @@ r_expr: row IN_P select_with_parens
n->subselect = $3;
$$ = (Node *)n;
}
| row
qual_all
_Op row
| row
subquery
_Op row
%prec Op
{
$$ = makeRowExpr($2, $1, $3);
...
...
@@ -5807,6 +5807,23 @@ qual_all_Op:
| OPERATOR '(' any_operator ')' { $$ = $3; }
;
subquery_Op:
all_Op { $$ = makeList1(makeString($1)); }
| OPERATOR '(' any_operator ')' { $$ = $3; }
| LIKE { $$ = makeList1(makeString("~~")); }
| NOT LIKE { $$ = makeList1(makeString("!~~")); }
| ILIKE { $$ = makeList1(makeString("~~*")); }
| NOT ILIKE { $$ = makeList1(makeString("!~~*")); }
/* cannot put SIMILAR TO here, because SIMILAR TO is a hack.
* the regular expression is preprocessed by a function (similar_escape),
* and the ~ operator for posix regular expressions is used.
* x SIMILAR TO y -> x ~ similar_escape(y)
* this transformation is made on the fly by the parser upwards.
* however the SubLink structure which handles any/some/all stuff
* is not ready for such a thing.
*/
;
/*
* General expressions
* This is the heart of the expression syntax.
...
...
@@ -6132,7 +6149,7 @@ a_expr: c_expr { $$ = $1; }
$$ = n;
}
}
| a_expr
qual_all
_Op sub_type select_with_parens %prec Op
| a_expr
subquery
_Op sub_type select_with_parens %prec Op
{
SubLink *n = makeNode(SubLink);
n->subLinkType = $3;
...
...
@@ -6141,7 +6158,7 @@ a_expr: c_expr { $$ = $1; }
n->subselect = $4;
$$ = (Node *)n;
}
| a_expr
qual_all
_Op sub_type '(' a_expr ')' %prec Op
| a_expr
subquery
_Op sub_type '(' a_expr ')' %prec Op
{
if ($3 == ANY_SUBLINK)
$$ = (Node *) makeA_Expr(AEXPR_OP_ANY, $2, $1, $5);
...
...
src/test/regress/expected/arrays.out
View file @
0969dc86
...
...
@@ -377,3 +377,52 @@ select * from arr_tbl where f1 > '{1,2,3}' and f1 <= '{1,5,3}';
-- note: if above select doesn't produce the expected tuple order,
-- then you didn't get an indexscan plan, and something is busted.
-- test [not] (like|ilike) (any|all) (...)
select 'foo' like any (array['%a', '%o']); -- t
?column?
----------
t
(1 row)
select 'foo' like any (array['%a', '%b']); -- f
?column?
----------
f
(1 row)
select 'foo' like all (array['f%', '%o']); -- t
?column?
----------
t
(1 row)
select 'foo' like all (array['f%', '%b']); -- f
?column?
----------
f
(1 row)
select 'foo' not like any (array['%a', '%b']); -- t
?column?
----------
t
(1 row)
select 'foo' not like all (array['%a', '%o']); -- f
?column?
----------
f
(1 row)
select 'foo' ilike any (array['%A', '%O']); -- t
?column?
----------
t
(1 row)
select 'foo' ilike all (array['F%', '%O']); -- t
?column?
----------
t
(1 row)
src/test/regress/sql/arrays.sql
View file @
0969dc86
...
...
@@ -183,3 +183,13 @@ set enable_seqscan to off;
select
*
from
arr_tbl
where
f1
>
'{1,2,3}'
and
f1
<=
'{1,5,3}'
;
-- note: if above select doesn't produce the expected tuple order,
-- then you didn't get an indexscan plan, and something is busted.
-- test [not] (like|ilike) (any|all) (...)
select
'foo'
like
any
(
array
[
'%a'
,
'%o'
]);
-- t
select
'foo'
like
any
(
array
[
'%a'
,
'%b'
]);
-- f
select
'foo'
like
all
(
array
[
'f%'
,
'%o'
]);
-- t
select
'foo'
like
all
(
array
[
'f%'
,
'%b'
]);
-- f
select
'foo'
not
like
any
(
array
[
'%a'
,
'%b'
]);
-- t
select
'foo'
not
like
all
(
array
[
'%a'
,
'%o'
]);
-- f
select
'foo'
ilike
any
(
array
[
'%A'
,
'%O'
]);
-- t
select
'foo'
ilike
all
(
array
[
'F%'
,
'%O'
]);
-- t
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment