Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a89d43e5db | |||
| 646931b83e | |||
| 9be4c57ca1 | |||
| d7e055d41c | |||
| 97467fa8fa | |||
| fb41f57de4 | |||
| 190034d268 | |||
| ae3c30e318 |
@@ -811,10 +811,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
xOpen: function(pProtoVfs,zName,pProtoFile,flags,pOutFlags){
|
||||
cache.popError();
|
||||
let zToFree /* alloc()'d memory for temp db name */;
|
||||
if( 0 ){
|
||||
/* tester1.js makes it a lot further if we do this. */
|
||||
flags |= capi.SQLITE_OPEN_CREATE;
|
||||
}
|
||||
try{
|
||||
if( !zName ){
|
||||
zToFree = wasm.allocCString(""+pProtoFile+"."
|
||||
|
||||
@@ -3064,10 +3064,10 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
||||
const JDb = sqlite3.oo1.JsStorageDb;
|
||||
const pVfs = capi.sqlite3_vfs_find('kvvfs');
|
||||
T.assert(looksLikePtr(pVfs));
|
||||
let x = sqlite3.kvvfs.internal.storageForZClass('session');
|
||||
T.assert( 0 === x.files.length )
|
||||
.assert( globalThis.sessionStorage===x.storage )
|
||||
.assert( 'kvvfs-session-' === x.keyPrefix );
|
||||
const pStorage = sqlite3.kvvfs.internal.storageForZClass('session');
|
||||
T.assert( 0 === pStorage.files.length )
|
||||
.assert( globalThis.sessionStorage===pStorage.storage )
|
||||
.assert( 'kvvfs-session-' === pStorage.keyPrefix );
|
||||
const filename = this.kvvfsDbFile = 'session';
|
||||
const unlink = this.kvvfsUnlink = ()=>sqlite3.kvvfs.clear(filename);
|
||||
unlink();
|
||||
@@ -3085,9 +3085,30 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
||||
db.exec('insert into kvvfs(a) values(4),(5),(6)');
|
||||
T.assert(6 === db.selectValue('select count(*) from kvvfs'));
|
||||
}finally{
|
||||
if( db ) db.close();
|
||||
if( db ){
|
||||
db.close();
|
||||
db = null;
|
||||
}
|
||||
}
|
||||
//console.debug("sessionStorage",globalThis.sessionStorage);
|
||||
const corruptJrnl = [
|
||||
/* Test that it recovers properly from a bad journal:
|
||||
https://sqlite.org/bugs/forumpost/20e208fe172cae4f */
|
||||
pStorage.keyPrefix+'jrnl',
|
||||
'cb d9d505f920a163d7ffffffffdeadbeef000000010000020000001000'
|
||||
];
|
||||
sessionStorage.setItem(...corruptJrnl);
|
||||
//console.debug("sessionStorage",globalThis.sessionStorage);
|
||||
T.assert( corruptJrnl[1] === sessionStorage.getItem(corruptJrnl[0]) );
|
||||
try{
|
||||
db = new JDb(filename);
|
||||
T.assert(6 === db.selectValue('select count(*) from kvvfs'));
|
||||
db.exec('insert into kvvfs(a) values(7),(8),(9)');
|
||||
T.assert(9 === db.selectValue('select count(*) from kvvfs'));
|
||||
T.assert( corruptJrnl[1] !== sessionStorage.getItem(corruptJrnl[0]) );
|
||||
}finally{
|
||||
if( db ) db.close();
|
||||
}
|
||||
}
|
||||
}/*kvvfs sanity checks*/)
|
||||
.t({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
C Use\sSQLITE_FINISH\sin\sa\sfew\splaces\sin\sthe\score,\sto\shelp\sensure\sthat\spath\sis\nwell\stested.
|
||||
D 2026-06-19T22:57:44.085
|
||||
C Correct\stest\sfrom\s[96a48a15760a]\s-\sthat\sjournal\swas\sindeed\scorrupt,\sbut\snot\sin\sthe\sintended\smanner.\sAdd\sa\sverification\sthat\sthe\sbad\sjournal\sgets\sreplaced\safter\sa\swrite.
|
||||
D 2026-06-21T11:38:05.728
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -601,7 +601,7 @@ F ext/wasm/api/sqlite3-api-worker1.c-pp.js 1fa34e9b0e3b90a8898e4f700d7125e44c818
|
||||
F ext/wasm/api/sqlite3-license-version-header.js 98d90255a12d02214db634e041c8e7f2f133d9361a8ebf000ba9c9af4c6761cc
|
||||
F ext/wasm/api/sqlite3-opfs-async-proxy.c-pp.js 25e31482b04293a33d7599f1459eb552b3eb36ca10c02c816122d3308bf80cb2
|
||||
F ext/wasm/api/sqlite3-vfs-helper.c-pp.js 3f828cc66758acb40e9c5b4dcfd87fd478a14c8fb7f0630264e6c7fa0e57515d
|
||||
F ext/wasm/api/sqlite3-vfs-kvvfs.c-pp.js 27fb135ba3b805b66c90a7333b56080345bf1db79335c3e48b6d01ad7aa09607
|
||||
F ext/wasm/api/sqlite3-vfs-kvvfs.c-pp.js 96f79583dc12f836eadf3c6430a0beaed859306b67e8fd7b0fada8d22cc2393f
|
||||
F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js 4325cb9a5ebfbff7cd3060e309b167116a2a1bcb9f8d69dd8e6d023dbdd783bb
|
||||
F ext/wasm/api/sqlite3-vfs-opfs-wl.c-pp.js 3dbd918ef037cd8fa9c7b4dccb3c8637b228638654c429e7df6acab5981c75e2
|
||||
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 3da8fe72dc9e76614a9c102b92e777ce03f81d788b607701c828d8fcbac44b06
|
||||
@@ -649,7 +649,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 38beb509f2136851760db79becd41a1ec0abcaaec01de27749b0fafcb0372e54
|
||||
F ext/wasm/tester1.c-pp.js 273f98ed9423c428e582e741b8097567fb6581c34f3c22427d7e02d400aa5743
|
||||
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
|
||||
@@ -670,7 +670,7 @@ F mptest/multiwrite01.test dab5c5f8f9534971efce679152c5146da265222d
|
||||
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
||||
F sqlite3.1 1b9c24374a85dfc7eb8fa7c4266ee0db4f9609cceecfc5481cd8307e5af04366
|
||||
F sqlite3.pc.in e6dee284fba59ef500092fdc1843df3be8433323a3733c91da96690a50a5b398
|
||||
F src/alter.c ff7f795c602751a574488780cfa1259f24cccbf32ddf2205b6283c0e6998ae50
|
||||
F src/alter.c da59ac700b52ba5d0e4dd099fb1818975cf8a79a546594da586b4e1eba3ae405
|
||||
F src/analyze.c 73162482c656187823217f4c00758c9ee13a420c8745bc542129e0279b792287
|
||||
F src/attach.c c58278c7d2d954785591c4fde81669ec3e4d52f348c453b028a19ae8adf4f338
|
||||
F src/auth.c b5ece4e1edccad082c0332fa0087df225473bae0feea9269f824312201377185
|
||||
@@ -720,7 +720,7 @@ F src/notify.c 57c2d1a2805d6dee32acd5d250d928ab94e02d76369ae057dee7d445fd64e878
|
||||
F src/os.c 9566966dd14376099fe8f715e744ab4fef204f55bd89126c5ddd06eb37df9457
|
||||
F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63
|
||||
F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e06
|
||||
F src/os_kv.c b9df749ad64c498e8d398d83bb085cfc0ef381b2c103be6c63ac22fc4f2cf680
|
||||
F src/os_kv.c 26ccc36ea963d328682fa685a106d7404617a2284ecdc7a35fb38d0c9242f440
|
||||
F src/os_setup.h 8efc64eda6a6c2f221387eefc2e7e45fd5a3d5c8337a7a83519ba4fbd2957ae2
|
||||
F src/os_unix.c 83759942d1ea8d59daed50901c123016f845fada74caf3496b8a2537c9a08838
|
||||
F src/os_win.c 68b1c31693a5aeeb8126f618c95f7b53fb39e254836f9a95fbf2733461a7e01d
|
||||
@@ -822,7 +822,7 @@ F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
|
||||
F src/where.c 33e4a6558ee69f33d6a4e7069e3a40a55959d14e5653a9a83926e70305d471f3
|
||||
F src/whereInt.h 8d94cb116c9e06205c3d5ac87af065fc044f8cf08bfdccd94b6ea1c1308e65da
|
||||
F src/wherecode.c bc39ccbe3648f01157038b16cc55bdbff128590972b7185521b5526dc2815765
|
||||
F src/whereexpr.c 906d30c21470bbafc31bbc2cd07a0753bdd57169caed6ba75b8b4fc0ecb24134
|
||||
F src/whereexpr.c 00e778c829a6ac6bf2bb8899cd1e39ccc48670d665b5891e99632180a2768a15
|
||||
F src/window.c 0d7dacdf2e84c6ee8ff498d5cc881dd245fcb2f14f6c5976e97e112ce96e90dc
|
||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||
F test/affinity2.test 4d7a34d328e58ca2a2d78fd76c27614a41ca7ddf4312ded9c68c04f430b3b47d
|
||||
@@ -2036,7 +2036,7 @@ F test/walslow.test 0c51843836c9dcf40a5ac05aa781bfb977b396ee2c872d92bd48b79d5dd9
|
||||
F test/walthread.test d562f51a61191ccfab64940df7aa1cef87c902fa5ab742590ef7f859dfe6a44b
|
||||
F test/walvfs.test e1a6ad0f3c78e98b55c3d5f0889cf366cc0d0a1cb2bccb44ac9ec67384adc4a1
|
||||
F test/where.test 5087c72d26fd075a1644c8512be9fe18de9bf2d2b0754f7fd9b74a1c6540c4fc
|
||||
F test/where2.test 5d93a8aec78386539aa01cf72926eb39d90de4ce1bfb6d517f56ae9bf704ba8a
|
||||
F test/where2.test 3096dc7dc70dba52d974341f4a024e468c9ea3c1aa202a2e414a5413c0c5655c
|
||||
F test/where3.test 4ccb156ae33de86414a52775a6f590a9d60ba2cbc7a93a24fa331b7bcf5b6030
|
||||
F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8
|
||||
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
|
||||
@@ -2208,8 +2208,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
|
||||
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
|
||||
P 2fe53e6d68c3f9f1c4b064fa40fe8efe12025179a973182f0bb256acb9b5d58d
|
||||
R 3de030f0b5267bf636ad519cf6229737
|
||||
U drh
|
||||
Z e6a5bf5d9c5bcab97848f385d89977e5
|
||||
P bd6bbd0e84226c90d864c28ac4d6acd908c4f06bfe63dcfd6fa6b8d17105b338
|
||||
R 2de10755edf1cb1f73f8df94023358e4
|
||||
U stephan
|
||||
Z ab5ef0b4ce9e85fe36d53f715231baac
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
branch sqlite3-result-str
|
||||
tag sqlite3-result-str
|
||||
branch trunk
|
||||
tag trunk
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
7356bf3a813bcd9082a7fdef5e2cc38c7a0f142f0ef4c948f78e4dafa216c039
|
||||
c9171221160f241b450d425f41bb53b42362dccfad4c3fdf64dd5c3562ed4096
|
||||
|
||||
+1
-1
@@ -2683,7 +2683,7 @@ static void addConstraintFunc(
|
||||
iOff += getWhitespace(&zSql[iOff]);
|
||||
|
||||
pNew = sqlite3_str_new(sqlite3_context_db_handle(ctx));
|
||||
sqlite3_str_append(pNew, zSql, iOff);
|
||||
sqlite3_str_append(pNew, (const char*)zSql, iOff);
|
||||
if( iCol<0 ) sqlite3_str_append(pNew, ",", 1);
|
||||
sqlite3_str_appendf(pNew, " %s%s", zCons, &zSql[iOff]);
|
||||
sqlite3_result_str(ctx, pNew, SQLITE_FINISH);
|
||||
|
||||
+6
-6
@@ -468,16 +468,17 @@ int kvvfsDecode(const char *a, char *aOut, int nOut){
|
||||
while( 1 ){
|
||||
c = kvvfsHexValue[aIn[i]];
|
||||
if( c<0 ){
|
||||
int n = 0;
|
||||
int mult = 1;
|
||||
sqlite3_int64 n = 0;
|
||||
sqlite3_int64 mult = 1;
|
||||
c = aIn[i];
|
||||
if( c==0 ) break;
|
||||
while( c>='a' && c<='z' ){
|
||||
n += (c - 'a')*mult;
|
||||
if( n>nOut ) return -1 /* oversized/malformed input */;
|
||||
mult *= 26;
|
||||
c = aIn[++i];
|
||||
}
|
||||
if( j+n>nOut ) return -1;
|
||||
if( j+n>nOut ) return -1 /* oversized/malformed input */;
|
||||
memset(&aOut[j], 0, n);
|
||||
j += n;
|
||||
if( c==0 || mult==1 ) break; /* progress stalled if mult==1 */
|
||||
@@ -515,7 +516,7 @@ static void kvvfsDecodeJournal(
|
||||
i = 0;
|
||||
mult = 1;
|
||||
while( (c = zTxt[i++])>='a' && c<='z' ){
|
||||
n += (zTxt[i] - 'a')*mult;
|
||||
n += (c - 'a')*mult;
|
||||
mult *= 26;
|
||||
}
|
||||
sqlite3_free(pFile->aJrnl);
|
||||
@@ -561,9 +562,7 @@ static int kvvfsClose(sqlite3_file *pProtoFile){
|
||||
pFile->isJournal ? "journal" : "db"));
|
||||
sqlite3_free(pFile->aJrnl);
|
||||
sqlite3_free(pFile->aData);
|
||||
#ifdef SQLITE_WASM
|
||||
memset(pFile, 0, sizeof(*pFile));
|
||||
#endif
|
||||
return SQLITE_OK;
|
||||
}
|
||||
|
||||
@@ -593,6 +592,7 @@ static int kvvfsReadJrnl(
|
||||
aTxt, szTxt+1);
|
||||
if( rc>=0 ){
|
||||
kvvfsDecodeJournal(pFile, aTxt, szTxt);
|
||||
rc = 0;
|
||||
}
|
||||
sqlite3_free(aTxt);
|
||||
if( rc ) return rc;
|
||||
|
||||
+3
-1
@@ -938,7 +938,9 @@ static void exprAnalyzeOrTerm(
|
||||
pLeft = pThis->pLeft;
|
||||
pCollSeq = sqlite3ExprCompareCollSeq(pParse, pThis);
|
||||
}else{
|
||||
assert( 0==sqlite3ExprCompare(pParse, pThis->pLeft, pLeft, -1) );
|
||||
assert( 0==sqlite3ExprCompare(pParse,
|
||||
sqlite3ExprSkipCollate(pThis->pLeft),
|
||||
sqlite3ExprSkipCollate(pLeft), -1) );
|
||||
if( pCollSeq!=sqlite3ExprCompareCollSeq(pParse, pThis) ){
|
||||
pLeft = 0; /* Collating sequence mismatch */
|
||||
break;
|
||||
|
||||
@@ -510,6 +510,26 @@ do_execsql_test where2-6.16.4 {
|
||||
SELECT c FROM t616a, t616b WHERE a=c OR c=b;
|
||||
} {aaa bbb}
|
||||
|
||||
# Assertion faults added by check-in 2026-06-17T13:31:01.199Z and
|
||||
# subsequently discovered by dbsqlfuzz.
|
||||
#
|
||||
do_execsql_test where2-6.17.1 {
|
||||
CREATE TABLE t617_a(a INTEGER PRIMARY KEY, b TEXT);
|
||||
CREATE TABLE t617_b(c INTEGER PRIMARY KEY, d TEXT);
|
||||
CREATE VIEW t617 AS SELECT a, b FROM t617_a UNION ALL SELECT c, c FROM t617_b;
|
||||
}
|
||||
do_execsql_test where2-6.17.2 {
|
||||
SELECT EXISTS(
|
||||
SELECT 1
|
||||
FROM (SELECT 1 FROM t617 WHERE a='two' OR b='i')
|
||||
WHERE a='ex' OR b='iv'
|
||||
) FROM t617;
|
||||
} {}
|
||||
do_execsql_test where2-6.17.3 {
|
||||
SELECT * FROM t617 JOIN t617 USING(a,a,b) WHERE (b=0) OR a=10;
|
||||
} {}
|
||||
|
||||
|
||||
# Variations on the order of terms in a WHERE clause in order
|
||||
# to make sure the OR optimizer can recognize them all.
|
||||
do_test where2-6.20 {
|
||||
|
||||
Reference in New Issue
Block a user