Compare commits

..

25 Commits

Author SHA1 Message Date
drh ccd445d76a Version 3.53.1
FossilOrigin-Name: c88b22011a54b4f6fbd149e9f8e4de77658ce58143a1af0e3785e4e6475127e9
2026-05-05 10:34:17 +00:00
stephan b14b7681f4 Fix a predicate which causes a false error in the OPFS SAHPool tests when building with SEE.
FossilOrigin-Name: 1d2f770713f9d75d0de923515f4cee8ff83e95826d77f049b7bb1fbfad042248
2026-05-05 08:12:37 +00:00
drh 55f2cf294f When using the OR-optimization on a loop created by exists-to-join,
do the early-exit logic for the whole loop, not for each individual
OR branch.

FossilOrigin-Name: b827cdcb371d07cd4ffba4d3c7b404bece43fcc808db528b94a66bf77b6aab4f
2026-05-04 18:30:02 +00:00
drh 10305aa4a4 Fix a harmless compiler warning.
FossilOrigin-Name: 9957c3b907d66ed1b8afa3b71ba0ad23b2de3ec486e6232b58166fd3a410705a
2026-05-02 13:18:40 +00:00
drh 20847aca95 Harden the recovery extension against SQL injections coming from the
sqlite_schema table of the database being recovered.

FossilOrigin-Name: 555401fe048a51ecaed3ef672723b6ef8e1340c7028c11a17731abbc399bc078
2026-05-01 13:56:19 +00:00
drh e64e95b437 Fix a crash that could occur if sqlite3_deserialize() was used to overwrite a database with an open transaction on it. Bug introduced by [fc42d31d6fca21ab] on 2018-03-07 and first released in version 3.23.0. This is not a vulnerability as an attacker that can exploit this already has the ability to execute arbitrary code. Forum post [forum:39134ba029 | 39134ba029].
FossilOrigin-Name: b7b0745d6def6b141c900884cd97f10f3afedcbfb4bd9ce2409ee2380a8602dd
2026-04-27 12:28:23 +00:00
drh 27e808ff2c Feature detection fix for uint128 on RISCV 32-bit.
FossilOrigin-Name: e3f318bf52932460890333c6dcae352ab4b0c943d7be67734649eff1ff9fc9fc
2026-04-27 12:25:36 +00:00
stephan 0e4b46a649 Increase a stack-local buffer size to resolve a test regression introduced in [ff084ae341eab5c], in which some tests fail a pattern match check if their absolute file names are too long. Resolves [forum:205f73db1b2806f5|forum post 205f73db1b2806f5].
FossilOrigin-Name: 4eeb1f74f61589f115810bd2a6876dcec9e674a2baf686f3b5b25678695aa797
2026-04-27 12:07:31 +00:00
drh 2ba7864bc4 Fix a single-byte OOB read that could occur in the session module when concatenating patchsets.
FossilOrigin-Name: 5150cf9a89aebfd7121b4742c8b359116f16d890e83b64105bb192d3d0f68971
2026-04-25 15:04:21 +00:00
dan 2114d8bbd2 Update interrupt2.test to avoid using Tcl_GetCommandInfo() from within calls to Tcl_DeleteCommand().
FossilOrigin-Name: 00daafed79290b9bbf7a9359b656d8841745caf22c1c3cdcbacf05eebcfe300c
2026-04-23 11:33:26 +00:00
drh 928890f18f Various minor bug fixes cherrypicked from trunk.
FossilOrigin-Name: f1276db5dabe797dfeee2afbb9f3a3fe367b5f860a07af88963f16aa3986f7b9
2026-04-21 22:55:44 +00:00
drh 7b3ed290d3 Fix another bug in EXISTS-to-JOIN - this one
having to do with an OFFSET clause of a LIMIT.

FossilOrigin-Name: f91099ecee5413b3ab7261461e774436f5a9214101eea10d234135abe70bb444
2026-04-21 13:06:15 +00:00
stephan 002226b549 Reformulate how the OPFS async proxy Worker is loaded for the bundler-friendly builds to work around a bug in Vite in which it incompatibly rewrites the Worker's URL arguments. Addresses the discussion at [https://github.com/sqlite/sqlite-wasm/pull/159|npm package PR 159] and patch validated by Jure Rotar.
FossilOrigin-Name: 6215c9dd27ca446bf61d8ee7adcf455d35914853b19cb5f5feff5ce0f420e7b7
2026-04-21 10:15:16 +00:00
stephan 7ad112014b On platforms which support ./configure --with-icu-config, ensure that 'make tclextension' includes the ICU pieces in the tcl extension. Intended to resolve [forum:92a88de4b88929fe|forum post 92a88de4b88929fe].
FossilOrigin-Name: a4f27adb97f2fb8bf44931d3a44f9d05f0485e743ad086177b8f9471ee9dfff5
2026-04-17 04:59:42 +00:00
drh f9c7f9fb52 Fix parsing of options to the .once command.
FossilOrigin-Name: fd21b079e9ded037f9ec65f04864684060b8b80d034dfc9b07e01b5a1f75d79a
2026-04-17 01:55:29 +00:00
drh 02bd4aa037 Version number to 3.53.1
FossilOrigin-Name: b4c1cc5efcc1e538ed71ffd847030d80ab03fe6e6785f14fbad7f6079321d199
2026-04-15 19:09:34 +00:00
dan 8113b83c01 Handle a special case of a corrupt changeset in sqlite3changegroup_add().
FossilOrigin-Name: dceee93ab38a623a6c94658583ad6e012e141d5a4eaa91b074de06e175cb4175
2026-04-15 17:13:42 +00:00
dan 4c6c2ed134 Handle the case where the name of the constraint in an "ALTER TABLE DROP CONSTRAINT" command is quoted. [forum:8bfbaec404 | Forum post 8bfbaec404].
FossilOrigin-Name: 2d37af77a139cdcecb959b0821e5ed925f12789a759d0c94dce29d4b30b5750a
2026-04-15 16:22:59 +00:00
drh df330b6f92 Bug fix in sqlite3_str_free(): Do not crash if called on an sqlite3_str
object returned from sqlite3_str_new() following an OOM.

FossilOrigin-Name: b6b1d069cd5528b79ab0412137971fca1963a500f99e5c53ae57de1dd90066d2
2026-04-15 14:22:35 +00:00
stephan ef152ec09f Fix a typo which caused .headers to not show up in the shell's .help.
FossilOrigin-Name: 9efc1b6497ac5a4d0aef8fa73cdb016160720b076183c3727edc3de438e094e6
2026-04-12 05:43:12 +00:00
stephan 2c01c19968 Ensure that sqlite3-opfs-async-proxy.js is copied into the fiddle target dirs.
FossilOrigin-Name: d4e0e81afda425b23ac52f08ab9c3a2c136b8a963bd09ebcfb2f6f305b23e396
2026-04-10 23:33:31 +00:00
stephan 81fa34e507 API doc correction for sqlite3_js_retry_busy(). No code changes.
FossilOrigin-Name: e2bfb67da9538527b2eb92d261c82d4d0854a36ac55989373f07e3b854678694
2026-04-10 17:56:54 +00:00
drh 1bb371e6d3 Use sqlite3_malloc() for memory allocation inside of sqlite3_str_vappendf(),
since it invokes sqlite3_initialize(), whereas sqlite3DbMallocRaw() does
not.

FossilOrigin-Name: d959559d1fc34381861085ed8ac97b7ce72a4a83c6f846a6abd1e4552db081b4
2026-04-10 17:16:46 +00:00
drh 916f74e485 Fix the printf() optimization added on 2026-03-29 so that
sqlite3_snprintf() does not incorrectly truncate floating-point
conversions.

FossilOrigin-Name: 7c6883ecd3b284f38bfa93b03653fb48eaa42f223ae7ab12e1ad03082f3db44b
2026-04-10 16:06:09 +00:00
stephan 282e2cea0a Correct shell result code propagation regression introduced in [ff084ae341eab5c4] and reported in [forum:6fa3247e9724844c|forum post 6fa3247e9724844c].
FossilOrigin-Name: 5306da4231efcaf1bd7afa3cdcfcb87edf70958e3dd2edaed765a0d844e3be03
2026-04-10 08:39:51 +00:00
36 changed files with 431 additions and 305 deletions
-4
View File
@@ -2741,9 +2741,6 @@ rbu.exe: $(TOP)\ext\rbu\rbu.c $(TOP)\ext\rbu\sqlite3rbu.c $(SQLITE3C) $(SQLITE3H
$(LTLINK) $(NO_WARN) -DSQLITE_ENABLE_RBU \
$(TOP)\ext\rbu\rbu.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
$(AUXTEST).exe: $(TOP)\test\c\$(AUXTEST).c
$(LTLINK) $(NO_WARN) $(TOP)\test\c\$(AUXTEST).c sqlite3.lo /link $(LDFLAGS) $(LTLINKOPTS)
THREADTEST3_SRC = \
$(TOP)\test\threadtest3.c \
$(TOP)\test\tt3_checkpoint.c \
@@ -2940,5 +2937,4 @@ clean:
del /Q fts5.* fts5parse.* 2>NUL
del /q src-verify.exe 2>NUL
del /q jimsh.exe jimsh0.exe 2>NUL
-$(TCLSH_CMD) test/testrunner.tcl clean
# <</mark>>
+1 -1
View File
@@ -1 +1 @@
3.54.0
3.53.1
+2 -5
View File
@@ -2801,8 +2801,7 @@ qrf_reinit:
case QRF_STYLE_Eqp: {
int expMode = sqlite3_stmt_isexplain(p->pStmt);
if( expMode!=2 ){
int rc = sqlite3_stmt_explain(p->pStmt, 2);
if( rc ){ qrfError(p, SQLITE_ERROR, sqlite3_errstr(rc)); }
sqlite3_stmt_explain(p->pStmt, 2);
p->expMode = expMode+1;
}
break;
@@ -2810,8 +2809,7 @@ qrf_reinit:
case QRF_STYLE_Explain: {
int expMode = sqlite3_stmt_isexplain(p->pStmt);
if( expMode!=1 ){
int rc = sqlite3_stmt_explain(p->pStmt, 1);
if( rc ){ qrfError(p, SQLITE_ERROR, sqlite3_errstr(rc)); }
sqlite3_stmt_explain(p->pStmt, 1);
p->expMode = expMode+1;
}
break;
@@ -2970,7 +2968,6 @@ int sqlite3_format_query_result(
if( pStmt==0 ) return SQLITE_OK; /* No-op */
if( pSpec==0 ) return SQLITE_MISUSE;
if( sqlite3_stmt_busy(pStmt) ) return SQLITE_BUSY;
qrfInitialize(&qrf, pStmt, pSpec, pzErr);
switch( qrf.spec.eStyle ){
case QRF_STYLE_Box:
+40 -16
View File
@@ -532,18 +532,39 @@ static void recoverFinalize(sqlite3_recover *p, sqlite3_stmt *pStmt){
}
}
/*
** Run a single SQL statement in zSql. If zSql contains two or more
** SQL statements separated by ';', only the first is run.
**
** Return the sqlite3_finalizer() or sqlite3_prepare() result code
** from running the zSql statement.
*/
static int recoverOneStmt(sqlite3 *db, const char *zSql){
sqlite3_stmt *pStmt = 0;
int rc;
if( zSql==0 ) return SQLITE_OK;
rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
if( rc ){
sqlite3_finalize(pStmt);
return rc;
}
while( SQLITE_ROW==sqlite3_step(pStmt) ){}
return sqlite3_finalize(pStmt);
}
/*
** This function is a no-op if recover handle p already contains an error
** (if p->errCode!=SQLITE_OK). A copy of p->errCode is returned in this
** case.
**
** Otherwise, execute SQL script zSql. If successful, return SQLITE_OK.
** Or, if an error occurs, leave an error code and message in the recover
** handle and return a copy of the error code.
** Otherwise, execute a single SQL statment in zSql. Even if zSql contains
** two or more SQL statements separated by ';', only execute the first one.
** If successful, return SQLITE_OK. Or, if an error occurs, leave an error
** code and message in the recover handle and return a copy of the error code.
*/
static int recoverExec(sqlite3_recover *p, sqlite3 *db, const char *zSql){
if( p->errCode==SQLITE_OK ){
int rc = sqlite3_exec(db, zSql, 0, 0, 0);
int rc = recoverOneStmt(db, zSql);
if( rc ){
recoverDbError(p, db);
}
@@ -943,7 +964,8 @@ static void recoverTransferSettings(sqlite3_recover *p){
}
recoverFinalize(p, p1);
}
recoverExec(p, db2, "CREATE TABLE t1(a); DROP TABLE t1;");
recoverExec(p, db2, "CREATE TABLE t1(a)");
recoverExec(p, db2, "DROP TABLE t1");
if( p->errCode==SQLITE_OK ){
sqlite3 *db = p->dbOut;
@@ -1025,12 +1047,12 @@ static int recoverOpenOutput(sqlite3_recover *p){
static void recoverOpenRecovery(sqlite3_recover *p){
char *zSql = recoverMPrintf(p, "ATTACH %Q AS recovery;", p->zStateDb);
recoverExec(p, p->dbOut, zSql);
recoverExec(p, p->dbOut,
"PRAGMA writable_schema = 1;"
"CREATE TABLE recovery.map(pgno INTEGER PRIMARY KEY, parent INT);"
"CREATE TABLE recovery.schema(type, name, tbl_name, rootpage, sql);"
);
sqlite3_free(zSql);
recoverExec(p, p->dbOut, "PRAGMA writable_schema = 1");
recoverExec(p, p->dbOut,
"CREATE TABLE recovery.map(pgno INTEGER PRIMARY KEY, parent INT)");
recoverExec(p, p->dbOut,
"CREATE TABLE recovery.schema(type, name, tbl_name, rootpage, sql)");
}
@@ -1170,7 +1192,7 @@ static int recoverWriteSchema1(sqlite3_recover *p){
")"
"SELECT rootpage, tbl, isVirtual, name, sql"
" FROM dbschema "
" WHERE tbl OR isIndex"
" WHERE (tbl OR isIndex) AND sql GLOB 'CREATE *'"
" ORDER BY tbl DESC, name=='sqlite_sequence' DESC"
);
@@ -1196,7 +1218,7 @@ static int recoverWriteSchema1(sqlite3_recover *p){
zName, zName, zSql
));
}
rc = sqlite3_exec(p->dbOut, zSql, 0, 0, 0);
rc = recoverOneStmt(p->dbOut, zSql);
if( rc==SQLITE_OK ){
recoverSqlCallback(p, zSql);
if( bTable && !bVirtual ){
@@ -1238,15 +1260,17 @@ static int recoverWriteSchema2(sqlite3_recover *p){
p->bSlowIndexes ?
"SELECT rootpage, sql FROM recovery.schema "
" WHERE type!='table' AND type!='index'"
" AND sql GLOB 'CREATE *'"
:
"SELECT rootpage, sql FROM recovery.schema "
" WHERE type!='table' AND (type!='index' OR sql NOT LIKE '%unique%')"
" AND sql GLOB 'CREATE *'"
);
if( pSelect ){
while( sqlite3_step(pSelect)==SQLITE_ROW ){
const char *zSql = (const char*)sqlite3_column_text(pSelect, 1);
int rc = sqlite3_exec(p->dbOut, zSql, 0, 0, 0);
int rc = recoverOneStmt(p->dbOut, zSql);
if( rc==SQLITE_OK ){
recoverSqlCallback(p, zSql);
}else if( rc!=SQLITE_ERROR ){
@@ -2624,7 +2648,7 @@ static void recoverStep(sqlite3_recover *p){
if( bUseWrapper ) recoverUninstallWrapper(p);
}while( p->errCode==SQLITE_NOTADB
&& (bUseWrapper--)
&& SQLITE_OK==sqlite3_exec(p->dbIn, "ROLLBACK", 0, 0, 0)
&& SQLITE_OK==recoverOneStmt(p->dbIn, "ROLLBACK")
);
}
@@ -2689,7 +2713,7 @@ static void recoverStep(sqlite3_recover *p){
** database. Regardless of whether or not an error has occurred, make
** an attempt to end the read transaction on the input database. */
recoverExec(p, p->dbOut, "COMMIT");
rc = sqlite3_exec(p->dbIn, "END", 0, 0, 0);
rc = recoverOneStmt(p->dbIn, "END");
if( p->errCode==SQLITE_OK ) p->errCode = rc;
recoverSqlCallback(p, "PRAGMA writable_schema = off");
@@ -2885,7 +2909,7 @@ int sqlite3_recover_finish(sqlite3_recover *p){
}else{
recoverFinalCleanup(p);
if( p->bCloseTransaction && sqlite3_get_autocommit(p->dbIn)==0 ){
rc = sqlite3_exec(p->dbIn, "END", 0, 0, 0);
rc = recoverOneStmt(p->dbIn, "END");
if( p->errCode==SQLITE_OK ) p->errCode = rc;
}
rc = p->errCode;
+13 -1
View File
@@ -259,6 +259,18 @@ foreach {tn type C2hex C3hex} {
} {1 SQLITE_CORRUPT}
}
#-------------------------------------------------------------------------
#
reset_db
set CSD 5402010074000900010000000000000001030441414141
set CSI 5402010074001200010000000000000001063258585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858
do_test 7.0 {
sqlite3changegroup grp
grp add [db one {SELECT unhex($CSD)}]
list [catch { grp add [db one {SELECT unhex($CSI)}] } msg] $msg
} {1 SQLITE_CORRUPT}
grp delete
finish_test
+14 -11
View File
@@ -638,10 +638,11 @@ static int sessionSerialLen(const u8 *a){
int n;
assert( a!=0 );
e = *a;
if( e==0 || e==0xFF ) return 1;
if( e==SQLITE_NULL ) return 1;
if( e==SQLITE_INTEGER || e==SQLITE_FLOAT ) return 9;
return sessionVarintGet(&a[1], &n) + 1 + n;
if( e==SQLITE_TEXT || e==SQLITE_BLOB ){
return sessionVarintGet(&a[1], &n) + 1 + n;
}
return 1;
}
/*
@@ -664,17 +665,17 @@ static unsigned int sessionChangeHash(
u8 *a = aRecord; /* Used to iterate through change record */
for(i=0; i<pTab->nCol; i++){
int eType = *a;
int isPK = pTab->abPK[i];
if( bPkOnly && isPK==0 ) continue;
assert( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT
|| eType==SQLITE_TEXT || eType==SQLITE_BLOB
|| eType==SQLITE_NULL || eType==0
);
if( isPK ){
a++;
int eType = *a++;
assert( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT
|| eType==SQLITE_TEXT || eType==SQLITE_BLOB
|| eType==SQLITE_NULL || eType==0
);
h = sessionHashAppendType(h, eType);
if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
h = sessionHashAppendI64(h, sessionGetI64(a));
@@ -3702,9 +3703,11 @@ static int sessionChangesetBufferRecord(
rc = sessionInputBuffer(pIn, nByte);
}else if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
nByte += 8;
}else if( eType!=0 && eType!=SQLITE_NULL ){
rc = SQLITE_CORRUPT_BKPT;
}
}
if( (pIn->iNext+nByte)>pIn->nData ){
if( rc==SQLITE_OK && (pIn->iNext+nByte)>pIn->nData ){
rc = SQLITE_CORRUPT_BKPT;
}
}
+8 -7
View File
@@ -1099,20 +1099,21 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return promiseResolve_(sqlite3);
};
const options = opfsUtil.options;
let proxyUri = options.proxyUri +(
//#if not target:es6-bundler-friendly
const proxyUri = options.proxyUri +(
(options.proxyUri.indexOf('?')<0) ? '?' : '&'
)+'vfs='+vfsName;
//sqlite3.config.error("proxyUri",options.proxyUri, (new Error()));
//#/if
const W = opfsVfs.worker =
//#if target:es6-bundler-friendly
(()=>{
/* _Sigh_... */
switch(vfsName){
case 'opfs':
return new Worker(new URL("sqlite3-opfs-async-proxy.js?vfs=opfs", import.meta.url));
case 'opfs-wl':
return new Worker(new URL("sqlite3-opfs-async-proxy.js?vfs=opfs-wl", import.meta.url));
}
/* Discussion explaining this formulation:
https://github.com/sqlite/sqlite-wasm/pull/159 */
const url = new URL('sqlite3-opfs-async-proxy.js', import.meta.url);
url.searchParams.set('vfs', vfsName);
return new Worker(url.toString());
})();
//#elif target:es6-module
new Worker(new URL(proxyUri, import.meta.url));
-1
View File
@@ -890,6 +890,5 @@
SF.dbExec(urlParams.get('sql') || null);
delete SF.ForceResizeKludge.$disabled;
SF.ForceResizeKludge();
globalThis.fiddle = SF;
}/*onSFLoaded()*/;
})();
+2 -2
View File
@@ -386,7 +386,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
This function initializes the db described by ctorOptFunc(...),
writes some secret info into it, and re-opens it twice to
confirmi that it can be read with an SEE key and cannot be read
confirm that it can be read with an SEE key and cannot be read
without one.
*/
T.seeBaseCheck = function(ctor, ctorOptFunc, dbUnlink){
@@ -3940,7 +3940,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
//#/query
////////////////////////////////////////////////////////////////////////
T.g('OPFS SyncAccessHandle Pool VFS',
(sqlite3)=>(!!sqlite3.installOpfsSAHPoolVfs || "requires OPFS SAH Pool APIs"))
(sqlite3)=>(isWorker() && !!sqlite3.installOpfsSAHPoolVfs || "requires OPFS SAH Pool APIs"))
.t({
name: 'SAH sanity checks',
test: async function(sqlite3){
+7 -8
View File
@@ -1678,7 +1678,8 @@ tclsqlite3.c: sqlite3.c tclsqlite-ex.c
#
# $(CFLAGS.tclextension) = CFLAGS for the tclextension* targets.
#
CFLAGS.tclextension = $(CFLAGS.intree_includes) $(CFLAGS.env) $(OPT_FEATURE_FLAGS) $(OPTS)
CFLAGS.tclextension = $(CFLAGS.intree_includes) $(CFLAGS.env) \
$(OPT_FEATURE_FLAGS) $(OPTS) $(CFLAGS.icu)
#
# Build the SQLite TCL extension in a way that make it compatible
# with whatever version of TCL is running as $TCLSH_CMD, possibly defined
@@ -1686,7 +1687,8 @@ CFLAGS.tclextension = $(CFLAGS.intree_includes) $(CFLAGS.env) $(OPT_FEATURE_FLAG
#
tclextension: tclsqlite3.c
$(TCLSH_CMD) $(TOP)/tool/buildtclext.tcl --build-only \
--tclConfig.sh $(TCL_CONFIG_SH) --cc "$(T.cc)" $(CFLAGS.tclextension)
--tclConfig.sh $(TCL_CONFIG_SH) --cc "$(T.cc)" \
--extlibs "$(LDFLAGS.icu)" $(CFLAGS.tclextension)
#
# Install the SQLite TCL extension in a way that is appropriate for $TCLSH_CMD
@@ -1694,7 +1696,8 @@ tclextension: tclsqlite3.c
#
tclextension-install: tclsqlite3.c
$(TCLSH_CMD) $(TOP)/tool/buildtclext.tcl --destdir "$(DESTDIR)" \
--tclConfig.sh $(TCL_CONFIG_SH) --cc "$(T.cc)" $(CFLAGS.tclextension)
--tclConfig.sh $(TCL_CONFIG_SH) --cc "$(T.cc)" \
--extlibs "$(LDFLAGS.icu)" $(CFLAGS.tclextension)
#
# Uninstall the SQLite TCL extension that is used by $TCLSH_CMD.
@@ -2422,10 +2425,6 @@ sqlite3session.o: $(TOP)/ext/session/sqlite3session.c $(DEPS_EXT_COMMON)
stmt.o: $(TOP)/ext/misc/stmt.c $(DEPS_EXT_COMMON)
$(T.cc.extension) -c $(TOP)/ext/misc/stmt.c
$(AUXTEST): $(TOP)/test/c/$(AUXTEST).c
$(T.cc.sqlite) -o $@ $(TOP)/test/c/$(AUXTEST).c sqlite3.o $(LDFLAGS.libsqlite3)
#
# Windows section
#
@@ -2509,7 +2508,7 @@ tidy:
# Removes build products and test logs. Retains ./configure outputs.
#
clean: tidy
rm -rf omittest* testrunner* testrun_* testdir*
rm -rf omittest* testrunner* testdir*
#
# Clean up everything. No exceptions. From an out-of-tree build which
+39 -39
View File
@@ -1,14 +1,14 @@
C Ensure\sc-tests\suse\sthe\slocally\sbuilt\ssqlite3.h\sfile,\snot\sthe\ssystem\scopy.
D 2026-04-14T18:12:09.417
C Version\s3.53.1
D 2026-05-05T10:34:17.344
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md 6bc480fc673fb4acbc4094e77edb326267dd460162d7723c7f30bee2d3d9e97d
F Makefile.in 5fda086f33b144da08119255da1d2557f983d0764a13707f05acf0159fd89ba5
F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0
F Makefile.msc 2bca86f47166c2b532a697226570a0a42651de562e9438b991e9a349c78a14b0
F Makefile.msc 92391304cf70f4c178b127aa83b88637abd28d1b83ede451616144037ea1d3dd
F README.md f49fbd826941842e348242f3ab62f240c985ceafdf8fbe576abf4eb75317468c
F VERSION 99cf3be5f13d091183e4314b7fc2e0c0e69accfbe64608b45a313338bbdd7b62
F VERSION b67c2895a647ba280c284277d895e11f9bcec7435b5755f5dd26c04b3369bd41
F art/icon-243x273.gif 9750b734f82fdb3dc43127753d5e6fbf3b62c9f4e136c2fbf573b2f57ea87af5
F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d87031
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
@@ -421,7 +421,7 @@ F ext/misc/zipfile.c 5a583b5e72b4d777dc9f845529e6bd185d58024b633aafc93588679c787
F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
F ext/qrf/README.md 9e644615d7d7b77ef7e9db798765679e50c5ed12eda48bce21c9ef9eb4715e9d
F ext/qrf/dev-notes.md e68a6d91ce4c7eb296ef2daadc2bb79c95c317ad15b9fafe40850c67b29c2430
F ext/qrf/qrf.c 64203184d9fc6ee75439fb6da70fd51dc7aaf3243600e52aa87d18ea1e4d6e73
F ext/qrf/qrf.c 9bef1f01e0c33a8693a9a7c1b666b8dee1aa60b8bc880d562eb4dfff551a6009
F ext/qrf/qrf.h fbb223ff5789b324b3e9c22e787e4c1f53e217cff7cc5a243164d4b2e8410f4b
F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
@@ -486,7 +486,7 @@ F ext/recover/recoverpgsz.test 88766fcb810e52ee05335c456d4e5fb06d02b73d3ccb48c52
F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f
F ext/recover/recoverslowidx.test c90d59c46bb8924a973ac6fbc38f3163cee38cc240256addcab1cf1a322c37dc
F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486
F ext/recover/sqlite3recover.c 56c216332ea91233d6d820d429f3384adbec9ecedda67aa98186b691d427cc57
F ext/recover/sqlite3recover.c dfbfca5a8e4909333e5aa3749bcffb5dd7e396de9541c338f8cc843b2e20217e
F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959
F ext/recover/test_recover.c 3d0fb1df7823f5bc22a0b93955034d16a2dfa2eb1e443e9a0123a77f120599a3
F ext/rtree/README 734aa36238bcd2dee91db5dba107d5fcbdb02396612811377a8ad50f1272b1c1
@@ -540,7 +540,7 @@ F ext/session/session8.test 326f3273abf9d5d2d7d559eee8f5994c4ea74a5d935562454605
F ext/session/session9.test 0c4a8fbe7a5031f50855f020f3408e1f07fd7859f1daa1629eadcec3422072d6
F ext/session/sessionA.test 1feeab0b8e03527f08f2f1defb442da25480138f
F ext/session/sessionB.test c4fb7f8a688787111606e123a555f18ee04f65bb9f2a4bb2aa71d55ce4e6d02c
F ext/session/sessionC.test 2bd42225efdf5f5b1a20f75b672665bcd4f67e2a6d7ddf7420fe7bf523ba41f8
F ext/session/sessionC.test de98b5e173fd86c79af0d0541534398d2ea75dc0d5d74a00103eb26151b76959
F ext/session/sessionD.test 470ff917dc849e2eb78142ade63aaabd729d773833cff0ff01bca0eda68a21ce
F ext/session/sessionE.test b2010949c9d7415306f64e3c2072ddabc4b8250c98478d3c0c4d064bce83111d
F ext/session/sessionF.test d37ed800881e742c208df443537bf29aa49fd56eac520d0f0c6df3e6320f3401
@@ -571,7 +571,7 @@ F ext/session/sessionrowid.test 85187c2f1b38861a5844868126f69f9ec62223a03449a98a
F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795
F ext/session/sessionstat1.test 5e718d5888c0c49bbb33a7a4f816366db85f59f6a4f97544a806421b85dc2dec
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
F ext/session/sqlite3session.c d5c91d5b07d2b8e860f2782ae23f7b44ce929280e00645418ee84a0fd14525b2
F ext/session/sqlite3session.c 48b5585ea444c9646294d86f16ad3efa28dd19632dd3e295557c1ab40c447a4c
F ext/session/sqlite3session.h 063e7bf7be2fff874456f452a224b5b3013b25682d108933b0351c93a1279b9c
F ext/session/test_session.c 2a02a68b522e2f3d4a64b2a4733af54b0f3e500769aeccd5bcbdd440103db069
F ext/wasm/GNUmakefile 68c750f173106d9d63f12c1edf1256c6f4bad9894b155da5db64322f4912de4b
@@ -587,7 +587,7 @@ F ext/wasm/api/README.md a905d5c6bfc3e2df875bd391d6d6b7b48d41b43bdee02ad115b4724
F ext/wasm/api/extern-post-js.c-pp.js 80accc53cc6ea1e61c721595f42ba95baa7c7ea636807d9507e69403301f8c54
F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41
F ext/wasm/api/opfs-common-inline.c-pp.js 496ca858af09b7fef2efaece467960611d35f57254078424bcdeac42ded9e85d
F ext/wasm/api/opfs-common-shared.c-pp.js d0bff21d34fa05a7eb975c4ee608165f96387332101cb05e976953c77434374d
F ext/wasm/api/opfs-common-shared.c-pp.js 5b5880ced26977931a4fb33aafc6c71206fbee519e82abf9614898d8fa5ec241
F ext/wasm/api/post-js-footer.js a50c1a2c4d008aede7b2aa1f18891a7ee71437c2f415b8aeb3db237ddce2935b
F ext/wasm/api/post-js-header.js f35d2dcf1ab7f22a93d565f8e0b622a2934fc4e743edf3b708e4dd8140eeff55
F ext/wasm/api/pre-js.c-pp.js d6bf82f83f60caa2904bddb95a29cb738b310f672d2796cdc5fe54463ab0d6cd
@@ -622,7 +622,7 @@ F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2
F ext/wasm/demo-worker1.js fdfa90aa9d6b402bfed802cf1595fe4da6cc834ac38c8ff854bf1ee01f5ff9bb
F ext/wasm/example_extra_init.c 2347cd69d19d839ef4e5e77b7855103a7fe3ef2af86f2e8c95839afd8b05862f
F ext/wasm/fiddle/fiddle-worker.js 6c72acac2d381480bc9f5eb538e3f2faf2c1f72dd4fcbd05d3b409818a9a8fd5
F ext/wasm/fiddle/fiddle.js fc0f19303d00014a0f285fefd30953e953be1bd01e757bbd9eda45c9dc2c154b
F ext/wasm/fiddle/fiddle.js 84fd75967e0af8b69d3dd849818342227d0f81d13db92e0dcbc63649b31a4893
F ext/wasm/fiddle/index.c-pp.html 02f063ef30b8124f311029855c4439e77bc6505d1bf65a163d88c064a63ee9d9
F ext/wasm/index-dist.html db23748044e286773f2768eec287669501703b5d5f72755e8db73607dc54d290
F ext/wasm/index.html 5bf6cf1b0a3c8b9f5f54d77f2219d7ae87a15162055ce308109c49b1dcab4239
@@ -646,7 +646,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.c-pp.html 7171022e7f4da8f46e5f50ea81dd6ce840b9235c47653a5deeb3764ccc2fe472
F ext/wasm/tester1.c-pp.html bd927ccf51ddd65e924660a0487add99e1b044afe03950e49d87ccf44efdddb6
F ext/wasm/tester1.c-pp.js 581be6f3228351bc77512ba743912d1ad52f40dde1fef1a943fd568b0cfc51b1
F ext/wasm/tester1.c-pp.js 54ce4a08d3752cb52cf60926d7da47a21ae63d620f90679770dd9c04002722b4
F ext/wasm/tests/opfs/concurrency/index.html 706eab6308343c04ac2360aba6001af4ffaf46d8f33a0ccd02c64d93e3216a43
F ext/wasm/tests/opfs/concurrency/test.js 6919778fceaac1b7cc78caf41d796f545d2c4433b31188aa9689f05b5ad28828
F ext/wasm/tests/opfs/concurrency/worker.js 704d82c5e287e47f612349e027765943a58ad967dcf178fb5a1c3a8eaafb09af
@@ -656,7 +656,7 @@ F ext/wasm/tests/opfs/sahpool/index.html be736567fd92d3ecb9754c145755037cbbd2bca
F ext/wasm/tests/opfs/sahpool/sahpool-pausing.js f264925cfc82155de38cecb3d204c36e0f6991460fff0cb7c15079454679a4e2
F ext/wasm/tests/opfs/sahpool/sahpool-worker.js bd25a43fc2ab2d1bafd8f2854ad3943ef673f7c3be03e95ecf1612ff6e8e2a61
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
F main.mk 775248c86e2ac9098a365b53a7fd76504b9d220c6e2570d4d4f5465bb8e7f967
F main.mk 2f7de314e2e43b9b8cfebbdaf7e00e05f14e21f41ccf392377f7ec96fba80966
F make.bat a136fd0b1c93e89854a86d5f4edcf0386d211e5d5ec2434480f6eea436c7420c
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
@@ -667,9 +667,9 @@ F mptest/multiwrite01.test dab5c5f8f9534971efce679152c5146da265222d
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
F sqlite3.1 1b9c24374a85dfc7eb8fa7c4266ee0db4f9609cceecfc5481cd8307e5af04366
F sqlite3.pc.in e6dee284fba59ef500092fdc1843df3be8433323a3733c91da96690a50a5b398
F src/alter.c fc36b19273ffe364aeb4d00ba04bda8798ad7a67fec7a035ee8ee56272e1bdbe
F src/alter.c 7d7ddbdc189f0e0c686e32ee170abdddc95c11f2089e40df4ffcee88f5334826
F src/analyze.c 03bcfc083fc0cccaa9ded93604e1d4244ea245c17285d463ef6a60425fcb247d
F src/attach.c 7cf07d4fa42b9fc8662237c60c40b730326c30aa90ae5fffc0b18b2d726ebf61
F src/attach.c c58278c7d2d954785591c4fde81669ec3e4d52f348c453b028a19ae8adf4f338
F src/auth.c ebec42df26b34a62b6750d30d9c2c03554a1c522020182476f7729a439fef04f
F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523
F src/bitvec.c e242d4496774dfc88fa278177dd23b607dce369ccafb3f61b41638eea2c9b399
@@ -705,7 +705,7 @@ F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2
F src/mem2.c c8bfc9446fd0798bddd495eb5d9dbafa7d4b7287d8c22d50a83ac9daa26d8a75
F src/mem3.c 30301196cace2a085cbedee1326a49f4b26deff0af68774ca82c1f7c06fda4f6
F src/mem5.c b7da5c10a726aacacc9ad7cdcb0667deec643e117591cc69cf9b4b9e7f3e96ff
F src/memdb.c a3feb427cdd4036ea2db0ba56d152f14c8212ca760ccb05fb7aa49ff6b897df3
F src/memdb.c 0a0e827311cec57fdea2ed3142d6684704a1b90e7995b286f74fd7d1a6c5a62c
F src/memjournal.c c283c6c95d940eb9dc70f1863eef3ee40382dbd35e5a1108026e7817c206e8a0
F src/msvc.h 80b35f95d93bf996ccb3e498535255f2ef1118c78764719a7cd15ab4106ccac9
F src/mutex.c 00b8cee206a67fd764d001f3a148494331d8d0b3b9c3974ecd69ff29bb444462
@@ -719,23 +719,23 @@ F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63
F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e06
F src/os_kv.c e7d96727db5b67e39d590a68cc61c86daf4c093c36c011a09ebfb521182ec28d
F src/os_setup.h 8efc64eda6a6c2f221387eefc2e7e45fd5a3d5c8337a7a83519ba4fbd2957ae2
F src/os_unix.c a07dce662f6c4e18098f6faa9f7ec7cf311f56ee9151bed2aad4dcd55852c9e2
F src/os_unix.c fa5e09b4df35ad845440cad67b86908cfe1fd4c28c51915f82e23633d1992bf4
F src/os_win.c 0d553b6e8b92c8eb85e7f1b4a8036fe8638c8b32c9ad8d9d72a861c10f81b4c5
F src/os_win.h 5e168adf482484327195d10f9c3bce3520f598e04e07ffe62c9c5a8067c1037b
F src/pager.c fe34fd22ec251436985d7b6ebdd05bf238a17901c2cb23d3d28974dd2361a912
F src/pager.h 6137149346e6c8a3ddc1eeb40aee46381e9bc8b0fcc6dda8a1efde993c2275b8
F src/parse.y 3b784d6083380a950e3b1b32ce5ddd303e8c7c209d8ab788df2c62aaf9ee8eb3
F src/parse.y 8c8003a932f6f98ac612fd239d3cdc7ca64480f61ca5f4f680c4fe69b1bc68c9
F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
F src/pcache.h 092b758d2c5e4dabb30eae46d8dfad77c0f70b16bf3ff1943f7a232b0fe0d4ba
F src/pcache1.c 131ca0daf4e66b4608d2945ae76d6ed90de3f60539afbd5ef9ec65667a5f2fcd
F src/pragma.c 789ef67117b74b5be0a2db6681f7f0c55e6913791b9da309aefd280de2c8a74d
F src/prepare.c f6a6e28a281bd1d1da12f47d370a81af46159b40f73bf7fa0b276b664f9c8b7d
F src/printf.c d442fda86ad11da7923dbb354d3761229b5b51dbe06c5c208fa75e3411c79434
F src/printf.c 50be92de0725e88c8b38978775ab46f9b42d74e21f65045c3423503173eb0566
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 928ff887f2a7c64275182060d94d06fdddbe32226c569781cf7e7edc6f58d7fd
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c ffe199f025a0dd74670d2a77232bdea364a4d7b36f32c64a6572d39ba6a11576
F src/shell.c.in 4d00b373ce9485b5f2db2dbebf3a6a3ef3ebe7b77fc7ecb3278cae2cb4a5529b
F src/select.c 4c05cde130f26991b7411d8c6809e0630625e18078742c963a047b4b9cc01d49
F src/shell.c.in cbb7ae029cea6d8789924d9009574081b4f3c0619ce736ed36e8c7564ef13547
F src/sqlite.h.in e2915e4a86d5e0783afb5cb72411df38d987c7f3c5aa2d5441b8e74d30b649d8
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h 1b7a0ee438bb5c2896d0609c537e917d8057b3340f6ad004d2de44f03e3d3cca
@@ -799,13 +799,13 @@ F src/trigger.c 4bf3bfb3851d165e4404a9f9e69357345f3f7103378c07e07139fdd8aeb7bd20
F src/update.c 3e5e7ff66fa19ebe4d1b113d480639a24cc1175adbefabbd1a948a07f28e37cf
F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
F src/utf.c 7267c3fb9e2467020507601af3354c2446c61f444387e094c779dccd5ca62165
F src/util.c 377af5da226519a0f374dc3c6d408c9d303a92943e3ae5986432c7d52e6679a2
F src/util.c 2053344769bc602b2c23ce193f4d24f89777ab67fa768b80fa197d3876dc3017
F src/vacuum.c d3d35d8ae893d419ade5fa196d761a83bddcbb62137a1a157ae751ef38b26e82
F src/vdbe.c 6c57525d7db0232d52687d30da1093db0c152f14206c2ef1adf0c19a09d863e3
F src/vdbe.h 70e862ac8a11b590f8c1eaac17a0078429d42bc4ea3f757a9af0f451dd966a71
F src/vdbeInt.h c31ba4dc8d280c2b1dc89c6fcee68f2555e3813ab34279552c20b964c0e338b1
F src/vdbeapi.c 6cdcbe5c7afa754c998e73d2d5d2805556268362914b952811bdfb9c78a37cf1
F src/vdbeaux.c 5387185849ef00062a5e84af731704e4bf5ec156d82cf5e509a442e9c03e089b
F src/vdbeaux.c 81687c55682b9f4d942186695f4f7fa4743c564a985e0889def52eded9076d61
F src/vdbeblob.c b3f0640db9642fbdc88bd6ebcc83d6009514cafc98f062f675f2c8d505d82692
F src/vdbemem.c efacb8f229422d2a4db0ed38e49b7f3897862a98d82b261aa3b43d7a2d98c6da
F src/vdbesort.c b69220f4ea9ffea5fdef34d968c60305444eea909252a81933b54c296d9cca70
@@ -816,9 +816,9 @@ F src/vxworks.h 9d18819c5235b49c2340a8a4d48195ec5d5afb637b152406de95a9436beeaeab
F src/wal.c 7340d4f9bb827bd349127cac6b2cf0cb7f76b9fda645f7b9b0bf7a6e0b1e2e7c
F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
F src/where.c bffca5e4ef20d0bfbdc24f1dc13fd3f955284225a8ad25a4454635f6be39aad0
F src/where.c 1096566a629cccb0a4fd66e3304f39f73349c6c62d21111f8bbae46a43a15aa8
F src/whereInt.h 8d94cb116c9e06205c3d5ac87af065fc044f8cf08bfdccd94b6ea1c1308e65da
F src/wherecode.c 676cb6cb02878643e817d9917a2d3522b83a3736b2cedd3dc8a01d7bb92af6c2
F src/wherecode.c 4d573077652f79780d6b50840ab8cbb72053dbb4eb230780dd2a146ab034475d
F src/whereexpr.c e9f7185fba366d9365aa7a97329609e4cf00b3dd0400d069fbaa5187350c17c6
F src/window.c c0a38cd32473e8e8e7bc435039f914a36ca42465506dc491c65870c01ddac9fb
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
@@ -838,7 +838,7 @@ F test/alterauth.test 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256b
F test/alterauth2.test 4b74fa8f184f4736497317feb587b65759eb87d87acfe3a8ef433d4d18bb002b
F test/altercol.test 3661c432aacb42bc2198dd4611bbb9c3b09fc73251b59edda046109103b8ac00
F test/altercons.test ea18def4a0f26b9066da56095c9c480df705df4d02e4ae151708fae76f7e3884
F test/altercons2.test 3c1f58312817df43aeada3b1827fdc3ce3fc50c6f49a95ef62cf4cbbae8583a0
F test/altercons2.test 4933eadb035fc0ccfc34ed879f69a09051c53907f9dae9c3d36d25f93519ccc7
F test/altercorrupt.test 2e1d705342cf9d7de884518ddbb053fd52d7e60d2b8869b7b63b2fda68435c12
F test/alterdropcol.test a653a3945f964d26845ec0cd0a8e74189f46de3119a984c5bc45457da392612e
F test/alterdropcol2.test 527fce683b200d620f560f666c44ae33e22728e990a10a48a543280dfd4b4d41
@@ -943,8 +943,6 @@ F test/btree02.test 7555a5440453d900410160a52554fe6478af4faf53098f7235f1f443d5a1
F test/btreefault.test a82a23b0578bc587afbf9a622c8f54a54f63762f062ba8a35613cfee38ab42f9
F test/busy.test caff7164c16ce06a53af51f9e4c2753d4cc64250e00790a5e48b9c4f4be37597
F test/busy2.test 20823a5d7c42fb257d9f108c66312d90b1bb4ec3d80ba6b4e371073727560f98
F test/c/malloc1.c 2869384011b5dc1f019ddd94e5248a1f2dfd07db06c6ce854793c91da173b811
F test/c/snprintf1.c a66a1ce1195bd409740a60ebeea008686ce3fbacb445840fc0a45419823b7f3f
F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de
F test/cacheflush.test af25bb1509df04c1da10e38d8f322d66eceedf61
F test/cachespill.test 895997f84a25b323b166aecb69baab2d6380ea98f9e0bcc688c4493c535cfab9
@@ -1099,7 +1097,7 @@ F test/exclusive.test 7ff63be7503990921838d5c9f77f6e33e68e48ed1a9d48cd28745bf650
F test/exclusive2.test cd70b1d9c6fffd336f9795b711dcc5d9ceba133ad3f7001da3fda63615bdc91e
F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
F test/exists.test 79a75323c78f02bbe9c251ea502a092f9ef63dac
F test/existsexpr.test 75c1c13cda18b53f68c135fe644afc034d72a6de5b0774b0219ca4a6dc4b96b0
F test/existsexpr.test 1ce70ac41fb6d52525774388aa23e982428e883a850f9d56d49776d234865552
F test/existsexpr2.test dc23e76389eff3d29f6488ff733012a3560cd67ec8cfaecbecd52cced5d5af11
F test/existsfault.test ff41c11f3052c1bbd4f8dd557802310026253d67d7c4e3a180c16d2f0862973e
F test/expr.test db981f8a85520e99ae20aab7ad2e9b5b0437ed09159b57ced434c672075d2e61
@@ -1318,7 +1316,7 @@ F test/instrfault.test 95e28efade652e6d51ae11b377088fe523a581a07ec428009e152a4dd
F test/intarray.test bb976b0b3df0ebb6a2eddfb61768280440e672beba5460ed49679ea984ccf440
F test/intck01.sql f2d88bf41cdd64f2ed8c3d4f357cf520f017aa2986999ab9a62eb6506ef18106
F test/interrupt.test ac1ef50ec9ab8e4f0e17c47629f82539d4b22558904e321ed5abea2e6187da7a
F test/interrupt2.test e4408ca770a6feafbadb0801e54a0dcd1a8d108d
F test/interrupt2.test 7eaa40a975d950826cd56e6c37f0f0629adfa2d1a8d3333aff0ff7cf86069963
F test/intpkey.test 7d54711acf553cdd641a40e9c6cfc2bf1a76070074940c1b126442517054320f
F test/intreal.test 68829a8bb073ee1610ca3f8f9e0f99b0371fb36e0fa64862dd5ced4ef03c2343
F test/io.test d267fdc8915444a45e19841489033ebe70bb69f6db605b00df70be16b2a80f59
@@ -1422,7 +1420,7 @@ F test/malloctraceviewer.tcl 3e3ddf11e30d2b20f53aa16aa6615082fb24a100bea61cca721
F test/manydb.test 28385ae2087967aa05c38624cec7d96ec74feb3e
F test/mem5.test c6460fba403c5703141348cd90de1c294188c68f
F test/memdb.test c1f2a343ad14398d5d6debda6ea33e80d0dafcc7
F test/memdb1.test c737ac9aa5895092332b1dde24fae7ae494b7fcbcd346d22d600891096a3836d
F test/memdb1.test 916093ae5ad097660a742890a9986d1f217a620ac95efb64884041ee4c408603
F test/memdb2.test 4ba1fc09e2f51df80d148a540e4a3fa66d0462e91167b27497084de4d1f6b5b4
F test/memjournal.test 70f3a00c7f84ee2978ad14e831231caa1e7f23915a2c54b4f775a021d5740c6c
F test/memjournal2.test dbc2c5cb5f7b38950f4f6dc3e73fcecf0fcbed3fc32c7ce913bba164d288da1e
@@ -1608,7 +1606,7 @@ F test/selectG.test 089f7d3d7e6db91566f00b036cb353107a2cca6220eb1cb264085a836dae
F test/selectH.test 0b54599f1917d99568c9b929df22ec6261ed7b6d2f02a46b5945ef81b7871aac
F test/session.test 78fa2365e93d3663a6e933f86e7afc395adf18be
F test/sessionfuzz-data1.db 1f8d5def831f19b1c74571037f0d53a588ea49a6c4ca2a028fc0c27ef896dbcb
F test/sessionfuzz.c 0ec813258fbfd222c62ba6867c6a5a015f098fcaa6d89e7e0ee623ea91145cf0
F test/sessionfuzz.c f693b8827034a3bed7616d89c65fb4fe8b7ff3c0f000c6ea6beda69b7f1aced3
F test/shared.test 50bd8091735b272732125928c363476a17b5fb264835de7d19e90c72055c888b
F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
F test/shared3.test cb92d083003ddf0f313166e494ec2fcafa55fdebf648628923ded3169dba8850
@@ -1716,8 +1714,8 @@ F test/temptrigfault.tes fc5918e64f3867156fefe7cfca9d8e1f495134a5229b2b511b0dc11
F test/temptrigger.test a00f258ed8d21a0e8fd4f322f15e8cfb5cef2e43655670e07a753e3fb4769d61
F test/tester.tcl 2d943f60200e0a36bcd3f1f0baf181a751cd3604ef6b6bd4c8dc39b4e8a53116
F test/testloadext.c 862b848783eaed9985fbce46c65cd214664376b549fae252b364d5d1ef350a27
F test/testrunner.tcl cc5ff144daa48e351cf4523a45998986a1d68f85d5babfd53e372dc1a74f6fdc x
F test/testrunner_data.tcl dfcf192d274e965845189cc014ac89fff91dde92b6e2ac9e1262897fc21ee2e0
F test/testrunner.tcl 6b232f0d4825dec8b967754503080fc9609fad077f582d02f86bd2d95bec4110 x
F test/testrunner_data.tcl 48c8a230fcada37f4809f95c2ba49e44bc3d520b6165c09173249c6e65b01cc1
F test/testrunner_estwork.tcl 81e2ae10238f50540f42fbf2d94913052a99bfb494b69e546506323f195dcff9
F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899
F test/thread002.test c24c83408e35ba5a952a3638b7ac03ccdf1ce4409289c54a050ac4c5f1de7502
@@ -1924,7 +1922,7 @@ F test/unique.test 93f8b2ef5ea51b9495f8d6493429b1fd0f465264
F test/unique2.test 3674e9f2a3f1fbbfd4772ac74b7a97090d0f77d2
F test/unixexcl.test d2366ef2d3d95249314307861d748924d9ab4f24305541159a08be61ccd4a9ee
F test/unordered.test 0edaf3411d300693bca595897c5201421c6c5ec787990a1dfe2f7f60ae93f1e2
F test/update.test 258dcf26d401177d3cb7fdf0beab14d671dbe72e8ff6e0435fd85a08fcd57bd9
F test/update.test 93fba5f7505f7a7b25d66135d98d9b055b7f1bd627a7e514dbba1ea6213f0c41
F test/update2.test 67455bc61fcbcf96923c45b3bc4f87bc72be7d67575ad35f134906148c7b06d3
F test/upfrom1.tcl 8859d9d437f03b44174c4524a7a734a391fd4526fcff65be08285dafc9dc9041
F test/upfrom1.test 8cb06689e99cd707d884faa16da0e8eb26ff658bb01c47ddf72fadade666e6e1
@@ -2110,7 +2108,7 @@ F tool/GetTclKit.bat d84033c6a93dfe735d247f48ba00292a1cc284dcf69963e5e672444e045
F tool/Replace.cs 02c67258801c2fb5f63231e0ac0f220b4b36ba91
F tool/build-all-msvc.bat 1ee9dbadcc07fc23268025854e97b392bcbad72376b47aee7b22f3797a4f2c87 x
F tool/build-shell.sh 369c4b171cc877ad974fef691e4da782b4c1e99fe8f4361316c735f64d49280f
F tool/buildtclext.tcl d09b753d7858314104eeaf5f4def85d35784470279809e47a633f142226f2b3f
F tool/buildtclext.tcl b58df93e772fec8b2ae44ee1a82d13378e13edb1e94c4ab2f7ee3440a9523bff
F tool/cg_anno.tcl c1f875f5a4c9caca3d59937b16aff716f8b1883935f1b4c9ae23124705bc8099 x
F tool/checkSpacing.c 810e51703529a204fc4e1eb060e9ab663e3c06d2
F tool/cktclsh.sh 6075eef9c6b9ba4b38fef2ca2a66d25f2311bd3c610498d18a9b01f861629cca
@@ -2199,8 +2197,10 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P 30b597d797e737a2907b755706a37d63c37c6a06c4e037098a6d9c482bcde887
R c96809e01a44163283ca77164655f4f3
U dan
Z 7231fba238ef6d345ac0033c7b464226
P 1d2f770713f9d75d0de923515f4cee8ff83e95826d77f049b7bb1fbfad042248
R 9347e8a0cd885b5583c5865d60ed1eac
T +sym-release *
T +sym-version-3.53.1 *
U drh
Z 312c96b4c11e74d0ea93a2c45332ff6e
# Remove this line to create a well-formed Fossil manifest.
+4 -2
View File
@@ -1,2 +1,4 @@
branch c-tests
tag c-tests
branch branch-3.53
tag release
tag branch-3.53
tag version-3.53.1
+1 -1
View File
@@ -1 +1 @@
2d81ee65ffbed30fd98bdda96dc79c1929c73f806cea3c9e4c244b618980b202
c88b22011a54b4f6fbd149e9f8e4de77658ce58143a1af0e3785e4e6475127e9
+3 -1
View File
@@ -2798,7 +2798,9 @@ void sqlite3AlterDropConstraint(
if( !pTab ) return;
if( pCons ){
zArg = sqlite3MPrintf(db, "%.*Q", pCons->n, pCons->z);
char *z = sqlite3NameFromToken(db, pCons);
zArg = sqlite3MPrintf(db, "%Q", z);
sqlite3DbFree(db, z);
}else{
int iCol;
if( alterFindCol(pParse, pTab, pCol, &iCol) ) return;
+11 -2
View File
@@ -106,6 +106,16 @@ static void attachFunc(
** from sqlite3_deserialize() to close database db->init.iDb and
** reopen it as a MemDB */
Btree *pNewBt = 0;
pNew = &db->aDb[db->init.iDb];
assert( pNew->pBt!=0 );
if( sqlite3BtreeTxnState(pNew->pBt)!=SQLITE_TXN_NONE
|| sqlite3BtreeIsInBackup(pNew->pBt)
){
rc = SQLITE_BUSY;
goto attach_error;
}
pVfs = sqlite3_vfs_find("memdb");
if( pVfs==0 ) return;
rc = sqlite3BtreeOpen(pVfs, "x\0", db, &pNewBt, 0, SQLITE_OPEN_MAIN_DB);
@@ -115,8 +125,7 @@ static void attachFunc(
/* Both the Btree and the new Schema were allocated successfully.
** Close the old db and update the aDb[] slot with the new memdb
** values. */
pNew = &db->aDb[db->init.iDb];
if( ALWAYS(pNew->pBt) ) sqlite3BtreeClose(pNew->pBt);
sqlite3BtreeClose(pNew->pBt);
pNew->pBt = pNewBt;
pNew->pSchema = pNewSchema;
}else{
+3 -4
View File
@@ -876,10 +876,10 @@ int sqlite3_deserialize(
if( rc ) goto end_deserialize;
db->init.iDb = (u8)iDb;
db->init.reopenMemdb = 1;
rc = sqlite3_step(pStmt);
sqlite3_step(pStmt);
db->init.reopenMemdb = 0;
if( rc!=SQLITE_DONE ){
rc = SQLITE_ERROR;
rc = sqlite3_finalize(pStmt);
if( rc!=SQLITE_OK ){
goto end_deserialize;
}
p = memdbFromDbSchema(db, zSchema);
@@ -900,7 +900,6 @@ int sqlite3_deserialize(
}
end_deserialize:
sqlite3_finalize(pStmt);
if( pData && (mFlags & SQLITE_DESERIALIZE_FREEONCLOSE)!=0 ){
sqlite3_free(pData);
}
+1 -16
View File
@@ -6646,22 +6646,7 @@ static int unixOpen(
}else if( !zName ){
/* If zName is NULL, the upper layer is requesting a temp file. */
assert( isDelete );
assert( !isNewJrnl );
assert( isExclusive );
assert( isReadWrite );
#if defined(__linux__) && defined(O_TMPFILE)
/* On systems that support O_TMPFILE, use that flag to create a more
** secure temporary file that cannot be accessed by other processes
*/
zName = unixTempFileDir();
if( zName
&& (fd = robust_open(zName, O_RDWR|O_CREAT|O_EXCL|O_TMPFILE, 0600))>=0
){
rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags);
goto open_finished;
}
#endif
assert(isDelete && !isNewJrnl);
rc = unixGetTempname(pVfs->mxPathname, zTmpname);
if( rc!=SQLITE_OK ){
return rc;
+1
View File
@@ -1476,6 +1476,7 @@ expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
if( A ){
A->x.pList = pList;
sqlite3ExprSetHeightAndFlags(pParse, A);
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
+1 -1
View File
@@ -1322,7 +1322,7 @@ void sqlite3_str_reset(StrAccum *p){
** of its content, all in one call.
*/
void sqlite3_str_free(sqlite3_str *p){
if( p ){
if( p!=0 && p!=&sqlite3OomStr ){
sqlite3_str_reset(p);
sqlite3_free(p);
}
+1 -1
View File
@@ -7324,6 +7324,7 @@ static SQLITE_NOINLINE void existsToJoin(
&& !ExprHasProperty(pWhere, EP_OuterON|EP_InnerON)
&& ALWAYS(p->pSrc!=0)
&& p->pSrc->nSrc<BMS
&& (p->pLimit==0 || p->pLimit->pRight==0)
){
if( pWhere->op==TK_AND ){
Expr *pRight = pWhere->pRight;
@@ -7371,7 +7372,6 @@ static SQLITE_NOINLINE void existsToJoin(
sqlite3TreeViewSelect(0, p, 0);
}
#endif
existsToJoin(pParse, p, pSubWhere);
}
}
}
+6 -5
View File
@@ -3787,7 +3787,7 @@ static const char *(azHelp[]) = {
" --schema SCHEMA Use SCHEMA instead of \"main\"",
" --help Show CMD details",
".fullschema ?--indent? Show schema and the content of sqlite_stat tables",
",headers on|off Turn display of headers on or off",
".headers on|off Turn display of headers on or off",
".help ?-all? ?PATTERN? Show help text for PATTERN",
#ifndef SQLITE_SHELL_FIDDLE
".import FILE TABLE Import data from FILE into TABLE",
@@ -8570,8 +8570,7 @@ static int dotCmdOutput(ShellState *p){
zBom = zBomUtf8;
}else if( cli_strcmp(z,"-plain")==0 ){
bPlain = 1;
}else if( c=='o' && z[0]=='1' && z[1]!=0 && z[2]==0
&& (z[1]=='x' || z[1]=='e' || z[1]=='w') ){
}else if( c=='o' && sqlite3_strglob("-[ewx]",z)==0 ){
if( bKeep || eMode ){
dotCmdError(p, i, "incompatible with prior options",0);
goto dotCmdOutput_error;
@@ -12316,7 +12315,9 @@ static int runOneSqlLine(
rc = shell_exec(p, zSql, &zErrMsg);
END_TIMER(p);
if( rc || zErrMsg ){
char zPrefix[100];
char zPrefix[2048
/* must be relatively large:
** https://sqlite.org/forum/forumpost/205f73db1b2806f5 */];
const char *zErrorTail;
const char *zErrorType;
if( zErrMsg==0 ){
@@ -13288,7 +13289,7 @@ int SQLITE_CDECL main(int argc, char **argv){
#ifndef SQLITE_SHELL_FIDDLE
sqlite3_appendvfs_init(0,0,0);
#ifdef SQLITE_DEBUG
sqlite3_auto_extension( (void (*)())auto_ext_leak_tester );
sqlite3_auto_extension( (void (*)(void))auto_ext_leak_tester );
#endif
#endif
modeDefault(&data);
+11 -13
View File
@@ -19,15 +19,8 @@
#include <stdarg.h>
#ifndef SQLITE_OMIT_FLOATING_POINT
#include <math.h>
/* Work around a bug in older Microsoft compilers
** Forum post 2026-04-10T06:33:11z */
#if !defined(INFINITY) && defined(_MSC_VER)
# define INFINITY HUGE_VAL
#endif
#endif /* SQLITE_OMIT_FLOATING_POINT */
/*
** Calls to sqlite3FaultSim() are used to simulate a failure during testing,
** or to bypass normal error detection during testing in order to let
@@ -465,15 +458,20 @@ u8 sqlite3StrIHash(const char *z){
return h;
}
#if !defined(SQLITE_DISABLE_INTRINSIC) \
&& (defined(__GNUC__) || defined(__clang__)) \
&& (defined(__x86_64__) || defined(__aarch64__) || \
(defined(__riscv) && defined(__riscv_xlen) && (__riscv_xlen>32)))
#define SQLITE_USE_UINT128
#endif
/*
** Two inputs are multiplied to get a 128-bit result. Write the
** lower 64-bits of the result into *pLo, and return the high-order
** 64 bits.
*/
static u64 sqlite3Multiply128(u64 a, u64 b, u64 *pLo){
#if (defined(__GNUC__) || defined(__clang__)) \
&& (defined(__x86_64__) || defined(__aarch64__) || defined(__riscv)) \
&& !defined(SQLITE_DISABLE_INTRINSIC)
#if defined(SQLITE_USE_UINT128)
__uint128_t r = (__uint128_t)a * b;
*pLo = (u64)r;
return (u64)(r>>64);
@@ -507,9 +505,7 @@ static u64 sqlite3Multiply128(u64 a, u64 b, u64 *pLo){
** The lower 64 bits of A*B are discarded.
*/
static u64 sqlite3Multiply160(u64 a, u32 aLo, u64 b, u32 *pLo){
#if (defined(__GNUC__) || defined(__clang__)) \
&& (defined(__x86_64__) || defined(__aarch64__) || defined(__riscv)) \
&& !defined(SQLITE_DISABLE_INTRINSIC)
#if defined(SQLITE_USE_UINT128)
__uint128_t r = (__uint128_t)a * b;
r += ((__uint128_t)aLo * b) >> 32;
*pLo = (r>>32)&0xffffffff;
@@ -547,6 +543,8 @@ static u64 sqlite3Multiply160(u64 a, u32 aLo, u64 b, u32 *pLo){
#endif
}
#undef SQLITE_USE_UINT128
/*
** Return a u64 with the N-th bit set.
*/
+7 -7
View File
@@ -5450,12 +5450,12 @@ static int vdbeIsMatchingIndexKey(
){
u8 *aRec = 0;
u32 nRec = 0;
Mem m;
Mem mem;
int rc = SQLITE_OK;
memset(&m, 0, sizeof(m));
m.enc = p->pKeyInfo->enc;
m.db = p->pKeyInfo->db;
memset(&mem, 0, sizeof(mem));
mem.enc = p->pKeyInfo->enc;
mem.db = p->pKeyInfo->db;
nRec = sqlite3BtreePayloadSize(pCur);
if( nRec>0x7fffffff ){
return SQLITE_CORRUPT_BKPT;
@@ -5497,9 +5497,9 @@ static int vdbeIsMatchingIndexKey(
if( (idxRec+nSerial)>nRec ){
rc = SQLITE_CORRUPT_BKPT;
}else{
sqlite3VdbeSerialGet(&aRec[idxRec], iSerial, &m);
if( vdbeSkipField(mask, ii, &p->aMem[ii], &m, bInt)==0 ){
res = sqlite3MemCompare(&m, &p->aMem[ii], p->pKeyInfo->aColl[ii]);
sqlite3VdbeSerialGet(&aRec[idxRec], iSerial, &mem);
if( vdbeSkipField(mask, ii, &p->aMem[ii], &mem, bInt)==0 ){
res = sqlite3MemCompare(&mem, &p->aMem[ii], p->pKeyInfo->aColl[ii]);
if( res!=0 ) break;
}
}
+5 -21
View File
@@ -7583,27 +7583,11 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
}
#endif /* SQLITE_DISABLE_SKIPAHEAD_DISTINCT */
}
if( pTabList->a[pLevel->iFrom].fg.fromExists
&& (i==pWInfo->nLevel-1
|| pTabList->a[pWInfo->a[i+1].iFrom].fg.fromExists==0)
){
/* This is an EXISTS-to-JOIN optimization which is either the
** inner-most loop, or the inner-most of a group of nested
** EXISTS-to-JOIN optimization loops. If this loop sees a successful
** row, it should break out of itself as well as other EXISTS-to-JOIN
** loops in which is is directly nested. */
int nOuter = 0; /* Nr of outer EXISTS that this one is nested within */
while( nOuter<i ){
if( !pTabList->a[pLevel[-nOuter-1].iFrom].fg.fromExists ) break;
nOuter++;
}
testcase( nOuter>0 );
sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel[-nOuter].addrBrk);
if( nOuter ){
VdbeComment((v, "EXISTS break %d..%d", i-nOuter, i));
}else{
VdbeComment((v, "EXISTS break %d", i));
}
if( pTabList->a[pLevel->iFrom].fg.fromExists ){
/* This is an EXISTS-to-JOIN optimization loop. If this loop sees a
** successful row, it should break out of itself. */
sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk);
VdbeComment((v, "EXISTS break %d", i));
}
sqlite3VdbeResolveLabel(v, pLevel->addrCont);
if( pLevel->op!=OP_Noop ){
+9 -2
View File
@@ -2297,7 +2297,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
** by this loop in the a[0] slot and all notReady tables in a[1..] slots.
** This becomes the SrcList in the recursive call to sqlite3WhereBegin().
*/
if( pWInfo->nLevel>1 ){
if( pWInfo->nLevel>1 || pTabItem->fg.fromExists ){
int nNotReady; /* The number of notReady tables */
SrcItem *origSrc; /* Original list of tables */
nNotReady = pWInfo->nLevel - iLevel - 1;
@@ -2310,6 +2310,13 @@ Bitmask sqlite3WhereCodeOneLoopStart(
for(k=1; k<=nNotReady; k++){
memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k]));
}
/* Clear the fromExists flag on the OR-optimized table entry so that
** the calls to sqlite3WhereEnd() do not code early-exits after the
** first row is visited. The early exit applies to this table's
** overall loop - including the multiple OR branches and any WHERE
** conditions not passed to the sub-loops - not to the sub-loops. */
pOrTab->a[0].fg.fromExists = 0;
}else{
pOrTab = pWInfo->pTabList;
}
@@ -2553,7 +2560,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
assert( pLevel->op==OP_Return );
pLevel->p2 = sqlite3VdbeCurrentAddr(v);
if( pWInfo->nLevel>1 ){ sqlite3DbFreeNN(db, pOrTab); }
if( pWInfo->pTabList!=pOrTab ){ sqlite3DbFreeNN(db, pOrTab); }
if( !untestedTerms ) disableTerm(pLevel, pTerm);
}else
#endif /* SQLITE_OMIT_OR_OPTIMIZATION */
+48
View File
@@ -243,5 +243,53 @@ do_execsql_test 11.2.3 {
do_execsql_test 11.2.2 {ALTER TABLE t2 ALTER b SET NOT NULL --new cons
;
}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 12.0 {
CREATE TABLE "Test" (
"IsActive" INTEGER,
CONSTRAINT "BooleanZeroOrOne" CHECK ("IsActive" IN (0, 1))
);
}
do_execsql_test 12.1 {
ALTER TABLE Test DROP CONSTRAINT BooleanZeroOrOne
}
do_execsql_test 12.2 {
SELECT sql FROM sqlite_schema
} {
{CREATE TABLE "Test" (
"IsActive" INTEGER)}
}
do_execsql_test 12.3 {
DROP TABLE Test;
CREATE TABLE "Test" (
"IsActive" INTEGER,
CONSTRAINT "BooleanZeroOrOne" CHECK ("IsActive" IN (0, 1))
);
}
do_execsql_test 12.4 {
ALTER TABLE Test DROP CONSTRAINT "BooleanZeroOrOne"
}
do_execsql_test 12.5 {
SELECT sql FROM sqlite_schema
} {
{CREATE TABLE "Test" (
"IsActive" INTEGER)}
}
do_execsql_test 12.6 {
CREATE TABLE t1(a, b CONSTRAINT "a""b" CHECK (b IS NOT NULL));
}
do_execsql_test 12.7 {
ALTER TABLE t1 DROP CONSTRAINT "a""b"
}
finish_test
-14
View File
@@ -1,14 +0,0 @@
#include "sqlite3.h"
#include <stdio.h>
int main(void) {
void *p = 0;
#ifdef SQLITE_OMIT_AUTOINIT
sqlite3_initialize();
#endif
p = sqlite3_malloc(32);
if( !p ) return 1;
sqlite3_free(p);
return 0;
}
-18
View File
@@ -1,18 +0,0 @@
#include "sqlite3.h"
#include <stdio.h>
int main(void) {
const char *zExpect = "2023.000";
char szBuffer[32];
double val = 2023.0;
#ifdef SQLITE_OMIT_AUTOINIT
sqlite3_initialize();
#endif
sqlite3_snprintf(17, szBuffer, "%.3f", val);
printf("size 17: '%s'\n", szBuffer);
if( sqlite3_stricmp(zExpect, szBuffer) ) return 1;
sqlite3_snprintf(16, szBuffer, "%.3f", val);
printf("size 16: '%s'\n", szBuffer);
if( sqlite3_stricmp(zExpect, szBuffer) ) return 1;
return 0;
}
+115
View File
@@ -476,6 +476,29 @@ catch { optimization_control db exists-to-join 0 }
db cache flush
do_execsql_test 9.6 $Q {{big string value}}
#-------------------------------------------------------------------------
# Forum post 2026-04-21T10:57:09Z
do_execsql_test 9.7.1 {
DROP TABLE t3;
CREATE TABLE t3(x INT, y INT);
CREATE TABLE t4(z INT);
INSERT INTO t3 VALUES (1,0),(2,2),(3,3);
INSERT INTO t4 VALUES (4),(5);
}
set Q {
SELECT x FROM t3
WHERE EXISTS(SELECT 1 FROM t4 WHERE z>y)
LIMIT 1 OFFSET 1
}
catch { optimization_control db all 1 }
db cache flush
do_execsql_test 9.7.2 $Q {2}
catch { optimization_control db exists-to-join 0 }
db cache flush
do_execsql_test 9.7.3 $Q {2}
catch { optimization_control db all 1 }
db cache flush
#-------------------------------------------------------------------------
reset_db
@@ -514,4 +537,96 @@ do_execsql_test 11.1 {
GROUP BY id;
} {1 p1}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 12.0 {
CREATE TABLE t2(id INT, data INT);
CREATE TABLE t3(amount INT);
INSERT INTO t2 VALUES (1,0),(2,0);
INSERT INTO t3 VALUES (1),(1);
}
do_execsql_test 12.1 {
SELECT * FROM t2
WHERE EXISTS (SELECT 1 FROM t3 WHERE t3.amount > t2.data)
} {
1 0
2 0
}
do_execsql_test 12.2 {
SELECT * FROM t2
WHERE EXISTS (SELECT 1 FROM t3 WHERE t3.amount > t2.data)
LIMIT 2 OFFSET 3
} {}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 13.0 {
CREATE TABLE t1(b,c);
CREATE TABLE t2(x,y);
CREATE TABLE t3(p,q);
INSERT INTO t1 VALUES(7,10);
INSERT INTO t2 VALUES(1,1), (4,7);
INSERT INTO t3 VALUES(4,7);
PRAGMA automatic_index = 0;
}
do_execsql_test 13.1 {
SELECT * FROM t1 WHERE EXISTS (
SELECT 1 FROM t2
WHERE EXISTS (
SELECT 1 FROM t3 WHERE t3.p=t2.x AND t3.q=t1.b
)
)
} {7 10}
#-------------------------------------------------------------------------
# Forum post https://sqlite.org/forum/forumpost/c8b205720c
#
reset_db
do_execsql_test 14.1.0 {
CREATE TABLE t(n INTEGER, parent INTEGER);
CREATE INDEX idx ON t(parent);
INSERT INTO t VALUES (1, NULL);
INSERT INTO t VALUES (10, NULL);
}
do_execsql_test 14.1.1 {
SELECT count(*) FROM t b
WHERE (b.parent IS NULL OR b.parent = 99)
AND 5 <= +b.n
} 1
do_execsql_test 14.1.2 {
SELECT 'match' WHERE EXISTS (
SELECT 1 FROM t b
WHERE (b.parent IS NULL OR b.parent = 99)
AND 5 <= +b.n
)
} {match}
do_execsql_test 14.2.1 {
CREATE TABLE t1(a, b);
INSERT INTO t1 VALUES(20, 20);
CREATE TABLE t2(c, d);
CREATE INDEX t2c ON t2(c);
CREATE INDEX t2d ON t2(d);
INSERT INTO t2 VALUES(20, -1);
INSERT INTO t2 VALUES(20, 0);
}
do_execsql_test 14.2.2 {
SELECT * FROM t1 WHERE EXISTS (
SELECT 1 FROM t2 WHERE (c=a OR d=a) AND (d+1)>0
)
} {20 20}
finish_test
+17 -1
View File
@@ -30,12 +30,19 @@ tvfs filter xWrite
tvfs script write_cb
set ::trigger_interrupt 0
set ::dbpointer ""
proc write_cb {method args} {
set filename [lindex $args 0]
if {[file tail $filename]=="test.db" && $::trigger_interrupt} {
if {$::trigger_interrupt} {
incr ::trigger_interrupt -1
if {$::trigger_interrupt==0} { sqlite3_interrupt db }
if {$::trigger_interrupt==0} {
if {$::dbpointer!=""} {
sqlite3_interrupt $::dbpointer
} else {
sqlite3_interrupt db
}
}
}
}
return 0
@@ -110,8 +117,17 @@ db_save_and_close
db_restore_and_reopen
do_test 3.1.1 {
set ::trigger_interrupt 10
# Set dbpointer here so that the write-callback can use the (sqlite3*)
# pointer with sqlite3_interrupt() directly instead of looking up the
# command. On at least some versions of Tcl9, looking up a command from
# within Tcl_DeleteCommand apparently returns a bad pointer.
#
set ::dbpointer [sqlite3_connection_pointer db]
db eval { SELECT * FROM sqlite_master }
db close
set ::dbpointer ""
set {} {}
} {}
do_test 3.1.2 {
+37
View File
@@ -280,4 +280,41 @@ do_test 900 {
} 1
dbempty close
#-------------------------------------------------------------------------
# Make sure a database cannot be overwritten by deserialize() if
# there is an open transaction on it.
#
do_execsql_test 1000 {
CREATE TABLE t(x);
INSERT INTO t VALUES(1),(2);
}
set blob [db serialize main]
do_test 1010 {
set seen 0
list [catch {
db eval {SELECT x FROM t} {
incr seen
if {$seen == 1} {
db deserialize main $blob
}
}
} msg] $msg
} {1 {unable to set MEMDB content}}
forcedelete test.db2
sqlite3 db2 test.db2
do_test 1020 {
set seen 0
sqlite3_backup B db2 main db main
B step 2
set res [list [catch {
db deserialize main $blob
} msg] $msg]
B finish
set res
} {1 {unable to set MEMDB content}}
finish_test
-4
View File
@@ -882,10 +882,6 @@ int main(int argc, char **argv){
int nChgset;
int bVerbose = 0;
#ifdef SQLITE_OMIT_AUTOINIT
sqlite3_initialize();
#endif
if( argc<2 ){
fprintf(stderr, "%s", zHelp);
exit(1);
+4 -91
View File
@@ -97,16 +97,15 @@ proc usage {} {
Usage:
$a0 ?SWITCHES? ?PERMUTATION? ?PATTERNS?
$a0 PERMUTATION FILE
$a0 clean
$a0 errors ?-v|--verbose? ?-s|--summary? ?PATTERN?
$a0 estwork
$a0 halt
$a0 help
$a0 joblist ?PATTERN?
$a0 njob ?NJOB?
$a0 retest
$a0 script ?-msvc? CONFIG
$a0 status ?-d SECS? ?--cls?
$a0 halt
$a0 estwork
where SWITCHES are:
--buildonly Build test exes but do not run tests
@@ -162,12 +161,6 @@ of the tests. Use the "-d N" option to have the status display clear the
screen and repeat every N seconds. The "njob" command may be used to query
or modify the number of sub-processes the test script uses to run tests.
The "halt" command modifies the database so that all tasks are marked
as complete. Testing will halt when all tests currently running complete.
The "clean" command removes files and directories created by a prior
invocation of testrunner.tcl.
The "script" command outputs the script used to build a configuration.
Add the "-msvc" option for a Windows-compatible script. For a list of
available configurations enter "$a0 script help".
@@ -467,32 +460,6 @@ if {([llength $argv]==2 || [llength $argv]==1)
}
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# Check if this is the "clean" command:
#
if {([llength $argv]==2 || [llength $argv]==1)
&& [string compare -nocase clean [lindex $argv 0]]==0
} {
set pattern {_(fuzzcheck|sessionfuzz|sqlite3|testfixture)}
foreach f [glob testrun_*] {
if {[file isdir $f] && [regexp $pattern $f]} {
file delete -force $f
}
}
foreach f [glob testdir*] {
if {[file isdir $f] && [regexp {^testdir[0-9]+$} $f]} {
file delete -force $f
}
}
foreach f [glob testrunner.db*] {
file delete -force $f
}
file delete -force testrunner.log
exit
}
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# Check if this is the "halt" command:
#
@@ -1210,7 +1177,7 @@ proc job_matches_any_pattern {patternlist jobcmd} {
#
# e.g
#
# {1 /home/user/sqlite/test/testrun_xyz All-Debug}
# {1 /home/user/sqlite/test/testrunner_bld_xyz All-Debug}
#
proc add_tcl_jobs {build config patternlist {shelldepid ""}} {
global TRG
@@ -1276,8 +1243,7 @@ proc add_build_job {buildname target {postcmd ""} {depid ""}} {
global TRG
set dirname "[string tolower [string map {- _} $buildname]]_$target"
regsub {\.exe$} $dirname {} dirname
set dirname "testrun_$dirname"
set dirname "testrunner_bld_$dirname"
set cmd "$TRG(makecmd) $target"
if {$postcmd!=""} {
@@ -1298,57 +1264,6 @@ proc add_build_job {buildname target {postcmd ""} {depid ""}} {
list $id [file normalize $dirname] $buildname
}
# Add jobs to build and run all the *.c files in $testdir/c/ for build
# configuration $buildname.
#
proc add_c_jobs {buildname} {
global TRG
set dir [file join $::testdir c]
# One job to build the sqlite3.o file for this configuration. Each
# individual "c" job will copy this sqlite3.o into its working directory
# so that it doesn't have to build it separately every time.
#
set obj sqlite3.o
if {$TRG(platform)=="win"} { set obj sqlite3.lo }
set B [add_build_job $buildname $obj]
foreach {bldid blddir dummy} $B {}
# One job for each C file.
#
foreach f [glob -nocomplain $dir/*.c] {
set prg [string range [file tail $f] 0 end-2]
set cmd ""
if {$TRG(platform)=="win"} {
foreach cp {sqlite3.lo *.h *.c} {
append cmd "copy [file nativename [file join $blddir $cp]] .\n"
}
append cmd "SET AUXTEST=$prg\n"
set prg "${prg}.exe"
append cmd "$TRG(makecmd) $prg\n"
append cmd ".\\$prg\n"
} else {
set cmd "set -e\n"
foreach cp {sqlite3.c sqlite3.h sqlite3.o .target_source src-verify} {
append cmd "cp [file join $blddir $cp] .\n"
}
append cmd "AUXTEST=$prg $TRG(makecmd) $prg\n"
append cmd "./$prg\n"
}
set id [add_job \
-displaytype tcl \
-displayname "$prg ($buildname)" \
-build $buildname \
-cmd $cmd \
-depid $bldid \
-priority 3
]
}
}
proc add_shell_build_job {buildname dirname depid} {
global TRG
@@ -1596,8 +1511,6 @@ proc add_jobs_from_cmdline {patternlist} {
UPDATE jobs SET depid=$sbldid WHERE depid='SHELL'
}
}
add_c_jobs $b
}
}
-1
View File
@@ -143,7 +143,6 @@ namespace eval trd {
-DSQLITE_ENABLE_UNLOCK_NOTIFY
-DSQLITE_THREADSAFE
-DSQLITE_TCL_DEFAULT_FULLMUTEX=1
-DSQLITE_OMIT_AUTOINIT=1
}
set build(Secure-Delete) {
-O2
+10
View File
@@ -787,4 +787,14 @@ do_eqp_test update-21.12 {
`--SEARCH t3 USING AUTOMATIC COVERING INDEX (x=?)
}
# /forumpost/2026-04-21T19:10:55Z
do_execsql_test update-22.0 {
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(x INT, y INT);
INSERT INTO t1(x) VALUES(1),(2),(3),(4),(5);
UPDATE t1 SET x=x+100, y=x<=(SELECT min(x) FROM t1)
WHERE x<3 OR (1 BETWEEN 0 AND x<=(SELECT min(x)+2 FROM t1));
SELECT x FROM t1 WHERE x<100 ORDER BY x;
} {4 5}
finish_test
+10 -5
View File
@@ -17,7 +17,8 @@ Options:
--uninstall Uninstall the extension
--version-check Check extension version against this source tree
--destdir DIR Installation root (used by "make install DESTDIR=...")
--tclConfig.sh FILE Use this tclConfig.sh instead of looking for one
--tclConfig.sh FILE Use this tclConfig.sh instead of looking for one
--extlibs LDFLAGS required for external libs, e.g. ICU.
Other options are retained and passed through into the compiler.}
@@ -29,8 +30,9 @@ set infoonly 0
set versioncheck 0
set CC {}
set OPTS {}
set DESTDIR ""; # --destdir "$(DESTDIR)"
set DESTDIR "" ; # --destdir "$(DESTDIR)"
set tclConfigSh ""; # --tclConfig.sh FILE
set LIBS {} ; # --extlibs "-lx -ly ..."
for {set ii 0} {$ii<[llength $argv]} {incr ii} {
set a0 [lindex $argv $ii]
if {$a0=="--install-only"} {
@@ -61,6 +63,9 @@ for {set ii 0} {$ii<[llength $argv]} {incr ii} {
} elseif {$a0=="--tclConfig.sh" && $ii+1<[llength $argv]} {
incr ii
set tclConfigSh [lindex $argv $ii]
} elseif {$a0=="--extlibs" && $ii+1<[llength $argv]} {
incr ii
lappend LIBS [lindex $argv $ii]
} elseif {[string match -* $a0]} {
append OPTS " $a0"
} else {
@@ -152,8 +157,8 @@ if {$tcl_platform(platform) eq "windows"} {
}
set CFLAGS -fPIC
regexp {TCL_SHLIB_CFLAGS='([^']+)'} $tclConfig all CFLAGS
set LIBS {}
regexp {TCL_STUB_LIB_SPEC='([^']+)'} $tclConfig all LIBS
regexp {TCL_STUB_LIB_SPEC='([^']+)'} $tclConfig all LIBSTUB
lappend LIBS $LIBSTUB
set INC "-I$srcdir/src"
set inc {}
regexp {TCL_INCLUDE_SPEC='([^']+)'} $tclConfig all inc
@@ -312,7 +317,7 @@ package ifneeded sqlite3 $VERSION \\
# Generate and execute the command with which to do the compilation.
#
set cmd "$CMD -DUSE_TCL_STUBS tclsqlite3.c -o $OUT $LIBS"
set cmd "$CMD -DUSE_TCL_STUBS tclsqlite3.c -o $OUT [join $LIBS { }]"
puts $cmd
file delete -force $OUT
catch {exec {*}$cmd} errmsg