aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/tsquery.c8
-rw-r--r--src/test/regress/expected/tsearch.out7
-rw-r--r--src/test/regress/sql/tsearch.sql3
3 files changed, 17 insertions, 1 deletions
diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c
index 43e0f53575c..a156b52c0c9 100644
--- a/src/backend/utils/adt/tsquery.c
+++ b/src/backend/utils/adt/tsquery.c
@@ -433,7 +433,7 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator,
}
else if (ISOPERATOR(state->buf))
{
- /* or else gettoken_tsvector() will raise an error */
+ /* ignore, else gettoken_tsvector() will raise an error */
state->buf++;
state->state = WAITOPERAND;
continue;
@@ -492,6 +492,12 @@ gettoken_query_websearch(TSQueryParserState state, int8 *operator,
*operator = OP_OR;
return PT_OPR;
}
+ else if (ISOPERATOR(state->buf))
+ {
+ /* ignore other operators in this state too */
+ state->buf++;
+ continue;
+ }
else if (*state->buf == '\0')
{
return PT_END;
diff --git a/src/test/regress/expected/tsearch.out b/src/test/regress/expected/tsearch.out
index 2bc71826fab..6519afbfce7 100644
--- a/src/test/regress/expected/tsearch.out
+++ b/src/test/regress/expected/tsearch.out
@@ -2042,12 +2042,19 @@ select websearch_to_tsquery('simple', 'abc <-> def');
'abc' & 'def'
(1 row)
+-- parens are ignored, too
select websearch_to_tsquery('simple', 'abc (pg or class)');
websearch_to_tsquery
------------------------
'abc' & 'pg' | 'class'
(1 row)
+select websearch_to_tsquery('simple', '(foo bar) or (ding dong)');
+ websearch_to_tsquery
+---------------------------------
+ 'foo' & 'bar' | 'ding' & 'dong'
+(1 row)
+
-- NOT is ignored in quotes
select websearch_to_tsquery('english', 'My brand new smartphone');
websearch_to_tsquery
diff --git a/src/test/regress/sql/tsearch.sql b/src/test/regress/sql/tsearch.sql
index ca78ce56bb9..389c33844e1 100644
--- a/src/test/regress/sql/tsearch.sql
+++ b/src/test/regress/sql/tsearch.sql
@@ -618,7 +618,10 @@ select websearch_to_tsquery('simple', ':');
select websearch_to_tsquery('simple', 'abc & def');
select websearch_to_tsquery('simple', 'abc | def');
select websearch_to_tsquery('simple', 'abc <-> def');
+
+-- parens are ignored, too
select websearch_to_tsquery('simple', 'abc (pg or class)');
+select websearch_to_tsquery('simple', '(foo bar) or (ding dong)');
-- NOT is ignored in quotes
select websearch_to_tsquery('english', 'My brand new smartphone');