]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add tests to restore coverage of fts5_main.c.
authordan <Dan Kennedy>
Fri, 16 Aug 2024 16:20:43 +0000 (16:20 +0000)
committerdan <Dan Kennedy>
Fri, 16 Aug 2024 16:20:43 +0000 (16:20 +0000)
FossilOrigin-Name: 681edd08ab7024ddcd6447a64d8aad581b47b039481b697d91d26e6c6660f373

ext/fts5/fts5_tcl.c
ext/fts5/test/fts5faultI.test
ext/fts5/test/fts5locale.test
ext/fts5/test/fts5misc.test
manifest
manifest.uuid

index 60b3f0e9ef3127340133717cf07ec9f01655f585..1e9f7bbb609722188909a140d9152ee6a4e6748c 100644 (file)
@@ -890,15 +890,17 @@ static int f5tTokenizerCreate(
 
 static void f5tTokenizerDelete(Fts5Tokenizer *p){
   F5tTokenizerInstance *pInst = (F5tTokenizerInstance*)p;
-  if( pInst->pParent ){
-    if( pInst->pModule->parent_v2.xDelete ){
-      pInst->pModule->parent_v2.xDelete(pInst->pParent);
-    }else{
-      pInst->pModule->parent.xDelete(pInst->pParent);
+  if( pInst ){
+    if( pInst->pParent ){
+      if( pInst->pModule->parent_v2.xDelete ){
+        pInst->pModule->parent_v2.xDelete(pInst->pParent);
+      }else{
+        pInst->pModule->parent.xDelete(pInst->pParent);
+      }
     }
+    Tcl_DecrRefCount(pInst->pScript);
+    ckfree((char *)pInst);
   }
-  Tcl_DecrRefCount(pInst->pScript);
-  ckfree((char *)pInst);
 }
 
 
@@ -1146,6 +1148,7 @@ static int SQLITE_TCLAPI f5tCreateTokenizer(
   F5tTokenizerModule *pMod;
   int rc = SQLITE_OK;
   int bV2 = 0;                    /* True to use _v2 API */
+  int iVersion = 2;               /* Value for _v2.iVersion */
   const char *zParent = 0;        /* Name of parent tokenizer, if any */
   int ii = 0;
 
@@ -1157,7 +1160,7 @@ static int SQLITE_TCLAPI f5tCreateTokenizer(
   /* Parse any options. Set stack variables bV2 and zParent. */
   for(ii=1; ii<objc-3; ii++){
     int iOpt = 0;
-    const char *azOpt[] = { "-v2", "-parent", 0 };
+    const char *azOpt[] = { "-v2", "-parent", "-version", 0 };
     if( Tcl_GetIndexFromObj(interp, objv[ii], azOpt, "OPTION", 0, &iOpt) ){
       return TCL_ERROR;
     }
@@ -1177,6 +1180,19 @@ static int SQLITE_TCLAPI f5tCreateTokenizer(
         zParent = Tcl_GetString(objv[ii]);
         break;
       }
+      case 2: /* -version */ {
+        ii++;
+        if( ii==objc-3 ){
+          Tcl_AppendResult(
+              interp, "option requires an argument: -version", (char*)0
+          );
+          return TCL_ERROR;
+        }
+        if( Tcl_GetIntFromObj(interp, objv[ii], &iVersion) ){
+          return TCL_ERROR;
+        }
+        break;
+      }
       default:
         assert( 0 );
         break;
@@ -1201,9 +1217,13 @@ static int SQLITE_TCLAPI f5tCreateTokenizer(
       rc = pApi->xFindTokenizer_v2(pApi, zParent, &pMod->pParentCtx, &pParent);
       if( rc==SQLITE_OK ){
         memcpy(&pMod->parent_v2, pParent, sizeof(fts5_tokenizer_v2));
+        pMod->parent_v2.xDelete(0);
       }
     }else{
       rc = pApi->xFindTokenizer(pApi, zParent, &pMod->pParentCtx,&pMod->parent);
+      if( rc==SQLITE_OK ){
+        pMod->parent.xDelete(0);
+      }
     }
   }
 
@@ -1218,7 +1238,7 @@ static int SQLITE_TCLAPI f5tCreateTokenizer(
     }else{
       fts5_tokenizer_v2 t2;
       memset(&t2, 0, sizeof(t2));
-      t2.iVersion = 2;
+      t2.iVersion = iVersion;
       t2.xCreate = f5tTokenizerCreate;
       t2.xTokenize = f5tTokenizerTokenize_v2;
       t2.xDelete = f5tTokenizerDelete;
index 33c93c63af8ea7e7c1e70021fd2aef15083dfb40..ab641b65148b56967c98c292d9d725589acdb6ff 100644 (file)
@@ -20,7 +20,9 @@ ifcapable !fts5 {
   return
 }
 
-set ::testprefix fts5faultH
+set ::testprefix fts5faultI
+
+if 0 {
 
 do_execsql_test 1.0 {
   PRAGMA encoding = utf16;
@@ -146,5 +148,59 @@ do_faultsim_test 6 -faults oom* -prep {
   faultsim_test_result {0 {}}
 }
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 7.0 {
+  CREATE VIRTUAL TABLE w1 USING fts5(a);
+  INSERT INTO w1 VALUES('one two three');
+  INSERT INTO w1 VALUES('three two one');
+  DELETE FROM w1_content WHERE rowid=1;
+}
+
+faultsim_save_and_close
+
+do_faultsim_test 7 -faults oom* -prep {
+  faultsim_restore_and_reopen
+  db eval { SELECT * FROM w1 }
+} -body {
+  execsql {
+    PRAGMA integrity_check;
+  }
+} -test {
+}
+}
+#-------------------------------------------------------------------------
+reset_db
+fts5_tclnum_register db
+fts5_aux_test_functions db
+
+do_execsql_test 2.0 {
+  CREATE VIRTUAL TABLE ft USING fts5(
+      x, tokenize = "tclnum query", detail=columns
+  );
+  INSERT INTO ft VALUES('one two three i ii iii');
+  INSERT INTO ft VALUES('four five six iv v vi');
+  INSERT INTO ft VALUES('eight nine ten viii ix x');
+} {}
+
+do_faultsim_test 8.1 -faults oom* -prep {
+} -body {
+  execsql {
+    SELECT fts5_test_collist (ft) FROM ft('one two');
+  }
+} -test {
+  faultsim_test_result {0 {{0.0 1.0}}} {1 {SQL logic error}} {1 SQLITE_NOMEM}
+}
+
+do_faultsim_test 8.2 -faults oom* -prep {
+} -body {
+  execsql {
+    SELECT rowid FROM ft('one two') ORDER BY rank;
+  }
+} -test {
+  faultsim_test_result {0 1} {1 {SQL logic error}} {1 SQLITE_NOMEM}
+}
+
+
 finish_test
 
index a07f4ccfa86bf92e80be7934f2ed943f807ef22a..f647317c3b9c10676bbfa4b067bbdeba9e680660 100644 (file)
@@ -521,5 +521,14 @@ do_catchsql_test 11.2 {
   SELECT fts5_columnlocale(x1, 1) FROM x1('two');
 } {1 SQLITE_RANGE}
 
+#-------------------------------------------------------------------------
+#
+reset_db
+do_test 12.0 {
+  list [catch {
+    sqlite3_fts5_create_tokenizer -v2 -version 3 db tcl tcl_create
+  } msg] $msg
+} {1 {error in fts5_api.xCreateTokenizer_v2()}}
+
 finish_test
 
index 4b943c348844b97450ac5186fbf7d695005b3169..c7f4a53e38a54ab6d5db5b0e94b307ed9cd013fe 100644 (file)
@@ -591,5 +591,27 @@ do_execsql_test 21.2 {
   PRAGMA integrity_check
 } {ok}
 
+breakpoint
+sqlite3_db_config db DEFENSIVE 1
+do_execsql_test 21.3 {
+  CREATE TABLE xyz_notashadow(x, y);
+  DROP TABLE xyz_notashadow;
+}
+sqlite3_db_config db DEFENSIVE 0
+
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 22.0 {
+  SELECT fts5(NULL);
+} {{}}
+do_execsql_test 22.1 {
+  SELECT count(*) FROM (
+    SELECT fts5_source_id()
+  )
+} {1}
+execsql_pp {
+  SELECT fts5_source_id()
+}
+
 finish_test
 
index 28ab5391d0f93def6411550d983d5dc094ab5a8c..5847c8b75ffc707b1596c95e714dd47a22e8208c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Extra\stests.
-D 2024-08-15T20:33:05.956
+C Add\stests\sto\srestore\scoverage\sof\sfts5_main.c.
+D 2024-08-16T16:20:43.666
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -102,7 +102,7 @@ F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a
 F ext/fts5/fts5_index.c eb9a0dda3bc6ef969a6be8d2746af56856e67251810ddba08622b45be8477abe
 F ext/fts5/fts5_main.c 23029229021240dc21a69eb749305316103d183375413e2090c064b74b03b7f8
 F ext/fts5/fts5_storage.c 5bf88213ff5911625c142ac332ddba10dcd0869e757f91f2a3d27f27ba595992
-F ext/fts5/fts5_tcl.c 50c7e16753fde0c4d80d8abd00a4ed2b0e998d5d3899a484510d01923c5da43b
+F ext/fts5/fts5_tcl.c 1dcf08028141c40a32634bdcf2d5601622ce4edc48f82ac4ce0cbe0a92a6961d
 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee
 F ext/fts5/fts5_test_tok.c 3cb0a9b508b30d17ef025ccddd26ae3dc8ddffbe76c057616e59a9aa85d36f3b
 F ext/fts5/fts5_tokenize.c 96efa85a21a85276680ce3fb19dc5dd8d6b6541b2c37f953ee55bc15092262e1
@@ -177,7 +177,7 @@ F ext/fts5/test/fts5faultE.test 844586ce71dab4be85bb86880e87b624d089f851654cd22e
 F ext/fts5/test/fts5faultF.test 4abef99f86e99d9f0c6460dd68c586a766b6b9f1f660ada55bf2e8266bd1bbc1
 F ext/fts5/test/fts5faultG.test 0544411ffcb3e19b42866f757a8a5e0fb8fef3a62c06f61d14deebc571bb7ea9
 F ext/fts5/test/fts5faultH.test 2b2b5b8cb1b3fd7679f488c06e22af44107fbc6137eaf45b3e771dc7b149312d
-F ext/fts5/test/fts5faultI.test d9e8c4b0b42910fa447a0e148236def618e7decbf3a334c7933a95e36410f772
+F ext/fts5/test/fts5faultI.test eb0910ec0fa57b4e06241c58252124155e689770b4dd2d8f4f3fc74185be934e
 F ext/fts5/test/fts5first.test bfd685b96905bf541d99d8644e0a7219d1d833455a08ab64e344071a613b6ba9
 F ext/fts5/test/fts5full.test 97d263c1072f4a560929cca31e70f65d2ae232610e17e6affcf7e979df59547b
 F ext/fts5/test/fts5fuzz1.test 238d8c45f3b81342aa384de3e581ff2fa330bf922a7b69e484bbc06051a1080e
@@ -187,11 +187,11 @@ 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 f58ac6ab539d3813556646f7d4b1e19f7e3b1a56ca4439349eb8099d6a821ff6
+F ext/fts5/test/fts5locale.test 5ad9f1b66db4d698c67284f3495007be94f8c6ed183688e64defed72a169b6c0
 F ext/fts5/test/fts5matchinfo.test 877520582feb86bbfd95ab780099bcba4526f18ac75ee34979144cf86ba3a5a3
 F ext/fts5/test/fts5merge.test 2654df0bcdb2d117c2d38b6aeb0168061be01c643f9e9194b36c43a2970e8082
 F ext/fts5/test/fts5merge2.test 3ebad1a59d6ad3fb66eff6523a09e95dc6367cbefb3cd73196801dea0425c8e2
-F ext/fts5/test/fts5misc.test b49a3afbda6de02970560c1cd3b804a4896b9f30ce5d75a5f215fa972537b26b
+F ext/fts5/test/fts5misc.test c860b75721d162d7a4f2856322e55e814c2cf0bc45f93ef4388551b54e61a0a0
 F ext/fts5/test/fts5multi.test a15bc91cdb717492e6e1b66fec1c356cb57386b980c7ba5af1915f97fe878581
 F ext/fts5/test/fts5multiclient.test 5ff811c028d6108045ffef737f1e9f05028af2458e456c0937c1d1b8dea56d45
 F ext/fts5/test/fts5near.test 33d60867581066e5db7016deb5d651628125d7ff4e0233a88175aa5b65874c74
@@ -2208,8 +2208,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 d27985245a0e8c0d6b04323c98b26b6a8fb4e489fa8f5f3234252c7c198f23c8
-R c260c68d60eebc40b0c96509388ca9e3
+P fb257540d32ced4a5fe0759d3ad9c1b36fd2b7d64d93cb0a0ecdb48355a68b7a
+R 067a05b128f4dcdbb34743e9c0788abc
 U dan
-Z d7c15a75ca8b075cfcf78184db374c6a
+Z 1b380833fd7dd34e177f4e045cee1c46
 # Remove this line to create a well-formed Fossil manifest.
index 83c523a401c7a592a917cdc068891166e3e52dca..e93e9346cb468524dd217cfbc39090703d927db3 100644 (file)
@@ -1 +1 @@
-fb257540d32ced4a5fe0759d3ad9c1b36fd2b7d64d93cb0a0ecdb48355a68b7a
+681edd08ab7024ddcd6447a64d8aad581b47b039481b697d91d26e6c6660f373