]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add tests for xInstToken() and prefix queries with various fts5 configurations.
authordan <Dan Kennedy>
Wed, 6 Nov 2024 16:20:16 +0000 (16:20 +0000)
committerdan <Dan Kennedy>
Wed, 6 Nov 2024 16:20:16 +0000 (16:20 +0000)
FossilOrigin-Name: 9cc04331a01760189d88697233009dbe8a60eda589792ad01b56300499e9f54d

ext/fts5/test/fts5origintext6.test [new file with mode: 0644]
manifest
manifest.uuid

diff --git a/ext/fts5/test/fts5origintext6.test b/ext/fts5/test/fts5origintext6.test
new file mode 100644 (file)
index 0000000..7b27e31
--- /dev/null
@@ -0,0 +1,209 @@
+# 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
+
index 603ced6491ee8665b3a1b0799b05b946b0a0c6a2..d34164b757f65a96b343726adad6dbecc4fbb4cc 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Allow\san\sfts5\stable\sor\squery\sto\sbe\sconfigured\sto\scollect\sxInstToken\sdata\sfor\sany\sprefix\sterms\sas\spart\sof\sthe\sfirst\sparse\sof\sthe\smain\sindex,\sif\sany.
-D 2024-11-02T19:10:50.264
+C Add\stests\sfor\sxInstToken()\sand\sprefix\squeries\swith\svarious\sfts5\sconfigurations.
+D 2024-11-06T16:20:16.715
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28
@@ -219,6 +219,7 @@ F ext/fts5/test/fts5origintext2.test f4505ff79bf7369f2b8b10b9cef7476049d844e20b3
 F ext/fts5/test/fts5origintext3.test 4988b6375acc3bbb0515667765f57e389caf449814af9c1095c053f7de2b4223
 F ext/fts5/test/fts5origintext4.test 0d3ef0a8038f471dbc83001c34fe5f7ae39b571bfc209670771eb28bc0fc50e8
 F ext/fts5/test/fts5origintext5.test ee12b440ec335e5b422d1668aca0051b52ff28b6ee67073e8bbc29f509fd562b
+F ext/fts5/test/fts5origintext6.test 09eb1347cb0dceaebbebf3d3e6bd5d24c7c1006efddc2984540450324bbdafa4
 F ext/fts5/test/fts5phrase.test bb2554bb61d15f859678c96dc89a7de415cd5fc3b7b54c29b82a0d0ad138091c
 F ext/fts5/test/fts5plan.test f8b0d752a818059a934cdc96c0f77de058a67a0a57bb3a8181d28307ab5b1626
 F ext/fts5/test/fts5porter.test 15b514fac8690b58e99c330efe5bf5615bc43f2fae4a3cca3f923dbaff55a0c0
@@ -2199,8 +2200,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 790c56d493c66a2136e24d349d169639809d70bfab6996975a403be568a267a5
-R 71ba4975c4c76073cda6dd2f314d94d1
+P 46929ae92b26f02bc70de9931b21a8a7cf9a2453d5fb07f68b712f62e28e9152
+R a22fb948708e266e2094d3645362e84e
 U dan
-Z 95da39a03d7bb4b9bc58c6dbf7b809e5
+Z 3041da3c7f9ea1d87e0998786f60280f
 # Remove this line to create a well-formed Fossil manifest.
index 94e1307210a974df931642d5b7188bdc82ecb9b0..20c99b7fae4878fb2709bfd399d6225868a4cea2 100644 (file)
@@ -1 +1 @@
-46929ae92b26f02bc70de9931b21a8a7cf9a2453d5fb07f68b712f62e28e9152
+9cc04331a01760189d88697233009dbe8a60eda589792ad01b56300499e9f54d