mirror of
https://github.com/postgres/postgres.git
synced 2025-06-25 01:02:05 +03:00
Change predecence of phrase operator.
<-> operator now have higher predecence than & (AND) operator. This change was motivated by unexpected difference of similar queries: 'a & b <-> c'::tsquery and 'b <-> c & a'. Before first query means (a & b) <-> c and second one - '(b <-> c) & a', now phrase operator evaluates first. Per suggestion from Tom Lane 32260.1465402409@sss.pgh.pa.us
This commit is contained in:
@ -470,15 +470,15 @@ SELECT to_tsquery('hunspell_tst', 'footballyklubber:b & rebookings:A & sky');
|
||||
(1 row)
|
||||
|
||||
SELECT to_tsquery('hunspell_tst', 'footballyklubber:b <-> sky');
|
||||
to_tsquery
|
||||
-----------------------------------------------------------------------------
|
||||
( 'foot':B <-> 'sky' ) & ( 'ball':B <-> 'sky' ) & ( 'klubber':B <-> 'sky' )
|
||||
to_tsquery
|
||||
-----------------------------------------------------------------
|
||||
'foot':B <-> 'sky' & 'ball':B <-> 'sky' & 'klubber':B <-> 'sky'
|
||||
(1 row)
|
||||
|
||||
SELECT phraseto_tsquery('hunspell_tst', 'footballyklubber sky');
|
||||
phraseto_tsquery
|
||||
-----------------------------------------------------------------------
|
||||
( 'foot' <-> 'sky' ) & ( 'ball' <-> 'sky' ) & ( 'klubber' <-> 'sky' )
|
||||
phraseto_tsquery
|
||||
-----------------------------------------------------------
|
||||
'foot' <-> 'sky' & 'ball' <-> 'sky' & 'klubber' <-> 'sky'
|
||||
(1 row)
|
||||
|
||||
-- Test ispell dictionary with hunspell affix with FLAG long in configuration
|
||||
|
@ -778,9 +778,9 @@ SELECT to_tsquery('english', 'foo <-> a <-> the <-> bar');
|
||||
(1 row)
|
||||
|
||||
SELECT phraseto_tsquery('english', 'PostgreSQL can be extended by the user in many ways');
|
||||
phraseto_tsquery
|
||||
-----------------------------------------------------------------------
|
||||
( ( ( 'postgresql' <3> 'extend' ) <3> 'user' ) <2> 'mani' ) <-> 'way'
|
||||
phraseto_tsquery
|
||||
-----------------------------------------------------------
|
||||
'postgresql' <3> 'extend' <3> 'user' <2> 'mani' <-> 'way'
|
||||
(1 row)
|
||||
|
||||
SELECT ts_rank_cd(to_tsvector('english', '
|
||||
@ -1215,15 +1215,15 @@ SELECT ts_rewrite('1 & (2 <-> 3)', 'SELECT keyword, sample FROM test_tsquery'::t
|
||||
(1 row)
|
||||
|
||||
SELECT ts_rewrite('1 & (2 <2> 3)', 'SELECT keyword, sample FROM test_tsquery'::text );
|
||||
ts_rewrite
|
||||
-----------------------
|
||||
'1' & ( '2' <2> '3' )
|
||||
ts_rewrite
|
||||
-------------------
|
||||
'1' & '2' <2> '3'
|
||||
(1 row)
|
||||
|
||||
SELECT ts_rewrite('5 <-> (1 & (2 <-> 3))', 'SELECT keyword, sample FROM test_tsquery'::text );
|
||||
ts_rewrite
|
||||
-----------------------------------------------
|
||||
( '5' <-> '1' ) & ( '5' <-> ( '2' <-> '3' ) )
|
||||
ts_rewrite
|
||||
---------------------------------------
|
||||
'5' <-> '1' & '5' <-> ( '2' <-> '3' )
|
||||
(1 row)
|
||||
|
||||
SELECT ts_rewrite('5 <-> (6 | 8)', 'SELECT keyword, sample FROM test_tsquery'::text );
|
||||
|
@ -350,21 +350,21 @@ SELECT '(a|b) <-> (d|c)'::tsquery;
|
||||
(1 row)
|
||||
|
||||
SELECT 'a <-> (b&c)'::tsquery;
|
||||
tsquery
|
||||
-----------------------------------
|
||||
( 'a' <-> 'b' ) & ( 'a' <-> 'c' )
|
||||
tsquery
|
||||
---------------------------
|
||||
'a' <-> 'b' & 'a' <-> 'c'
|
||||
(1 row)
|
||||
|
||||
SELECT '(a&b) <-> c'::tsquery;
|
||||
tsquery
|
||||
-----------------------------------
|
||||
( 'a' <-> 'c' ) & ( 'b' <-> 'c' )
|
||||
tsquery
|
||||
---------------------------
|
||||
'a' <-> 'c' & 'b' <-> 'c'
|
||||
(1 row)
|
||||
|
||||
SELECT '(a&b) <-> (d&c)'::tsquery;
|
||||
tsquery
|
||||
-----------------------------------------------------------------------
|
||||
( 'a' <-> 'd' ) & ( 'b' <-> 'd' ) & ( 'a' <-> 'c' ) & ( 'b' <-> 'c' )
|
||||
tsquery
|
||||
-------------------------------------------------------
|
||||
'a' <-> 'd' & 'b' <-> 'd' & 'a' <-> 'c' & 'b' <-> 'c'
|
||||
(1 row)
|
||||
|
||||
SELECT 'a <-> !b'::tsquery;
|
||||
@ -386,9 +386,9 @@ SELECT '!a <-> !b'::tsquery;
|
||||
(1 row)
|
||||
|
||||
SELECT 'a <-> !(b&c)'::tsquery;
|
||||
tsquery
|
||||
----------------------------------------------
|
||||
'a' & !( ( 'a' <-> 'b' ) & ( 'a' <-> 'c' ) )
|
||||
tsquery
|
||||
--------------------------------------
|
||||
'a' & !( 'a' <-> 'b' & 'a' <-> 'c' )
|
||||
(1 row)
|
||||
|
||||
SELECT 'a <-> !(b|c)'::tsquery;
|
||||
@ -398,9 +398,9 @@ SELECT 'a <-> !(b|c)'::tsquery;
|
||||
(1 row)
|
||||
|
||||
SELECT '!(a&b) <-> c'::tsquery;
|
||||
tsquery
|
||||
----------------------------------------------
|
||||
!( ( 'a' <-> 'c' ) & ( 'b' <-> 'c' ) ) & 'c'
|
||||
tsquery
|
||||
--------------------------------------
|
||||
!( 'a' <-> 'c' & 'b' <-> 'c' ) & 'c'
|
||||
(1 row)
|
||||
|
||||
SELECT '!(a|b) <-> c'::tsquery;
|
||||
@ -416,9 +416,9 @@ SELECT '(!a|b) <-> c'::tsquery;
|
||||
(1 row)
|
||||
|
||||
SELECT '(!a&b) <-> c'::tsquery;
|
||||
tsquery
|
||||
------------------------------------------
|
||||
!( 'a' <-> 'c' ) & 'c' & ( 'b' <-> 'c' )
|
||||
tsquery
|
||||
--------------------------------------
|
||||
!( 'a' <-> 'c' ) & 'c' & 'b' <-> 'c'
|
||||
(1 row)
|
||||
|
||||
SELECT 'c <-> (!a|b)'::tsquery;
|
||||
@ -428,9 +428,9 @@ SELECT 'c <-> (!a|b)'::tsquery;
|
||||
(1 row)
|
||||
|
||||
SELECT 'c <-> (!a&b)'::tsquery;
|
||||
tsquery
|
||||
------------------------------------------
|
||||
'c' & !( 'c' <-> 'a' ) & ( 'c' <-> 'b' )
|
||||
tsquery
|
||||
--------------------------------------
|
||||
'c' & !( 'c' <-> 'a' ) & 'c' <-> 'b'
|
||||
(1 row)
|
||||
|
||||
SELECT '(a|b) <-> !c'::tsquery;
|
||||
@ -440,9 +440,9 @@ SELECT '(a|b) <-> !c'::tsquery;
|
||||
(1 row)
|
||||
|
||||
SELECT '(a&b) <-> !c'::tsquery;
|
||||
tsquery
|
||||
----------------------------------------------------
|
||||
'a' & 'b' & !( ( 'a' <-> 'c' ) & ( 'b' <-> 'c' ) )
|
||||
tsquery
|
||||
--------------------------------------------
|
||||
'a' & 'b' & !( 'a' <-> 'c' & 'b' <-> 'c' )
|
||||
(1 row)
|
||||
|
||||
SELECT '!c <-> (a|b)'::tsquery;
|
||||
@ -532,33 +532,33 @@ SELECT 'foo & bar'::tsquery && 'asd | fg';
|
||||
(1 row)
|
||||
|
||||
SELECT 'a' <-> 'b & d'::tsquery;
|
||||
?column?
|
||||
-----------------------------------
|
||||
( 'a' <-> 'b' ) & ( 'a' <-> 'd' )
|
||||
?column?
|
||||
---------------------------
|
||||
'a' <-> 'b' & 'a' <-> 'd'
|
||||
(1 row)
|
||||
|
||||
SELECT 'a & g' <-> 'b & d'::tsquery;
|
||||
?column?
|
||||
-----------------------------------------------------------------------
|
||||
( 'a' <-> 'b' ) & ( 'g' <-> 'b' ) & ( 'a' <-> 'd' ) & ( 'g' <-> 'd' )
|
||||
?column?
|
||||
-------------------------------------------------------
|
||||
'a' <-> 'b' & 'g' <-> 'b' & 'a' <-> 'd' & 'g' <-> 'd'
|
||||
(1 row)
|
||||
|
||||
SELECT 'a & g' <-> 'b | d'::tsquery;
|
||||
?column?
|
||||
-----------------------------------------------------------------------
|
||||
( 'a' <-> 'b' ) & ( 'g' <-> 'b' ) | ( 'a' <-> 'd' ) & ( 'g' <-> 'd' )
|
||||
?column?
|
||||
-------------------------------------------------------
|
||||
'a' <-> 'b' & 'g' <-> 'b' | 'a' <-> 'd' & 'g' <-> 'd'
|
||||
(1 row)
|
||||
|
||||
SELECT 'a & g' <-> 'b <-> d'::tsquery;
|
||||
?column?
|
||||
-----------------------------------------------------------
|
||||
( 'a' <-> ( 'b' <-> 'd' ) ) & ( 'g' <-> ( 'b' <-> 'd' ) )
|
||||
?column?
|
||||
---------------------------------------------------
|
||||
'a' <-> ( 'b' <-> 'd' ) & 'g' <-> ( 'b' <-> 'd' )
|
||||
(1 row)
|
||||
|
||||
SELECT tsquery_phrase('a <3> g', 'b & d', 10);
|
||||
tsquery_phrase
|
||||
-------------------------------------------------------------
|
||||
( ( 'a' <3> 'g' ) <10> 'b' ) & ( ( 'a' <3> 'g' ) <10> 'd' )
|
||||
tsquery_phrase
|
||||
---------------------------------------------
|
||||
'a' <3> 'g' <10> 'b' & 'a' <3> 'g' <10> 'd'
|
||||
(1 row)
|
||||
|
||||
-- tsvector-tsquery operations
|
||||
|
Reference in New Issue
Block a user