]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Further improvements to error messages and robustness.
authordrh <>
Tue, 14 Apr 2026 12:46:12 +0000 (12:46 +0000)
committerdrh <>
Tue, 14 Apr 2026 12:46:12 +0000 (12:46 +0000)
FossilOrigin-Name: 45917c1124310fd77daca47865959d3261154f7b0c6771d3689e6d345a3fd153

ext/misc/analyze.c
manifest
manifest.uuid

index 8ec54fa55eeeef4f0af5a35fc94b2efb97654943..671996711b8eb965df948d3b263993780e92647f 100644 (file)
@@ -47,10 +47,25 @@ static void analysisFree(Analysis *p){
 }
 
 /*
-** Report an OOM
+** Report an error using formatted text.  If zFormat==NULL then report
+** an OOM error.
 */
-static void analysisOom(Analysis *p){
-  sqlite3_result_error_nomem(p->context);
+static void analysisError(Analysis *p, const char *zFormat, ...){
+  char *zErr;
+  if( zFormat ){
+    va_list ap;
+    va_start(ap, zFormat);
+    zErr = sqlite3_vmprintf(zFormat, ap);
+    va_end(ap);
+  }else{
+    zErr = 0;
+  }
+  if( zErr==0 ){
+    sqlite3_result_error_nomem(p->context);
+  }else{
+    sqlite3_result_error(p->context, zErr, -1);
+    sqlite3_free(zErr);
+  }
   analysisFree(p);
 }
 
@@ -62,13 +77,11 @@ static sqlite3_stmt *analysisVPrep(Analysis *p, const char *zFmt, va_list ap){
   int rc;
   sqlite3_stmt *pStmt = 0;
   zSql = sqlite3_vmprintf(zFmt, ap);
-  if( zSql==0 ){ analysisOom(p); return 0; }
+  if( zSql==0 ){ analysisError(p,0); return 0; }
   rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
   if( rc ){
-    char *zErr = sqlite3_mprintf("SQL parse error: %s\nOriginal SQL: %s",
+    analysisError(p, "SQL parse error: %s\nOriginal SQL: %s",
                                  sqlite3_errmsg(p->db), zSql);
-    sqlite3_result_error(p->context, zErr, -1);
-    sqlite3_free(zErr);
     sqlite3_finalize(pStmt);
     analysisFree(p);
     pStmt = 0;
@@ -100,10 +113,8 @@ static int analysisSql(Analysis *p, const char *zFormat, ...){
   if( rc==SQLITE_DONE ){
     rc = SQLITE_OK;
   }else{
-    char *zErr = sqlite3_mprintf("SQL run-time error: %s\nOriginal SQL: %s",
-                                 sqlite3_errmsg(p->db), sqlite3_sql(pStmt));
-    sqlite3_result_error(p->context, zErr, -1);
-    sqlite3_free(zErr);
+    analysisError(p, "SQL run-time error: %s\nOriginal SQL: %s",
+                  sqlite3_errmsg(p->db), sqlite3_sql(pStmt));
     analysisFree(p);
   }
   sqlite3_finalize(pStmt);
@@ -131,11 +142,12 @@ static void analyzeFunc(
   s.db = sqlite3_context_db_handle(context);
   s.context = context;
   s.pOut = sqlite3_str_new(0);
-  if( s.pOut==0 ){ analysisOom(&s); return; }
+  if( s.pOut==0 ){ analysisError(&s, 0); return; }
   s.zSchema = (const char*)sqlite3_value_text(argv[0]);
+  if( s.zSchema==0 ) s.zSchema = "main";
   sqlite3_randomness(sizeof(r), &r);
   s.zSU = sqlite3_mprintf("analysis%016x%016x", r[0], r[1]);
-  if( s.zSU==0 ){ analysisOom(&s); return; }
+  if( s.zSU==0 ){ analysisError(&s, 0); return; }
 
   /* The s.zSU table contains the data used for the analysis.
   ** The table name contains 128-bits of randomness to avoid
@@ -277,6 +289,12 @@ static void analyzeFunc(
       sqlite3_column_int64(pStmt, 15),
       sqlite3_column_int64(pStmt, 16));
   }
+  if( rc!=SQLITE_DONE ){
+    analysisError(&s, "SQL run-time error: %s\nSQL: %s",
+                  sqlite3_errmsg(s.db), sqlite3_sql(pStmt));
+    sqlite3_finalize(pStmt);
+    return;
+  }
   sqlite3_str_appendf(s.pOut,"\nCOMMIT;\n");
   sqlite3_finalize(pStmt);
 
index 4b6fd2a80c712981929d18b18d7895f0f679ec8c..827971b4fb69262828b32760dd788fcf4cc68c45 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improved\serror\smessages\sand\srobustness.
-D 2026-04-14T12:23:11.868
+C Further\simprovements\sto\serror\smessages\sand\srobustness.
+D 2026-04-14T12:46:12.123
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -358,7 +358,7 @@ F ext/jni/src/tests/000-001-ignored.test e17e874c6ab3c437f1293d88093cf06286083b6
 F ext/jni/src/tests/900-001-fts.test bf0ce17a8d082773450e91f2388f5bbb2dfa316d0b676c313c637a91198090f0
 F ext/misc/README.md 6243cdc4d7eb791c41ef0716f3980b8b5f6aa8c61ff76a3958cbf0031c6ebfa7
 F ext/misc/amatch.c 8d237cc014b3736922c26a76a451050d244aa4980c47c531f368f817b1e77b49
-F ext/misc/analyze.c 84c04e7e0097bfe6daab27bfffab69ceb45141a5a52925c23f1dea8543abe0bb
+F ext/misc/analyze.c c0e84152ffd7b7b2740a0430e531b4b238fc4a5c14df7d4cfc7ea4e5785e4f27
 F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb
 F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824
 F ext/misc/base64.c 1445761667c16356e827fc6418294c869468be934429aaa8315035e76dd58acf
@@ -2199,8 +2199,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 03934b5a6c88a97117a4743a68ee36d30bcbdcebcf11342d30ac42daf9f10874
-R b4acfe922618f5b816e94830c08ec5c1
+P c09ed9eb914bde96cdc5157e29b6384ce488262a2dadc7321c44941a1d08a187
+R a539bf25a4decb813932ff3c32887a86
 U drh
-Z 27c7bb76cf0ab3aef2174f80a228eaa8
+Z d2c73417eaabf53c82eb5e245069966b
 # Remove this line to create a well-formed Fossil manifest.
index 39b14d8e09ab39371d07e0078a41badb94616e90..f33fce964143ef357d4734c60c5495fc7015d69c 100644 (file)
@@ -1 +1 @@
-c09ed9eb914bde96cdc5157e29b6384ce488262a2dadc7321c44941a1d08a187
+45917c1124310fd77daca47865959d3261154f7b0c6771d3689e6d345a3fd153