diff options
| author | Tom Lane | 2008-05-16 16:31:02 +0000 |
|---|---|---|
| committer | Tom Lane | 2008-05-16 16:31:02 +0000 |
| commit | e6dbcb72fafa4031c73cc914e829a6dec96ab6b6 (patch) | |
| tree | 6a7a3c22d0a127a27aed46c0f8d42b8455476d56 /src/test | |
| parent | e1bdd07c3c33d4004180506f1493efcbbbc02b4c (diff) | |
Extend GIN to support partial-match searches, and extend tsquery to support
prefix matching using this facility.
Teodor Sigaev and Oleg Bartunov
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/opr_sanity.out | 29 | ||||
| -rw-r--r-- | src/test/regress/expected/tsdicts.out | 10 | ||||
| -rw-r--r-- | src/test/regress/expected/tsearch.out | 24 | ||||
| -rw-r--r-- | src/test/regress/expected/tstypes.out | 128 | ||||
| -rw-r--r-- | src/test/regress/sql/opr_sanity.sql | 24 | ||||
| -rw-r--r-- | src/test/regress/sql/tsearch.sql | 3 | ||||
| -rw-r--r-- | src/test/regress/sql/tstypes.sql | 20 |
7 files changed, 221 insertions, 17 deletions
diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index ef787115742..efab1354fe3 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -935,9 +935,11 @@ WHERE p1.amprocfamily = p3.oid AND p3.opfmethod = p2.oid AND -- Detect missing pg_amproc entries: should have as many support functions -- as AM expects for each datatype combination supported by the opfamily. +-- GIN is a special case because it has an optional support function. SELECT p1.amname, p2.opfname, p3.amproclefttype, p3.amprocrighttype FROM pg_am AS p1, pg_opfamily AS p2, pg_amproc AS p3 WHERE p2.opfmethod = p1.oid AND p3.amprocfamily = p2.oid AND + p1.amname <> 'gin' AND p1.amsupport != (SELECT count(*) FROM pg_amproc AS p4 WHERE p4.amprocfamily = p2.oid AND p4.amproclefttype = p3.amproclefttype AND @@ -946,18 +948,43 @@ WHERE p2.opfmethod = p1.oid AND p3.amprocfamily = p2.oid AND --------+---------+----------------+----------------- (0 rows) +-- Similar check for GIN, allowing one optional proc +SELECT p1.amname, p2.opfname, p3.amproclefttype, p3.amprocrighttype +FROM pg_am AS p1, pg_opfamily AS p2, pg_amproc AS p3 +WHERE p2.opfmethod = p1.oid AND p3.amprocfamily = p2.oid AND + p1.amname = 'gin' AND + p1.amsupport - 1 > (SELECT count(*) FROM pg_amproc AS p4 + WHERE p4.amprocfamily = p2.oid AND + p4.amproclefttype = p3.amproclefttype AND + p4.amprocrighttype = p3.amprocrighttype); + amname | opfname | amproclefttype | amprocrighttype +--------+---------+----------------+----------------- +(0 rows) + -- Also, check if there are any pg_opclass entries that don't seem to have --- pg_amproc support. +-- pg_amproc support. Again, GIN has to be checked separately. SELECT amname, opcname, count(*) FROM pg_am am JOIN pg_opclass op ON opcmethod = am.oid LEFT JOIN pg_amproc p ON amprocfamily = opcfamily AND amproclefttype = amprocrighttype AND amproclefttype = opcintype +WHERE am.amname <> 'gin' GROUP BY amname, amsupport, opcname, amprocfamily HAVING count(*) != amsupport OR amprocfamily IS NULL; amname | opcname | count --------+---------+------- (0 rows) +SELECT amname, opcname, count(*) +FROM pg_am am JOIN pg_opclass op ON opcmethod = am.oid + LEFT JOIN pg_amproc p ON amprocfamily = opcfamily AND + amproclefttype = amprocrighttype AND amproclefttype = opcintype +WHERE am.amname = 'gin' +GROUP BY amname, amsupport, opcname, amprocfamily +HAVING count(*) < amsupport - 1 OR amprocfamily IS NULL; + amname | opcname | count +--------+---------+------- +(0 rows) + -- Unfortunately, we can't check the amproc link very well because the -- signature of the function may be different for different support routines -- or different base data types. diff --git a/src/test/regress/expected/tsdicts.out b/src/test/regress/expected/tsdicts.out index 4b8929361a8..3ae6a671dad 100644 --- a/src/test/regress/expected/tsdicts.out +++ b/src/test/regress/expected/tsdicts.out @@ -232,7 +232,7 @@ ALTER TEXT SEARCH CONFIGURATION ispell_tst ALTER MAPPING FOR SELECT to_tsvector('ispell_tst', 'Booking the skies after rebookings for footballklubber from a foot'); to_tsvector ---------------------------------------------------------------------------------------------------- - 'sky':3 'ball':7 'book':1,5 'foot':7,10 'booking':1,5 'klubber':7 'football':7 'footballklubber':7 + 'ball':7 'book':1,5 'booking':1,5 'foot':7,10 'football':7 'footballklubber':7 'klubber':7 'sky':3 (1 row) SELECT to_tsquery('ispell_tst', 'footballklubber'); @@ -256,7 +256,7 @@ ALTER TEXT SEARCH CONFIGURATION hunspell_tst ALTER MAPPING SELECT to_tsvector('hunspell_tst', 'Booking the skies after rebookings for footballklubber from a foot'); to_tsvector ---------------------------------------------------------------------------------------------------- - 'sky':3 'ball':7 'book':1,5 'foot':7,10 'booking':1,5 'klubber':7 'football':7 'footballklubber':7 + 'ball':7 'book':1,5 'booking':1,5 'foot':7,10 'football':7 'footballklubber':7 'klubber':7 'sky':3 (1 row) SELECT to_tsquery('hunspell_tst', 'footballklubber'); @@ -287,7 +287,7 @@ SELECT to_tsvector('synonym_tst', 'Postgresql is often called as postgres or pgs SELECT to_tsvector('synonym_tst', 'Most common mistake is to write Gogle instead of Google'); to_tsvector ---------------------------------------------------------- - 'googl':7,10 'write':6 'common':2 'mistak':3 'instead':8 + 'common':2 'googl':7,10 'instead':8 'mistak':3 'write':6 (1 row) -- test thesaurus in configuration @@ -307,12 +307,12 @@ SELECT to_tsvector('thesaurus_tst', 'one postgres one two one two three one'); SELECT to_tsvector('thesaurus_tst', 'Supernovae star is very new star and usually called supernovae (abbrevation SN)'); to_tsvector ------------------------------------------------------------- - 'sn':1,9,11 'new':4 'call':8 'star':5 'usual':7 'abbrev':10 + 'abbrev':10 'call':8 'new':4 'sn':1,9,11 'star':5 'usual':7 (1 row) SELECT to_tsvector('thesaurus_tst', 'Booking tickets is looking like a booking a tickets'); to_tsvector ------------------------------------------------------- - 'card':3,10 'like':6 'look':5 'invit':2,9 'order':1,8 + 'card':3,10 'invit':2,9 'like':6 'look':5 'order':1,8 (1 row) diff --git a/src/test/regress/expected/tsearch.out b/src/test/regress/expected/tsearch.out index 1f7e6ffbafc..468a623e973 100644 --- a/src/test/regress/expected/tsearch.out +++ b/src/test/regress/expected/tsearch.out @@ -92,6 +92,12 @@ SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)'; 39 (1 row) +SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*'; + count +------- + 494 +(1 row) + create index wowidx on test_tsvector using gist (a); SET enable_seqscan=OFF; SELECT count(*) FROM test_tsvector WHERE a @@ 'wr|qh'; @@ -130,6 +136,12 @@ SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)'; 39 (1 row) +SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*'; + count +------- + 494 +(1 row) + RESET enable_seqscan; DROP INDEX wowidx; CREATE INDEX wowidx ON test_tsvector USING gin (a); @@ -170,6 +182,12 @@ SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)'; 39 (1 row) +SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*'; + count +------- + 494 +(1 row) + RESET enable_seqscan; INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH'); @@ -380,7 +398,7 @@ SELECT to_tsvector('english', '345 qwe@efd.r '' http://www.com/ http://aew.werc. <i <b> wow < jqw <> qwerty'); to_tsvector -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 'ad':17 'dw':19 'jf':39 '234':61 '345':1 '4.2':54,55,56 '455':31 'jqw':64 'qwe':2,18,27,28,35 'wer':36 'wow':63 '-4.2':58,60 'asdf':37 'ewr1':43 'qwer':38 'sdjk':40 '5.005':32 'efd.r':3 'ewri2':44 'hjwer':42 'qwqwe':29 'wefjn':48 'gist.c':52 'gist.h':50 'qwerti':65 '234.435':30 'qwe-wer':34 'readlin':53,57,59 'www.com':4 '+4.0e-10':26 'gist.h.c':51 'rewt/ewr':47 '/?ad=qwe&dw':7,10,14,22 '/wqe-324/ewr':49 'aew.werc.ewr':6 '1aew.werc.ewr':9 '2aew.werc.ewr':11 '3aew.werc.ewr':13 '4aew.werc.ewr':15 '/usr/local/fff':45 '/awdf/dwqe/4325':46 'teodor@stack.net':33 '/?ad=qwe&dw=%20%32':25 '5aew.werc.ewr:8100':16 '6aew.werc.ewr:8100':21 '7aew.werc.ewr:8100':24 'aew.werc.ewr/?ad=qwe&dw':5 '1aew.werc.ewr/?ad=qwe&dw':8 '3aew.werc.ewr/?ad=qwe&dw':12 '6aew.werc.ewr:8100/?ad=qwe&dw':20 '7aew.werc.ewr:8100/?ad=qwe&dw=%20%32':23 + '+4.0e-10':26 '-4.2':58,60 '/?ad=qwe&dw':7,10,14,22 '/?ad=qwe&dw=%20%32':25 '/awdf/dwqe/4325':46 '/usr/local/fff':45 '/wqe-324/ewr':49 '1aew.werc.ewr':9 '1aew.werc.ewr/?ad=qwe&dw':8 '234':61 '234.435':30 '2aew.werc.ewr':11 '345':1 '3aew.werc.ewr':13 '3aew.werc.ewr/?ad=qwe&dw':12 '4.2':54,55,56 '455':31 '4aew.werc.ewr':15 '5.005':32 '5aew.werc.ewr:8100':16 '6aew.werc.ewr:8100':21 '6aew.werc.ewr:8100/?ad=qwe&dw':20 '7aew.werc.ewr:8100':24 '7aew.werc.ewr:8100/?ad=qwe&dw=%20%32':23 'ad':17 'aew.werc.ewr':6 'aew.werc.ewr/?ad=qwe&dw':5 'asdf':37 'dw':19 'efd.r':3 'ewr1':43 'ewri2':44 'gist.c':52 'gist.h':50 'gist.h.c':51 'hjwer':42 'jf':39 'jqw':64 'qwe':2,18,27,28,35 'qwe-wer':34 'qwer':38 'qwerti':65 'qwqwe':29 'readlin':53,57,59 'rewt/ewr':47 'sdjk':40 'teodor@stack.net':33 'wefjn':48 'wer':36 'wow':63 'www.com':4 (1 row) SELECT length(to_tsvector('english', '345 qwe@efd.r '' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf <fr>qwer jf sdjk<we hjwer <werrwe> ewr1> ewri2 <a href="qwe<qwe>"> @@ -852,7 +870,7 @@ SET default_text_search_config=simple; SELECT to_tsvector('SKIES My booKs'); to_tsvector ---------------------------- - 'my':2 'books':3 'skies':1 + 'books':3 'my':2 'skies':1 (1 row) SELECT plainto_tsquery('SKIES My booKs'); @@ -871,7 +889,7 @@ SET default_text_search_config=english; SELECT to_tsvector('SKIES My booKs'); to_tsvector ------------------ - 'sky':1 'book':3 + 'book':3 'sky':1 (1 row) SELECT plainto_tsquery('SKIES My booKs'); diff --git a/src/test/regress/expected/tstypes.out b/src/test/regress/expected/tstypes.out index 4672f099e0a..6284fb61813 100644 --- a/src/test/regress/expected/tstypes.out +++ b/src/test/regress/expected/tstypes.out @@ -44,31 +44,31 @@ SELECT E'''1 \\''2'''::tsvector; SELECT E'''1 \\''2''3'::tsvector; tsvector ------------- - '3' '1 ''2' + '1 ''2' '3' (1 row) SELECT E'''1 \\''2'' 3'::tsvector; tsvector ------------- - '3' '1 ''2' + '1 ''2' '3' (1 row) SELECT E'''1 \\''2'' '' 3'' 4 '::tsvector; tsvector ------------------ - '4' ' 3' '1 ''2' + ' 3' '1 ''2' '4' (1 row) SELECT $$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector; tsvector ---------------------------------------- - '\\as' 'abc' 'AB\\c' 'ab\\c' 'ab\\\\c' + 'AB\\c' '\\as' 'ab\\\\c' 'ab\\c' 'abc' (1 row) SELECT tsvectorin(tsvectorout($$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector)); tsvectorin ---------------------------------------- - '\\as' 'abc' 'AB\\c' 'ab\\c' 'ab\\\\c' + 'AB\\c' '\\as' 'ab\\\\c' 'ab\\c' 'abc' (1 row) SELECT '''w'':4A,3B,2C,1D,5 a:8'; @@ -86,13 +86,13 @@ SELECT 'a:3A b:2a'::tsvector || 'ba:1234 a:1B'; SELECT setweight('w:12B w:13* w:12,5,6 a:1,3* a:3 w asd:1dc asd zxc:81,567,222A'::tsvector, 'c'); setweight ---------------------------------------------------------- - 'a':1C,3C 'w':5C,6C,12C,13C 'asd':1C 'zxc':81C,222C,567C + 'a':1C,3C 'asd':1C 'w':5C,6C,12C,13C 'zxc':81C,222C,567C (1 row) SELECT strip('w:12B w:13* w:12,5,6 a:1,3* a:3 w asd:1dc asd'::tsvector); strip --------------- - 'a' 'w' 'asd' + 'a' 'asd' 'w' (1 row) --Base tsquery test @@ -336,6 +336,12 @@ SELECT $$'\\as'$$::tsquery; '\\as' (1 row) +SELECT 'a:* & nbb:*ac | doo:a* | goo'::tsquery; + tsquery +------------------------------------------ + ( 'a':* & 'nbb':*AC | 'doo':*A ) | 'goo' +(1 row) + SELECT 'a' < 'b & c'::tsquery as "true"; true ------ @@ -439,12 +445,96 @@ SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:CB' as "true"; t (1 row) +SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & c:*C' as "false"; + false +------- + f +(1 row) + +SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & c:*CB' as "true"; + true +------ + t +(1 row) + +SELECT 'a b:89 ca:23A,64b cb:80c d:34c'::tsvector @@ 'd:AC & c:*C' as "true"; + true +------ + t +(1 row) + +SELECT 'a b:89 ca:23A,64c cb:80b d:34c'::tsvector @@ 'd:AC & c:*C' as "true"; + true +------ + t +(1 row) + +SELECT 'a b:89 ca:23A,64c cb:80b d:34c'::tsvector @@ 'd:AC & c:*B' as "true"; + true +------ + t +(1 row) + +SELECT 'supernova'::tsvector @@ 'super'::tsquery AS "false"; + false +------- + f +(1 row) + +SELECT 'supeanova supernova'::tsvector @@ 'super'::tsquery AS "false"; + false +------- + f +(1 row) + +SELECT 'supeznova supernova'::tsvector @@ 'super'::tsquery AS "false"; + false +------- + f +(1 row) + +SELECT 'supernova'::tsvector @@ 'super:*'::tsquery AS "true"; + true +------ + t +(1 row) + +SELECT 'supeanova supernova'::tsvector @@ 'super:*'::tsquery AS "true"; + true +------ + t +(1 row) + +SELECT 'supeznova supernova'::tsvector @@ 'super:*'::tsquery AS "true"; + true +------ + t +(1 row) + SELECT ts_rank(' a:1 s:2C d g'::tsvector, 'a | s'); ts_rank ----------- 0.0911891 (1 row) +SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | s'); + ts_rank +----------- + 0.0303964 +(1 row) + +SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | s:*'); + ts_rank +----------- + 0.0911891 +(1 row) + +SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | sa:*'); + ts_rank +----------- + 0.0911891 +(1 row) + SELECT ts_rank(' a:1 s:2B d g'::tsvector, 'a | s'); ts_rank ---------- @@ -481,6 +571,30 @@ SELECT ts_rank_cd(' a:1 s:2C d g'::tsvector, 'a | s'); 0.3 (1 row) +SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | s'); + ts_rank_cd +------------ + 0.1 +(1 row) + +SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | s:*'); + ts_rank_cd +------------ + 0.3 +(1 row) + +SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | sa:*'); + ts_rank_cd +------------ + 0.3 +(1 row) + +SELECT ts_rank_cd(' a:1 sa:3C sab:2c d g'::tsvector, 'a | sa:*'); + ts_rank_cd +------------ + 0.5 +(1 row) + SELECT ts_rank_cd(' a:1 s:2B d g'::tsvector, 'a | s'); ts_rank_cd ------------ diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index deaa3714fef..84b2d800f78 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -746,25 +746,47 @@ WHERE p1.amprocfamily = p3.oid AND p3.opfmethod = p2.oid AND -- Detect missing pg_amproc entries: should have as many support functions -- as AM expects for each datatype combination supported by the opfamily. +-- GIN is a special case because it has an optional support function. SELECT p1.amname, p2.opfname, p3.amproclefttype, p3.amprocrighttype FROM pg_am AS p1, pg_opfamily AS p2, pg_amproc AS p3 WHERE p2.opfmethod = p1.oid AND p3.amprocfamily = p2.oid AND + p1.amname <> 'gin' AND p1.amsupport != (SELECT count(*) FROM pg_amproc AS p4 WHERE p4.amprocfamily = p2.oid AND p4.amproclefttype = p3.amproclefttype AND p4.amprocrighttype = p3.amprocrighttype); +-- Similar check for GIN, allowing one optional proc + +SELECT p1.amname, p2.opfname, p3.amproclefttype, p3.amprocrighttype +FROM pg_am AS p1, pg_opfamily AS p2, pg_amproc AS p3 +WHERE p2.opfmethod = p1.oid AND p3.amprocfamily = p2.oid AND + p1.amname = 'gin' AND + p1.amsupport - 1 > (SELECT count(*) FROM pg_amproc AS p4 + WHERE p4.amprocfamily = p2.oid AND + p4.amproclefttype = p3.amproclefttype AND + p4.amprocrighttype = p3.amprocrighttype); + -- Also, check if there are any pg_opclass entries that don't seem to have --- pg_amproc support. +-- pg_amproc support. Again, GIN has to be checked separately. SELECT amname, opcname, count(*) FROM pg_am am JOIN pg_opclass op ON opcmethod = am.oid LEFT JOIN pg_amproc p ON amprocfamily = opcfamily AND amproclefttype = amprocrighttype AND amproclefttype = opcintype +WHERE am.amname <> 'gin' GROUP BY amname, amsupport, opcname, amprocfamily HAVING count(*) != amsupport OR amprocfamily IS NULL; +SELECT amname, opcname, count(*) +FROM pg_am am JOIN pg_opclass op ON opcmethod = am.oid + LEFT JOIN pg_amproc p ON amprocfamily = opcfamily AND + amproclefttype = amprocrighttype AND amproclefttype = opcintype +WHERE am.amname = 'gin' +GROUP BY amname, amsupport, opcname, amprocfamily +HAVING count(*) < amsupport - 1 OR amprocfamily IS NULL; + -- Unfortunately, we can't check the amproc link very well because the -- signature of the function may be different for different support routines -- or different base data types. diff --git a/src/test/regress/sql/tsearch.sql b/src/test/regress/sql/tsearch.sql index 3cf34524d34..dc7427d3b1d 100644 --- a/src/test/regress/sql/tsearch.sql +++ b/src/test/regress/sql/tsearch.sql @@ -47,6 +47,7 @@ SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt'; SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt'; SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)'; SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)'; +SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*'; create index wowidx on test_tsvector using gist (a); @@ -58,6 +59,7 @@ SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt'; SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt'; SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)'; SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)'; +SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*'; RESET enable_seqscan; @@ -73,6 +75,7 @@ SELECT count(*) FROM test_tsvector WHERE a @@ 'eq&yt'; SELECT count(*) FROM test_tsvector WHERE a @@ 'eq|yt'; SELECT count(*) FROM test_tsvector WHERE a @@ '(eq&yt)|(wr&qh)'; SELECT count(*) FROM test_tsvector WHERE a @@ '(eq|yt)&(wr|qh)'; +SELECT count(*) FROM test_tsvector WHERE a @@ 'w:*|q:*'; RESET enable_seqscan; INSERT INTO test_tsvector VALUES ('???', 'DFG:1A,2B,6C,10 FGH'); diff --git a/src/test/regress/sql/tstypes.sql b/src/test/regress/sql/tstypes.sql index 49afc3b23a2..fd7c7024f5e 100644 --- a/src/test/regress/sql/tstypes.sql +++ b/src/test/regress/sql/tstypes.sql @@ -58,6 +58,7 @@ SELECT '1&(2&(4&(5|6)))'::tsquery; SELECT '1&(2&(4&(5|!6)))'::tsquery; SELECT E'1&(''2''&('' 4''&(\\|5 | ''6 \\'' !|&'')))'::tsquery; SELECT $$'\\as'$$::tsquery; +SELECT 'a:* & nbb:*ac | doo:a* | goo'::tsquery; SELECT 'a' < 'b & c'::tsquery as "true"; SELECT 'a' > 'b & c'::tsquery as "false"; @@ -81,8 +82,23 @@ SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:B' as "true"; SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:A' as "true"; SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:C' as "false"; SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & ca:CB' as "true"; +SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & c:*C' as "false"; +SELECT 'a b:89 ca:23A,64b d:34c'::tsvector @@ 'd:AC & c:*CB' as "true"; +SELECT 'a b:89 ca:23A,64b cb:80c d:34c'::tsvector @@ 'd:AC & c:*C' as "true"; +SELECT 'a b:89 ca:23A,64c cb:80b d:34c'::tsvector @@ 'd:AC & c:*C' as "true"; +SELECT 'a b:89 ca:23A,64c cb:80b d:34c'::tsvector @@ 'd:AC & c:*B' as "true"; + +SELECT 'supernova'::tsvector @@ 'super'::tsquery AS "false"; +SELECT 'supeanova supernova'::tsvector @@ 'super'::tsquery AS "false"; +SELECT 'supeznova supernova'::tsvector @@ 'super'::tsquery AS "false"; +SELECT 'supernova'::tsvector @@ 'super:*'::tsquery AS "true"; +SELECT 'supeanova supernova'::tsvector @@ 'super:*'::tsquery AS "true"; +SELECT 'supeznova supernova'::tsvector @@ 'super:*'::tsquery AS "true"; SELECT ts_rank(' a:1 s:2C d g'::tsvector, 'a | s'); +SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | s'); +SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | s:*'); +SELECT ts_rank(' a:1 sa:2C d g'::tsvector, 'a | sa:*'); SELECT ts_rank(' a:1 s:2B d g'::tsvector, 'a | s'); SELECT ts_rank(' a:1 s:2 d g'::tsvector, 'a | s'); SELECT ts_rank(' a:1 s:2C d g'::tsvector, 'a & s'); @@ -90,6 +106,10 @@ SELECT ts_rank(' a:1 s:2B d g'::tsvector, 'a & s'); SELECT ts_rank(' a:1 s:2 d g'::tsvector, 'a & s'); SELECT ts_rank_cd(' a:1 s:2C d g'::tsvector, 'a | s'); +SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | s'); +SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | s:*'); +SELECT ts_rank_cd(' a:1 sa:2C d g'::tsvector, 'a | sa:*'); +SELECT ts_rank_cd(' a:1 sa:3C sab:2c d g'::tsvector, 'a | sa:*'); SELECT ts_rank_cd(' a:1 s:2B d g'::tsvector, 'a | s'); SELECT ts_rank_cd(' a:1 s:2 d g'::tsvector, 'a | s'); SELECT ts_rank_cd(' a:1 s:2C d g'::tsvector, 'a & s'); |
