};
/*
-** 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 ){
sqlite3_result_error(p->context, zErr, -1);
sqlite3_free(zErr);
}
- analysisFree(p);
+ analysisReset(p);
}
/*
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);
}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;
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"
" 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 */
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,"
sqlite3_free);
s.pOut = 0;
}
- analysisFree(&s);
+ analysisReset(&s);
}
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;
}
-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
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
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.