$(TOP)/ext/fts3/fts3_write.c \
$(TOP)/ext/misc/stmt.c \
$(TOP)/ext/session/sqlite3session.c \
- $(TOP)/ext/session/sqlite3changebatch.c \
- $(TOP)/ext/session/test_session.c \
fts5.c
# Header files used by all library source files.
-C Version\s3.48.0\sfor\sthe\sbedrock\sbranch
-D 2025-01-14T12:28:43.665
+C If\sSQLITE_ENABLE_WAL2NOCKSUM\sis\sdefined,\sthen\sSQLite\scalculates\sthe\sframe\schecksums\sused\sin\swal2\smode\sbased\son\sthe\sprevious\schecksum\sand\sthe\sframe\sheader\sonly,\snot\sthe\sframe\sbody\sonly.\sThis\srisks\scorruption\sfollowing\sa\sOS\scrash\sor\spower\sfailure,\sbut\salso\sspeeds\sup\swrites\sin\swal2\smode.
+D 2025-01-29T15:11:07.802
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
-F main.mk 8220d7e38f112841a908cc4a00a5e8ddbbe901cfc76dfd3e5ea3d63ca846d87e
+F main.mk 246580165715eefcb0b063bd58d58e05f179a2c05009caa542f17b222b91fb78
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
F src/test_bestindex.c 3401bee51665cbf7f9ed2552b5795452a8b86365e4c9ece745b54155a55670c6
F src/test_blob.c bcdf6a6c22d0bcc13c41479d63692ef413add2a4d30e1e26b9f74ab85b9fb4d5
F src/test_btree.c 28283787d32b8fa953eb77412ad0de2c9895260e4e5bd5a94b3c7411664f90d5
-F src/test_config.c 872eb3cab4573b8b9512454bf11bc68092a2b61cffd9b16465414c70a3357d8a
+F src/test_config.c a684b7c4b6fdf0da87dcd052bb93fa499e7859120b5963972923abd98f31a2e1
F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf9f8f
F src/test_demovfs.c 3efa2adf4f21e10d95521721687d5ca047aea91fa62dd8cc22ac9e5a9c942383
F src/test_devsym.c 649434ed34d0b03fbd5a6b42df80f0f9a7e53f94dd1710aad5dd8831e91c4e86
F src/vdbevtab.c fc46b9cbd759dc013f0b3724549cc0d71379183c667df3a5988f7e2f1bd485f3
F src/vtab.c 316cd48e9320660db3047cd306cd056e4361180cebb4d0f10a39244e10c11422
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
-F src/wal.c 964c785ac8324de1ae742c44aa72ddd4401d4abab11ef6999aec21d7221b3e67
+F src/wal.c f552156ce5f8392b224d56fe99a49e1667cab8429c2b430eed9deaa23abd1542
F src/wal.h 8d02ab8c2a93a941f5898eb3345bf711c1d3f8f86f4be8d5428fb6c074962d8a
F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
F src/where.c 604f17baed46f4997ffe79f25c07c4b51a4165a5938cc27fe165c7e1ca485d11
F test/wal2lock.test 0ef98d72dc6bcf7711dedd684760488400d9a9a6eec0dc5d3822060437793552
F test/wal2openclose.test 2b26be723ea7f4263c8d5d70b37efd1c359561a0526e39466c45fe8e6478daee
F test/wal2recover.test 348a3f2a4c79359790f70fd692dcd0c8f04e42a85365e688778c945e10bae02b
-F test/wal2recover2.test a7eece9892b125ef92343bba9e06edd5f6ad20c548dcbf79e3f2ab759f31ef84
+F test/wal2recover2.test e849fc5a202ae49dc561a3d47270accf159227c9e7663594fab0eac212480d28
F test/wal2recover3.test 4a91689e165a38bc401736e6518188c2b0ff4fa1566d1810b8867536db128177
F test/wal2rewrite.test 6ca6f631ffcf871240beab5f02608913fd075c6d0d31310b026c8383c65c9f9c
F test/wal2rollback.test 23adc4a099b23f6aaea8b04fdca1c35861d887dd80f8be7da2d5273eb777e428
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 4b9497cffa3397f6dd498b9a9145ebee6fcfcc175c75aa6f922ad635619f3e24 ef970ef037ed2271324593a46342547979ce31bcfbc8ca65930f0e51083a9e6a
-R 512162a74cf573fb37124d22bab2f3c1
-U drh
-Z dd3562b4e97e09b9d7d50446541cf947
+P fab341c8295545739cdce8b71e38ead68cb80a6f836f7ec0540b387f17b6cbe2
+Q +4d3706727005397c3c9006b9ad9a2645b09533b02735ea68974c4f2df4c2e853
+R 474ce037ad8c9757d8c8e66f75356bf2
+U dan
+Z 363c756be7599a910bd16bdd6751a132
# Remove this line to create a well-formed Fossil manifest.
-fab341c8295545739cdce8b71e38ead68cb80a6f836f7ec0540b387f17b6cbe2
+dc74bd8915a9e1a915fb4ff3229a7b5e8f89486fe1df812a7738f6627d379648
Tcl_SetVar2(interp, "sqlite_options", "normalize", "0", TCL_GLOBAL_ONLY);
#endif
+#ifdef SQLITE_ENABLE_WAL2NOCKSUM
+ Tcl_SetVar2(interp, "sqlite_options", "wal2nocksum", "1", TCL_GLOBAL_ONLY);
+#else
+ Tcl_SetVar2(interp, "sqlite_options", "wal2nocksum", "0", TCL_GLOBAL_ONLY);
+#endif
+
#ifdef SQLITE_OMIT_WINDOWFUNC
Tcl_SetVar2(interp, "sqlite_options", "windowfunc", "0", TCL_GLOBAL_ONLY);
#else
#define WAL_VERSION1 3007000 /* For "journal_mode=wal" */
#define WAL_VERSION2 3021000 /* For "journal_mode=wal2" */
+#ifdef SQLITE_ENABLE_WAL2NOCKSUM
+# undef WAL_VERSION2
+# define WAL_VERSION2 3048000 /* For "journal_mode=wal2" sans checksums */
+
+# define isNocksum(pWal) isWalMode2(pWal)
+#else
+# define isNocksum(pWal) 0
+#endif
+
+
+
/*
** Index numbers for various locking bytes. WAL_NREADER is the number
nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
- walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
+ if( isNocksum(pWal)==0 ){
+ walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
+ }
sqlite3Put4byte(&aFrame[16], aCksum[0]);
sqlite3Put4byte(&aFrame[20], aCksum[1]);
+
}else{
memset(&aFrame[8], 0, 16);
}
*/
nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
- walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
+ if( isNocksum(pWal)==0 ){
+ walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
+ }
if( aCksum[0]!=sqlite3Get4byte(&aFrame[16])
|| aCksum[1]!=sqlite3Get4byte(&aFrame[20])
){
pData = pPage->pData;
walEncodeFrame(p->pWal, pPage->pgno, nTruncate, pData, aFrame);
- rc = walWriteToLog(p, aFrame, sizeof(aFrame), iOffset);
- if( rc ) return rc;
+
+ if( isNocksum(p->pWal)==0 ){
+ /* Write the header in normal mode */
+ rc = walWriteToLog(p, aFrame, sizeof(aFrame), iOffset);
+ if( rc ) return rc;
+ }
+
/* Write the page data */
rc = walWriteToLog(p, pData, p->szPage, iOffset+sizeof(aFrame));
+
+ if( isNocksum(p->pWal) ){
+ /* Write the header in no-checksum mode */
+ if( rc ) return rc;
+ rc = walWriteToLog(p, aFrame, sizeof(aFrame), iOffset);
+ }
return rc;
}
set e [hexio_read $file $off 8]
set cksum [cksum $cksum $e]
- set p [hexio_read $file [expr $off+24] $pgsz]
- set cksum [cksum $cksum $p]
+ ifcapable !wal2nocksum {
+ set p [hexio_read $file [expr $off+24] $pgsz]
+ set cksum [cksum $cksum $p]
+ }
hexio_write $file [expr $off+8] $salt
hexio_write $file [expr $off+16] $cksum
fix_wal_cksums $file
}
+do_execsql_test 1.3.0 {
+ SELECT sum(x) FROM t1;
+ SELECT sum(x) FROM t2;
+} [list $H $M]
+
foreach {tn file field} {
1 test.db2-wal salt0
2 test.db2-wal salt1
forcecopy test.db-wal2 test.db2-wal
forcecopy test.db-wal test.db2-wal2
- hexio_write test.db2-wal 5000 1234567890
+ ifcapable wal2nocksum {
+ # With wal2nocksum set, each frame checksum is calculated based on the
+ # previous checksum and the contents of the first 8 bytes of the frame
+ # header. So to get the behaviour the test requires we need to mess up
+ # the frame header, not the body. Hence 4224 instead of 5000.
+ hexio_write test.db2-wal 4224 1234567890
+ } else {
+ hexio_write test.db2-wal 5000 1234567890
+ }
} {5}
do_test 2.2 {