} {0 SQLITE_DONE}
catch { db close }
+
+#-------------------------------------------------------------------------
+# Test that a database that uses custom collation sequences can be RBU
+# vacuumed.
+#
+reset_db
+
+do_execsql_test 4.0 {
+ CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
+ INSERT INTO t1 VALUES(1, 'i');
+ INSERT INTO t1 VALUES(2, 'iiii');
+ INSERT INTO t1 VALUES(3, 'ii');
+ INSERT INTO t1 VALUES(4, 'iii');
+
+ PRAGMA writable_schema = ON;
+ UPDATE sqlite_schema SET sql = sql || '; SELECT blow_up_the_world();';
+
+ SELECT sql FROM sqlite_schema;
+} {{CREATE TABLE t1(a INTEGER PRIMARY KEY, b); SELECT blow_up_the_world();}}
+
+set ::eof 0
+proc blowup {} {
+ set ::eof 1
+}
+
+
+db close
+
+do_test 4.1 {
+ sqlite3rbu_vacuum rbu test.db state.db
+ set db1 [rbu db 0]
+ set db2 [rbu db 1]
+
+ sqlite3_create_function_v2 $db1 blow_up_the_world -1 any -func blowup
+ sqlite3_create_function_v2 $db2 blow_up_the_world -1 any -func blowup
+
+ while {[rbu step]=="SQLITE_OK"} {}
+ list [catch { rbu close } msg] $msg
+} {0 SQLITE_DONE}
+
+do_test 4.2 { set ::eof } 0
+
+sqlite3 db test.db
+do_execsql_test 4.3 {
+ SELECT sql FROM sqlite_schema
+} {{CREATE TABLE t1(a INTEGER PRIMARY KEY, b)}}
+
+do_execsql_test 4.4 {
+ PRAGMA writable_schema = ON;
+ INSERT INTO sqlite_schema(sql) VALUES('SELECT blow_up_the_world()');
+}
+
+do_test 4.5 {
+ sqlite3rbu_vacuum rbu test.db state.db
+ while {[rbu step]=="SQLITE_OK"} {}
+ list [catch { rbu close } msg] $msg
+} {1 {SQLITE_CORRUPT - malformed database schema (?)}}
+
+
+
+
finish_test
while( p->rc==SQLITE_OK && sqlite3_step(pSql)==SQLITE_ROW ){
const char *zSql = (const char*)sqlite3_column_text(pSql, 0);
- p->rc = sqlite3_exec(p->dbMain, zSql, 0, 0, &p->zErrmsg);
+ sqlite3_stmt *pStmt = 0;
+ p->rc = prepareAndCollectError(p->dbMain, &pStmt, &p->zErrmsg, zSql);
+ if( p->rc==SQLITE_OK ){
+ sqlite3_step(pStmt);
+ rbuFinalize(p, pStmt);
+ }
}
rbuFinalize(p, pSql);
if( p->rc!=SQLITE_OK ) return;
-C Check-in\s[495e4851d4296b49]\sbreaks\sthe\sbuild\sfor\sWindows.\s\sFixed\shere.
-D 2026-04-14T18:06:41.509
+C In\sRBU\svacuum\scommands,\sdo\sas\sSQLite\sdoes\sand\signore\sany\strailing\sSQL\sstatements\sin\sthe\ssql\scolumn\sof\sthe\ssqlite_schema\stable.
+D 2026-04-14T18:08:30.170
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/rbu/rbusave.test 588b618dad9d65c4b13d03a79931de82213503fedc26bdf5789c996ecf427fba
F ext/rbu/rbusplit.test a6dedd23cf37bcf2e8646d9d7139846e96d60d92f9bc6d6ba6ca8c24c0bd1f72
F ext/rbu/rbutemplimit.test 4980df2d4b74f4dd982add8f78809106154ef5a3c4bdce747422ab0b0481e029
-F ext/rbu/rbuvacuum.test 542561741ff2b262e3694bc6012b44694ee62c545845319a06f323783b15311e
+F ext/rbu/rbuvacuum.test e3585cfda220038e8186c583e9bd2aaa9eccd0a5c2e40ed861de3c987c93f68c
F ext/rbu/rbuvacuum2.test 1a9bd41f127be2826de2a65204df9118525a8af8d16e61e6bc63ba3ac0010a23
F ext/rbu/rbuvacuum3.test 3ce42695fdf21aaa3499e857d7d4253bc499ad759bcd6c9362042c13cd37d8de
F ext/rbu/rbuvacuum4.test ffccd22f67e2d0b380d2889685742159dfe0d19a3880ca3d2d1d69eefaebb205
-F ext/rbu/sqlite3rbu.c e99400d29d029936075e27495b269a2dcdceae3cf8c86b1d0869b4af487be3ab
+F ext/rbu/sqlite3rbu.c 28246b647831409e84dfb8286fbeda55f1de89e934571509a23a67ada572d0c0
F ext/rbu/sqlite3rbu.h e3a5bf21e09ca93ce4e8740e00d6a853e90a697968ec0ea98f40826938bdb68e
F ext/rbu/test_rbu.c 8b6e64e486c28c41ef29f6f4ea6be7b3091958987812784904f5e903f6b56418
F ext/recover/dbdata.c 10d3c56968a9af6853722a47280805ad1564714d79ea45ac6f7da14bb57fd137
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P aa3432af90b2b9ab0b92f56a8e9c926930b9859e986500bd00d5600c1dd036bf
-R 1fe24f779b0bd589c28180efb499a161
-U drh
-Z f3928a2dde1f65cfcdc7de9df306f3dd
+P 5b004348c3ec15a02dd657b3619502b6f8ba1c6f46918108b3de9534622076a0
+R 5a78f3486ec2ef3c0d457d1e4a6e8841
+U dan
+Z 77a5371b12f9a0b0266c2dba35f30986
# Remove this line to create a well-formed Fossil manifest.
-5b004348c3ec15a02dd657b3619502b6f8ba1c6f46918108b3de9534622076a0
+cf7dad1b105ab35cd7180efec735b7cbeaf42b8d53dfec5582b63cd121c3425c