]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improve the error message generated by the recovery extension if it is used with...
authordan <Dan Kennedy>
Tue, 28 Feb 2023 11:02:02 +0000 (11:02 +0000)
committerdan <Dan Kennedy>
Tue, 28 Feb 2023 11:02:02 +0000 (11:02 +0000)
FossilOrigin-Name: c1f2a1d55c180fb51a4e203befbbe529bdd23137b26190c50b8f85820450e7fa

ext/recover/dbdata.c
ext/recover/recoverbuild.test [new file with mode: 0644]
manifest
manifest.uuid
src/test1.c

index da02b754b2a7d0954d1f67048b311948d2c72c20..3da9f923213833e5f5fbcf64e1d16282eb110fba 100644 (file)
@@ -809,8 +809,6 @@ static int dbdataFilter(
   }
   if( rc==SQLITE_OK ){
     rc = sqlite3_bind_text(pCsr->pStmt, 1, zSchema, -1, SQLITE_TRANSIENT);
-  }else{
-    pTab->base.zErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pTab->db));
   }
 
   /* Try to determine the encoding of the db by inspecting the header
@@ -819,6 +817,10 @@ static int dbdataFilter(
     rc = dbdataGetEncoding(pCsr);
   }
 
+  if( rc!=SQLITE_OK ){
+    pTab->base.zErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pTab->db));
+  }
+
   if( rc==SQLITE_OK ){
     rc = dbdataNext(pCursor);
   }
diff --git a/ext/recover/recoverbuild.test b/ext/recover/recoverbuild.test
new file mode 100644 (file)
index 0000000..9f33731
--- /dev/null
@@ -0,0 +1,42 @@
+# 2023 February 28
+#
+# 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.
+#
+#***********************************************************************
+#
+
+source [file join [file dirname [info script]] recover_common.tcl]
+set testprefix recoverbuild
+
+
+# The following tests verify that if the recovery extension is used with
+# a build that does not support the sqlite_dbpage table, the error message
+# is "no such table: sqlite_dbpage", and not something more generic.
+#
+reset_db
+create_null_module db sqlite_dbpage
+do_execsql_test 1.0 {
+  CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT);
+  INSERT INTO t1 VALUES(123, 'one hundred and twenty three');
+}
+
+forcedelete test.db2
+do_test 1.1 {
+  set R [sqlite3_recover_init db main test.db2]
+} {sqlite_recover1}
+
+do_test 1.2 {
+  $R run
+} {1}
+
+do_test 1.3 {
+  list [catch { $R finish } msg] $msg
+} {1 {no such table: sqlite_dbpage}}
+
+finish_test
+
index 3f9b6c68dfec562cf9a0d641b44d6e83f1c0606b..0bdbfa744587f77fe9cdcffe750efbac11be896d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Minor\sperformance\soptimization\sin\sthe\scomputation\sof\san\saffinity\sstring\nfor\san\sindex.
-D 2023-02-27T18:55:37.933
+C Improve\sthe\serror\smessage\sgenerated\sby\sthe\srecovery\sextension\sif\sit\sis\sused\swith\sa\snon-SQLITE_ENABLE_DBPAGE_VTAB\sbuild.
+D 2023-02-28T11:02:02.719
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -365,9 +365,10 @@ F ext/rbu/rbuvacuum4.test ffccd22f67e2d0b380d2889685742159dfe0d19a3880ca3d2d1d69
 F ext/rbu/sqlite3rbu.c 348bb6251e6ec459de102f8b2dd50789a98643ef7a28e56e4c787ac9659c15ea
 F ext/rbu/sqlite3rbu.h 9d923eb135c5d04aa6afd7c39ca47b0d1d0707c100e02f19fdde6a494e414304
 F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055
-F ext/recover/dbdata.c dc25628e405c86936c597e28f3e6f56a257029c3034c5ef7f6b10f7c02f41018
+F ext/recover/dbdata.c ac504aa06fab51ade9c0521b96cb6ec21d40619aa5e9a3e14ef9a60978699fd0
 F ext/recover/recover1.test 2072993624d5e32fef20ae03b17fc06c02bcb344421fe17bb329b24d2a51e647
 F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a
+F ext/recover/recoverbuild.test a6f05273ff5fe517afd166444597c70cb97033e7f58496433a4428a1ecb5d79f
 F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e
 F ext/recover/recovercorrupt.test 64c081ad1200ae77b447da99eb724785d6bf71715f394543dc7689642e92bf49
 F ext/recover/recovercorrupt2.test 74bef7dd2d7dd4856f3da21be6e213d27da44827e0f5f0946ca0325b46d163ed
@@ -632,7 +633,7 @@ F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a3
 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
 F src/tclsqlite.c 8522a04fb9c84faa1d80354430ae0ee9349727a3a4b32e3cfe39b9be8324cabd
-F src/test1.c e23623dc569d2d18d1201d624ec279e9a96f0d9e83bf0620c8680d62b35d4ee7
+F src/test1.c ad4a8503c4290d37805f107107a503874ff42d8405dd1558fbe2a1a71039816d
 F src/test2.c 827446e259a3b7ab949da1542953edda7b5117982576d3e6f1c24a0dd20a5cef
 F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
 F src/test4.c 4533b76419e7feb41b40582554663ed3cd77aaa54e135cf76b3205098cd6e664
@@ -2047,8 +2048,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 18ee689de3d1ae43b05ca52e0b62c49442ebf68a88814a7c679e8856250a4b0d
-R eb05b938ae3801da35ea0ed3c7e2ba02
-U drh
-Z 906f03c389d933535de5a426ca60838f
+P 07334aa17b6ded27c5bd353998d96645a94cdcf32440abb59d127a002cd98ce9
+R 70a154261a0e3445bc93a596d807722e
+U dan
+Z 7abce0ed86afcadaaf24935108e839a7
 # Remove this line to create a well-formed Fossil manifest.
index 3a4fc9a3f721f96ed30fc7c1536318b9957d9c8c..6c9dd933af4a8f735303f0853a6ceba8766821f2 100644 (file)
@@ -1 +1 @@
-07334aa17b6ded27c5bd353998d96645a94cdcf32440abb59d127a002cd98ce9
\ No newline at end of file
+c1f2a1d55c180fb51a4e203befbbe529bdd23137b26190c50b8f85820450e7fa
\ No newline at end of file
index 39efd09ca0178e19dba0e63c6799467aec007588..421fad54039d4df4ba4394f86e3c72a12eecf2b5 100644 (file)
@@ -2391,6 +2391,30 @@ static int SQLITE_TCLAPI vfsCurrentTimeInt64(
   return TCL_OK;
 }
 
+/*
+** Usage: create_null_module DB NAME
+*/
+static int SQLITE_TCLAPI test_create_null_module(
+  void * clientData,
+  Tcl_Interp *interp,
+  int objc,
+  Tcl_Obj *CONST objv[]
+){
+  int rc;
+  sqlite3 *db;
+  char *zName;
+
+  if( objc!=3 ){
+    Tcl_WrongNumArgs(interp, 1, objv, "DB DBNAME");
+    return TCL_ERROR;
+  }
+  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
+  zName = Tcl_GetString(objv[2]);
+
+  sqlite3_create_module(db, zName, 0, 0);
+  return TCL_OK;
+}
+
 #ifdef SQLITE_ENABLE_SNAPSHOT
 /*
 ** Usage: sqlite3_snapshot_get DB DBNAME
@@ -8981,6 +9005,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
      { "sqlite3_register_cksumvfs", test_register_cksumvfs,  0 },
      { "sqlite3_unregister_cksumvfs", test_unregister_cksumvfs,  0 },
      { "number_of_cores",             guess_number_of_cores,     0 },
+     { "create_null_module",       test_create_null_module,     0 },
   };
   static int bitmask_size = sizeof(Bitmask)*8;
   static int longdouble_size = sizeof(LONGDOUBLE_TYPE);