summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-10-30 15:24:40 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-10-30 15:24:40 -0400
commit77a22f898e6633c9f15e0c3edfa6f6296ba6f17b (patch)
tree92498e63a7d394997ac4214b8b0543475e4aa799 /src/test
parente927f55ffffb43b29e7a8c459825950b2b280219 (diff)
Fix bogus tree-flattening logic in QTNTernary().
QTNTernary() contains logic to flatten, eg, '(a & b) & c' into 'a & b & c', which is all well and good, but it tries to do that to NOT nodes as well, so that '!!a' gets changed to '!a'. Explicitly restrict the conversion to be done only on AND and OR nodes, and add a test case illustrating the bug. In passing, provide some comments for the sadly naked functions in tsquery_util.c, and simplify some baroque logic in QTNFree(), which I think may have been leaking some items it intended to free. Noted while investigating a complaint from Andreas Seltenreich. Back-patch to all supported versions.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/tsearch.out7
-rw-r--r--src/test/regress/sql/tsearch.sql2
2 files changed, 9 insertions, 0 deletions
diff --git a/src/test/regress/expected/tsearch.out b/src/test/regress/expected/tsearch.out
index 9341dbe0d77..1466582c3ea 100644
--- a/src/test/regress/expected/tsearch.out
+++ b/src/test/regress/expected/tsearch.out
@@ -851,6 +851,13 @@ SELECT ts_rewrite('foo & bar & qq & new & york', 'new & york'::tsquery, 'big &
'foo' & 'bar' & 'qq' & ( 'city' & 'new' & 'york' | ( 'nyc' | 'big' & 'apple' ) )
(1 row)
+SELECT ts_rewrite(ts_rewrite('new & !york ', 'york', '!jersey'),
+ 'jersey', 'mexico');
+ ts_rewrite
+------------------------
+ 'new' & !( !'mexico' )
+(1 row)
+
SELECT ts_rewrite('moscow', 'SELECT keyword, sample FROM test_tsquery'::text );
ts_rewrite
---------------------
diff --git a/src/test/regress/sql/tsearch.sql b/src/test/regress/sql/tsearch.sql
index 9fd12076ace..6035d5e4272 100644
--- a/src/test/regress/sql/tsearch.sql
+++ b/src/test/regress/sql/tsearch.sql
@@ -305,6 +305,8 @@ SELECT COUNT(*) FROM test_tsquery WHERE keyword > 'new & york';
RESET enable_seqscan;
SELECT ts_rewrite('foo & bar & qq & new & york', 'new & york'::tsquery, 'big & apple | nyc | new & york & city');
+SELECT ts_rewrite(ts_rewrite('new & !york ', 'york', '!jersey'),
+ 'jersey', 'mexico');
SELECT ts_rewrite('moscow', 'SELECT keyword, sample FROM test_tsquery'::text );
SELECT ts_rewrite('moscow & hotel', 'SELECT keyword, sample FROM test_tsquery'::text );