]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improve the analyze() extension so that it returns a simple error message
authordrh <>
Wed, 15 Apr 2026 12:47:37 +0000 (12:47 +0000)
committerdrh <>
Wed, 15 Apr 2026 12:47:37 +0000 (12:47 +0000)
as text (it does not throw an error) if the database is empty or is "temp"
or does not exist.

FossilOrigin-Name: 35379f60922f14d4f6d231ae627df066ad4e4510208bcc244505b9afb279f2fa

ext/misc/analyze.c
manifest
manifest.uuid

index 01fbc0651e434a4c53fc7517f4a6460bc8b43363..e84c5db62abc557d20a24d628c146cbd23805007 100644 (file)
@@ -438,16 +438,16 @@ static void analyzeFunc(
   if( s.zSchema==0 ){
     s.zSchema = "main";
   }else if( sqlite3_strlike("temp",s.zSchema,0)==0 ){
-    /* Attempt to analyze "temp" returns NULL */
     analysisReset(&s);
+    sqlite3_result_text(context, "cannot analyze \"temp\"",-1,SQLITE_STATIC);
     return;
   }
   i64 = 0;
   rc = analysisSqlInt(&s,&i64,"SELECT 1 FROM pragma_database_list"
                              " WHERE name=%Q COLLATE nocase",s.zSchema);
   if( rc || i64==0 ){
-    /* Return NULL the named schema does not exist */
     analysisReset(&s);
+    sqlite3_result_text(context,"no such database",-1,SQLITE_STATIC);
     return;
   }
   sqlite3_randomness(sizeof(r), &r);
@@ -536,18 +536,23 @@ static void analyzeFunc(
   );
   if( rc ) return;
 
+  nPage = 0;
+  rc = analysisSqlInt(&s, &nPage, "PRAGMA \"%w\".page_count", s.zSchema);
+  if( rc ) return;
+  if( nPage<=0 ){
+    /* Very brief reply for an empty database */
+    analysisReset(&s);
+    sqlite3_result_text(context, "empty database", -1, SQLITE_STATIC);
+    return;
+  }
+
   /* Begin generating the report */
   analysisTitle(&s, "Database storage utilization report");
   pgsz = 0;
   rc = analysisSqlInt(&s, &pgsz, "PRAGMA \"%w\".page_size", s.zSchema);
   if( rc ) return;
   analysisLine(&s, "Page size in bytes","%lld\n",pgsz);
-
-  nPage = 0;
-  rc = analysisSqlInt(&s, &nPage, "PRAGMA \"%w\".page_count", s.zSchema);
-  if( rc ) return;
   analysisLine(&s, "Pages in the database", "%lld\n", nPage);
-  if( nPage<=0 ) nPage = 1;
 
   nPageInUse = 0;
   rc = analysisSqlInt(&s, &nPageInUse, 
index 3f32c10d036e9a65477d23602d57592903e03ad6..d663743149edabe206643abdb8eebbd7bd9c3558 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sharmless\scompiler\swarnings\sseen\sby\sMSVC\sin\sthe\sprevious\scheck-in.\nAlso\sadd\sext/misc/analyze.c\sto\sthe\smakefile\sdependencies\sfor\sthe\sCLI.
-D 2026-04-15T12:35:23.675
+C Improve\sthe\sanalyze()\sextension\sso\sthat\sit\sreturns\sa\ssimple\serror\smessage\nas\stext\s(it\sdoes\snot\sthrow\san\serror)\sif\sthe\sdatabase\sis\sempty\sor\sis\s"temp"\nor\sdoes\snot\sexist.
+D 2026-04-15T12:47:37.067
 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 dc3359a01425d312f39439bc5395c1d275eb12e11c78e1cb23f3980080153408
+F ext/misc/analyze.c 5831f69723f13dac2bc9de8f0ad8af802231a5bfd8fb41c8d9b5253aeb02faf3
 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 4c4988e56df3c668b8891e2a55887a6618f5b84e9111e562b93059ddb9a662dc
-R 30b8739f9bda9be6b853c683a0127d57
+P 5a0ee6e227042e41ac64869c75f961798b252458670c18662175fe5bfa8b87d3
+R eb7632df63c4ce7b411b96612239583b
 U drh
-Z af89e9f2c79f2b2478911bd0a1f21f6d
+Z 56de577137e31c506eb335f00d8e805c
 # Remove this line to create a well-formed Fossil manifest.
index 5b8f6f3ad94d21c490a63c2526ee70fa4b0ec97e..6230af7d2a2baf855353164616ab4627b95fb1c4 100644 (file)
@@ -1 +1 @@
-5a0ee6e227042e41ac64869c75f961798b252458670c18662175fe5bfa8b87d3
+35379f60922f14d4f6d231ae627df066ad4e4510208bcc244505b9afb279f2fa