]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix problem with some fts5 aux function APIs with (locale=, detail=none/column) tables.
authordan <Dan Kennedy>
Mon, 12 Aug 2024 17:28:13 +0000 (17:28 +0000)
committerdan <Dan Kennedy>
Mon, 12 Aug 2024 17:28:13 +0000 (17:28 +0000)
FossilOrigin-Name: bf116dec6fb20cce69099cb8c031b0de511195482919a99ccfb3c498e9bf8125

ext/fts5/fts5_main.c
ext/fts5/test/fts5locale.test
manifest
manifest.uuid

index b4ccd04028d25b620dbda2d79c724e7bf0ea83f2..8af3dd051556c3f93cec37a22e5726302bdbb502 100644 (file)
@@ -2231,14 +2231,21 @@ static int fts5CsrPoslist(
       int i;
       aPopulator = sqlite3Fts5ExprClearPoslists(pCsr->pExpr, bLive);
       if( aPopulator==0 ) rc = SQLITE_NOMEM;
+      if( rc==SQLITE_OK ){
+        rc = fts5SeekCursor(pCsr, 0);
+      }
       for(i=0; i<pConfig->nCol && rc==SQLITE_OK; i++){
-        int n; const char *z;
-        rc = fts5ApiColumnText((Fts5Context*)pCsr, i, &z, &n);
+        sqlite3_value *pVal = sqlite3_column_value(pCsr->pStmt, i+1);
+        const char *z = 0;
+        int n = 0; 
+        int bReset = 0;
+        rc = sqlite3Fts5ExtractText(pConfig, pVal, 1, &bReset, &z, &n);
         if( rc==SQLITE_OK ){
           rc = sqlite3Fts5ExprPopulatePoslists(
               pConfig, pCsr->pExpr, aPopulator, i, z, n
           );
         }
+        if( bReset ) sqlite3Fts5ClearLocale(pConfig);
       }
       sqlite3_free(aPopulator);
 
index 2d5f2a00dc8ae042de56a0af2ca8e89d0236f647..a8ea31e221d1fffbcb63e34e87590cd09517c997 100644 (file)
@@ -414,5 +414,35 @@ do_execsql_test 8.1 {
   a eb eulav osla sihT te the token yam
 }
 
+#-------------------------------------------------------------------------
+# Test that position-lists (used by xInst, xPhraseFirst etc.) work with
+# locales and modes other than detail=full.
+#
+
+foreach {tn detail} {
+  1 detail=full
+  2 detail=none
+  3 detail=column
+} {
+  reset_db
+  sqlite3_fts5_create_tokenizer -v2 db tcl tcl_create
+  do_execsql_test 9.$tn.0 "
+    CREATE VIRTUAL TABLE ft USING fts5(tt, locale=1, tokenize=tcl, $detail);
+  "
+  do_execsql_test 9.$tn.1 {
+    CREATE VIRTUAL TABLE vocab USING fts5vocab('ft', instance);
+    INSERT INTO ft(rowid, tt) VALUES
+      (-1, fts5_locale('second', 'it is an ancient mariner'));
+  }
+
+  do_execsql_test 9.$tn.2 {
+    SELECT DISTINCT term FROM vocab 
+  } {an it mariner}
+
+  do_execsql_test 9.$tn.3 {
+    SELECT highlight(ft, 0, '[', ']') FROM ft('mariner')
+  } {{it is an ancient [mariner]}}
+}
+
 finish_test
 
index 6750b9074062bd1d3a858881a7d785a26681ae0c..c845da3de96b6eb81492b8db39b5fb067564a525 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sfurther\sissues\sto\sdo\swith\sfts5\slocale\ssupport.
-D 2024-08-12T17:03:37.726
+C Fix\sproblem\swith\ssome\sfts5\saux\sfunction\sAPIs\swith\s(locale=,\sdetail=none/column)\stables.
+D 2024-08-12T17:28:13.218
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -100,7 +100,7 @@ F ext/fts5/fts5_config.c 187f7ffa5eddd6539ffa592de85e95b18be951728491390121bb215
 F ext/fts5/fts5_expr.c 3a24c6ab5b7545312a5ec03085ae705ede820a08f9a63f1d72829ed4a35da6f6
 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1
 F ext/fts5/fts5_index.c eb9a0dda3bc6ef969a6be8d2746af56856e67251810ddba08622b45be8477abe
-F ext/fts5/fts5_main.c 4fe8349b812a9fde8e44ac5568f19d713ccc4790eb3ecb692f6551729c481b2b
+F ext/fts5/fts5_main.c b3194ee180859067fc8651d3c4e40d7f24877eb9cd820618d938d1a6d0974493
 F ext/fts5/fts5_storage.c 5bf88213ff5911625c142ac332ddba10dcd0869e757f91f2a3d27f27ba595992
 F ext/fts5/fts5_tcl.c 50c7e16753fde0c4d80d8abd00a4ed2b0e998d5d3899a484510d01923c5da43b
 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee
@@ -186,7 +186,7 @@ F ext/fts5/test/fts5interrupt.test 20d04204d3e341b104c0c24a41596b6393a3a81eba104
 F ext/fts5/test/fts5lastrowid.test f36298a1fb9f988bde060a274a7ce638faa9c38a31400f8d2d27ea9373e0c4a1
 F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc2782680740513c4d1fc114b43d4ad
 F ext/fts5/test/fts5limits.test 8ab67cf5d311c124b6ceb0062d0297767176df4572d955fce79fa43004dff01c
-F ext/fts5/test/fts5locale.test 8e893b5a764d181260f5f862dc529fcdb42315b2d683317043d4609f13f88a02
+F ext/fts5/test/fts5locale.test 1f08fb39af3c0cb49ce48ec1212308db4b0105a38ff1a6864c8ef73abffb5431
 F ext/fts5/test/fts5matchinfo.test 877520582feb86bbfd95ab780099bcba4526f18ac75ee34979144cf86ba3a5a3
 F ext/fts5/test/fts5merge.test 2654df0bcdb2d117c2d38b6aeb0168061be01c643f9e9194b36c43a2970e8082
 F ext/fts5/test/fts5merge2.test 3ebad1a59d6ad3fb66eff6523a09e95dc6367cbefb3cd73196801dea0425c8e2
@@ -2207,8 +2207,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3291ce3a3359a80e51e4546a3d7a187cbe4c7530fca6632f0bb2728525efe212
-R 5bdde041363e74c68796cadade4d8480
+P e626123580065986f7df50b6140f00048944becce179b9391fbf09f97ac55485
+R 7d41bee88044e0297d8070928920af0c
 U dan
-Z 098e7ed7a851f6658bf54618988e8ebd
+Z 30446f621f4abd678975f659d5345d71
 # Remove this line to create a well-formed Fossil manifest.
index 902e51759c5b5fb21d5a62c2db3e2047fd710aa4..0fc1e84a719bd3fd23dc9ee3089fd5334beb2954 100644 (file)
@@ -1 +1 @@
-e626123580065986f7df50b6140f00048944becce179b9391fbf09f97ac55485
+bf116dec6fb20cce69099cb8c031b0de511195482919a99ccfb3c498e9bf8125