]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change the xIntegrity virtual table method signature so that it returns
authordrh <>
Wed, 6 Sep 2023 14:00:01 +0000 (14:00 +0000)
committerdrh <>
Wed, 6 Sep 2023 14:00:01 +0000 (14:00 +0000)
an integer error code and writes the error message into a parameter.

FossilOrigin-Name: f1d4024a8ca06cf954aaf1f612684d1a5d28492bde757695db3f22c50c649709

ext/fts3/fts3.c
ext/fts5/fts5_main.c
ext/rtree/rtree.c
manifest
manifest.uuid
src/sqlite.h.in
src/vdbe.c

index 03013b0bf42c900369b344adcc91a12b16bada3d..8aa824bce4eeb5a74ce900c7531a59178107b3de 100644 (file)
@@ -3984,22 +3984,22 @@ static int fts3ShadowName(const char *zName){
 ** Implementation of the xIntegrity() method on the FTS3/FTS4 virtual
 ** table.
 */
-static char *fts3Integrity(sqlite3_vtab *pVtab){
+static int fts3Integrity(sqlite3_vtab *pVtab, char **pzErr){
   Fts3Table *p = (Fts3Table*)pVtab;
   char *zSql;
   int rc;
-  char *zErr = 0;
 
   zSql = sqlite3_mprintf(
             "INSERT INTO \"%w\".\"%w\"(\"%w\") VALUES('integrity-check');",
             p->zDb, p->zName, p->zName);
   rc = sqlite3_exec(p->db, zSql, 0, 0, 0);
   sqlite3_free(zSql);
-  if( rc ){
-    zErr = sqlite3_mprintf("malformed inverted index for FTS%d table %s.%s",
-              p->bFts4 ? 4 : 3, p->zDb, p->zName);
+  if( (rc&0xff)==SQLITE_CORRUPT ){
+    *pzErr = sqlite3_mprintf("malformed inverted index for FTS%d table %s.%s",
+                p->bFts4 ? 4 : 3, p->zDb, p->zName);
+    rc = SQLITE_OK;
   }
-  return zErr;
+  return rc;
 }
 
 
index fac4dd06bcf841121060212df2a3cc2b6ba9c803..1f5b0326fb8332eabca903a78a86d4300f9c3422 100644 (file)
@@ -2855,23 +2855,22 @@ static int fts5ShadowName(const char *zName){
 ** if anything is found amiss.  Return a NULL pointer if everything is
 ** OK.
 */
-static char *fts5Integrity(sqlite3_vtab *pVtab){
+static int fts5Integrity(sqlite3_vtab *pVtab, char **pzErr){
   Fts5FullTable *pTab = (Fts5FullTable*)pVtab;
   Fts5Config *pConfig = pTab->p.pConfig;
   char *zSql;
   int rc;
-  char *zErr = 0;
-
   zSql = sqlite3_mprintf(
             "INSERT INTO \"%w\".\"%w\"(\"%w\") VALUES('integrity-check');",
             pConfig->zDb, pConfig->zName, pConfig->zName);
   rc = sqlite3_exec(pConfig->db, zSql, 0, 0, 0);
   sqlite3_free(zSql);
-  if( rc ){
-    zErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s",
-              pConfig->zDb, pConfig->zName);
+  if( (rc&0xff)==SQLITE_CORRUPT ){
+    *pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s",
+                pConfig->zDb, pConfig->zName);
+    rc = SQLITE_OK;
   }
-  return zErr;
+  return rc;
 
 }
 
index 5fb0deca3ea50ce5dc48ad6f47fc62d6888a2ec1..c665951f37ee55ea3c95463c4f234443973c0786 100644 (file)
@@ -3503,7 +3503,7 @@ static int rtreeShadowName(const char *zName){
 }
 
 /* Forward declaration */
-static char *rtreeIntegrity(sqlite3_vtab*);
+static int rtreeIntegrity(sqlite3_vtab*, char**);
 
 static sqlite3_module rtreeModule = {
   4,                          /* iVersion */
@@ -4367,21 +4367,15 @@ static int rtreeCheckTable(
 /*
 ** Implementation of the xIntegrity method for Rtree.
 */
-static char *rtreeIntegrity(sqlite3_vtab *pVtab){
+static int rtreeIntegrity(sqlite3_vtab *pVtab, char **pzErr){
   Rtree *pRtree = (Rtree*)pVtab;
-  char *zErr = 0;
   int rc;
-
-  rc = rtreeCheckTable(pRtree->db, pRtree->zDb, pRtree->zName, &zErr);
-  if( rc ){
-    sqlite3_free(zErr);
-    zErr = sqlite3_mprintf("error code %d while checking RTree %s.%s",
-                rc, pRtree->zDb, pRtree->zName);
-  }else if( zErr ){
-    zErr = sqlite3_mprintf("In RTree %s.%s:\n%z",
-                pRtree->zDb, pRtree->zName, zErr);
-  }
-  return zErr;
+  rc = rtreeCheckTable(pRtree->db, pRtree->zDb, pRtree->zName, pzErr);
+  if( rc==SQLITE_OK && *pzErr ){
+    *pzErr = sqlite3_mprintf("In RTree %s.%s:\n%z",
+                 pRtree->zDb, pRtree->zName, *pzErr);
+  }
+  return rc;
 }
 
 /*
index 15141baad77a73cd989ad373bfc09387bdac3197..11b0325502089e968b4f72174cdfa6fd52a7d550 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sthe\sxIntegrity\smethod\sto\sthe\ssqlite3_module\sobject.\s\sImplement\sthis\nmethod\sin\sRTREE,\sFTS3/4,\sand\sFTS5\sso\sthat\s"PRAGMA\sintegrity_check"\salso\nverifies\sthe\scorrectness\sof\sshadow\stables\sassociated\swith\sthose\svirtual\ntables.
-D 2023-09-06T12:52:00.208
+C Change\sthe\sxIntegrity\svirtual\stable\smethod\ssignature\sso\sthat\sit\sreturns\nan\sinteger\serror\scode\sand\swrites\sthe\serror\smessage\sinto\sa\sparameter.
+D 2023-09-06T14:00:01.110
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -60,7 +60,7 @@ F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c
 F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
 F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d
 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts3/fts3.c 3393dcffc28bcef63d13f3d3cdcc71c3e23d2a9017687d701b9b4b1272ff2d51
+F ext/fts3/fts3.c 4095c97f2960f508bd34fc06d40f61d54e2ad09e7fbab75dc0114f57ebb6040d
 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
 F ext/fts3/fts3Int.h e573c6d881f7238d77cc3fd2396cbb9b2fe13efef7d2ad295a155151c4e7efbd
 F ext/fts3/fts3_aux.c f0dc9bd98582615b7750218899bd0c729879b6bbf94d1be57ca1833ff49afc6f
@@ -95,7 +95,7 @@ F ext/fts5/fts5_config.c 054359543566cbff1ba65a188330660a5457299513ac71c53b3a07d
 F ext/fts5/fts5_expr.c bd3b81ce669c4104e34ffe66570af1999a317b142c15fccb112de9fb0caa57a6
 F ext/fts5/fts5_hash.c 65e7707bc8774706574346d18c20218facf87de3599b995963c3e6d6809f203d
 F ext/fts5/fts5_index.c 47c290589fa38f6a1860b4fc26716ed30d79ddc283b38813d1c8c1d702108ab8
-F ext/fts5/fts5_main.c a2169916037e3d77014d8a18d3ff9f81a2bec8a334ea8905f0e27dbc513fcec3
+F ext/fts5/fts5_main.c 5a0ba13131a5d0ce9ab07aaae96d1780fe63400a237ee8625cfac9499bfcfbc7
 F ext/fts5/fts5_storage.c 3c9b41fce41b6410f2e8f82eb035c6a29b2560483f773e6dc98cf3cb2e4ddbb5
 F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae
 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee
@@ -469,7 +469,7 @@ F ext/repair/test/checkindex01.test b530f141413b587c9eb78ff734de6bb79bc3515c3350
 F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c
 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
 F ext/rtree/geopoly.c 971e0b5bd9adaf0811feb8c0842a310811159da10319eb0e74fdb42bf26b99ca
-F ext/rtree/rtree.c 31323122691113f085da3836b81a4e9548a21bbfdd86d8becbff1a1bc2617877
+F ext/rtree/rtree.c 2da7e570a4782c6e9a306d7d1cebdfc3c3a1b690725ce90fdbe09650b86db79c
 F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412
 F ext/rtree/rtree1.test 877d40b8b61b1f88cec9d4dc0ff8334f5b05299fac12a35141532e2881860e9d
 F ext/rtree/rtree2.test 9d9deddbb16fd0c30c36e6b4fdc3ee3132d765567f0f9432ee71e1303d32603d
@@ -708,7 +708,7 @@ F src/resolve.c 37953a5f36c60bea413c3c04efcd433b6177009f508ef2ace0494728912fe2e9
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c e9fb48546ab1882639a3a960383f6342dddb776c0227615f8e19de51f0102f68
 F src/shell.c.in 2f9be25294b68b07e7e81f0adcec4475aba6011b64f160e414efe226910c4d7b
-F src/sqlite.h.in f04f498f763b9fe36dadd62ac14553a1db60eaf0d5fa5da223d6ff50e660ca69
+F src/sqlite.h.in 1b9be583d9011b9fe09fbdcc33cce19a1d2b40d84ebd164836420a6d256f2fb1
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac
 F src/sqliteInt.h 304deb0cb33993a19545809d245a2bfd34afb77ae701087597f64c463de596cc
@@ -776,7 +776,7 @@ F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242
 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
 F src/util.c 81f6d47ecda50b87e87f86d0bf87aac213698b3eec0d95d4cbaea971794e2e25
 F src/vacuum.c 604fcdaebe76f3497c855afcbf91b8fa5046b32de3045bab89cc008d68e40104
-F src/vdbe.c d1ae563f382d31ced33122b6162160b42928c1ebd3f41425ce28c68ecc2dab56
+F src/vdbe.c 697f4a443357709703baf1d018aac6f81a3f7b838ac711c3d2d59f2b7ab8dd8a
 F src/vdbe.h 41485521f68e9437fdb7ec4a90f9d86ab294e9bb8281e33b235915e29122cfc0
 F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c
 F src/vdbeapi.c 4184402246172220418c0ef49ff4cf1a19ced9a4ac6c843c2f0773fb5c543f37
@@ -2116,11 +2116,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 93f74490faf8cc07e107afdab6737c6e5141ae1f01a05142bfcede2dd1b2ba4e
-R d97552325661633b153eed717efa1718
-T *branch * vtab-integrity-check
-T *sym-vtab-integrity-check *
-T -sym-trunk *
+P 17bede8cdefd968210dd8a5a2617acbe12ba2c99fdd5e88c5def8665e7bec2d7
+R ddcb270798e6e92d1bc2da645d75bf74
 U drh
-Z a0732a36eef9f82a0ff5fe63847cfd5b
+Z 9853bb1092c1661903c7bd49e9ef85a5
 # Remove this line to create a well-formed Fossil manifest.
index 652d256588b41578c0283139b7b28060c23c3990..b3a60c74025d46e185761a43fc8f0cf79756e394 100644 (file)
@@ -1 +1 @@
-17bede8cdefd968210dd8a5a2617acbe12ba2c99fdd5e88c5def8665e7bec2d7
\ No newline at end of file
+f1d4024a8ca06cf954aaf1f612684d1a5d28492bde757695db3f22c50c649709
\ No newline at end of file
index e2afe5b669c91ef1163622337660fc260c5fb592..9ffbb63b23a1560cb476f5c8f940c9a677bf93dc 100644 (file)
@@ -7219,7 +7219,7 @@ struct sqlite3_module {
   int (*xShadowName)(const char*);
   /* The methods above are in versions 1 through 3 of the sqlite_module object.
   ** Those below are for version 4 and greater. */
-  char *(*xIntegrity)(sqlite3_vtab *pVTab);
+  int (*xIntegrity)(sqlite3_vtab *pVTab, char**);
 };
 
 /*
index 73682be85f40b54ec9d25cb58ecda502f98f56a7..eccd5291ed03cb5f3696a2d96ae504da37bfb430 100644 (file)
@@ -8141,7 +8141,7 @@ case OP_VCheck: {             /* out2 */
   Table *pTab;
   sqlite3_vtab *pVtab;
   const sqlite3_module *pModule;
-  char *zErr;
+  char *zErr = 0;
 
   pOut = &aMem[pOp->p2];
   sqlite3VdbeMemSetNull(pOut);  /* Innocent until proven guilty */
@@ -8156,7 +8156,11 @@ case OP_VCheck: {             /* out2 */
   assert( pModule!=0 );
   assert( pModule->iVersion>=4 );
   assert( pModule->xIntegrity!=0 );
-  zErr = pModule->xIntegrity(pVtab);
+  rc = pModule->xIntegrity(pVtab, &zErr);
+  if( rc ){
+    sqlite3_free(zErr);
+    goto abort_due_to_error;
+  }
   if( zErr ){
     sqlite3VdbeMemSetStr(pOut, zErr, -1, SQLITE_UTF8, sqlite3_free);
   }