123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- # 2014 Jan 08
- #
- # The author disclaims copyright to this source code. In place of
- # a legal notice, here is a blessing:
- #
- # May you do good and not evil.
- # May you find forgiveness for yourself and forgive others.
- # May you share freely, never taking more than you give.
- #
- #***********************************************************************
- #
- # Tests focused on phrase queries.
- #
- source [file join [file dirname [info script]] fts5_common.tcl]
- set testprefix fts5origintext6
- # If SQLITE_ENABLE_FTS5 is not defined, omit this file.
- ifcapable !fts5 {
- finish_test
- return
- }
- proc insert_data {tbl} {
- db eval "
- INSERT INTO $tbl (rowid, x, y) VALUES
- (1, 'ChH BDd HhG efc BjJ BGi GBG FdD','ciJ AFf ADf fBJ fhC GFI JEH fcA'),
- (2, 'deg AIG Fie jII cCd Hbf igF fEE','GeA Ija gJg EDc HFi DDI dCf aDd'),
- (3, 'IJC hga deC Jfa Aeg hfh CcH dfb','ajD hgC Jaf IfH CHe jIG AjD adF'),
- (4, 'FiH GJH IDA AiG bBc CGG Eih bIH','hHg JaH aii IHE Ggd gcH gji CGc'),
- (5, 'ceg CAd jFI GAB BGg EeC IdH acG','bBC eIG ifH eDE Adj bjb GCj ebA'),
- (6, 'Eac Fbh aFF Eea jeG EIj HCc JJH','hbd giE Gfe eiI dEF abE cJf cAb'),
- (7, 'dic hAc jEC AiG FEF jHc HiD HBI','aEd ebE Gfi AJG EBA faj GiG jjE'),
- (8, 'Fca iEe EgE jjJ gce ijf EGc EBi','gaI dhH bFg CFc HeC CjI Jfg ccH'),
- (9, 'cfd iaa HCf iHJ HjG ffh ABb ibi','CfG bia Dai eii Ejg Jeg fCg hDb'),
- (10, 'Jjf hJC IID HJj bGB EbJ cgg eBj','jci jhi JAF jIg Bei Bcd cAC AJd'),
- (11, 'egG Cdi bFf fEB hfH jDH jia Efd','FAd eCg fAi aiC baC eJG acF iGE'),
- (12, 'Ada Gde CJI ADG gJA Cbb ccF iAB','eAE ajC FBB ccd Jgh fJg ieg hGE'),
- (13, 'gBb fDG Jdd HdD fiJ Bed Cig iGg','heC FeI iaj gdg ebB giC HaD FIe'),
- (14, 'FiI iDd Ffe igI bgB EJf FHG hDF','cjC AeI abf Fah cbJ ffH jEb aib'),
- (15, 'jaF hBI jIH Gdh FEc Fij hgj jFh','dGA ADH feh AAI AfJ DbC gBi hGH'),
- (16, 'gjH BGg iGj aFE CAH edI idf HEH','hIf DDg fjB hGi cHF BCH FjG Bgd'),
- (17, 'iaI JGH hji gcj Dda eeG jDd CBi','cHg jeh caG gIc feF ihG hgJ Abj'),
- (18, 'jHI iDB eFf AiH EFB CDb IAj GbC','Ghe dEI gdI jai gib dAG BIa djb'),
- (19, 'abI fHG Ccf aAc FDa fiC agF bdB','afi hde IgE bGF cfg DHD diE aca'),
- (20, 'IFh eDJ jfh cDg dde JGJ GAf fIJ','IBa EfH faE aeI FIF baJ FGj EIH'),
- (21, 'Dee bFC bBA dEI CEj aJI ghA dCH','hBA ddA HJh dfj egI Dij dFE bGE'),
- (22, 'JFE BCj FgA afc Jda FGD iHJ HDh','eAI jHe BHD Gah bbD Bgj gbh eGB'),
- (23, 'edE CJE FjG aFI edA Cea FId iFe','ABG jcA ddj EEc Dcg hAI agA biA'),
- (24, 'AgE cfc eef cGh aFB DcH efJ hcH','eGF HaB diG fgi bdc iGJ FGJ fFB'),
- (25, 'aCa AgI GhC DDI hGJ Hgc Gcg bbG','iID Fga jHa jIj idj DFD bAC AFJ'),
- (26, 'gjC JGh Fge faa eCA iGG gHE Gai','bDi hFE BbI DHD Adb Fgi hCa Hij'),
- (27, 'Eji jEI jhF DFC afH cDh AGc dHA','IDe GcA ChF DIb Bif HfH agD DGh'),
- (28, 'gDD AEE Dfg ICf Cbi JdE jgH eEi','eEb dBG FDE jgf cAI FaJ jaA cDd'),
- (29, 'cbe Gec hgB Egi bca dHg bAJ jBf','EFB DgD GJc fDb EeE bBA GFC Hbe'),
- (30, 'Adc eHB afI hDc Bhh baE hcJ BBd','JAH deg bcF Dab Bgj Gbb JHi FIB'),
- (31, 'agF dIj AJJ Hfg cCG hED Igc fHC','JEf eia dHf Ggc Agj geD bEE Gei'),
- (32, 'DAd cCe cbJ FjG gJe gba dJA GCf','eAf hFc bGE ABI hHA IcE abF CCE'),
- (33, 'fFh jJe DhJ cDJ EBi AfD eFI IhG','fEG GCc Bjd EFF ggg CFe EHd ciB'),
- (34, 'Ejb BjI eAF HaD eEJ FaG Eda AHC','Iah hgD EJG fdD cIE Daj IFf eJh'),
- (35, 'aHG eCe FjA djJ dAJ jiJ IaE GGB','Acg iEF JfB FIC Eei ggj dic Iii'),
- (36, 'Fdb EDF GaF JjB ehH IgC hgi DCG','cag DHI Fah hAJ bbh egG Hia hgJ'),
- (37, 'HGg icC JEC AFJ Ddh dhi hfC Ich','fEg bED Bff hCJ EiA cIf bfG cGA'),
- (38, 'aEJ jGI BCi FaA ebA BHj cIJ GcC','dCH ADd bGB cFE AgF geD cbG jIc'),
- (39, 'JFB bBi heA BFA hgB Ahj EIE CgI','EIJ JFG FJE GeA Hdg HeH ACh GiA'),
- (40, 'agB DDC CED igC Dfc DhI eiC fHi','dAB dcg iJF cej Fcc cAc AfB Fdd'),
- (41, 'BdF DHj Ege hcG DEd eFa dCf gBb','FBG ChB cej iGd Hbh fCc Ibe Abh'),
- (42, 'Bgc DjI cbC jGD bdb hHB IJA IJH','heg cii abb IGf eDe hJc dii fcE'),
- (43, 'fhf ECa FiA aDh Jbf CiB Jhe ajD','GFE bIF aeD gDE BIE Jea DfC BEc'),
- (44, 'GjE dBj DbJ ICF aDh EEH Ejb jFb','dJj aEc IBg bEG Faf fjA hjf FAF'),
- (45, 'BfA efd IIJ AHG dDF eGg dIJ Gcb','Bfj jeb Ahc dAE ACH Dfb ieb dhC'),
- (46, 'Ibj ege geC dJh CIi hbD EAG fGA','DEb BFe Bjg FId Fhg HeF JAc BbE'),
- (47, 'dhB afC hgG bEJ aIe Cbe iEE JCD','bdg Ajc FGA jbh Jge iAj fIA jbE'),
- (48, 'egH iDi bfH iiI hGC jFF Hfd AHB','bjE Beb iCc haB gIH Dea bga dfd'),
- (49, 'jgf chc jGc Baj HBb jdE hgh heI','FFB aBd iEB EIG HGf Bbj EIi JbI'),
- (50, 'jhe EGi ajA fbH geh EHe FdC bij','jDE bBC gbH HeE dcH iBH IFE AHi'),
- (51, 'aCb JiD cgJ Bjj iAI Hbe IAF FhH','ijf bhE Jdf FED dCH bbG HcJ ebH');
- "
- }
- foreach_detail_mode $testprefix {
- foreach external {0 1 2} {
- reset_db
- proc tokens {cmd} {
- set ret [list]
- for {set iTok 0} {$iTok < [$cmd xInstCount]} {incr iTok} {
- set txt [$cmd xInstToken $iTok 0]
- set txt [string map [list "\0" "."] $txt]
- lappend ret $txt
- }
- set ret
- }
- sqlite3_fts5_create_function db tokens tokens
- sqlite3_fts5_register_origintext db
- set E(0) internal
- set E(1) external
- set E(2) contentless
- set e $E($external)
- db eval { CREATE TABLE ex(x, y) }
- switch -- $external {
- 0 {
- do_execsql_test 1.$e.0 {
- CREATE VIRTUAL TABLE ft USING fts5(
- x, y, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL%
- );
- }
- }
- 1 {
- do_execsql_test 1.$e.0 {
- CREATE VIRTUAL TABLE ft USING fts5(
- x, y, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL%,
- content=ex
- );
- }
- }
- 2 {
- do_execsql_test 1.$e.0 {
- CREATE VIRTUAL TABLE ft USING fts5(
- x, y, tokenize="origintext unicode61", tokendata=1, detail=%DETAIL%,
- content=
- );
- }
- }
- }
- insert_data ex
- insert_data ft
-
- proc prefixquery {prefix bInst bYOnly} {
- set ret [list]
- db eval { SELECT rowid, x, y FROM ex ORDER BY rowid } {
- set row [list]
- set bSeen 0
- set T [concat $x $y]
- if {$bYOnly} { set T $y }
- foreach w $T {
- if {[string match -nocase $prefix $w]} {
- set bSeen 1
- if {$bInst} {
- set v [string tolower $w]
- if {$w != $v} { append v ".$w" }
- lappend row $v
- }
- }
- }
-
- if {$bSeen} {
- lappend ret $rowid
- lappend ret $row
- }
- }
-
- set ret
- }
-
- proc do_prefixquery_test {tn prefix} {
- set bInst [expr {$::e!="contentless" || "%DETAIL%"=="full"}]
- set expect [prefixquery $prefix $bInst 0]
- set expect2 [prefixquery $prefix $bInst 1]
- uplevel [list do_execsql_test $tn.1 "
- SELECT rowid, tokens(ft) FROM ft('$prefix')
- " $expect]
- uplevel [list do_execsql_test $tn.2 "
- SELECT rowid, tokens(ft) FROM ft(fts5_insttoken('$prefix'))
- " $expect]
- db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 1) }
- uplevel [list do_execsql_test $tn.3 "
- SELECT rowid, tokens(ft) FROM ft('$prefix')
- " $expect]
- db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 0) }
- if {"%DETAIL%"!="none"} {
- uplevel [list do_execsql_test $tn.4 "
- SELECT rowid, tokens(ft) FROM ft('y: $prefix')
- " $expect2]
- uplevel [list do_execsql_test $tn.5 "
- SELECT rowid, tokens(ft) FROM ft(fts5_insttoken('y: $prefix'))
- " $expect2]
- db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 1) }
- uplevel [list do_execsql_test $tn.6 "
- SELECT rowid, tokens(ft) FROM ft('y: $prefix')
- " $expect2]
- db eval { INSERT INTO ft(ft, rank) VALUES('insttoken', 0) }
- }
- }
-
- do_prefixquery_test 1.$e.1 a*
- do_prefixquery_test 1.$e.2 b*
- do_prefixquery_test 1.$e.3 c*
- do_prefixquery_test 1.$e.4 d*
- do_prefixquery_test 1.$e.5 e*
- do_prefixquery_test 1.$e.6 f*
- do_prefixquery_test 1.$e.7 g*
- do_prefixquery_test 1.$e.8 h*
- do_prefixquery_test 1.$e.9 i*
- do_prefixquery_test 1.$e.10 j*
- }}
- finish_test
|