From 7d24ff29713e86730ffab173637fa022f24afca2 Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 3 Nov 2022 22:51:20 +0000 Subject: [PATCH 01/44] Add experimental esm target to ext/wasm/GNUmakefile to tell emcc to generate sqlite3.mjs (ES6 module) instead of sqlite3.js. Related to discussion at [forum:ed4596cf8496a39b]. FossilOrigin-Name: e55d8eba83012492d85418dc0faedce5896027ecc70295a5ca1826f61a5edbaf --- ext/wasm/GNUmakefile | 17 +++++++++++++++-- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/ext/wasm/GNUmakefile b/ext/wasm/GNUmakefile index 993c668697..039dff410f 100644 --- a/ext/wasm/GNUmakefile +++ b/ext/wasm/GNUmakefile @@ -96,7 +96,7 @@ dir.dout := $(dir.wasm)/jswasm # dir.tmp = output dir for intermediary build files, as opposed to # end-user deliverables. dir.tmp := $(dir.wasm)/bld -#CLEAN_FILES += $(wildcard $(dir.dout)/*) $(wildcard $(dir.tmp)/*) +CLEAN_FILES += $(dir.tmp)/* $(dir.dout)/* ifeq (,$(wildcard $(dir.dout))) dir._tmp := $(shell mkdir -p $(dir.dout)) endif @@ -418,7 +418,20 @@ emcc.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT) # debugging info, _huge_. ######################################################################## -sqlite3.js := $(dir.dout)/sqlite3.js +######################################################################## +# AN EXPERIMENT: undocumented Emscripten feature: if the target file +# extension is "mjs", it defaults to ES6 module builds: +# https://github.com/emscripten-core/emscripten/issues/14383 +ifeq (,$(filter esm,$(MAKECMDGOALS))) +sqlite3.js.ext := js +else +esm.deps := $(filter-out esm,$(MAKECMDGOALS)) +esm: $(if $(esm.deps),$(esm.deps),all) +sqlite3.js.ext := mjs +endif +# /esm +######################################################################## +sqlite3.js := $(dir.dout)/sqlite3.$(sqlite3.js.ext) sqlite3.wasm := $(dir.dout)/sqlite3.wasm sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c # sqlite3-wasm.o vs sqlite3-wasm.c: building against the latter diff --git a/manifest b/manifest index 3942c53535..a64c5bbc8d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Globally\sreplace\s''\swith\s""\sfor\sempty\sJS\sstrings\sto\splease\sC\spreprocessor. -D 2022-11-03T21:21:10.223 +C Add\sexperimental\sesm\starget\sto\sext/wasm/GNUmakefile\sto\stell\semcc\sto\sgenerate\ssqlite3.mjs\s(ES6\smodule)\sinstead\sof\ssqlite3.js.\sRelated\sto\sdiscussion\sat\s[forum:ed4596cf8496a39b]. +D 2022-11-03T22:51:20.329 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -487,7 +487,7 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04 F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c -F ext/wasm/GNUmakefile 78b64d110e66e18709c11437a74c29bc7855d85a713217db99127c7f304a332f +F ext/wasm/GNUmakefile 3aa8c160705ab9d9d4d552a1f4e630925a65a27df216befe2e9a956904434c1d F ext/wasm/README-dist.txt 2d670b426fc7c613b90a7d2f2b05b433088fe65181abead970980f0a4a75ea20 F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9 F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 9120c2f8f51fa85f46dcf4dcb6b12f4a807d428f6089b99cdb08d8ddfcfd88b2 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 70ee6ee014bc4e2c1daa9b4a8909cf76ccecf32de1eb39055f20d3d0b1daa1bd -R eaaf8a7ca25305cffe9e8f7e734e3ee8 +P e92e1f42bef94a1df29f66b4111ebfde93eba3759bc5d5a9c95f714508851346 +R 4cda7dd2938aaeec0aa59e31a649b872 U stephan -Z b98d96f31e9b735c045c03e6eefd13f8 +Z a58e3ce7633c7dbf732eedcffb48463a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8348da8467..9dbf0c1a1d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e92e1f42bef94a1df29f66b4111ebfde93eba3759bc5d5a9c95f714508851346 \ No newline at end of file +e55d8eba83012492d85418dc0faedce5896027ecc70295a5ca1826f61a5edbaf \ No newline at end of file From c75445087f1d18a61899e5ca0f36bafc6e35b572 Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 4 Nov 2022 09:02:21 +0000 Subject: [PATCH 02/44] Correct sqlite3-wasm.c's SQLITE_DEFAULT_CACHE_SIZE (it's measured in kb, not bytes). FossilOrigin-Name: 479ad980dfe509403e184e39a5aa441171e47b3297e05039f85516e72e9f15be --- ext/wasm/api/sqlite3-wasm.c | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/wasm/api/sqlite3-wasm.c b/ext/wasm/api/sqlite3-wasm.c index 203e70a3e6..9d04ad1291 100644 --- a/ext/wasm/api/sqlite3-wasm.c +++ b/ext/wasm/api/sqlite3-wasm.c @@ -67,7 +67,7 @@ ** larger cache benefits the larger workloads. Speed differences ** between 2x and nearly 3x have been measured with ample page cache. */ -# define SQLITE_DEFAULT_CACHE_SIZE -16777216 +# define SQLITE_DEFAULT_CACHE_SIZE -16384 #endif #if 0 && !defined(SQLITE_DEFAULT_PAGE_SIZE) /* TODO: experiment with this. */ diff --git a/manifest b/manifest index a64c5bbc8d..722381d98d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sexperimental\sesm\starget\sto\sext/wasm/GNUmakefile\sto\stell\semcc\sto\sgenerate\ssqlite3.mjs\s(ES6\smodule)\sinstead\sof\ssqlite3.js.\sRelated\sto\sdiscussion\sat\s[forum:ed4596cf8496a39b]. -D 2022-11-03T22:51:20.329 +C Correct\ssqlite3-wasm.c's\sSQLITE_DEFAULT_CACHE_SIZE\s(it's\smeasured\sin\skb,\snot\sbytes). +D 2022-11-04T09:02:21.697 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -507,7 +507,7 @@ F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1 F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3 F ext/wasm/api/sqlite3-opfs-async-proxy.js ab7d2888ad9b3dd24bb782bd882fcada2a20cb88eb78c8f36e7bfe708857dbd1 F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9 -F ext/wasm/api/sqlite3-wasm.c af472ec27bc7a398a2b94329cb7a77f3411109fc17529a289fa10cc55424ece1 +F ext/wasm/api/sqlite3-wasm.c 778409e00fb25a4d6989be17fc856c84460198fd3b05ba2ef8289e60c50157ca F ext/wasm/api/sqlite3-worker1-promiser.js 0c7a9826dbf82a5ed4e4f7bf7816e825a52aff253afbf3350431f5773faf0e4b F ext/wasm/api/sqlite3-worker1.js 1e54ea3d540161bcfb2100368a2fc0cad871a207b8336afee1c445715851ec54 F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e92e1f42bef94a1df29f66b4111ebfde93eba3759bc5d5a9c95f714508851346 -R 4cda7dd2938aaeec0aa59e31a649b872 +P e55d8eba83012492d85418dc0faedce5896027ecc70295a5ca1826f61a5edbaf +R ed499c9cb026bf1534e3c8df6cd8d101 U stephan -Z a58e3ce7633c7dbf732eedcffb48463a +Z 6c99d342f72317b3aef3c23e350c462b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9dbf0c1a1d..5db0742a44 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e55d8eba83012492d85418dc0faedce5896027ecc70295a5ca1826f61a5edbaf \ No newline at end of file +479ad980dfe509403e184e39a5aa441171e47b3297e05039f85516e72e9f15be \ No newline at end of file From 093677add459cac0f472a64d22af0b547562b074 Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 4 Nov 2022 11:54:42 +0000 Subject: [PATCH 03/44] Enhance the ability of the OP_Found and similar opcodes to detect truncated index records and report SQLITE_CORRUPT. dbsqlfuzz 2b12f90aeff8e081706c7e9b58834f04869f446c. Test cases in TH3. FossilOrigin-Name: 059a09da2c5fd9c7e723c713565fbaf71602079feef0704129cc5cbbd0033936 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/vdbeaux.c | 9 +++++++-- test/corruptL.test | 7 +------ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index 722381d98d..98392fbb49 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Correct\ssqlite3-wasm.c's\sSQLITE_DEFAULT_CACHE_SIZE\s(it's\smeasured\sin\skb,\snot\sbytes). -D 2022-11-04T09:02:21.697 +C Enhance\sthe\sability\sof\sthe\sOP_Found\sand\ssimilar\sopcodes\sto\sdetect\struncated\nindex\srecords\sand\sreport\sSQLITE_CORRUPT.\ndbsqlfuzz\s2b12f90aeff8e081706c7e9b58834f04869f446c.\s\sTest\scases\sin\sTH3. +D 2022-11-04T11:54:42.284 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -712,7 +712,7 @@ F src/vdbe.c 0c7cb1b934ad8611e14e7efaf2c3a95df7dd3f7964d63ea07fef42a23df86131 F src/vdbe.h 58675f47dcf3105bab182c3ad3726efd60ffd003e954386904ac9107d0d2b743 F src/vdbeInt.h 17b7461ffcf9ee760d1341731715a419f6b8c763089a7ece25c2e8098d702b3f F src/vdbeapi.c 1e8713d0b653acb43cd1bdf579c40e005c4844ea90f414f065946a83db3c27fb -F src/vdbeaux.c 6d0a75c1fbc7efea6924f6895ebceca664001464bc7ac56949d3c60aa5e498a0 +F src/vdbeaux.c 87684b89877eae0c58c78b340bb5356aa1c8fb1dd650b29410c8b745aeeb20b5 F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd F src/vdbemem.c 6cfed43758d57b6e3b99d9cdedfeccd86e45a07e427b22d8487cbdbebb6c522a F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35 @@ -901,7 +901,7 @@ F test/corruptH.test 79801d97ec5c2f9f3c87739aa1ec2eb786f96454 F test/corruptI.test a17bbf54fdde78d43cf3cc34b0057719fd4a173a3d824285b67dc5257c064c7b F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4 F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01aa32af -F test/corruptL.test ecce40d7b9b909a670a42a45d86e30d927735d7e7f09041af438b19529d35532 +F test/corruptL.test 7fcb0686fb7ca6e758753fcae7edf5b7f8904f7f81e9c218c9dab01c67331029 F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067 F test/corruptN.test 7c099d153a554001b4fb829c799b01f2ea6276cbc32479131e0db0da4efd9cc4 F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e55d8eba83012492d85418dc0faedce5896027ecc70295a5ca1826f61a5edbaf -R ed499c9cb026bf1534e3c8df6cd8d101 -U stephan -Z 6c99d342f72317b3aef3c23e350c462b +P 479ad980dfe509403e184e39a5aa441171e47b3297e05039f85516e72e9f15be +R ea5a2ea0615ceff4124a8a06806293de +U drh +Z 42163979e271d3b2ca0257f8b39abb54 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5db0742a44..81d7094062 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -479ad980dfe509403e184e39a5aa441171e47b3297e05039f85516e72e9f15be \ No newline at end of file +059a09da2c5fd9c7e723c713565fbaf71602079feef0704129cc5cbbd0033936 \ No newline at end of file diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 131740ac6c..2e5e769d74 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -4575,7 +4575,7 @@ int sqlite3VdbeRecordCompareWithSkip( assert( pPKey2->pKeyInfo->aSortFlags!=0 ); assert( pPKey2->pKeyInfo->nKeyField>0 ); assert( idx1<=szHdr1 || CORRUPT_DB ); - do{ + while( 1 /*exit-by-break*/ ){ u32 serial_type; /* RHS is an integer */ @@ -4713,8 +4713,13 @@ int sqlite3VdbeRecordCompareWithSkip( if( i==pPKey2->nField ) break; pRhs++; d1 += sqlite3VdbeSerialTypeLen(serial_type); + if( d1>(unsigned)nKey1 ) break; idx1 += sqlite3VarintLen(serial_type); - }while( idx1<(unsigned)szHdr1 && d1<=(unsigned)nKey1 ); + if( idx1>=(unsigned)szHdr1 ){ + pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; + return 0; /* Corrupt index */ + } + } /* No memory allocation is ever used on mem1. Prove this using ** the following assert(). If the assert() fails, it indicates a diff --git a/test/corruptL.test b/test/corruptL.test index 7361a0b35e..98b7de31e2 100644 --- a/test/corruptL.test +++ b/test/corruptL.test @@ -1479,13 +1479,8 @@ do_test 19.0 { do_execsql_test 19.1 { PRAGMA writable_schema=ON; } - -set err "UNIQUE constraint failed: index 'a'" -ifcapable oversize_cell_check { - set err "database disk image is malformed" -} do_catchsql_test 19.2 { UPDATE t1 SET a=1; -} [list 1 $err] +} {1 {database disk image is malformed}} finish_test From 4868a8651378350785948d0fc0849d5bdb3f1fab Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 4 Nov 2022 11:59:40 +0000 Subject: [PATCH 04/44] Add another test case for the OP_Found fix. FossilOrigin-Name: 6cdd64a445fe16d547d7bf5ea26dad3ab6d9d5f7d1c2b49fdc9d7a2edaa031c6 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/corruptL.test | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 98392fbb49..bdb8d750d5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sthe\sability\sof\sthe\sOP_Found\sand\ssimilar\sopcodes\sto\sdetect\struncated\nindex\srecords\sand\sreport\sSQLITE_CORRUPT.\ndbsqlfuzz\s2b12f90aeff8e081706c7e9b58834f04869f446c.\s\sTest\scases\sin\sTH3. -D 2022-11-04T11:54:42.284 +C Add\sanother\stest\scase\sfor\sthe\sOP_Found\sfix. +D 2022-11-04T11:59:40.243 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -901,7 +901,7 @@ F test/corruptH.test 79801d97ec5c2f9f3c87739aa1ec2eb786f96454 F test/corruptI.test a17bbf54fdde78d43cf3cc34b0057719fd4a173a3d824285b67dc5257c064c7b F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4 F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01aa32af -F test/corruptL.test 7fcb0686fb7ca6e758753fcae7edf5b7f8904f7f81e9c218c9dab01c67331029 +F test/corruptL.test 9d1a0055c8db19baccd12f22ac36a33ec7d63afb59e82eb30835aea8f89b94df F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067 F test/corruptN.test 7c099d153a554001b4fb829c799b01f2ea6276cbc32479131e0db0da4efd9cc4 F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 479ad980dfe509403e184e39a5aa441171e47b3297e05039f85516e72e9f15be -R ea5a2ea0615ceff4124a8a06806293de -U drh -Z 42163979e271d3b2ca0257f8b39abb54 +P 059a09da2c5fd9c7e723c713565fbaf71602079feef0704129cc5cbbd0033936 +R 08a61842a2cf3252dbce1b3ebc62dc67 +U dan +Z a637e63175929a1fad82a808eec8de8e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 81d7094062..2143804efd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -059a09da2c5fd9c7e723c713565fbaf71602079feef0704129cc5cbbd0033936 \ No newline at end of file +6cdd64a445fe16d547d7bf5ea26dad3ab6d9d5f7d1c2b49fdc9d7a2edaa031c6 \ No newline at end of file diff --git a/test/corruptL.test b/test/corruptL.test index 98b7de31e2..3a841a8199 100644 --- a/test/corruptL.test +++ b/test/corruptL.test @@ -1483,4 +1483,22 @@ do_catchsql_test 19.2 { UPDATE t1 SET a=1; } {1 {database disk image is malformed}} +reset_db +do_execsql_test 19.3 { + CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c INTEGER, d TEXT); + CREATE INDEX i1 ON t1((NULL)); + INSERT INTO t1 VALUES(1, NULL, 1, 'text value'); + PRAGMA writable_schema = on; + UPDATE sqlite_schema SET + sql = 'CREATE INDEX i1 ON t1(b, c, d)', + tbl_name = 't1', + type='index' + WHERE name='i1'; +} +db close +sqlite3 db test.db +do_catchsql_test 19.4 { + PRAGMA integrity_check; +} {1 {database disk image is malformed}} + finish_test From 881f0f4114392021047dd2dabf419b8280fbb8ec Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 4 Nov 2022 12:59:04 +0000 Subject: [PATCH 05/44] Remove an unimportant testcase() macro that is no longer reachable due to the improvement in corruption detection. FossilOrigin-Name: cd7e3568a9b0c0f5ef5ca8a29c55cefe2bbad2dbc88a3718a87bb24a8ada3b7f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index bdb8d750d5..91b3460bfd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sanother\stest\scase\sfor\sthe\sOP_Found\sfix. -D 2022-11-04T11:59:40.243 +C Remove\san\sunimportant\stestcase()\smacro\sthat\sis\sno\slonger\sreachable\sdue\sto\sthe\nimprovement\sin\scorruption\sdetection. +D 2022-11-04T12:59:04.079 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -575,7 +575,7 @@ F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf F src/backup.c a2891172438e385fdbe97c11c9745676bec54f518d4447090af97189fd8e52d7 F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca -F src/btree.c 74fc5f6a0577df703d6f98d0c51ee0d8d91d22dbc0ba86e42e056517e2b45576 +F src/btree.c 36f21a5596227507e285dd7a9ed967118031fdf331fe56d61625d7c8958f2d1e F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22 F src/btreeInt.h 8ce1332edd89dfd2461d561ac10a0ab5601c8e06200cb5230596c3caaf54482e F src/build.c d3e43e950e4e377c1d451a4862556792acdef1faba14a03f899d30d09731c48b @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 059a09da2c5fd9c7e723c713565fbaf71602079feef0704129cc5cbbd0033936 -R 08a61842a2cf3252dbce1b3ebc62dc67 -U dan -Z a637e63175929a1fad82a808eec8de8e +P 6cdd64a445fe16d547d7bf5ea26dad3ab6d9d5f7d1c2b49fdc9d7a2edaa031c6 +R 4d302e2fe000f7347174d7f20a725958 +U drh +Z 607b13981a898ce53680e748b8acf681 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2143804efd..895f6be651 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6cdd64a445fe16d547d7bf5ea26dad3ab6d9d5f7d1c2b49fdc9d7a2edaa031c6 \ No newline at end of file +cd7e3568a9b0c0f5ef5ca8a29c55cefe2bbad2dbc88a3718a87bb24a8ada3b7f \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 1c48d6e8c8..2ccd09c277 100644 --- a/src/btree.c +++ b/src/btree.c @@ -1655,7 +1655,6 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ ** fragmented bytes within the page. */ memcpy(&aData[iAddr], &aData[pc], 2); aData[hdr+7] += (u8)x; - testcase( pc+x>maxPC ); return &aData[pc]; }else if( x+pc > maxPC ){ /* This slot extends off the end of the usable part of the page */ From ffc9b1b0469f115ebca2bf4e70214e4f7db7e28a Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 4 Nov 2022 15:17:14 +0000 Subject: [PATCH 06/44] Fix Tcl tests so that they again build and run with SQLITE_OMIT_VIRTUALTABLE defined. FossilOrigin-Name: 06a9dbea40c8a0cdfae6b127a1ce1cba0547acdf1115c087e9b790a78c264b52 --- ext/recover/dbdata.c | 5 ++++ ext/recover/recover1.test | 7 ------ ext/recover/recover_common.tcl | 13 ++++++++-- ext/recover/recoverclobber.test | 8 ------ ext/recover/recovercorrupt.test | 5 ---- ext/recover/recovercorrupt2.test | 5 ---- ext/recover/recoverfault.test | 5 ---- ext/recover/recoverfault2.test | 5 ---- ext/recover/recoverold.test | 8 ------ ext/recover/recoverpgsz.test | 4 --- ext/recover/recoverrowid.test | 8 ------ ext/recover/recoverslowidx.test | 8 ------ ext/recover/recoversql.test | 8 ------ ext/recover/sqlite3recover.c | 5 ++++ ext/recover/test_recover.c | 7 ++++-- manifest | 42 ++++++++++++++++---------------- manifest.uuid | 2 +- 17 files changed, 48 insertions(+), 97 deletions(-) diff --git a/ext/recover/dbdata.c b/ext/recover/dbdata.c index dca468f7b8..4132b83d71 100644 --- a/ext/recover/dbdata.c +++ b/ext/recover/dbdata.c @@ -71,6 +71,7 @@ ** It contains one entry for each b-tree pointer between a parent and ** child page in the database. */ + #if !defined(SQLITEINT_H) #include "sqlite3ext.h" @@ -82,6 +83,8 @@ SQLITE_EXTENSION_INIT1 #include #include +#ifndef SQLITE_OMIT_VIRTUALTABLE + #define DBDATA_PADDING_BYTES 100 typedef struct DbdataTable DbdataTable; @@ -935,3 +938,5 @@ int sqlite3_dbdata_init( SQLITE_EXTENSION_INIT2(pApi); return sqlite3DbdataRegister(db); } + +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ diff --git a/ext/recover/recover1.test b/ext/recover/recover1.test index 94bcd348a7..dfe176fe85 100644 --- a/ext/recover/recover1.test +++ b/ext/recover/recover1.test @@ -10,16 +10,9 @@ #*********************************************************************** # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl - set testprefix recover1 - - proc compare_result {db1 db2 sql} { set r1 [$db1 eval $sql] set r2 [$db2 eval $sql] diff --git a/ext/recover/recover_common.tcl b/ext/recover/recover_common.tcl index 3f2ff2d6cc..fdf735ee75 100644 --- a/ext/recover/recover_common.tcl +++ b/ext/recover/recover_common.tcl @@ -1,5 +1,14 @@ - - + + +if {![info exists testdir]} { + set testdir [file join [file dirname [info script]] .. .. test] +} +source $testdir/tester.tcl + +if {[info commands sqlite3_recover_init]==""} { + finish_test + return -code return +} diff --git a/ext/recover/recoverclobber.test b/ext/recover/recoverclobber.test index 537af8e7c1..e096b2e216 100644 --- a/ext/recover/recoverclobber.test +++ b/ext/recover/recoverclobber.test @@ -12,17 +12,9 @@ # Tests for the SQLITE_RECOVER_ROWIDS option. # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl set testprefix recoverclobber -ifcapable !vtab { - finish_test; return -} - proc recover {db output} { set R [sqlite3_recover_init db main test.db2] $R run diff --git a/ext/recover/recovercorrupt.test b/ext/recover/recovercorrupt.test index 40859f3d1c..eb6fe53add 100644 --- a/ext/recover/recovercorrupt.test +++ b/ext/recover/recovercorrupt.test @@ -10,12 +10,7 @@ #*********************************************************************** # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl - set testprefix recovercorrupt database_may_be_corrupt diff --git a/ext/recover/recovercorrupt2.test b/ext/recover/recovercorrupt2.test index 20d4c39bcd..7147c67e93 100644 --- a/ext/recover/recovercorrupt2.test +++ b/ext/recover/recovercorrupt2.test @@ -10,12 +10,7 @@ #*********************************************************************** # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl - set testprefix recovercorrupt2 do_execsql_test 1.0 { diff --git a/ext/recover/recoverfault.test b/ext/recover/recoverfault.test index 2ea87860b3..30bb65527d 100644 --- a/ext/recover/recoverfault.test +++ b/ext/recover/recoverfault.test @@ -10,12 +10,7 @@ #*********************************************************************** # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl - set testprefix recoverfault diff --git a/ext/recover/recoverfault2.test b/ext/recover/recoverfault2.test index 4f7131ecfb..e80d480ce1 100644 --- a/ext/recover/recoverfault2.test +++ b/ext/recover/recoverfault2.test @@ -10,12 +10,7 @@ #*********************************************************************** # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl - set testprefix recoverfault2 diff --git a/ext/recover/recoverold.test b/ext/recover/recoverold.test index 691737bdc5..e942192827 100644 --- a/ext/recover/recoverold.test +++ b/ext/recover/recoverold.test @@ -11,17 +11,9 @@ # # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl set testprefix recoverold -ifcapable !vtab { - finish_test; return -} - proc compare_result {db1 db2 sql} { set r1 [$db1 eval $sql] set r2 [$db2 eval $sql] diff --git a/ext/recover/recoverpgsz.test b/ext/recover/recoverpgsz.test index 71413b0ead..8d064a4e9c 100644 --- a/ext/recover/recoverpgsz.test +++ b/ext/recover/recoverpgsz.test @@ -10,11 +10,7 @@ #*********************************************************************** # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl db close sqlite3_test_control_pending_byte 0x1000000 diff --git a/ext/recover/recoverrowid.test b/ext/recover/recoverrowid.test index bd47422eaf..5855e84fa6 100644 --- a/ext/recover/recoverrowid.test +++ b/ext/recover/recoverrowid.test @@ -12,17 +12,9 @@ # Tests for the SQLITE_RECOVER_ROWIDS option. # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl set testprefix recoverrowid -ifcapable !vtab { - finish_test; return -} - proc recover {db bRowids output} { forcedelete $output diff --git a/ext/recover/recoverslowidx.test b/ext/recover/recoverslowidx.test index 4dfb7e5f53..ecd7743a4e 100644 --- a/ext/recover/recoverslowidx.test +++ b/ext/recover/recoverslowidx.test @@ -12,17 +12,9 @@ # Tests for the SQLITE_RECOVER_SLOWINDEXES option. # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl set testprefix recoverslowidx -ifcapable !vtab { - finish_test; return -} - do_execsql_test 1.0 { CREATE TABLE t1(a, b); CREATE INDEX i1 ON t1(a); diff --git a/ext/recover/recoversql.test b/ext/recover/recoversql.test index 19f7ec7a1c..0a6726727d 100644 --- a/ext/recover/recoversql.test +++ b/ext/recover/recoversql.test @@ -11,17 +11,9 @@ # # -if {![info exists testdir]} { - set testdir [file join [file dirname [info script]] .. .. test] -} source [file join [file dirname [info script]] recover_common.tcl] -source $testdir/tester.tcl set testprefix recoversql -ifcapable !vtab { - finish_test; return -} - do_execsql_test 1.0 { CREATE TABLE "x.1" (x, y); INSERT INTO "x.1" VALUES(1, 1), (2, 2), (3, 3); diff --git a/ext/recover/sqlite3recover.c b/ext/recover/sqlite3recover.c index 2952274ebb..1dd63fb3f4 100644 --- a/ext/recover/sqlite3recover.c +++ b/ext/recover/sqlite3recover.c @@ -17,6 +17,8 @@ #include #include +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* ** Declaration for public API function in file dbdata.c. This may be called ** with NULL as the final two arguments to register the sqlite_dbptr and @@ -2844,3 +2846,6 @@ int sqlite3_recover_finish(sqlite3_recover *p){ } return rc; } + +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ + diff --git a/ext/recover/test_recover.c b/ext/recover/test_recover.c index 99c7aeca34..1c333df8e0 100644 --- a/ext/recover/test_recover.c +++ b/ext/recover/test_recover.c @@ -18,6 +18,8 @@ #include #include +#ifndef SQLITE_OMIT_VIRTUALTABLE + typedef struct TestRecover TestRecover; struct TestRecover { sqlite3_recover *p; @@ -284,9 +286,10 @@ static int test_sqlite3_dbdata_init( return TCL_OK; } - +#endif /* SQLITE_OMIT_VIRTUALTABLE */ int TestRecover_Init(Tcl_Interp *interp){ +#ifndef SQLITE_OMIT_VIRTUALTABLE struct Cmd { const char *zCmd; Tcl_ObjCmdProc *xProc; @@ -302,7 +305,7 @@ int TestRecover_Init(Tcl_Interp *interp){ struct Cmd *p = &aCmd[i]; Tcl_CreateObjCommand(interp, p->zCmd, p->xProc, p->pArg, 0); } - +#endif return TCL_OK; } diff --git a/manifest b/manifest index 91b3460bfd..4e680ffbc0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\san\sunimportant\stestcase()\smacro\sthat\sis\sno\slonger\sreachable\sdue\sto\sthe\nimprovement\sin\scorruption\sdetection. -D 2022-11-04T12:59:04.079 +C Fix\sTcl\stests\sso\sthat\sthey\sagain\sbuild\sand\srun\swith\sSQLITE_OMIT_VIRTUALTABLE\sdefined. +D 2022-11-04T15:17:14.910 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -385,22 +385,22 @@ F ext/rbu/rbuvacuum4.test a78898e438a44803eb2bc897ba3323373c9f277418e2d6d76e90f2 F ext/rbu/sqlite3rbu.c 8737cabdfbee84bb25a7851ecef8b1312be332761238da9be6ddb10c62ad4291 F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812 F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a -F ext/recover/dbdata.c 3ae32f9b7f02a141889b9075beb87895a826d0fcf3b702b8251cbb0dd3c91a83 -F ext/recover/recover1.test 522e2c3353734dbef9118f08e47209470e50308ba35ce818fed00b8e265aee44 -F ext/recover/recover_common.tcl 6679af7dffc858e345053a91c9b0a897595b4a13007aceffafca75304ccb137c -F ext/recover/recoverclobber.test 294dcc894124ab4ca3a7b35766630742a3d25810fceac22220beb64f70a33a60 -F ext/recover/recovercorrupt.test 6540aae95e17398dd70b44518367fd56588c44962cb276d2623a0fedba9efe9e -F ext/recover/recovercorrupt2.test a7e0735cefb79de7959ebd1ee6d963f9505305fe7983ac58394eb5f5aa9236c7 -F ext/recover/recoverfault.test 3a0a32b9fc216592b97775d69220695b0926980c0f7424b7a59144e47d7cb568 -F ext/recover/recoverfault2.test 321036336af23e778a87f148c4cc4407f88fbdab1fd72ddb661669be9020d36b -F ext/recover/recoverold.test 46e9d99b595fac583d4c67f74d7d89c20a435c752ef6eeb3e918b599940c88e0 -F ext/recover/recoverpgsz.test 93e970eab05e4e89f8fd6b1bd23f9ec137ea09857e66ba0d4d27a83cd1ba4a89 -F ext/recover/recoverrowid.test 1694a1a5526d825f71279f3d02ab02a1ee4c5265de18858bf54cb8ec54487ac8 -F ext/recover/recoverslowidx.test f356bb9fba7ffd6fc50e045e419464f0129ac6e24decf6e919584f79c3493727 -F ext/recover/recoversql.test f9872ff2114e13ffd8ee31e1de06919f62b9b48bc080191b5bd076d10becb60f -F ext/recover/sqlite3recover.c d2feca815f489f3beed4af94b916e0cba046937b9cc760b0f2baacf1ae515fa2 +F ext/recover/dbdata.c 1d5353d3af247c4e0656f8f88a80564aa840644c1177212dd11a186dce4ab213 +F ext/recover/recover1.test 5758c1900d8feacbdf9cc1f2796cfcb5715885a33e2ab14bdeeec8b7c938f576 +F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a +F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e +F ext/recover/recovercorrupt.test 64c081ad1200ae77b447da99eb724785d6bf71715f394543dc7689642e92bf49 +F ext/recover/recovercorrupt2.test 74bef7dd2d7dd4856f3da21be6e213d27da44827e0f5f0946ca0325b46d163ed +F ext/recover/recoverfault.test 9d9f88eeb222615a25e7514f234c950d46bee20d24cd8db49d8fff8d650dcfe1 +F ext/recover/recoverfault2.test 730e7371bcda769554d15460cb23126abba1be8eca9539ccabf63623e7bb7e09 +F ext/recover/recoverold.test b0eeb4507cb5dba2ba7dfffe4c6e8c82bd14beaf718b227d647f21b5341eb8b4 +F ext/recover/recoverpgsz.test 481abf7d584cd67daa3ab72f65ff943b07c3887d206cc1c73d914b965596d8ca +F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f +F ext/recover/recoverslowidx.test 7e1bd4b1a201d94f39da436a9606047a352d7cbad69ac8f4d46495a46e993fe3 +F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486 +F ext/recover/sqlite3recover.c 3e38f2bd607f6ecd8dc10ed419363448c206791c7ce344e3a2a6848731b9f37c F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959 -F ext/recover/test_recover.c 61ec931e47abca6b2210f46239cafd9f3060741605e3d3c45a7c7a53f63dd957 +F ext/recover/test_recover.c 1a34e2d04533d919a30ae4d5caeb1643f6684e9ccd7597ca27721d8af81f4ade F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15 F ext/repair/checkfreelist.c e21f06995ff4efdc1622dcceaea4dcba2caa83ca2f31a1607b98a8509168a996 F ext/repair/checkindex.c 4383e4469c21e5b9ae321d0d63cec53e981af9d7a6564be6374f0eeb93dfc890 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 6cdd64a445fe16d547d7bf5ea26dad3ab6d9d5f7d1c2b49fdc9d7a2edaa031c6 -R 4d302e2fe000f7347174d7f20a725958 -U drh -Z 607b13981a898ce53680e748b8acf681 +P cd7e3568a9b0c0f5ef5ca8a29c55cefe2bbad2dbc88a3718a87bb24a8ada3b7f +R bd8a5ca9186cd7d971a738eb8929f158 +U dan +Z 3cd700d63552d3b4d0ea3e514d09d144 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 895f6be651..9acb9ffd75 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cd7e3568a9b0c0f5ef5ca8a29c55cefe2bbad2dbc88a3718a87bb24a8ada3b7f \ No newline at end of file +06a9dbea40c8a0cdfae6b127a1ce1cba0547acdf1115c087e9b790a78c264b52 \ No newline at end of file From 80dbd818f2f24750af783f29fb16da563d76f6e3 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 4 Nov 2022 16:39:39 +0000 Subject: [PATCH 07/44] Fixes to recover module test scripts so that they may be used with SQLITE_DEFAULT_AUTOVACUUM and SQLITE_SECURE_DELETE builds. FossilOrigin-Name: 0e5597ce5353dea2cdb092b166b57ba1d60f8115eb468349f2b2869803691a2c --- ext/recover/recoverold.test | 25 +++++++++++++------------ ext/recover/recoverpgsz.test | 1 + manifest | 16 ++++++++-------- manifest.uuid | 2 +- test/recover.test | 1 + 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/ext/recover/recoverold.test b/ext/recover/recoverold.test index e942192827..26bbe322a1 100644 --- a/ext/recover/recoverold.test +++ b/ext/recover/recoverold.test @@ -147,7 +147,6 @@ do_recover_test 2.4.1 { 2 2 3 {} 8 9 7 } -breakpoint do_execsql_test 2.5 { CREATE TABLE x1(a, b, c); WITH s(i) AS ( @@ -165,17 +164,19 @@ do_recover_test 2.5.1 { 2 2 3 {} 8 9 7 } -do_test 2.6 { - forcedelete test.db2 - set R [sqlite3_recover_init db main test.db2] - $R config lostandfound lost_and_found - $R config freelistcorrupt 1 - $R run - $R finish - sqlite3 db2 test.db2 - execsql { SELECT count(*) FROM lost_and_found_1; } db2 -} {103} -db2 close +ifcapable !secure_delete { + do_test 2.6 { + forcedelete test.db2 + set R [sqlite3_recover_init db main test.db2] + $R config lostandfound lost_and_found + $R config freelistcorrupt 1 + $R run + $R finish + sqlite3 db2 test.db2 + execsql { SELECT count(*) FROM lost_and_found_1; } db2 + } {103} + db2 close +} #------------------------------------------------------------------------- breakpoint diff --git a/ext/recover/recoverpgsz.test b/ext/recover/recoverpgsz.test index 8d064a4e9c..1a91f08459 100644 --- a/ext/recover/recoverpgsz.test +++ b/ext/recover/recoverpgsz.test @@ -23,6 +23,7 @@ foreach {pgsz bOverflow} { } { reset_db execsql "PRAGMA page_size = $pgsz" + execsql "PRAGMA auto_vacuum = 0" do_execsql_test 1.$pgsz.$bOverflow.1 { CREATE TABLE t1(a, b, c); CREATE INDEX i1 ON t1(b, a, c); diff --git a/manifest b/manifest index 4e680ffbc0..938d3cff8e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sTcl\stests\sso\sthat\sthey\sagain\sbuild\sand\srun\swith\sSQLITE_OMIT_VIRTUALTABLE\sdefined. -D 2022-11-04T15:17:14.910 +C Fixes\sto\srecover\smodule\stest\sscripts\sso\sthat\sthey\smay\sbe\sused\swith\sSQLITE_DEFAULT_AUTOVACUUM\sand\sSQLITE_SECURE_DELETE\sbuilds. +D 2022-11-04T16:39:39.210 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -393,8 +393,8 @@ F ext/recover/recovercorrupt.test 64c081ad1200ae77b447da99eb724785d6bf71715f3945 F ext/recover/recovercorrupt2.test 74bef7dd2d7dd4856f3da21be6e213d27da44827e0f5f0946ca0325b46d163ed F ext/recover/recoverfault.test 9d9f88eeb222615a25e7514f234c950d46bee20d24cd8db49d8fff8d650dcfe1 F ext/recover/recoverfault2.test 730e7371bcda769554d15460cb23126abba1be8eca9539ccabf63623e7bb7e09 -F ext/recover/recoverold.test b0eeb4507cb5dba2ba7dfffe4c6e8c82bd14beaf718b227d647f21b5341eb8b4 -F ext/recover/recoverpgsz.test 481abf7d584cd67daa3ab72f65ff943b07c3887d206cc1c73d914b965596d8ca +F ext/recover/recoverold.test 55a06e18e79a702e778c63324261fce2a0911089444384a97c423c05c42d4cab +F ext/recover/recoverpgsz.test 3658ab8e68475b1bb87d6af88baa04551c84b73280a566a1be847182410ffc58 F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f F ext/recover/recoverslowidx.test 7e1bd4b1a201d94f39da436a9606047a352d7cbad69ac8f4d46495a46e993fe3 F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486 @@ -1409,7 +1409,7 @@ F test/randexpr1.tcl 40dec52119ed3a2b8b2a773bce24b63a3a746459 F test/randexpr1.test eda062a97e60f9c38ae8d806b03b0ddf23d796df F test/rbu.test 168573d353cd0fd10196b87b0caa322c144ef736 F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8 -F test/recover.test cd81539661b9a6263d68f7bfd1440f4ac0aeb68f0fa0370db32a9e706da89de7 +F test/recover.test f90e776adeb6b5da41cee56aa2aaa995c5d1d3c7b5b99dffb090041f12f8e3e5 F test/regexp1.test 83c631617357150f8054ca1d1fed40a552b0d0f8eb7a7f090c3be02cee9f9913 F test/regexp2.test 55ed41da802b0e284ac7e2fe944be3948f93ff25abbca0361a609acfed1368b5 F test/reindex.test cd9d6021729910ece82267b4f5e1b5ac2911a7566c43b43c176a6a4732e2118d @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cd7e3568a9b0c0f5ef5ca8a29c55cefe2bbad2dbc88a3718a87bb24a8ada3b7f -R bd8a5ca9186cd7d971a738eb8929f158 +P 06a9dbea40c8a0cdfae6b127a1ce1cba0547acdf1115c087e9b790a78c264b52 +R 6a7f92408352b77a850cadea400d3dbe U dan -Z 3cd700d63552d3b4d0ea3e514d09d144 +Z bd09347f876f10f602844e0bea6358b0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 9acb9ffd75..12fed04857 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -06a9dbea40c8a0cdfae6b127a1ce1cba0547acdf1115c087e9b790a78c264b52 \ No newline at end of file +0e5597ce5353dea2cdb092b166b57ba1d60f8115eb468349f2b2869803691a2c \ No newline at end of file diff --git a/test/recover.test b/test/recover.test index b60892459f..b7ff639403 100644 --- a/test/recover.test +++ b/test/recover.test @@ -141,6 +141,7 @@ do_recover_test 3.0 #------------------------------------------------------------------------- reset_db +execsql { PRAGMA secure_delete = 0 } do_execsql_test 4.0 { CREATE TABLE t1(a, b, c); CREATE TABLE t2(d, e, f); From 5f7e173abfa2704331708bd432fb2a9a50cfde03 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 4 Nov 2022 17:07:33 +0000 Subject: [PATCH 08/44] Another test case fix for auto-vacuum builds. FossilOrigin-Name: c1c47eff48e0831b5aed987e90d797aee99caf1861fa8318c6c3ecfb108de7e6 --- ext/recover/recoverslowidx.test | 1 + manifest | 16 ++++++++-------- manifest.uuid | 2 +- test/recover.test | 1 + test/wapptest.tcl | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/ext/recover/recoverslowidx.test b/ext/recover/recoverslowidx.test index ecd7743a4e..269105113d 100644 --- a/ext/recover/recoverslowidx.test +++ b/ext/recover/recoverslowidx.test @@ -16,6 +16,7 @@ source [file join [file dirname [info script]] recover_common.tcl] set testprefix recoverslowidx do_execsql_test 1.0 { + PRAGMA auto_vacuum = 0; CREATE TABLE t1(a, b); CREATE INDEX i1 ON t1(a); INSERT INTO t1 VALUES(1, 1), (2, 2), (3, 3), (4, 4); diff --git a/manifest b/manifest index 938d3cff8e..0a05dc00ca 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixes\sto\srecover\smodule\stest\sscripts\sso\sthat\sthey\smay\sbe\sused\swith\sSQLITE_DEFAULT_AUTOVACUUM\sand\sSQLITE_SECURE_DELETE\sbuilds. -D 2022-11-04T16:39:39.210 +C Another\stest\scase\sfix\sfor\sauto-vacuum\sbuilds. +D 2022-11-04T17:07:33.450 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -396,7 +396,7 @@ F ext/recover/recoverfault2.test 730e7371bcda769554d15460cb23126abba1be8eca9539c F ext/recover/recoverold.test 55a06e18e79a702e778c63324261fce2a0911089444384a97c423c05c42d4cab F ext/recover/recoverpgsz.test 3658ab8e68475b1bb87d6af88baa04551c84b73280a566a1be847182410ffc58 F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f -F ext/recover/recoverslowidx.test 7e1bd4b1a201d94f39da436a9606047a352d7cbad69ac8f4d46495a46e993fe3 +F ext/recover/recoverslowidx.test 5205a9742dd9490ee99950dabb622307355ef1662dea6a3a21030057bfd81411 F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486 F ext/recover/sqlite3recover.c 3e38f2bd607f6ecd8dc10ed419363448c206791c7ce344e3a2a6848731b9f37c F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959 @@ -1409,7 +1409,7 @@ F test/randexpr1.tcl 40dec52119ed3a2b8b2a773bce24b63a3a746459 F test/randexpr1.test eda062a97e60f9c38ae8d806b03b0ddf23d796df F test/rbu.test 168573d353cd0fd10196b87b0caa322c144ef736 F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8 -F test/recover.test f90e776adeb6b5da41cee56aa2aaa995c5d1d3c7b5b99dffb090041f12f8e3e5 +F test/recover.test fd5199f928757cb308661b5fdca1abc19398a798ff7f24b57c3071e9f8e0471e F test/regexp1.test 83c631617357150f8054ca1d1fed40a552b0d0f8eb7a7f090c3be02cee9f9913 F test/regexp2.test 55ed41da802b0e284ac7e2fe944be3948f93ff25abbca0361a609acfed1368b5 F test/reindex.test cd9d6021729910ece82267b4f5e1b5ac2911a7566c43b43c176a6a4732e2118d @@ -1872,7 +1872,7 @@ F test/walslow.test c05c68d4dc2700a982f89133ce103a1a84cc285f F test/walthread.test 14b20fcfa6ae152f5d8e12f5dc8a8a724b7ef189f5d8ef1e2ceab79f2af51747 F test/walvfs.test e1a6ad0f3c78e98b55c3d5f0889cf366cc0d0a1cb2bccb44ac9ec67384adc4a1 F test/wapp.tcl b440cd8cf57953d3a49e7ee81e6a18f18efdaf113b69f7d8482b0710a64566ec -F test/wapptest.tcl e3b6d5afa021c39a0f459ea9fbd1077459c1d81fca98eb40af8404ad3fc2360f x +F test/wapptest.tcl 1bea58a6a8e68a73f542ee4fca28b771b84ed803bd0c9e385087070b3d747b3c x F test/where.test d13cd7c24e80009d2b54e2f7a8893c457afa49c64f99359c9eb3fe668ba1d9d4 F test/where2.test 03c21a11e7b90e2845fc3c8b4002fc44cc2797fa74c86ee47d70bd7ea4f29ed6 F test/where3.test 5b4ffc0ac2ea0fe92f02b1244b7531522fe4d7bccf6fa8741d54e82c10e67753 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 06a9dbea40c8a0cdfae6b127a1ce1cba0547acdf1115c087e9b790a78c264b52 -R 6a7f92408352b77a850cadea400d3dbe +P 0e5597ce5353dea2cdb092b166b57ba1d60f8115eb468349f2b2869803691a2c +R d1d62643ac88e13cebbaf7579524f719 U dan -Z bd09347f876f10f602844e0bea6358b0 +Z e9d84ba59d4f6ae1792a730414132be7 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 12fed04857..700664af5f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0e5597ce5353dea2cdb092b166b57ba1d60f8115eb468349f2b2869803691a2c \ No newline at end of file +c1c47eff48e0831b5aed987e90d797aee99caf1861fa8318c6c3ecfb108de7e6 \ No newline at end of file diff --git a/test/recover.test b/test/recover.test index b7ff639403..8d9ad013c0 100644 --- a/test/recover.test +++ b/test/recover.test @@ -142,6 +142,7 @@ do_recover_test 3.0 #------------------------------------------------------------------------- reset_db execsql { PRAGMA secure_delete = 0 } +execsql { PRAGMA auto_vacuum = 0 } do_execsql_test 4.0 { CREATE TABLE t1(a, b, c); CREATE TABLE t2(d, e, f); diff --git a/test/wapptest.tcl b/test/wapptest.tcl index fa28ec7600..d37b2e48c6 100755 --- a/test/wapptest.tcl +++ b/test/wapptest.tcl @@ -476,7 +476,7 @@ proc generate_main_page {{extra {}}} { generate_select_widget Test control_test $lOpt $G(test) # Build the "jobs" select widget. Options are 1 to 8. - generate_select_widget Jobs control_jobs {1 2 3 4 5 6 7 8} $G(jobs) + generate_select_widget Jobs control_jobs {1 2 3 4 5 6 7 8 12 16} $G(jobs) switch $G(state) { config { From a16edfa29b1a346308b6e794741d8a3f525158a6 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 4 Nov 2022 18:32:45 +0000 Subject: [PATCH 09/44] Tweaks to recover module test scripts to work with various permutations. FossilOrigin-Name: 454c61e818f6941c9a23f6600e37828a3f2b2ad3c6dbc8d6223570aed5d9cd8b --- ext/recover/recover1.test | 6 ++++-- ext/recover/recoverold.test | 3 +++ manifest | 16 ++++++++-------- manifest.uuid | 2 +- test/permutations.test | 2 ++ 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/ext/recover/recover1.test b/ext/recover/recover1.test index dfe176fe85..75f5dba1ff 100644 --- a/ext/recover/recover1.test +++ b/ext/recover/recover1.test @@ -264,11 +264,13 @@ do_recover_test 14 #------------------------------------------------------------------------- reset_db -do_execsql_test 15.1 { +execsql { PRAGMA journal_mode=OFF; PRAGMA mmap_size=10; +} +do_execsql_test 15.1 { CREATE TABLE t1(x); -} {off 10} +} {} do_recover_test 15 finish_test diff --git a/ext/recover/recoverold.test b/ext/recover/recoverold.test index 26bbe322a1..c6acbb2f42 100644 --- a/ext/recover/recoverold.test +++ b/ext/recover/recoverold.test @@ -63,7 +63,10 @@ proc do_recover_test {tn {tsql {}} {res {}}} { sqlite3 db2 test.db2 db2 eval [join $::sqlhook ";"] + + db cache flush if {$tsql==""} { + compare_dbs db db2 uplevel [list do_test $tn.sql [list compare_dbs db db2] {}] } else { uplevel [list do_execsql_test -db db2 $tn.sql $tsql $res] diff --git a/manifest b/manifest index 0a05dc00ca..d60d45244e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Another\stest\scase\sfix\sfor\sauto-vacuum\sbuilds. -D 2022-11-04T17:07:33.450 +C Tweaks\sto\srecover\smodule\stest\sscripts\sto\swork\swith\svarious\spermutations. +D 2022-11-04T18:32:45.744 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -386,14 +386,14 @@ F ext/rbu/sqlite3rbu.c 8737cabdfbee84bb25a7851ecef8b1312be332761238da9be6ddb10c6 F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812 F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a F ext/recover/dbdata.c 1d5353d3af247c4e0656f8f88a80564aa840644c1177212dd11a186dce4ab213 -F ext/recover/recover1.test 5758c1900d8feacbdf9cc1f2796cfcb5715885a33e2ab14bdeeec8b7c938f576 +F ext/recover/recover1.test 02004eb8f9ec2825ba77e24742c18e45162cb21d27e76a3a435b83a759a1131a F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e F ext/recover/recovercorrupt.test 64c081ad1200ae77b447da99eb724785d6bf71715f394543dc7689642e92bf49 F ext/recover/recovercorrupt2.test 74bef7dd2d7dd4856f3da21be6e213d27da44827e0f5f0946ca0325b46d163ed F ext/recover/recoverfault.test 9d9f88eeb222615a25e7514f234c950d46bee20d24cd8db49d8fff8d650dcfe1 F ext/recover/recoverfault2.test 730e7371bcda769554d15460cb23126abba1be8eca9539ccabf63623e7bb7e09 -F ext/recover/recoverold.test 55a06e18e79a702e778c63324261fce2a0911089444384a97c423c05c42d4cab +F ext/recover/recoverold.test 68db3d6f85dd2b98e785b6c4da4f5eea4bbe52ccf6674d9a94c7506dc92596aa F ext/recover/recoverpgsz.test 3658ab8e68475b1bb87d6af88baa04551c84b73280a566a1be847182410ffc58 F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f F ext/recover/recoverslowidx.test 5205a9742dd9490ee99950dabb622307355ef1662dea6a3a21030057bfd81411 @@ -1385,7 +1385,7 @@ F test/parser1.test 6ccdf5e459a5dc4673d3273dc311a7e9742ca952dd0551a6a6320d27035c F test/pcache.test c8acbedd3b6fd0f9a7ca887a83b11d24a007972b F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442 F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff -F test/permutations.test 650d89ab5aad0c9fab9325b11deca8662cb5e72f43e005073d35f12ad00eaca2 +F test/permutations.test 3e0d6eea70e5087f3240b1a2fe621b0c73445f38a262029f0a1d2d89564026f7 F test/pg_common.tcl 3b27542224db1e713ae387459b5d117c836a5f6e328846922993b6d2b7640d9f F test/pragma.test cae534c12a033a5c319ccc94f50b32811acdef9f67bf19a82ff42697caccd69f F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0e5597ce5353dea2cdb092b166b57ba1d60f8115eb468349f2b2869803691a2c -R d1d62643ac88e13cebbaf7579524f719 +P c1c47eff48e0831b5aed987e90d797aee99caf1861fa8318c6c3ecfb108de7e6 +R 96c1a1e097290369d58e43a186b26522 U dan -Z e9d84ba59d4f6ae1792a730414132be7 +Z 0f3def2d760a90c1360a62b337e54d9b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 700664af5f..85565b8a84 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c1c47eff48e0831b5aed987e90d797aee99caf1861fa8318c6c3ecfb108de7e6 \ No newline at end of file +454c61e818f6941c9a23f6600e37828a3f2b2ad3c6dbc8d6223570aed5d9cd8b \ No newline at end of file diff --git a/test/permutations.test b/test/permutations.test index 8a5484944a..add02d27c0 100644 --- a/test/permutations.test +++ b/test/permutations.test @@ -806,6 +806,8 @@ test_suite "inmemory_journal" -description { # This test depends on a successful recovery from the pager error # state. Which is not possible with an in-memory journal fts5fault1.test + + recoverpgsz.test }] ifcapable mem3 { From f53c0a0d4e02fbf7b536ba84eecb33ec7df6877f Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 5 Nov 2022 19:26:45 +0000 Subject: [PATCH 10/44] Update test file dbpagefault.test to account for the restriction on using SQLITE_VTAB_DIRECTONLY virtual tables from within triggers. FossilOrigin-Name: 2b68fc8aa35cc69e4d2c26aaebbf3f2b1f1c08d15ca9efcbe5be21d45735d3f1 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/dbpagefault.test | 26 ++++++++++++++++++-------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index d60d45244e..db23c1cbb3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Tweaks\sto\srecover\smodule\stest\sscripts\sto\swork\swith\svarious\spermutations. -D 2022-11-04T18:32:45.744 +C Update\stest\sfile\sdbpagefault.test\sto\saccount\sfor\sthe\srestriction\son\susing\sSQLITE_VTAB_DIRECTONLY\svirtual\stables\sfrom\swithin\striggers. +D 2022-11-05T19:26:45.587 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -934,7 +934,7 @@ F test/dbfuzz001.test 55e1a3504f8dea84155e09912fe3b1c3ad77e0b1a938ec42ca03b8e51b F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee F test/dbfuzz2.c 4b3c12de4d98b1b2d908ab03d217d4619e47c8b23d5e67f8a6f2b1bdee7cae23 F test/dbpage.test fce29035c7566fd7835ec0f19422cb4b9c6944ce0e1b936ff8452443f92e887d -F test/dbpagefault.test 20fe3a2a295f1c8cb30195b7b58a010530ecbc060e53e146af9e3e4fde4cab15 +F test/dbpagefault.test cce748283f9485b860f7d9d94e0e5823e3a50f7ea4b860e7078f7060c064b3ae F test/dbstatus.test 4a4221a883025ffd39696b3d1b3910b928fb097d77e671351acb35f3aed42759 F test/dbstatus2.test f5fe0afed3fa45e57cfa70d1147606c20d2ba23feac78e9a172f2fe8ab5b78ef F test/decimal.test fcf403fd5585f47342234e153c4a4338cd737b8e0884ac66fc484df47dbcf1a7 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c1c47eff48e0831b5aed987e90d797aee99caf1861fa8318c6c3ecfb108de7e6 -R 96c1a1e097290369d58e43a186b26522 +P 454c61e818f6941c9a23f6600e37828a3f2b2ad3c6dbc8d6223570aed5d9cd8b +R 5bb95939440d8668f376bffbf10c30f6 U dan -Z 0f3def2d760a90c1360a62b337e54d9b +Z e0d6aeb7f7ce3a618693295f8bdfb5c8 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 85565b8a84..c457502351 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -454c61e818f6941c9a23f6600e37828a3f2b2ad3c6dbc8d6223570aed5d9cd8b \ No newline at end of file +2b68fc8aa35cc69e4d2c26aaebbf3f2b1f1c08d15ca9efcbe5be21d45735d3f1 \ No newline at end of file diff --git a/test/dbpagefault.test b/test/dbpagefault.test index 80cff00b49..28f1f1fccc 100644 --- a/test/dbpagefault.test +++ b/test/dbpagefault.test @@ -57,15 +57,25 @@ do_execsql_test 3.0 { END; } -do_faultsim_test 3 -prep { - catch { db close } - sqlite3 db test.db - execsql { PRAGMA trusted_schema = true } -} -body { - execsql { INSERT INTO x1 DEFAULT VALUES; } -} -test { - faultsim_test_result {0 {}} +# This test case no longer works, as it is no longer possible to use +# virtual table sqlite_dbpage from within a trigger. +# +do_execsql_test 3.1 { + PRAGMA trusted_schema = 1; } +do_catchsql_test 3.2 { + PRAGMA trusted_schema = 1; + INSERT INTO x1 DEFAULT VALUES; +} {1 {unsafe use of virtual table "sqlite_dbpage"}} +#do_faultsim_test 3 -prep { +# catch { db close } +# sqlite3 db test.db +# execsql { PRAGMA trusted_schema = 1 } +#} -body { +# execsql { INSERT INTO x1 DEFAULT VALUES; } +#} -test { +# faultsim_test_result {0 {}} +#} finish_test From b819202acfdd1486cc12ef1f7b67eada454d7f18 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sun, 6 Nov 2022 17:19:34 +0000 Subject: [PATCH 11/44] The recoverAssertMutexHeld() function is for testing and verification only and should be a harmless no-op for production builds. [forum/forumpost/b4f2c7d402|Forum post b4f2c7d402]. FossilOrigin-Name: d75504710c86af0037ac897106aadffe54955463195ee4dfb2cdfc81d396cbb4 --- ext/recover/sqlite3recover.c | 13 +++++++++++-- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ext/recover/sqlite3recover.c b/ext/recover/sqlite3recover.c index 1dd63fb3f4..67c7aa4f29 100644 --- a/ext/recover/sqlite3recover.c +++ b/ext/recover/sqlite3recover.c @@ -282,10 +282,16 @@ static RecoverGlobal recover_g; */ #define RECOVER_ROWID_DEFAULT 1 +/* +** Mutex handling: +** +** recoverEnterMutex() - Enter the recovery mutex +** recoverLeaveMutex() - Leave the recovery mutex +** recoverAssertMutexHeld() - Assert that the recovery mutex is held +*/ #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE==0 # define recoverEnterMutex() # define recoverLeaveMutex() -# define recoverAssertMutexHeld() #else static void recoverEnterMutex(void){ sqlite3_mutex_enter(sqlite3_mutex_alloc(RECOVER_MUTEX_ID)); @@ -293,9 +299,13 @@ static void recoverEnterMutex(void){ static void recoverLeaveMutex(void){ sqlite3_mutex_leave(sqlite3_mutex_alloc(RECOVER_MUTEX_ID)); } +#endif +#if SQLITE_THREADSAFE+0>=1 && defined(SQLITE_DEBUG) static void recoverAssertMutexHeld(void){ assert( sqlite3_mutex_held(sqlite3_mutex_alloc(RECOVER_MUTEX_ID)) ); } +#else +# define recoverAssertMutexHeld() #endif @@ -2848,4 +2858,3 @@ int sqlite3_recover_finish(sqlite3_recover *p){ } #endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ - diff --git a/manifest b/manifest index db23c1cbb3..cfcb4ee9b8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\stest\sfile\sdbpagefault.test\sto\saccount\sfor\sthe\srestriction\son\susing\sSQLITE_VTAB_DIRECTONLY\svirtual\stables\sfrom\swithin\striggers. -D 2022-11-05T19:26:45.587 +C The\srecoverAssertMutexHeld()\sfunction\sis\sfor\stesting\sand\sverification\sonly\nand\sshould\sbe\sa\sharmless\sno-op\sfor\sproduction\sbuilds.\n[forum/forumpost/b4f2c7d402|Forum\spost\sb4f2c7d402]. +D 2022-11-06T17:19:34.134 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -398,7 +398,7 @@ F ext/recover/recoverpgsz.test 3658ab8e68475b1bb87d6af88baa04551c84b73280a566a1b F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f F ext/recover/recoverslowidx.test 5205a9742dd9490ee99950dabb622307355ef1662dea6a3a21030057bfd81411 F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486 -F ext/recover/sqlite3recover.c 3e38f2bd607f6ecd8dc10ed419363448c206791c7ce344e3a2a6848731b9f37c +F ext/recover/sqlite3recover.c fd4b8a8607a50259764afd98757511e745d8b023d4a75df1cef1a412239b0f3d F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959 F ext/recover/test_recover.c 1a34e2d04533d919a30ae4d5caeb1643f6684e9ccd7597ca27721d8af81f4ade F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 454c61e818f6941c9a23f6600e37828a3f2b2ad3c6dbc8d6223570aed5d9cd8b -R 5bb95939440d8668f376bffbf10c30f6 -U dan -Z e0d6aeb7f7ce3a618693295f8bdfb5c8 +P 2b68fc8aa35cc69e4d2c26aaebbf3f2b1f1c08d15ca9efcbe5be21d45735d3f1 +R e151c91fffb05c9af064409987d0dbe9 +U drh +Z c4b46067f2f5ee487396a5f348d0bff6 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index c457502351..eabebd95c5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2b68fc8aa35cc69e4d2c26aaebbf3f2b1f1c08d15ca9efcbe5be21d45735d3f1 \ No newline at end of file +d75504710c86af0037ac897106aadffe54955463195ee4dfb2cdfc81d396cbb4 \ No newline at end of file From b36f697b50a868d810c32a87a602dc5889b664d3 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 7 Nov 2022 11:05:53 +0000 Subject: [PATCH 12/44] Make sure that the recoverStrlen() function (used internally by the new recovery extension) is 64-bit safe. FossilOrigin-Name: ea30a6bfc463acce26a4d710e7bf56519ad096ce2fe904ee7e199f5c55068034 --- ext/recover/sqlite3recover.c | 7 ++----- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/ext/recover/sqlite3recover.c b/ext/recover/sqlite3recover.c index 67c7aa4f29..30260f014e 100644 --- a/ext/recover/sqlite3recover.c +++ b/ext/recover/sqlite3recover.c @@ -313,11 +313,8 @@ static void recoverAssertMutexHeld(void){ ** Like strlen(). But handles NULL pointer arguments. */ static int recoverStrlen(const char *zStr){ - int nRet = 0; - if( zStr ){ - while( zStr[nRet] ) nRet++; - } - return nRet; + if( zStr==0 ) return 0; + return (int)(strlen(zStr)&0x7fffffff); } /* diff --git a/manifest b/manifest index cfcb4ee9b8..951067154a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\srecoverAssertMutexHeld()\sfunction\sis\sfor\stesting\sand\sverification\sonly\nand\sshould\sbe\sa\sharmless\sno-op\sfor\sproduction\sbuilds.\n[forum/forumpost/b4f2c7d402|Forum\spost\sb4f2c7d402]. -D 2022-11-06T17:19:34.134 +C Make\ssure\sthat\sthe\srecoverStrlen()\sfunction\s(used\sinternally\sby\sthe\snew\nrecovery\sextension)\sis\s64-bit\ssafe. +D 2022-11-07T11:05:53.327 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -398,7 +398,7 @@ F ext/recover/recoverpgsz.test 3658ab8e68475b1bb87d6af88baa04551c84b73280a566a1b F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f F ext/recover/recoverslowidx.test 5205a9742dd9490ee99950dabb622307355ef1662dea6a3a21030057bfd81411 F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486 -F ext/recover/sqlite3recover.c fd4b8a8607a50259764afd98757511e745d8b023d4a75df1cef1a412239b0f3d +F ext/recover/sqlite3recover.c 1e4de9cd30daa67e5c1cd0cafb764ddf183087ce037ab47b7c1a7e2921c90d37 F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959 F ext/recover/test_recover.c 1a34e2d04533d919a30ae4d5caeb1643f6684e9ccd7597ca27721d8af81f4ade F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 2b68fc8aa35cc69e4d2c26aaebbf3f2b1f1c08d15ca9efcbe5be21d45735d3f1 -R e151c91fffb05c9af064409987d0dbe9 +P d75504710c86af0037ac897106aadffe54955463195ee4dfb2cdfc81d396cbb4 +R b99a319ac2c87490a60dae7da1cd7190 U drh -Z c4b46067f2f5ee487396a5f348d0bff6 +Z e0e2bec8b6207840b932920137b279fa # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index eabebd95c5..b009be64f2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d75504710c86af0037ac897106aadffe54955463195ee4dfb2cdfc81d396cbb4 \ No newline at end of file +ea30a6bfc463acce26a4d710e7bf56519ad096ce2fe904ee7e199f5c55068034 \ No newline at end of file From 1407458c6f869a417abdf5ae465182ff778d2166 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 7 Nov 2022 11:19:28 +0000 Subject: [PATCH 13/44] Fix the documentation regarding negative length parameters for sqlite3_result_text() interfaces, to point out that the length parameter to sqlite3_result_text64() cannot be negative. [forum:/forumpost/cf1d043b07|Forum post cf1d043b07]. Comment/documentation change only. FossilOrigin-Name: 8016507651f377b08deb3a13cc559d56ce6e934c3073a8e63d05fd946b8403a4 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/sqlite.h.in | 7 ++++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 951067154a..5812aa2d93 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\ssure\sthat\sthe\srecoverStrlen()\sfunction\s(used\sinternally\sby\sthe\snew\nrecovery\sextension)\sis\s64-bit\ssafe. -D 2022-11-07T11:05:53.327 +C Fix\sthe\sdocumentation\sregarding\snegative\slength\sparameters\sfor\nsqlite3_result_text()\sinterfaces,\sto\spoint\sout\sthat\sthe\slength\sparameter\nto\ssqlite3_result_text64()\scannot\sbe\snegative.\n[forum:/forumpost/cf1d043b07|Forum\spost\scf1d043b07].\nComment/documentation\schange\sonly. +D 2022-11-07T11:19:28.025 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -638,7 +638,7 @@ F src/resolve.c efea4e5fbecfd6d0a9071b0be0d952620991673391b6ffaaf4c277b0bb674633 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 12cb5162e606290354f9512ff0c30fc6dc4d7a77a92b6c5b581395f9c4edd047 F src/shell.c.in 84bb08d8762920285f08f1c0993f1b3992ac43af5d72445cb8a973fc50c71923 -F src/sqlite.h.in bf5846820130b6cf01b002e90427eae29f02db07d9cb9b5ccd0e0aad867eed14 +F src/sqlite.h.in 46052b3bcab8d34387bbe9ae4f49da9c2e05f19188bbd15a1c05abd895b56b23 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h c4b9fa7a7e2bcdf850cfeb4b8a91d5ec47b7a00033bc996fd2ee96cbf2741f5f F src/sqliteInt.h 2c24ba38f78e32fe5d7ec136321a6ad827698b33ca98664970a8b7274d69ef7c @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d75504710c86af0037ac897106aadffe54955463195ee4dfb2cdfc81d396cbb4 -R b99a319ac2c87490a60dae7da1cd7190 +P ea30a6bfc463acce26a4d710e7bf56519ad096ce2fe904ee7e199f5c55068034 +R 061e473e36c5f0cba5c53d7cebd5abaf U drh -Z e0e2bec8b6207840b932920137b279fa +Z cccd331808932afe75bd690520d4669f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b009be64f2..a42c11dd2e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ea30a6bfc463acce26a4d710e7bf56519ad096ce2fe904ee7e199f5c55068034 \ No newline at end of file +8016507651f377b08deb3a13cc559d56ce6e934c3073a8e63d05fd946b8403a4 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 6271a9becc..8bcd643229 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -5874,9 +5874,10 @@ typedef void (*sqlite3_destructor_type)(void*); ** of [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE]. ** ^SQLite takes the text result from the application from ** the 2nd parameter of the sqlite3_result_text* interfaces. -** ^If the 3rd parameter to the sqlite3_result_text* interfaces -** is negative, then SQLite takes result text from the 2nd parameter -** through the first zero character. +** ^If the 3rd parameter to any of the sqlite3_result_text* interfaces +** other than sqlite3_result_text64() is negative, then SQLite computes +** the string length itself by searching the 2nd parameter for the first +** zero character. ** ^If the 3rd parameter to the sqlite3_result_text* interfaces ** is non-negative, then as many bytes (not characters) of the text ** pointed to by the 2nd parameter are taken as the application-defined From c0a18d6a5ae7e4ccc7b01c05f7d7b799fb2a2bb9 Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 7 Nov 2022 12:12:27 +0000 Subject: [PATCH 14/44] Minor wasm doc touchups. No code changes. FossilOrigin-Name: 2c448368913a844bdb5e69f8fa3bad91a2b6612ba3b7f3f650dd07b81db25a77 --- ext/wasm/api/sqlite3-api-prologue.js | 35 ++++++++++++++++++---------- manifest | 14 +++++------ manifest.uuid | 2 +- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/ext/wasm/api/sqlite3-api-prologue.js b/ext/wasm/api/sqlite3-api-prologue.js index cf44f39707..d633064bea 100644 --- a/ext/wasm/api/sqlite3-api-prologue.js +++ b/ext/wasm/api/sqlite3-api-prologue.js @@ -17,22 +17,29 @@ conventions, and build process are very much under construction and will be (re)documented once they've stopped fluctuating so much. - Specific goals of this project: + Project home page: https://sqlite.org + + Documentation home page: https://sqlite.org/wasm + + Specific goals of this subproject: - Except where noted in the non-goals, provide a more-or-less feature-complete wrapper to the sqlite3 C API, insofar as WASM - feature parity with C allows for. In fact, provide at least 3 + feature parity with C allows for. In fact, provide at least 4 APIs... - 1) Bind a low-level sqlite3 API which is as close to the native - one as feasible in terms of usage. + 1) 1-to-1 bindings as exported from WASM, with no automatic + type conversions between JS and C. + + 2) A binding of (1) which provides certain JS/C type conversions + to greatly simplify its use. - 2) A higher-level API, more akin to sql.js and node.js-style + 3) A higher-level API, more akin to sql.js and node.js-style implementations. This one speaks directly to the low-level API. This API must be used from the same thread as the low-level API. - 3) A second higher-level API which speaks to the previous APIs via + 4) A second higher-level API which speaks to the previous APIs via worker messages. This one is intended for use in the main thread, with the lower-level APIs installed in a Worker thread, and talking to them via Worker messages. Because Workers are @@ -90,11 +97,13 @@ config object is only honored the first time this is called. Subsequent calls ignore the argument and return the same (configured) object which gets initialized by the first call. + This function will throw if any of the required config options are + missing. The config object properties include: - `exports`[^1]: the "exports" object for the current WASM - environment. In an Emscripten build, this should be set to + environment. In an Emscripten-based build, this should be set to `Module['asm']`. - `memory`[^1]: optional WebAssembly.Memory object, defaulting to @@ -104,7 +113,7 @@ WASM-exported memory. - `bigIntEnabled`: true if BigInt support is enabled. Defaults to - true if self.BigInt64Array is available, else false. Some APIs + true if `self.BigInt64Array` is available, else false. Some APIs will throw exceptions if called without BigInt support, as BigInt is required for marshalling C-side int64 into and out of JS. @@ -116,10 +125,12 @@ the `free(3)`-compatible routine for the WASM environment. Defaults to `"free"`. - - `wasmfsOpfsDir`[^1]: if the environment supports persistent storage, this - directory names the "mount point" for that directory. It must be prefixed - by `/` and may currently contain only a single directory-name part. Using - the root directory name is not supported by any current persistent backend. + - `wasmfsOpfsDir`[^1]: if the environment supports persistent + storage, this directory names the "mount point" for that + directory. It must be prefixed by `/` and may contain only a + single directory-name part. Using the root directory name is not + supported by any current persistent backend. This setting is + only used in WASMFS-enabled builds. [^1] = This property may optionally be a function, in which case this diff --git a/manifest b/manifest index 5812aa2d93..c246f6edbf 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sdocumentation\sregarding\snegative\slength\sparameters\sfor\nsqlite3_result_text()\sinterfaces,\sto\spoint\sout\sthat\sthe\slength\sparameter\nto\ssqlite3_result_text64()\scannot\sbe\snegative.\n[forum:/forumpost/cf1d043b07|Forum\spost\scf1d043b07].\nComment/documentation\schange\sonly. -D 2022-11-07T11:19:28.025 +C Minor\swasm\sdoc\stouchups.\sNo\scode\schanges. +D 2022-11-07T12:12:27.335 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -502,7 +502,7 @@ F ext/wasm/api/sqlite3-api-cleanup.js ecdc69dbfccfe26146f04799fcfd4a6f5790d46e7e F ext/wasm/api/sqlite3-api-glue.js 056f44b82c126358a0175e08a892d56fadfce177b0d7a0012502a6acf67ea6d5 F ext/wasm/api/sqlite3-api-oo1.js e9a83489bbb4838ce0aee46eaaa9350e0e25a5b926b565e4f5ae8e840e4fbaed F ext/wasm/api/sqlite3-api-opfs.js cdcbb57acc66f4569ac9e18f9d13d5a3657d8aae195725c6324943da56c1005d -F ext/wasm/api/sqlite3-api-prologue.js 952ba908cc5ee42728c5c09dd549af32ef0c3cc15ab7b919a8007c5684f69320 +F ext/wasm/api/sqlite3-api-prologue.js 80ec5c035b0fd06ae6fbb4fb9de4cada005d044e4bd9bb60cfa7c0f313e927ba F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3 F ext/wasm/api/sqlite3-opfs-async-proxy.js ab7d2888ad9b3dd24bb782bd882fcada2a20cb88eb78c8f36e7bfe708857dbd1 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P ea30a6bfc463acce26a4d710e7bf56519ad096ce2fe904ee7e199f5c55068034 -R 061e473e36c5f0cba5c53d7cebd5abaf -U drh -Z cccd331808932afe75bd690520d4669f +P 8016507651f377b08deb3a13cc559d56ce6e934c3073a8e63d05fd946b8403a4 +R af437730f2e2fe46fe54c47d2818a8df +U stephan +Z 08ec6481128f12897d827be1afc2d44a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a42c11dd2e..548c5921c0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8016507651f377b08deb3a13cc559d56ce6e934c3073a8e63d05fd946b8403a4 \ No newline at end of file +2c448368913a844bdb5e69f8fa3bad91a2b6612ba3b7f3f650dd07b81db25a77 \ No newline at end of file From da01757870dabf3994a80f6f153018cd7c87b154 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 7 Nov 2022 12:21:06 +0000 Subject: [PATCH 15/44] Fix requirements marks so that they match documentation corrections. FossilOrigin-Name: 10d6189d23133006b39ea230045a918483721dd48f5558f77e57e23693097d16 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/btree.c | 4 ++-- test/tkt-80e031a00f.test | 7 +++---- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index c246f6edbf..cb5f0d94c3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\swasm\sdoc\stouchups.\sNo\scode\schanges. -D 2022-11-07T12:12:27.335 +C Fix\srequirements\smarks\sso\sthat\sthey\smatch\sdocumentation\scorrections. +D 2022-11-07T12:21:06.865 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -575,7 +575,7 @@ F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf F src/backup.c a2891172438e385fdbe97c11c9745676bec54f518d4447090af97189fd8e52d7 F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca -F src/btree.c 36f21a5596227507e285dd7a9ed967118031fdf331fe56d61625d7c8958f2d1e +F src/btree.c 6321ff29261bf9726e6b231058ff21b1ccf9f441a0b718b76c37341b16fa14ce F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22 F src/btreeInt.h 8ce1332edd89dfd2461d561ac10a0ab5601c8e06200cb5230596c3caaf54482e F src/build.c d3e43e950e4e377c1d451a4862556792acdef1faba14a03f899d30d09731c48b @@ -1617,7 +1617,7 @@ F test/tkt-78e04e52ea.test b731f2ab7d1c2482ac5152097da02ef4805a45147ba9498d3cd9d F test/tkt-7a31705a7e6.test 9e9c057b6a9497c8f7ba7b16871029414ccf6550e7345d9085d6d71c9a56bb6f F test/tkt-7bbfb7d442.test e87b59e620700b5a52ecd92f05d56686c1cad9e1aa17456eada55e0bb821b698 F test/tkt-80ba201079.test 105a721e6aad0ae3c5946d7615d1e4d03f6145b8 -F test/tkt-80e031a00f.test 9ee36348b761bf7c14261e002b75a4c0d5a04d4c +F test/tkt-80e031a00f.test 7c93af53f43527f50020983a4bcc39b077e77c7362d7af8e04a5fd155fe5e829 F test/tkt-8454a207b9.test aff2e76143cfa443ddce6f7d85968a2e9b57a3deb0b881b730120740555f9e2f F test/tkt-868145d012.test a5f941107ece6a64410ca4755c6329b7eb57a356 F test/tkt-8c63ff0ec.test 258b7fc8d7e4e1cb5362c7d65c143528b9c4cbed @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 8016507651f377b08deb3a13cc559d56ce6e934c3073a8e63d05fd946b8403a4 -R af437730f2e2fe46fe54c47d2818a8df -U stephan -Z 08ec6481128f12897d827be1afc2d44a +P 2c448368913a844bdb5e69f8fa3bad91a2b6612ba3b7f3f650dd07b81db25a77 +R 501b73220d1b13bbd9bfe624235248b2 +U drh +Z beb5dbfff782217ad4460048cb127dcb # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 548c5921c0..32a46b772e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2c448368913a844bdb5e69f8fa3bad91a2b6612ba3b7f3f650dd07b81db25a77 \ No newline at end of file +10d6189d23133006b39ea230045a918483721dd48f5558f77e57e23693097d16 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 2ccd09c277..df24b7b33c 100644 --- a/src/btree.c +++ b/src/btree.c @@ -6255,8 +6255,8 @@ static int allocateBtreePage( assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) ); pPage1 = pBt->pPage1; mxPage = btreePagecount(pBt); - /* EVIDENCE-OF: R-05119-02637 The 4-byte big-endian integer at offset 36 - ** stores stores the total number of pages on the freelist. */ + /* EVIDENCE-OF: R-21003-45125 The 4-byte big-endian integer at offset 36 + ** stores the total number of pages on the freelist. */ n = get4byte(&pPage1->aData[36]); testcase( n==mxPage-1 ); if( n>=mxPage ){ diff --git a/test/tkt-80e031a00f.test b/test/tkt-80e031a00f.test index 4ad0a772a5..56449dba23 100644 --- a/test/tkt-80e031a00f.test +++ b/test/tkt-80e031a00f.test @@ -24,11 +24,10 @@ source $testdir/malloc_common.tcl # result of IN is false and the result of NOT IN is true, regardless of # the left operand and even if the left operand is NULL. # -# EVIDENCE-OF: R-13595-45863 Note that SQLite allows the parenthesized +# EVIDENCE-OF: R-64309-54027 Note that SQLite allows the parenthesized # list of scalar values on the right-hand side of an IN or NOT IN -# operator to be an empty list but most other SQL database database -# engines and the SQL92 standard require the list to contain at least -# one element. +# operator to be an empty list but most other SQL database engines and +# the SQL92 standard require the list to contain at least one element. # do_execsql_test tkt-80e031a00f.1 {SELECT 1 IN ()} 0 do_execsql_test tkt-80e031a00f.1b {SELECT 1 IN (2)} 0 From 690d4c545db74e35d2360cfb7674cbb58d904695 Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 7 Nov 2022 13:06:20 +0000 Subject: [PATCH 16/44] Add sqlite3.wasm.alloc.impl() as a "public back door" into the low-level non-throwing allocator. Correct sqlite3.WasmAllocError constructor to behave like its usages expect it to and add tests for that. FossilOrigin-Name: cea8bf9a144d842c4755c3130273524926e8c4831d7f21c4e34d4e8c74109c8c --- ext/wasm/api/sqlite3-api-prologue.js | 58 +++++++++++++++++++++------- ext/wasm/tester1.js | 14 ++++++- manifest | 16 ++++---- manifest.uuid | 2 +- 4 files changed, 65 insertions(+), 25 deletions(-) diff --git a/ext/wasm/api/sqlite3-api-prologue.js b/ext/wasm/api/sqlite3-api-prologue.js index d633064bea..fed1c56669 100644 --- a/ext/wasm/api/sqlite3-api-prologue.js +++ b/ext/wasm/api/sqlite3-api-prologue.js @@ -399,8 +399,22 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( exceptions. */ class WasmAllocError extends Error { + /** + If called with 2 arguments and the 2nd one is an object, it + behaves like the Error constructor, else it concatenates all + arguments together with a single space between each to + construct an error message string. As a special case, if + called with no arguments then it uses a default error + message. + */ constructor(...args){ - super(...args); + if(2===args.length && 'object'===typeof args){ + super(...args); + }else if(args.length){ + super(args.join(' ')); + }else{ + super("Allocation failed."); + } this.name = 'WasmAllocError'; } }; @@ -710,21 +724,33 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( API NOT throw and must instead return SQLITE_NOMEM (or equivalent, depending on the context). - That said, very few cases in the API can result in + Very few cases in the sqlite3 JS APIs can result in client-defined functions propagating exceptions via the C-style - API. Most notably, this applies ot User-defined SQL Functions - (UDFs) registered via sqlite3_create_function_v2(). For that - specific case it is recommended that all UDF creation be - funneled through a utility function and that a wrapper function - be added around the UDF which catches any exception and sets - the error state to OOM. (The overall complexity of registering - UDFs essentially requires a helper for doing so!) + API. Most notably, this applies to WASM-bound JS functions + which are created directly by clients and passed on _as WASM + function pointers_ to functions such as + sqlite3_create_function_v2(). Such bindings created + transparently by this API will automatically use wrappers which + catch exceptions and convert them to appropriate error codes. + + For cases where non-throwing allocation is required, use + sqlite3.wasm.alloc.impl(), which is direct binding of the + underlying C-level allocator. + + Design note: this function is not named "malloc" primarily + because Emscripten uses that name and we wanted to avoid any + confusion early on in this code's development, when it still + had close ties to Emscripten's glue code. */ alloc: undefined/*installed later*/, + /** The API's one single point of access to the WASM-side memory deallocator. Works like free(3) (and is likely bound to free()). + + Design note: this function is not named "free" for the same + reason that this.alloc() is not called this.malloc(). */ dealloc: undefined/*installed later*/ @@ -752,7 +778,9 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( wasm.allocFromTypedArray = function(srcTypedArray){ affirmBindableTypedArray(srcTypedArray); const pRet = wasm.alloc(srcTypedArray.byteLength || 1); - wasm.heapForSize(srcTypedArray.constructor).set(srcTypedArray.byteLength ? srcTypedArray : [0], pRet); + wasm.heapForSize(srcTypedArray.constructor).set( + srcTypedArray.byteLength ? srcTypedArray : [0], pRet + ); return pRet; }; @@ -763,13 +791,13 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( if(!(f instanceof Function)) toss3("Missing required exports[",key,"] function."); } - wasm.alloc = function(n){ - const m = wasm.exports[keyAlloc](n); - if(!m) throw new WasmAllocError("Failed to allocate "+n+" bytes."); + wasm.alloc = function f(n){ + const m = f.impl(n); + if(!m) throw new WasmAllocError("Failed to allocate",n," bytes."); return m; }; - - wasm.dealloc = (m)=>wasm.exports[keyDealloc](m); + wasm.alloc.impl = wasm.exports[keyAlloc]; + wasm.dealloc = wasm.exports[keyDealloc]; /** Reports info about compile-time options using diff --git a/ext/wasm/tester1.js b/ext/wasm/tester1.js index 3fe6a0ac79..99fb5b3184 100644 --- a/ext/wasm/tester1.js +++ b/ext/wasm/tester1.js @@ -342,8 +342,20 @@ throw new sqlite3.WasmAllocError; }catch(e){ T.assert(e instanceof Error) - .assert(e instanceof sqlite3.WasmAllocError); + .assert(e instanceof sqlite3.WasmAllocError) + .assert("Allocation failed." === e.message); } + try { + throw new sqlite3.WasmAllocError("test",{ + cause: 3 + }); + }catch(e){ + T.assert(3 === e.cause) + .assert("test" === e.message); + } + try {throw new sqlite3.WasmAllocError("test","ing",".")} + catch(e){T.assert("test ing ." === e.message)} + try{ throw new sqlite3.SQLite3Error(capi.SQLITE_SCHEMA) } catch(e){ T.assert('SQLITE_SCHEMA' === e.message) } try{ sqlite3.SQLite3Error.toss(capi.SQLITE_CORRUPT,{cause: true}) } diff --git a/manifest b/manifest index cb5f0d94c3..fe11c12601 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\srequirements\smarks\sso\sthat\sthey\smatch\sdocumentation\scorrections. -D 2022-11-07T12:21:06.865 +C Add\ssqlite3.wasm.alloc.impl()\sas\sa\s"public\sback\sdoor"\sinto\sthe\slow-level\snon-throwing\sallocator.\sCorrect\ssqlite3.WasmAllocError\sconstructor\sto\sbehave\slike\sits\susages\sexpect\sit\sto\sand\sadd\stests\sfor\sthat. +D 2022-11-07T13:06:20.227 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -502,7 +502,7 @@ F ext/wasm/api/sqlite3-api-cleanup.js ecdc69dbfccfe26146f04799fcfd4a6f5790d46e7e F ext/wasm/api/sqlite3-api-glue.js 056f44b82c126358a0175e08a892d56fadfce177b0d7a0012502a6acf67ea6d5 F ext/wasm/api/sqlite3-api-oo1.js e9a83489bbb4838ce0aee46eaaa9350e0e25a5b926b565e4f5ae8e840e4fbaed F ext/wasm/api/sqlite3-api-opfs.js cdcbb57acc66f4569ac9e18f9d13d5a3657d8aae195725c6324943da56c1005d -F ext/wasm/api/sqlite3-api-prologue.js 80ec5c035b0fd06ae6fbb4fb9de4cada005d044e4bd9bb60cfa7c0f313e927ba +F ext/wasm/api/sqlite3-api-prologue.js fd526fa017fa2578673ca18158354515c719e719a5d93f2f6d0e43f39170430e F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3 F ext/wasm/api/sqlite3-opfs-async-proxy.js ab7d2888ad9b3dd24bb782bd882fcada2a20cb88eb78c8f36e7bfe708857dbd1 @@ -549,7 +549,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555 F ext/wasm/test-opfs-vfs.js 44363db07b2a20e73b0eb1808de4400ca71b703af718d0fa6d962f15e73bf2ac F ext/wasm/tester1-worker.html 51bf39e2b87f974ae3d5bc3086e2fb36d258f3698c54f6e21ba4b3b99636fa27 F ext/wasm/tester1.html 624ec41cd9f78a1f2b6d7df70aaa7a6394396b1f2455ecbd6de5775c1275b121 -F ext/wasm/tester1.js 3a5558201359ff8a1c3051ab24fcc8bed5a4e99ae5e086e5184cbfc915d08724 +F ext/wasm/tester1.js bff806de454de115922d78c056f11d523ec7ed9ed3839d4e21433a9f72558b88 F ext/wasm/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd72273503ae7d5 F ext/wasm/wasmfs.make edfd60691d10fd19ada4c061280fd7fbe4cf5f6bf6b913268e8ebedfccea6ab5 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 2c448368913a844bdb5e69f8fa3bad91a2b6612ba3b7f3f650dd07b81db25a77 -R 501b73220d1b13bbd9bfe624235248b2 -U drh -Z beb5dbfff782217ad4460048cb127dcb +P 10d6189d23133006b39ea230045a918483721dd48f5558f77e57e23693097d16 +R dbbc6e5147410c1ff1f5e52d341a107c +U stephan +Z 38b0ee956ab9968f2c2619fa1c2e4c41 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 32a46b772e..7d3ca44fbd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -10d6189d23133006b39ea230045a918483721dd48f5558f77e57e23693097d16 \ No newline at end of file +cea8bf9a144d842c4755c3130273524926e8c4831d7f21c4e34d4e8c74109c8c \ No newline at end of file From e38b6e031805fb274aa814dfe7c609aa1a17a171 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 7 Nov 2022 15:01:05 +0000 Subject: [PATCH 17/44] Fix typo in comment. FossilOrigin-Name: c3b94d7d4697a5c3983253f6266c544d8037617778a09d491bc12eb13f08ac75 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os_win.c | 5 +++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index fe11c12601..7d5d1ad65e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\ssqlite3.wasm.alloc.impl()\sas\sa\s"public\sback\sdoor"\sinto\sthe\slow-level\snon-throwing\sallocator.\sCorrect\ssqlite3.WasmAllocError\sconstructor\sto\sbehave\slike\sits\susages\sexpect\sit\sto\sand\sadd\stests\sfor\sthat. -D 2022-11-07T13:06:20.227 +C Fix\stypo\sin\scomment. +D 2022-11-07T15:01:05.980 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -621,7 +621,7 @@ F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_kv.c 0e59600d25b72034c7666b8b7dcc527f039b5d9c16f24a7eca4c08c66f63c364 F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107 F src/os_unix.c 287aa5f5691a2b356780c63e83abaa33549add84227b8313395f04088486d79c -F src/os_win.c 8d129ae3e59e0fa900e20d0ad789e96f2e08177f0b00b53cdda65c40331e0902 +F src/os_win.c 295fe45f18bd86f2477f4cd79f3377c6f883ceb941b1f46808665c73747f2345 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 6176d9752eb580419e8fef4592dc417a6b00ddfd43ee22f818819bf8840ceee8 F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 10d6189d23133006b39ea230045a918483721dd48f5558f77e57e23693097d16 -R dbbc6e5147410c1ff1f5e52d341a107c -U stephan -Z 38b0ee956ab9968f2c2619fa1c2e4c41 +P cea8bf9a144d842c4755c3130273524926e8c4831d7f21c4e34d4e8c74109c8c +R 832a383168fc2e8a0fdf3800c81c0506 +U drh +Z 4c23a15de02032ecc5a56e47dc98929f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 7d3ca44fbd..fb284922df 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cea8bf9a144d842c4755c3130273524926e8c4831d7f21c4e34d4e8c74109c8c \ No newline at end of file +c3b94d7d4697a5c3983253f6266c544d8037617778a09d491bc12eb13f08ac75 \ No newline at end of file diff --git a/src/os_win.c b/src/os_win.c index d71fb39220..abecf1b936 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -4725,9 +4725,10 @@ static int winMakeEndInDirSep(int nBuf, char *zBuf){ } /* -** If sqlite3_temp_directory is not, take the mutex and return true. +** If sqlite3_temp_directory is defined, take the mutex and return true. ** -** If sqlite3_temp_directory is NULL, omit the mutex and return false. +** If sqlite3_temp_directory is NULL (undefined), omit the mutex and +** return false. */ static int winTempDirDefined(void){ sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); From 54422235e9f072409698a11873acde4cfdf4743a Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 7 Nov 2022 15:23:51 +0000 Subject: [PATCH 18/44] Fix an obsolete comment. FossilOrigin-Name: e377c0a1ef030395293c5f24d7cb8e5b36ce972e9fac31b99c8425075486a46a --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 7d5d1ad65e..ae4b203803 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\stypo\sin\scomment. -D 2022-11-07T15:01:05.980 +C Fix\san\sobsolete\scomment. +D 2022-11-07T15:23:51.075 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -636,7 +636,7 @@ F src/printf.c e99ee9741e79ae3873458146f59644276657340385ade4e76a5f5d1c25793764 F src/random.c 546d6feb15ec69c1aafe9bb351a277cbb498fd5410e646add673acb805714960 F src/resolve.c efea4e5fbecfd6d0a9071b0be0d952620991673391b6ffaaf4c277b0bb674633 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 12cb5162e606290354f9512ff0c30fc6dc4d7a77a92b6c5b581395f9c4edd047 +F src/select.c 9886d6669f5787471aab6ae52af76fad90b53edb1c218fc9ed9d953363bc5184 F src/shell.c.in 84bb08d8762920285f08f1c0993f1b3992ac43af5d72445cb8a973fc50c71923 F src/sqlite.h.in 46052b3bcab8d34387bbe9ae4f49da9c2e05f19188bbd15a1c05abd895b56b23 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cea8bf9a144d842c4755c3130273524926e8c4831d7f21c4e34d4e8c74109c8c -R 832a383168fc2e8a0fdf3800c81c0506 +P c3b94d7d4697a5c3983253f6266c544d8037617778a09d491bc12eb13f08ac75 +R dd4978287b5cf609d382d6cbd8393f07 U drh -Z 4c23a15de02032ecc5a56e47dc98929f +Z 53b9d7bd5407d202e6402a998a55a00f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index fb284922df..8925f56312 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c3b94d7d4697a5c3983253f6266c544d8037617778a09d491bc12eb13f08ac75 \ No newline at end of file +e377c0a1ef030395293c5f24d7cb8e5b36ce972e9fac31b99c8425075486a46a \ No newline at end of file diff --git a/src/select.c b/src/select.c index 602a9d7df4..b0f79f840b 100644 --- a/src/select.c +++ b/src/select.c @@ -3693,8 +3693,8 @@ static int multiSelectOrderBy( */ sqlite3VdbeResolveLabel(v, labelEnd); - /* Reassemble the compound query so that it will be freed correctly - ** by the calling function */ + /* Make arrangements to free the 2nd and subsequent arms of the compound + ** after the parse has finished */ if( pSplit->pPrior ){ sqlite3ParserAddCleanup(pParse, (void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior); From 49507d2af6648f1c548cdc2175ac74ae0331973c Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 7 Nov 2022 17:21:53 +0000 Subject: [PATCH 19/44] Minor doc updates in speed-check.sh. No code changes. FossilOrigin-Name: d2ed4116fbf1de3c840f84e05db6f29f7b489518ac07d56f61df153deab6bf6b --- manifest | 14 +++++++------- manifest.uuid | 2 +- tool/speed-check.sh | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index ae4b203803..e9cc151f56 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sobsolete\scomment. -D 2022-11-07T15:23:51.075 +C Minor\sdoc\supdates\sin\sspeed-check.sh.\sNo\scode\schanges. +D 2022-11-07T17:21:53.311 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -2011,7 +2011,7 @@ F tool/showstat4.c 0682ebea7abf4d3657f53c4a243f2e7eab48eab344ed36a94bb75dcd19a5c F tool/showwal.c 0253c187ae16fdae9cde89e63e1dfcd3bb35e5416d066415f99e2f8cac6ab03d F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe F tool/spaceanal.tcl 1b5be34c6223cb1af06da2a10fb77863eb869b1962d055820b0a11cf2336ab45 -F tool/speed-check.sh 13f8e07dbfe25f3aecda33fb6068894665af61ca1360a7b654be0ad0c3f3ae0b +F tool/speed-check.sh 9b27e158330a6587e92214b2344cc6fadde514996c0648fc0de7955ef7a79d77 F tool/speedtest.tcl 06c76698485ccf597b9e7dbb1ac70706eb873355 F tool/speedtest16.c ecb6542862151c3e6509bbc00509b234562ae81e F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff @@ -2054,8 +2054,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c3b94d7d4697a5c3983253f6266c544d8037617778a09d491bc12eb13f08ac75 -R dd4978287b5cf609d382d6cbd8393f07 -U drh -Z 53b9d7bd5407d202e6402a998a55a00f +P e377c0a1ef030395293c5f24d7cb8e5b36ce972e9fac31b99c8425075486a46a +R f5acca92b76100558a23567d01b4e532 +U stephan +Z f9eb95c0c00a0b5ae6e90e4af7b92086 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8925f56312..bc43c26e8e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e377c0a1ef030395293c5f24d7cb8e5b36ce972e9fac31b99c8425075486a46a \ No newline at end of file +d2ed4116fbf1de3c840f84e05db6f29f7b489518ac07d56f61df153deab6bf6b \ No newline at end of file diff --git a/tool/speed-check.sh b/tool/speed-check.sh index 879ffa9562..4e070565e0 100644 --- a/tool/speed-check.sh +++ b/tool/speed-check.sh @@ -3,9 +3,9 @@ # This is a template for a script used for day-to-day size and # performance monitoring of SQLite. Typical usage: # -# sh run-speed-test.sh trunk # Baseline measurement of trunk -# sh run-speed-test.sh x1 # Measure some experimental change -# fossil test-diff --tk cout-trunk.txt cout-x1.txt # View chanages +# sh speed-check.sh trunk # Baseline measurement of trunk +# sh speed-check.sh x1 # Measure some experimental change +# fossil xdiff --tk cout-trunk.txt cout-x1.txt # View chanages # # There are multiple output files, all with a base name given by # the first argument: From 40503750fad68916db27bd3f7bbd4667094d7802 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 7 Nov 2022 18:00:18 +0000 Subject: [PATCH 20/44] Add the sqlite3rbu_rename_handler() API. To override the default routine that RBU uses to rename files. FossilOrigin-Name: ebbb1f88e7b5d6cbe84d400f1a187acedb4c668d0b7e4c63bf1496e57da9b8ad --- ext/rbu/rburename.test | 54 +++++++++++++++++++++++++++++ ext/rbu/sqlite3rbu.c | 78 ++++++++++++++++++++++++++++-------------- ext/rbu/sqlite3rbu.h | 28 +++++++++++++++ ext/rbu/test_rbu.c | 57 ++++++++++++++++++++++++++++-- manifest | 19 +++++----- manifest.uuid | 2 +- 6 files changed, 199 insertions(+), 39 deletions(-) create mode 100644 ext/rbu/rburename.test diff --git a/ext/rbu/rburename.test b/ext/rbu/rburename.test new file mode 100644 index 0000000000..2275396bca --- /dev/null +++ b/ext/rbu/rburename.test @@ -0,0 +1,54 @@ +# 2022 November 07 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# + +source [file join [file dirname [info script]] rbu_common.tcl] +set ::testprefix rburename + + +do_execsql_test 1.0 { + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + INSERT INTO t1 VALUES(3, 4); + INSERT INTO t1 VALUES(5, 6); +} + +forcedelete test.db-vacuum + +proc my_rename {old new} { + lappend ::my_rename_calls [list [file tail $old] [file tail $new]] + file rename $old $new +} + +do_test 1.1 { + sqlite3rbu_vacuum rbu test.db + rbu rename_handler my_rename + while {[rbu step]=="SQLITE_OK"} {} + rbu close +} SQLITE_DONE + +do_test 1.2 { + set ::my_rename_calls +} {{test.db-oal test.db-wal}} + +proc my_rename {old new} { + error "something went wrong" +} + +do_test 1.3 { + sqlite3rbu_vacuum rbu test.db + rbu rename_handler my_rename + while {[rbu step]=="SQLITE_OK"} {} + list [catch { rbu close } msg] $msg +} {1 SQLITE_IOERR} + +finish_test diff --git a/ext/rbu/sqlite3rbu.c b/ext/rbu/sqlite3rbu.c index 27a3720daa..d79439010f 100644 --- a/ext/rbu/sqlite3rbu.c +++ b/ext/rbu/sqlite3rbu.c @@ -393,6 +393,8 @@ struct sqlite3rbu { int nPagePerSector; /* Pages per sector for pTargetFd */ i64 iOalSz; i64 nPhaseOneStep; + void *pRenameArg; + int (*xRename)(void*, const char*, const char*); /* The following state variables are used as part of the incremental ** checkpoint stage (eStage==RBU_STAGE_CKPT). See comments surrounding @@ -3241,32 +3243,7 @@ static void rbuMoveOalFile(sqlite3rbu *p){ } if( p->rc==SQLITE_OK ){ -#if defined(_WIN32_WCE) - { - LPWSTR zWideOal; - LPWSTR zWideWal; - - zWideOal = rbuWinUtf8ToUnicode(zOal); - if( zWideOal ){ - zWideWal = rbuWinUtf8ToUnicode(zWal); - if( zWideWal ){ - if( MoveFileW(zWideOal, zWideWal) ){ - p->rc = SQLITE_OK; - }else{ - p->rc = SQLITE_IOERR; - } - sqlite3_free(zWideWal); - }else{ - p->rc = SQLITE_IOERR_NOMEM; - } - sqlite3_free(zWideOal); - }else{ - p->rc = SQLITE_IOERR_NOMEM; - } - } -#else - p->rc = rename(zOal, zWal) ? SQLITE_IOERR : SQLITE_OK; -#endif + p->rc = p->xRename(p->pRenameArg, zOal, zWal); } if( p->rc!=SQLITE_OK @@ -4005,6 +3982,7 @@ static sqlite3rbu *openRbuHandle( /* Create the custom VFS. */ memset(p, 0, sizeof(sqlite3rbu)); + sqlite3rbu_rename_handler(p, 0, 0); rbuCreateVfs(p); /* Open the target, RBU and state databases */ @@ -4396,6 +4374,54 @@ int sqlite3rbu_savestate(sqlite3rbu *p){ return rc; } +/* +** Default xRename callback for RBU. +*/ +static int xDefaultRename(void *pArg, const char *zOld, const char *zNew){ + int rc = SQLITE_OK; +#if defined(_WIN32_WCE) + { + LPWSTR zWideOld; + LPWSTR zWideNew; + + zWideOld = rbuWinUtf8ToUnicode(zOld); + if( zWideOld ){ + zWideNew = rbuWinUtf8ToUnicode(zNew); + if( zWideNew ){ + if( MoveFileW(zWideOld, zWideNew) ){ + rc = SQLITE_OK; + }else{ + rc = SQLITE_IOERR; + } + sqlite3_free(zWideNew); + }else{ + rc = SQLITE_IOERR_NOMEM; + } + sqlite3_free(zWideOld); + }else{ + rc = SQLITE_IOERR_NOMEM; + } + } +#else + rc = rename(zOld, zNew) ? SQLITE_IOERR : SQLITE_OK; +#endif + return rc; +} + +void sqlite3rbu_rename_handler( + sqlite3rbu *pRbu, + void *pArg, + int (*xRename)(void *pArg, const char *zOld, const char *zNew) +){ + if( xRename ){ + pRbu->xRename = xRename; + pRbu->pRenameArg = pArg; + }else{ + pRbu->xRename = xDefaultRename; + pRbu->pRenameArg = 0; + } +} + /************************************************************************** ** Beginning of RBU VFS shim methods. The VFS shim modifies the behaviour ** of a standard VFS in the following ways: diff --git a/ext/rbu/sqlite3rbu.h b/ext/rbu/sqlite3rbu.h index 69d89500a0..c819cd3f2a 100644 --- a/ext/rbu/sqlite3rbu.h +++ b/ext/rbu/sqlite3rbu.h @@ -544,6 +544,34 @@ SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int*pnTwo); SQLITE_API int sqlite3rbu_state(sqlite3rbu *pRbu); +/* +** As part of applying an RBU update or performing an RBU vacuum operation, +** the system must at one point move the *-oal file to the equivalent *-wal +** path. Normally, it does this by invoking POSIX function rename(2) directly. +** Except on WINCE platforms, where it uses win32 API MoveFileW(). This +** function may be used to register a callback that the RBU module will invoke +** instead of one of these APIs. +** +** If a callback is registered with an RBU handle, it invokes it instead +** of rename(2) when it needs to move a file within the file-system. The +** first argument passed to the xRename() callback is a copy of the second +** argument (pArg) passed to this function. The second is the full path +** to the file to move and the third the full path to which it should be +** moved. The callback function should return SQLITE_OK to indicate +** success. If an error occurs, it should return an SQLite error code. +** In this case the RBU operation will be abandoned and the error returned +** to the RBU user. +** +** Passing a NULL pointer in place of the xRename argument to this function +** restores the default behaviour. +*/ +SQLITE_API void sqlite3rbu_rename_handler( + sqlite3rbu *pRbu, + void *pArg, + int (*xRename)(void *pArg, const char *zOld, const char *zNew) +); + + /* ** Create an RBU VFS named zName that accesses the underlying file-system ** via existing VFS zParent. Or, if the zParent parameter is passed NULL, diff --git a/ext/rbu/test_rbu.c b/ext/rbu/test_rbu.c index 6d04bfe8cc..af794d80f8 100644 --- a/ext/rbu/test_rbu.c +++ b/ext/rbu/test_rbu.c @@ -26,6 +26,14 @@ # endif #endif #include +#include + +typedef struct TestRbu TestRbu; +struct TestRbu { + sqlite3rbu *pRbu; + Tcl_Interp *interp; + Tcl_Obj *xRename; +}; /* From main.c */ extern const char *sqlite3ErrName(int); @@ -55,6 +63,20 @@ void test_rbu_delta(sqlite3_context *pCtx, int nArg, sqlite3_value **apVal){ Tcl_DecrRefCount(pScript); } +static int xRenameCallback(void *pArg, const char *zOld, const char *zNew){ + int rc = SQLITE_OK; + TestRbu *pTest = (TestRbu*)pArg; + Tcl_Obj *pEval = Tcl_DuplicateObj(pTest->xRename); + + Tcl_IncrRefCount(pEval); + Tcl_ListObjAppendElement(pTest->interp, pEval, Tcl_NewStringObj(zOld, -1)); + Tcl_ListObjAppendElement(pTest->interp, pEval, Tcl_NewStringObj(zNew, -1)); + + rc = Tcl_EvalObjEx(pTest->interp, pEval, TCL_GLOBAL_ONLY); + Tcl_DecrRefCount(pEval); + + return rc ? SQLITE_IOERR : SQLITE_OK; +} static int SQLITE_TCLAPI test_sqlite3rbu_cmd( ClientData clientData, @@ -63,7 +85,8 @@ static int SQLITE_TCLAPI test_sqlite3rbu_cmd( Tcl_Obj *CONST objv[] ){ int ret = TCL_OK; - sqlite3rbu *pRbu = (sqlite3rbu*)clientData; + TestRbu *pTest = (TestRbu*)clientData; + sqlite3rbu *pRbu = pTest->pRbu; struct RbuCmd { const char *zName; int nArg; @@ -82,6 +105,7 @@ static int SQLITE_TCLAPI test_sqlite3rbu_cmd( {"temp_size_limit", 3, "LIMIT"}, /* 10 */ {"temp_size", 2, ""}, /* 11 */ {"dbRbu_eval", 3, "SQL"}, /* 12 */ + {"rename_handler", 3, "SCRIPT"},/* 13 */ {0,0,0} }; int iCmd; @@ -127,6 +151,8 @@ static int SQLITE_TCLAPI test_sqlite3rbu_cmd( } ret = TCL_ERROR; } + if( pTest->xRename ) Tcl_DecrRefCount(pTest->xRename); + ckfree(pTest); break; } @@ -214,6 +240,19 @@ static int SQLITE_TCLAPI test_sqlite3rbu_cmd( break; } + case 13: /* rename_handler */ { + Tcl_Obj *pScript = objv[2]; + assert( !sqlite3_stricmp(aCmd[13].zName, "rename_handler") ); + if( Tcl_GetCharLength(pScript)==0 ){ + sqlite3rbu_rename_handler(pRbu, 0, 0); + }else{ + pTest->xRename = Tcl_DuplicateObj(pScript); + Tcl_IncrRefCount(pTest->xRename); + sqlite3rbu_rename_handler(pRbu, pTest, xRenameCallback); + } + break; + } + default: /* seems unlikely */ assert( !"cannot happen" ); break; @@ -222,6 +261,18 @@ static int SQLITE_TCLAPI test_sqlite3rbu_cmd( return ret; } +static void createRbuWrapper( + Tcl_Interp *interp, + const char *zCmd, + sqlite3rbu *pRbu +){ + TestRbu *pTest = (TestRbu*)ckalloc(sizeof(TestRbu)); + memset(pTest, 0, sizeof(TestRbu)); + pTest->pRbu = pRbu; + pTest->interp = interp; + Tcl_CreateObjCommand(interp, zCmd, test_sqlite3rbu_cmd, (ClientData)pTest, 0); +} + /* ** Tclcmd: sqlite3rbu CMD ?? */ @@ -247,7 +298,7 @@ static int SQLITE_TCLAPI test_sqlite3rbu( if( objc==5 ) zStateDb = Tcl_GetString(objv[4]); pRbu = sqlite3rbu_open(zTarget, zRbu, zStateDb); - Tcl_CreateObjCommand(interp, zCmd, test_sqlite3rbu_cmd, (ClientData)pRbu, 0); + createRbuWrapper(interp, zCmd, pRbu); Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } @@ -276,7 +327,7 @@ static int SQLITE_TCLAPI test_sqlite3rbu_vacuum( if( zStateDb && zStateDb[0]=='\0' ) zStateDb = 0; pRbu = sqlite3rbu_vacuum(zTarget, zStateDb); - Tcl_CreateObjCommand(interp, zCmd, test_sqlite3rbu_cmd, (ClientData)pRbu, 0); + createRbuWrapper(interp, zCmd, pRbu); Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } diff --git a/manifest b/manifest index e9cc151f56..b6d5bc0fe8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\sdoc\supdates\sin\sspeed-check.sh.\sNo\scode\schanges. -D 2022-11-07T17:21:53.311 +C Add\sthe\ssqlite3rbu_rename_handler()\sAPI.\sTo\soverride\sthe\sdefault\sroutine\sthat\sRBU\suses\sto\srename\sfiles. +D 2022-11-07T18:00:18.684 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -374,6 +374,7 @@ F ext/rbu/rbumisc.test 329986cf5dd51890c4eb906c2f960ebb773a79a64bed90f506b7c4178 F ext/rbu/rbumulti.test 5fb139058f37ddc5a113c5b93238de915b769b7792de41b44c983bc7c18cf5b9 F ext/rbu/rbupartial.test f25df014b8dbe3c5345851fba6e66f79ab237f57dc201b2d5f0dbae658ae5a4c F ext/rbu/rbuprogress.test 857cf1f8166c83ef977edb9ef4fc42d80f71fbd798652b46ae2f3a7031870f8d +F ext/rbu/rburename.test a9b4aea612352b74c45de1757edd2ecb2079348b1d4cc734572dc29e55b1b376 F ext/rbu/rburesume.test dbdc4ca504e9c76375a69e5f0d91205db967dcc509a5166ca80231f8fda49eb1 F ext/rbu/rbusave.test f4190a1a86fccf84f723af5c93813365ae33feda35845ba107b59683d1cdd926 F ext/rbu/rbusplit.test b37e7b40b38760881dc9c854bd40b4744c6b6cd74990754eca3bda0f407051e8 @@ -382,9 +383,9 @@ F ext/rbu/rbuvacuum.test 55e101e90168c2b31df6c9638fe73dc7f7cc666b6142266d1563697 F ext/rbu/rbuvacuum2.test 886add83fd74bcb02e6dd016ae5b585367bd58c5d0694c9d9ca7bdb1d1f578c2 F ext/rbu/rbuvacuum3.test 8addd82e4b83b4c93fa47428eae4fd0dbf410f8512c186f38e348feb49ba03dc F ext/rbu/rbuvacuum4.test a78898e438a44803eb2bc897ba3323373c9f277418e2d6d76e90f2f1dbccfd10 -F ext/rbu/sqlite3rbu.c 8737cabdfbee84bb25a7851ecef8b1312be332761238da9be6ddb10c62ad4291 -F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812 -F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a +F ext/rbu/sqlite3rbu.c 90b6b5be1cb6cbd9b7a7dc0c0641d5be63cf00cf9ec8c3b57d27217d28530ea9 +F ext/rbu/sqlite3rbu.h 02d981e2d39c151391759e1a400e29c7388730812957ac3db8dad7f6c9f9cfc8 +F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055 F ext/recover/dbdata.c 1d5353d3af247c4e0656f8f88a80564aa840644c1177212dd11a186dce4ab213 F ext/recover/recover1.test 02004eb8f9ec2825ba77e24742c18e45162cb21d27e76a3a435b83a759a1131a F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a @@ -2054,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e377c0a1ef030395293c5f24d7cb8e5b36ce972e9fac31b99c8425075486a46a -R f5acca92b76100558a23567d01b4e532 -U stephan -Z f9eb95c0c00a0b5ae6e90e4af7b92086 +P d2ed4116fbf1de3c840f84e05db6f29f7b489518ac07d56f61df153deab6bf6b +R 883198cf0956cf3ea945ee8907257d82 +U dan +Z f0f97d889869754ab1656f4d9587d370 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index bc43c26e8e..b211793766 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d2ed4116fbf1de3c840f84e05db6f29f7b489518ac07d56f61df153deab6bf6b \ No newline at end of file +ebbb1f88e7b5d6cbe84d400f1a187acedb4c668d0b7e4c63bf1496e57da9b8ad \ No newline at end of file From d9324a5226a32b664d070bd9e4e2e45d31d8436b Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 7 Nov 2022 18:36:02 +0000 Subject: [PATCH 21/44] Improve the ability of mkshellc.tcl to remove redundant typedefs from the generated shell.c code. This is needed to get shell.c to build on older C compilers. FossilOrigin-Name: 3645585f37631d60cefab1d55cdb1ee060aae87317b9b158a01329ca8a4d3e1e --- manifest | 14 +++++++------- manifest.uuid | 2 +- tool/mkshellc.tcl | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index b6d5bc0fe8..e1da3d05bb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\ssqlite3rbu_rename_handler()\sAPI.\sTo\soverride\sthe\sdefault\sroutine\sthat\sRBU\suses\sto\srename\sfiles. -D 2022-11-07T18:00:18.684 +C Improve\sthe\sability\sof\smkshellc.tcl\sto\sremove\sredundant\stypedefs\sfrom\sthe\ngenerated\sshell.c\scode.\s\sThis\sis\sneeded\sto\sget\sshell.c\sto\sbuild\son\solder\nC\scompilers. +D 2022-11-07T18:36:02.221 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1987,7 +1987,7 @@ F tool/mkopcodec.tcl 33d20791e191df43209b77d37f0ff0904620b28465cca6990cf8d60da61 F tool/mkopcodeh.tcl bcb2bd5affb545fd219ef0304c7978e2a356407ab723f45ec8569235892c1c3f F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa F tool/mkpragmatab.tcl bd07bd59d45d0f3448e123d6937e9811195f9908a51e09d774609883055bfd3d -F tool/mkshellc.tcl df5d249617f9cc94d5c48eb0401673eb3f31f383ecbc54e8a13ca3dd97e89450 +F tool/mkshellc.tcl f2338a4c38e4f4f56e01371f334fbdce2e5a3d1f35fc5b5363d006b972fae749 F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d2ed4116fbf1de3c840f84e05db6f29f7b489518ac07d56f61df153deab6bf6b -R 883198cf0956cf3ea945ee8907257d82 -U dan -Z f0f97d889869754ab1656f4d9587d370 +P ebbb1f88e7b5d6cbe84d400f1a187acedb4c668d0b7e4c63bf1496e57da9b8ad +R 7804554888bc684c344c3fe1b6c3276b +U drh +Z 5e56457afaeb4e9d88ce8f0890f14fb1 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b211793766..942aa9a46a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ebbb1f88e7b5d6cbe84d400f1a187acedb4c668d0b7e4c63bf1496e57da9b8ad \ No newline at end of file +3645585f37631d60cefab1d55cdb1ee060aae87317b9b158a01329ca8a4d3e1e \ No newline at end of file diff --git a/tool/mkshellc.tcl b/tool/mkshellc.tcl index 82ecd2f61a..a4c5590eeb 100644 --- a/tool/mkshellc.tcl +++ b/tool/mkshellc.tcl @@ -34,11 +34,11 @@ set in [open $topdir/src/shell.c.in] fconfigure $in -translation binary proc omit_redundant_typedefs {line} { global typedef_seen - if {[regexp {^typedef .*;} $line]} { - if {[info exists typedef_seen($line)]} { + if {[regexp {^typedef .*\y([a-zA-Z0-9_]+);} $line all typename]} { + if {[info exists typedef_seen($typename)]} { return "/* $line */" } - set typedef_seen($line) 1 + set typedef_seen($typename) 1 } return $line } From 80fafc25cec31058e576c9f80a3edd7ef859dbc3 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 7 Nov 2022 19:40:20 +0000 Subject: [PATCH 22/44] Further improvements to the handling of the u32 and u16 typedefs in the shell.c source file. FossilOrigin-Name: 55a19677d723147aeb2b4a86bbd01756ddeb2072cba72c3145ad32d335e203b0 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 2 ++ tool/mkshellc.tcl | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index e1da3d05bb..0916bc7d1a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improve\sthe\sability\sof\smkshellc.tcl\sto\sremove\sredundant\stypedefs\sfrom\sthe\ngenerated\sshell.c\scode.\s\sThis\sis\sneeded\sto\sget\sshell.c\sto\sbuild\son\solder\nC\scompilers. -D 2022-11-07T18:36:02.221 +C Further\simprovements\sto\sthe\shandling\sof\sthe\su32\sand\su16\stypedefs\sin\sthe\nshell.c\ssource\sfile. +D 2022-11-07T19:40:20.023 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -638,7 +638,7 @@ F src/random.c 546d6feb15ec69c1aafe9bb351a277cbb498fd5410e646add673acb805714960 F src/resolve.c efea4e5fbecfd6d0a9071b0be0d952620991673391b6ffaaf4c277b0bb674633 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 9886d6669f5787471aab6ae52af76fad90b53edb1c218fc9ed9d953363bc5184 -F src/shell.c.in 84bb08d8762920285f08f1c0993f1b3992ac43af5d72445cb8a973fc50c71923 +F src/shell.c.in 458cb3de9d548342fc645b699620b1af3de770d2ceec09ac71f86c19bd244064 F src/sqlite.h.in 46052b3bcab8d34387bbe9ae4f49da9c2e05f19188bbd15a1c05abd895b56b23 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h c4b9fa7a7e2bcdf850cfeb4b8a91d5ec47b7a00033bc996fd2ee96cbf2741f5f @@ -1987,7 +1987,7 @@ F tool/mkopcodec.tcl 33d20791e191df43209b77d37f0ff0904620b28465cca6990cf8d60da61 F tool/mkopcodeh.tcl bcb2bd5affb545fd219ef0304c7978e2a356407ab723f45ec8569235892c1c3f F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa F tool/mkpragmatab.tcl bd07bd59d45d0f3448e123d6937e9811195f9908a51e09d774609883055bfd3d -F tool/mkshellc.tcl f2338a4c38e4f4f56e01371f334fbdce2e5a3d1f35fc5b5363d006b972fae749 +F tool/mkshellc.tcl 02d0de8349ef830c0fb20d29680320bde2466e2ec422e5bd94c4317a7a7e8cc9 F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P ebbb1f88e7b5d6cbe84d400f1a187acedb4c668d0b7e4c63bf1496e57da9b8ad -R 7804554888bc684c344c3fe1b6c3276b +P 3645585f37631d60cefab1d55cdb1ee060aae87317b9b158a01329ca8a4d3e1e +R 464a7490d5785cedceee206c55537caa U drh -Z 5e56457afaeb4e9d88ce8f0890f14fb1 +Z 18e20ce83905083b1118871788a6f38f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 942aa9a46a..f87dd57dfe 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3645585f37631d60cefab1d55cdb1ee060aae87317b9b158a01329ca8a4d3e1e \ No newline at end of file +55a19677d723147aeb2b4a86bbd01756ddeb2072cba72c3145ad32d335e203b0 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 635361aa92..f164789776 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -16,6 +16,8 @@ /* This needs to come before any includes for MSVC compiler */ #define _CRT_SECURE_NO_WARNINGS #endif +typedef unsigned int u32; +typedef unsigned short int u16; /* ** Optionally #include a user-defined header, whereby compilation options diff --git a/tool/mkshellc.tcl b/tool/mkshellc.tcl index a4c5590eeb..35b4800719 100644 --- a/tool/mkshellc.tcl +++ b/tool/mkshellc.tcl @@ -36,7 +36,7 @@ proc omit_redundant_typedefs {line} { global typedef_seen if {[regexp {^typedef .*\y([a-zA-Z0-9_]+);} $line all typename]} { if {[info exists typedef_seen($typename)]} { - return "/* $line */" + return "/* [string map {/* // */ //} $line] */" } set typedef_seen($typename) 1 } From 64c40ec2c78866d6c9018312f92fe4071087729c Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 8 Nov 2022 15:49:12 +0000 Subject: [PATCH 23/44] Fix a problem in main.mk preventing the amalgamation-testfixture target from building. FossilOrigin-Name: ccf00a0e22a2a9815ff7db1c6c6457fce35aaf50843c1b5ff2adda22d6f70314 --- main.mk | 8 ++++---- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/main.mk b/main.mk index c0d84ed96e..76c62fcecd 100644 --- a/main.mk +++ b/main.mk @@ -390,7 +390,10 @@ TESTSRC += \ $(TOP)/ext/fts5/fts5_tcl.c \ $(TOP)/ext/fts5/fts5_test_mi.c \ $(TOP)/ext/fts5/fts5_test_tok.c \ - $(TOP)/ext/rtree/test_rtreedoc.c + $(TOP)/ext/rtree/test_rtreedoc.c \ + $(TOP)/ext/recover/sqlite3recover.c \ + $(TOP)/ext/recover/dbdata.c \ + $(TOP)/ext/recover/test_recover.c #TESTSRC += $(TOP)/ext/fts2/fts2_tokenizer.c @@ -446,9 +449,6 @@ TESTSRC2 = \ $(TOP)/ext/misc/stmt.c \ $(TOP)/ext/session/sqlite3session.c \ $(TOP)/ext/session/test_session.c \ - $(TOP)/ext/recover/sqlite3recover.c \ - $(TOP)/ext/recover/dbdata.c \ - $(TOP)/ext/recover/test_recover.c \ fts5.c # Header files used by all library source files. diff --git a/manifest b/manifest index 0916bc7d1a..81ae51dfb9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Further\simprovements\sto\sthe\shandling\sof\sthe\su32\sand\su16\stypedefs\sin\sthe\nshell.c\ssource\sfile. -D 2022-11-07T19:40:20.023 +C Fix\sa\sproblem\sin\smain.mk\spreventing\sthe\samalgamation-testfixture\starget\sfrom\sbuilding. +D 2022-11-08T15:49:12.915 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -556,7 +556,7 @@ F ext/wasm/wasmfs.make edfd60691d10fd19ada4c061280fd7fbe4cf5f6bf6b913268e8ebedfc F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 -F main.mk 73410c1f180660fd95c8203f35e1d4c1003e033d6bd0dbcb2c41610e4166500d +F main.mk fd90f1bd90bd4070c9af7e9c8396bd0cf4208a0186c8d18fa6e2609dff447d5d F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 3645585f37631d60cefab1d55cdb1ee060aae87317b9b158a01329ca8a4d3e1e -R 464a7490d5785cedceee206c55537caa -U drh -Z 18e20ce83905083b1118871788a6f38f +P 55a19677d723147aeb2b4a86bbd01756ddeb2072cba72c3145ad32d335e203b0 +R e35be0c56965a970c718b1c71996a354 +U dan +Z 4058b34591c1752ecb37a0b494045ec5 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f87dd57dfe..2909173798 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -55a19677d723147aeb2b4a86bbd01756ddeb2072cba72c3145ad32d335e203b0 \ No newline at end of file +ccf00a0e22a2a9815ff7db1c6c6457fce35aaf50843c1b5ff2adda22d6f70314 \ No newline at end of file From afe768193f7da893db01cc7dcf19a8b14197141b Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 8 Nov 2022 19:36:26 +0000 Subject: [PATCH 24/44] Do not attempt to run test script dbpagefault.test with SQLITE_OMIT_VIRTUALTABLE builds. FossilOrigin-Name: 901918c4867557e51160ef9c495e4e007de26cfe07c237addc00a388662957e8 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/dbpagefault.test | 5 +++++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 81ae51dfb9..fa912769aa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\sin\smain.mk\spreventing\sthe\samalgamation-testfixture\starget\sfrom\sbuilding. -D 2022-11-08T15:49:12.915 +C Do\snot\sattempt\sto\srun\stest\sscript\sdbpagefault.test\swith\sSQLITE_OMIT_VIRTUALTABLE\sbuilds. +D 2022-11-08T19:36:26.532 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -935,7 +935,7 @@ F test/dbfuzz001.test 55e1a3504f8dea84155e09912fe3b1c3ad77e0b1a938ec42ca03b8e51b F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee F test/dbfuzz2.c 4b3c12de4d98b1b2d908ab03d217d4619e47c8b23d5e67f8a6f2b1bdee7cae23 F test/dbpage.test fce29035c7566fd7835ec0f19422cb4b9c6944ce0e1b936ff8452443f92e887d -F test/dbpagefault.test cce748283f9485b860f7d9d94e0e5823e3a50f7ea4b860e7078f7060c064b3ae +F test/dbpagefault.test b893e9e43d55edc0cdf3f71ae093802f80f0fb517d839eefeae5647c49a41f36 F test/dbstatus.test 4a4221a883025ffd39696b3d1b3910b928fb097d77e671351acb35f3aed42759 F test/dbstatus2.test f5fe0afed3fa45e57cfa70d1147606c20d2ba23feac78e9a172f2fe8ab5b78ef F test/decimal.test fcf403fd5585f47342234e153c4a4338cd737b8e0884ac66fc484df47dbcf1a7 @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 55a19677d723147aeb2b4a86bbd01756ddeb2072cba72c3145ad32d335e203b0 -R e35be0c56965a970c718b1c71996a354 +P ccf00a0e22a2a9815ff7db1c6c6457fce35aaf50843c1b5ff2adda22d6f70314 +R 2702d4b0d7cf0ce78b13ce55e0c73c55 U dan -Z 4058b34591c1752ecb37a0b494045ec5 +Z 4b132714b91dd0c91ae61ab427855e2e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2909173798..145ababdca 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ccf00a0e22a2a9815ff7db1c6c6457fce35aaf50843c1b5ff2adda22d6f70314 \ No newline at end of file +901918c4867557e51160ef9c495e4e007de26cfe07c237addc00a388662957e8 \ No newline at end of file diff --git a/test/dbpagefault.test b/test/dbpagefault.test index 28f1f1fccc..b41ac66235 100644 --- a/test/dbpagefault.test +++ b/test/dbpagefault.test @@ -20,6 +20,11 @@ if {[permutation] == "inmemory_journal"} { return } +ifcapable !vtab { + finish_test + return +} + set testprefix dbpagefault faultsim_save_and_close From 50ba1a0213d9a757b563685a605cdeea8315461b Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 8 Nov 2022 20:04:05 +0000 Subject: [PATCH 25/44] Fix a problem with URI formatting in calls to sqlite3rbu_vacuum(zDb, NULL) causing problems on win32. First reported here . FossilOrigin-Name: 77ccc8ea8a901df64feabe08e1210087d060f0bc133242e87a94a71b68b5b5fa --- ext/rbu/rbuvacuum2.test | 9 +++++---- ext/rbu/sqlite3rbu.c | 2 +- manifest | 16 ++++++++-------- manifest.uuid | 2 +- test/releasetest_data.tcl | 1 + 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/ext/rbu/rbuvacuum2.test b/ext/rbu/rbuvacuum2.test index c8fba6a22d..d4f7c52328 100644 --- a/ext/rbu/rbuvacuum2.test +++ b/ext/rbu/rbuvacuum2.test @@ -227,10 +227,11 @@ do_test 6.1 { rbu close } {SQLITE_OK} -do_execsql_test 6.2 { - SELECT 1 FROM sqlite_master LIMIT 1; - PRAGMA wal_checkpoint; -} {1 0 4 4} +do_test 6.2 { + execsql { SELECT 1 FROM sqlite_master LIMIT 1 } + execsql { PRAGMA wal_checkpoint } + execsql { SELECT 1 FROM sqlite_master LIMIT 1 } +} {1} do_test 6.3 { sqlite3rbu_vacuum rbu test.db test.db2 diff --git a/ext/rbu/sqlite3rbu.c b/ext/rbu/sqlite3rbu.c index d79439010f..482952006e 100644 --- a/ext/rbu/sqlite3rbu.c +++ b/ext/rbu/sqlite3rbu.c @@ -2783,7 +2783,7 @@ static void rbuOpenDatabase(sqlite3rbu *p, sqlite3 *dbMain, int *pbRetry){ sqlite3_file_control(p->dbRbu, "main", SQLITE_FCNTL_RBUCNT, (void*)p); if( p->zState==0 ){ const char *zFile = sqlite3_db_filename(p->dbRbu, "main"); - p->zState = rbuMPrintf(p, "file://%s-vacuum?modeof=%s", zFile, zFile); + p->zState = rbuMPrintf(p, "file:///%s-vacuum?modeof=%s", zFile, zFile); } } diff --git a/manifest b/manifest index fa912769aa..dbaf85c8fe 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sattempt\sto\srun\stest\sscript\sdbpagefault.test\swith\sSQLITE_OMIT_VIRTUALTABLE\sbuilds. -D 2022-11-08T19:36:26.532 +C Fix\sa\sproblem\swith\sURI\sformatting\sin\scalls\sto\ssqlite3rbu_vacuum(zDb,\sNULL)\scausing\sproblems\son\swin32.\sFirst\sreported\shere\s. +D 2022-11-08T20:04:05.128 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -380,10 +380,10 @@ F ext/rbu/rbusave.test f4190a1a86fccf84f723af5c93813365ae33feda35845ba107b59683d F ext/rbu/rbusplit.test b37e7b40b38760881dc9c854bd40b4744c6b6cd74990754eca3bda0f407051e8 F ext/rbu/rbutemplimit.test 05ceefa90a2e26a99f40dd48282ed63a00df5e59c1f2bfd479c143e201a1b0ba F ext/rbu/rbuvacuum.test 55e101e90168c2b31df6c9638fe73dc7f7cc666b6142266d1563697d79f73534 -F ext/rbu/rbuvacuum2.test 886add83fd74bcb02e6dd016ae5b585367bd58c5d0694c9d9ca7bdb1d1f578c2 +F ext/rbu/rbuvacuum2.test 2643b58f4d8d3573db0f93faae18805a35ab162b4c55ff6b656062ff432ed55b F ext/rbu/rbuvacuum3.test 8addd82e4b83b4c93fa47428eae4fd0dbf410f8512c186f38e348feb49ba03dc F ext/rbu/rbuvacuum4.test a78898e438a44803eb2bc897ba3323373c9f277418e2d6d76e90f2f1dbccfd10 -F ext/rbu/sqlite3rbu.c 90b6b5be1cb6cbd9b7a7dc0c0641d5be63cf00cf9ec8c3b57d27217d28530ea9 +F ext/rbu/sqlite3rbu.c c4ba7901b2d3e0c7845f30840e3ffb35c6f999d6da0d80f121866491f982794c F ext/rbu/sqlite3rbu.h 02d981e2d39c151391759e1a400e29c7388730812957ac3db8dad7f6c9f9cfc8 F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055 F ext/recover/dbdata.c 1d5353d3af247c4e0656f8f88a80564aa840644c1177212dd11a186dce4ab213 @@ -1414,7 +1414,7 @@ F test/recover.test fd5199f928757cb308661b5fdca1abc19398a798ff7f24b57c3071e9f8e0 F test/regexp1.test 83c631617357150f8054ca1d1fed40a552b0d0f8eb7a7f090c3be02cee9f9913 F test/regexp2.test 55ed41da802b0e284ac7e2fe944be3948f93ff25abbca0361a609acfed1368b5 F test/reindex.test cd9d6021729910ece82267b4f5e1b5ac2911a7566c43b43c176a6a4732e2118d -F test/releasetest_data.tcl 11ba48a21ed1c808147b0e77c6e93d204577f4327ffe6d7c3b34cd3c01eac3a2 +F test/releasetest_data.tcl 0db8aee0c348090fd06da47020ab4ed8ec692e0723427b2f3947d4dfb806f3b0 F test/resetdb.test 8062cf10a09d8c048f8de7711e94571c38b38168db0e5877ba7561789e5eeb2b F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb F test/returning1.test c43b8370a351f77aec6d71f4a2cde59b849369ed1933261a2c2c69e23e34ff5e @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P ccf00a0e22a2a9815ff7db1c6c6457fce35aaf50843c1b5ff2adda22d6f70314 -R 2702d4b0d7cf0ce78b13ce55e0c73c55 +P 901918c4867557e51160ef9c495e4e007de26cfe07c237addc00a388662957e8 +R e1174940c9eea4fdd4992c2251cd547f U dan -Z 4b132714b91dd0c91ae61ab427855e2e +Z ccc7a06b399803ae9bb727d82784bfa2 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 145ababdca..6cdb031b12 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -901918c4867557e51160ef9c495e4e007de26cfe07c237addc00a388662957e8 \ No newline at end of file +77ccc8ea8a901df64feabe08e1210087d060f0bc133242e87a94a71b68b5b5fa \ No newline at end of file diff --git a/test/releasetest_data.tcl b/test/releasetest_data.tcl index 314331aeef..6efc44b92c 100644 --- a/test/releasetest_data.tcl +++ b/test/releasetest_data.tcl @@ -51,6 +51,7 @@ array set ::Configs [strip_comments { -O2 --disable-amalgamation --disable-shared --enable-session + -DSQLITE_ENABLE_RBU } "Sanitize" { CC=clang -fsanitize=address,undefined From 92c0881d9d807549efd75b0235f5570e4a1f7a82 Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 9 Nov 2022 10:17:25 +0000 Subject: [PATCH 26/44] Increase the precision of the nData parameter to the dbdataValue() routine inside the sqlite_dbdata virtual table, to avoid the possibility of integer overflow. FossilOrigin-Name: 295447b44fc7658891352a9b3f792379b52a76ee5dcfd498b7028f5f87b40e9e --- ext/recover/dbdata.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/recover/dbdata.c b/ext/recover/dbdata.c index 4132b83d71..8419e08148 100644 --- a/ext/recover/dbdata.c +++ b/ext/recover/dbdata.c @@ -428,7 +428,7 @@ static void dbdataValue( u32 enc, int eType, u8 *pData, - int nData + sqlite3_int64 nData ){ if( eType>=0 && dbdataValueBytes(eType)<=nData ){ switch( eType ){ diff --git a/manifest b/manifest index dbaf85c8fe..b7f39970ae 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\swith\sURI\sformatting\sin\scalls\sto\ssqlite3rbu_vacuum(zDb,\sNULL)\scausing\sproblems\son\swin32.\sFirst\sreported\shere\s. -D 2022-11-08T20:04:05.128 +C Increase\sthe\sprecision\sof\sthe\snData\sparameter\sto\sthe\sdbdataValue()\sroutine\ninside\sthe\ssqlite_dbdata\svirtual\stable,\sto\savoid\sthe\spossibility\sof\sinteger\noverflow. +D 2022-11-09T10:17:25.458 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -386,7 +386,7 @@ F ext/rbu/rbuvacuum4.test a78898e438a44803eb2bc897ba3323373c9f277418e2d6d76e90f2 F ext/rbu/sqlite3rbu.c c4ba7901b2d3e0c7845f30840e3ffb35c6f999d6da0d80f121866491f982794c F ext/rbu/sqlite3rbu.h 02d981e2d39c151391759e1a400e29c7388730812957ac3db8dad7f6c9f9cfc8 F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055 -F ext/recover/dbdata.c 1d5353d3af247c4e0656f8f88a80564aa840644c1177212dd11a186dce4ab213 +F ext/recover/dbdata.c ac61a3fcd8b94ef195c7c9241f7eb1ac6401b4634b5b532a8ffe910c5aaef70d F ext/recover/recover1.test 02004eb8f9ec2825ba77e24742c18e45162cb21d27e76a3a435b83a759a1131a F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 901918c4867557e51160ef9c495e4e007de26cfe07c237addc00a388662957e8 -R e1174940c9eea4fdd4992c2251cd547f -U dan -Z ccc7a06b399803ae9bb727d82784bfa2 +P 77ccc8ea8a901df64feabe08e1210087d060f0bc133242e87a94a71b68b5b5fa +R 545f66eddeec93de8c190e3a826342d9 +U drh +Z ccc0668e4034ef7e9d99a59bf656580b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 6cdb031b12..a60c80038c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -77ccc8ea8a901df64feabe08e1210087d060f0bc133242e87a94a71b68b5b5fa \ No newline at end of file +295447b44fc7658891352a9b3f792379b52a76ee5dcfd498b7028f5f87b40e9e \ No newline at end of file From ea038d3d239aba5b10577fb4aa3a8fc33bad2a4a Mon Sep 17 00:00:00 2001 From: drh <> Date: Wed, 9 Nov 2022 11:02:39 +0000 Subject: [PATCH 27/44] Additional defense against corrupt database files in dbdata.c. FossilOrigin-Name: 2e70d1e5c9b2c9e068be3ccf8a6062edf7bdde2e46d60ba8ce54eda851af6008 --- ext/recover/dbdata.c | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/recover/dbdata.c b/ext/recover/dbdata.c index 8419e08148..9563ab502a 100644 --- a/ext/recover/dbdata.c +++ b/ext/recover/dbdata.c @@ -864,7 +864,7 @@ static int dbdataColumn( case DBDATA_COLUMN_VALUE: { if( pCsr->iField<0 ){ sqlite3_result_int64(ctx, pCsr->iIntkey); - }else{ + }else if( &pCsr->pRec[pCsr->nRec] >= pCsr->pPtr ){ sqlite3_int64 iType; dbdataGetVarintU32(pCsr->pHdrPtr, &iType); dbdataValue( diff --git a/manifest b/manifest index b7f39970ae..7677d99d4f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Increase\sthe\sprecision\sof\sthe\snData\sparameter\sto\sthe\sdbdataValue()\sroutine\ninside\sthe\ssqlite_dbdata\svirtual\stable,\sto\savoid\sthe\spossibility\sof\sinteger\noverflow. -D 2022-11-09T10:17:25.458 +C Additional\sdefense\sagainst\scorrupt\sdatabase\sfiles\sin\sdbdata.c. +D 2022-11-09T11:02:39.285 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -386,7 +386,7 @@ F ext/rbu/rbuvacuum4.test a78898e438a44803eb2bc897ba3323373c9f277418e2d6d76e90f2 F ext/rbu/sqlite3rbu.c c4ba7901b2d3e0c7845f30840e3ffb35c6f999d6da0d80f121866491f982794c F ext/rbu/sqlite3rbu.h 02d981e2d39c151391759e1a400e29c7388730812957ac3db8dad7f6c9f9cfc8 F ext/rbu/test_rbu.c ee6ede75147bc081fe9bc3931e6b206277418d14d3fbceea6fdc6216d9b47055 -F ext/recover/dbdata.c ac61a3fcd8b94ef195c7c9241f7eb1ac6401b4634b5b532a8ffe910c5aaef70d +F ext/recover/dbdata.c 8f1f75d636431de69d7977ec50fc41bfdd0c48c510d5ee7eae0cbd4164e1429a F ext/recover/recover1.test 02004eb8f9ec2825ba77e24742c18e45162cb21d27e76a3a435b83a759a1131a F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 77ccc8ea8a901df64feabe08e1210087d060f0bc133242e87a94a71b68b5b5fa -R 545f66eddeec93de8c190e3a826342d9 +P 295447b44fc7658891352a9b3f792379b52a76ee5dcfd498b7028f5f87b40e9e +R 851325ef7ac3ed67898936647c7dda82 U drh -Z ccc0668e4034ef7e9d99a59bf656580b +Z e6b9c092d6b173c8cc4ef1e11fdfe252 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a60c80038c..2abf6a44c6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -295447b44fc7658891352a9b3f792379b52a76ee5dcfd498b7028f5f87b40e9e \ No newline at end of file +2e70d1e5c9b2c9e068be3ccf8a6062edf7bdde2e46d60ba8ce54eda851af6008 \ No newline at end of file From 838865c0bb3531a4105567dfc1f6623c6aa1cd5f Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 9 Nov 2022 11:17:57 +0000 Subject: [PATCH 28/44] Better handle an error in the fts5 integrity-check code. dbsqlfuzz e87c62f9b67ea21aebdc36ab71cab7cc3eda8dc3. FossilOrigin-Name: ae43e97087a3207a5ca3ffae75fbe7a33c01f4a38ce0d1d7eed8591ae3083617 --- ext/fts5/fts5_index.c | 1 + manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 8a29304922..7eca9b1321 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -6278,6 +6278,7 @@ int sqlite3Fts5IndexIntegrityCheck(Fts5Index *p, u64 cksum, int bUseCksum){ /* If this is a new term, query for it. Update cksum3 with the results. */ fts5TestTerm(p, &term, z, n, cksum2, &cksum3); + if( p->rc ) break; if( eDetail==FTS5_DETAIL_NONE ){ if( 0==fts5MultiIterIsEmpty(p, pIter) ){ diff --git a/manifest b/manifest index 7677d99d4f..36368b60d6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Additional\sdefense\sagainst\scorrupt\sdatabase\sfiles\sin\sdbdata.c. -D 2022-11-09T11:02:39.285 +C Better\shandle\san\serror\sin\sthe\sfts5\sintegrity-check\scode.\sdbsqlfuzz\se87c62f9b67ea21aebdc36ab71cab7cc3eda8dc3. +D 2022-11-09T11:17:57.759 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -118,7 +118,7 @@ F ext/fts5/fts5_buffer.c 3001fbabb585d6de52947b44b455235072b741038391f830d6b7292 F ext/fts5/fts5_config.c 501e7d3566bc92766b0e11c0109a7c5a6146bc41144195459af5422f6c2078aa F ext/fts5/fts5_expr.c 40174a64829d30cc86e8266306ad24980f6911edd5ca0b8c1ce7821ea1341b88 F ext/fts5/fts5_hash.c d4fb70940359f2120ccd1de7ffe64cc3efe65de9e8995b822cd536ff64c96982 -F ext/fts5/fts5_index.c 4b1ac44c665667be970df780bd8e734748047bd30a971d0bb7e884af8ac6e62c +F ext/fts5/fts5_index.c a8ee270724ae1f958d0ce9897bcd60a5b760ecbeaa058fc8632805a283f1c20a F ext/fts5/fts5_main.c 6078ae86d3b813753a4f1201054550aff21a3f660e97b30f200d2b1472874151 F ext/fts5/fts5_storage.c 76c6085239eb44424004c022e9da17a5ecd5aaec859fba90ad47d3b08f4c8082 F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae @@ -2055,8 +2055,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 295447b44fc7658891352a9b3f792379b52a76ee5dcfd498b7028f5f87b40e9e -R 851325ef7ac3ed67898936647c7dda82 -U drh -Z e6b9c092d6b173c8cc4ef1e11fdfe252 +P 2e70d1e5c9b2c9e068be3ccf8a6062edf7bdde2e46d60ba8ce54eda851af6008 +R 5b3228ef5a47231a8a5df1bba248e63f +U dan +Z 85fe5476882fbe08da2a9ca03d046c66 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2abf6a44c6..125b32b2c5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2e70d1e5c9b2c9e068be3ccf8a6062edf7bdde2e46d60ba8ce54eda851af6008 \ No newline at end of file +ae43e97087a3207a5ca3ffae75fbe7a33c01f4a38ce0d1d7eed8591ae3083617 \ No newline at end of file From aafa022f5b5371d83ee3478c17e0c7f2faf1ce62 Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 10 Nov 2022 11:35:10 +0000 Subject: [PATCH 29/44] OPFS: if an op which needs a lock is called when no lock has been obtained, automatically lock it at the start of the op and unlock it at the end of that op. This is an attempt to alleviate the cross-tab contention described in [forum post 58a377083cd24a|forum:58a377083cd24a] but it increases speedtest1 run time by approximately 4x. Perhaps auto-lock can be combined with the older idle-time-based auto-unlock to unlock such locks (but not those from xLock()) to improve this? FossilOrigin-Name: 46304ba057707c3b072b6e7bb8c4af774f653aa5814099f0866cd87b2b73abeb --- ext/wasm/api/sqlite3-opfs-async-proxy.js | 26 ++++++++++++++++++++++++ ext/wasm/module-symbols.html | 2 +- manifest | 19 +++++++++-------- manifest.uuid | 2 +- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/ext/wasm/api/sqlite3-opfs-async-proxy.js b/ext/wasm/api/sqlite3-opfs-async-proxy.js index 09c56ff1df..9c0bf4cbef 100644 --- a/ext/wasm/api/sqlite3-opfs-async-proxy.js +++ b/ext/wasm/api/sqlite3-opfs-async-proxy.js @@ -214,6 +214,24 @@ const closeSyncHandle = async (fh)=>{ } }; +/** + A proxy for closeSyncHandle() which is guaranteed to not throw. + + This function is part of a lock/unlock step in functions which + require a sync access handle but may be called without xLock() + having been called first. Such calls need to release that + handle to avoid locking the file for all of time. This is an + _attempt_ at reducing cross-tab contention but it may prove + to be more of a problem than a solution and may need to be + removed. +*/ +const closeSyncHandleNoThrow = async (fh)=>{ + try{await closeSyncHandle(fh)} + catch(e){ + warn("closeSyncHandleNoThrow() ignoring:",e,fh); + } +}; + /** Stores the given value at state.sabOPView[state.opIds.rc] and then Atomics.notify()'s it. @@ -403,6 +421,7 @@ const vfsAsyncImpls = { mTimeStart('xFileSize'); const fh = __openFiles[fid]; let rc; + const hadLock = !!fh.syncHandle; wTimeStart('xFileSize'); try{ affirmLocked('xFileSize',fh); @@ -413,6 +432,7 @@ const vfsAsyncImpls = { state.s11n.storeException(2,e); rc = state.sq3Codes.SQLITE_IOERR; } + if(!hadLock) closeSyncHandleNoThrow(fh); wTimeEnd(); storeAndNotify('xFileSize', rc); mTimeEnd(); @@ -483,6 +503,7 @@ const vfsAsyncImpls = { mTimeStart('xRead'); let rc = 0, nRead; const fh = __openFiles[fid]; + const hadLock = !!fh.syncHandle; try{ affirmLocked('xRead',fh); wTimeStart('xRead'); @@ -501,6 +522,7 @@ const vfsAsyncImpls = { state.s11n.storeException(1,e); rc = state.sq3Codes.SQLITE_IOERR_READ; } + if(!hadLock) closeSyncHandleNoThrow(fh); storeAndNotify('xRead',rc); mTimeEnd(); }, @@ -525,6 +547,7 @@ const vfsAsyncImpls = { mTimeStart('xTruncate'); let rc = 0; const fh = __openFiles[fid]; + const hadLock = !!fh.syncHandle; wTimeStart('xTruncate'); try{ affirmLocked('xTruncate',fh); @@ -535,6 +558,7 @@ const vfsAsyncImpls = { state.s11n.storeException(2,e); rc = state.sq3Codes.SQLITE_IOERR_TRUNCATE; } + if(!hadLock) closeSyncHandleNoThrow(fh); wTimeEnd(); storeAndNotify('xTruncate',rc); mTimeEnd(); @@ -561,6 +585,7 @@ const vfsAsyncImpls = { mTimeStart('xWrite'); let rc; const fh = __openFiles[fid]; + const hadLock = !!fh.syncHandle; wTimeStart('xWrite'); try{ affirmLocked('xWrite',fh); @@ -575,6 +600,7 @@ const vfsAsyncImpls = { state.s11n.storeException(1,e); rc = state.sq3Codes.SQLITE_IOERR_WRITE; } + if(!hadLock) closeSyncHandleNoThrow(fh); wTimeEnd(); storeAndNotify('xWrite',rc); mTimeEnd(); diff --git a/ext/wasm/module-symbols.html b/ext/wasm/module-symbols.html index bebefffac8..427d2dc8c3 100644 --- a/ext/wasm/module-symbols.html +++ b/ext/wasm/module-symbols.html @@ -189,7 +189,7 @@
-