From: drh <> Date: Tue, 14 Apr 2026 13:18:04 +0000 (+0000) Subject: Further fixes and clarifications. Now ready to start generating the X-Git-Url: http://git.ipfire.org/index.cgi?a=commitdiff_plain;h=34c2c8dc47b1f33bb08a0de394287bc2bf429ff5;p=thirdparty%2Fsqlite.git Further fixes and clarifications. Now ready to start generating the actual report. FossilOrigin-Name: 037a0e586c4aa81a53aea164080e739f9d5b87197d04fdd68feb0ab5eb01020b --- diff --git a/ext/misc/analyze.c b/ext/misc/analyze.c index 671996711b..cb62e05b8f 100644 --- a/ext/misc/analyze.c +++ b/ext/misc/analyze.c @@ -31,9 +31,14 @@ struct Analysis { }; /* -** Free all memory associated with the Analysis objecct +** Free all resources that the Analysis object references and +** reset the Analysis object. +** +** Call this routine multiple times on the same Analysis object +** is a harmless no-op, as long as the memory for the object itself +** has not been freed. */ -static void analysisFree(Analysis *p){ +static void analysisReset(Analysis *p){ if( p->zSU ){ char *zSql = sqlite3_mprintf("DROP TABLE temp.%s;", p->zSU); if( zSql ){ @@ -66,7 +71,7 @@ static void analysisError(Analysis *p, const char *zFormat, ...){ sqlite3_result_error(p->context, zErr, -1); sqlite3_free(zErr); } - analysisFree(p); + analysisReset(p); } /* @@ -83,7 +88,7 @@ static sqlite3_stmt *analysisVPrep(Analysis *p, const char *zFmt, va_list ap){ analysisError(p, "SQL parse error: %s\nOriginal SQL: %s", sqlite3_errmsg(p->db), zSql); sqlite3_finalize(pStmt); - analysisFree(p); + analysisReset(p); pStmt = 0; } sqlite3_free(zSql); @@ -115,7 +120,7 @@ static int analysisSql(Analysis *p, const char *zFormat, ...){ }else{ analysisError(p, "SQL run-time error: %s\nOriginal SQL: %s", sqlite3_errmsg(p->db), sqlite3_sql(pStmt)); - analysisFree(p); + analysisReset(p); } sqlite3_finalize(pStmt); return rc; @@ -182,7 +187,7 @@ static void analyzeFunc( rc = analysisSql(&s, "WITH\n" " allidx(idxname) AS (\n" - " SELECT name FROM main.sqlite_schema WHERE type='index'\n" + " SELECT name FROM \"%w\".sqlite_schema WHERE type='index'\n" " ),\n" " allobj(allname,tblname,isidx,isworowid) AS (\n" " SELECT 'sqlite_schema',\n" @@ -221,6 +226,7 @@ static void analyzeFunc( " FROM allobj CROSS JOIN dbstat(%Q) \n" " WHERE dbstat.name=allobj.allname\n" " GROUP BY allname;\n", + s.zSchema, /* %w.sqlite_schema -- in allidx */ s.zSchema, /* pragma_index_list(...,%Q) */ s.zSchema, /* %w.sqlite_schema */ s.zSU, /* INTO temp.%s */ @@ -266,7 +272,7 @@ static void analyzeFunc( s.zSU); if( pStmt==0 ) return; n = 0; - while( sqlite3_step(pStmt)==SQLITE_ROW ){ + while( (rc = sqlite3_step(pStmt))==SQLITE_ROW ){ if( n++ ) sqlite3_str_appendf(s.pOut,",\n"); sqlite3_str_appendf(s.pOut, " (%s,%s,%lld,%lld,%lld,%lld,%lld,%lld,%lld," @@ -303,7 +309,7 @@ static void analyzeFunc( sqlite3_free); s.pOut = 0; } - analysisFree(&s); + analysisReset(&s); } @@ -319,7 +325,7 @@ int sqlite3_analyze_init( SQLITE_EXTENSION_INIT2(pApi); (void)pzErrMsg; /* Unused parameter */ rc = sqlite3_create_function(db, "analyze", 1, - SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, + SQLITE_UTF8|SQLITE_INNOCUOUS, 0, analyzeFunc, 0, 0); return rc; } diff --git a/manifest b/manifest index 827971b4fb..4e5211cf0d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Further\simprovements\sto\serror\smessages\sand\srobustness. -D 2026-04-14T12:46:12.123 +C Further\sfixes\sand\sclarifications.\s\sNow\sready\sto\sstart\sgenerating\sthe\nactual\sreport. +D 2026-04-14T13:18:04.663 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 c0e84152ffd7b7b2740a0430e531b4b238fc4a5c14df7d4cfc7ea4e5785e4f27 +F ext/misc/analyze.c 7b2b2dd1dec65613fb81723f60b16b35069ea9f0603316bbe0ff31c0f4d6069d 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 c09ed9eb914bde96cdc5157e29b6384ce488262a2dadc7321c44941a1d08a187 -R a539bf25a4decb813932ff3c32887a86 +P 45917c1124310fd77daca47865959d3261154f7b0c6771d3689e6d345a3fd153 +R bfa14075360704838ae9f7a5470fb942 U drh -Z d2c73417eaabf53c82eb5e245069966b +Z 5e45e8c3fee878d4e300e49eaa5fec7c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f33fce9641..600f45eb5e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -45917c1124310fd77daca47865959d3261154f7b0c6771d3689e6d345a3fd153 +037a0e586c4aa81a53aea164080e739f9d5b87197d04fdd68feb0ab5eb01020b