Release Checklist for SQLite 3.46.0

  1. Test procedure review.
    1. Review the "test/testrunner.tcl" script for completeness and accuracy.
    2. Review "multitest.tcl" and "alignment*.rc" scripts in TH3 for completeness.
    3. Review this checklist for completeness and accuracy.
    4. Review dev-ops procedures and make any needed updates and corrections.

  2. Source code change review. fossil diff --from release --to trunk
    1. No stray changes.
    2. All significant changes are mentioned in the "changes" log of the documentation.
    3. New code complies with style guidelines.
    4. New code complies with design rules.
    5. Comments have been updated to reflect code changes.
    6. Verify that the azProhibitedFunctions list in the safeModeAuth() function of the CLI is complete and up-to-date.
    7. Variables and functions have been renamed to reflect changes in their use.
    8. Check all calls to sqlite3OsRead() and sqlite3OsWrite() to ensure that offset computations are 64-bit clean.
    9. Check all calls to memory allocation routines to ensure that size computations are 64-bit clean. Suggested regular expression for search: /(Re|M)alloc[FORZa-z]*(/
    10. Verify that source code contains no tabs and that surplus whitespace has been removed.
    11. Verify that the list of APIs exposed via the extension header is up-to-date (sqlite3ext.h).
    12. Significant compile-time options are recognized by the sqlite3_compileoption_used() interface.
    13. Compare sqlite3.c and sqlite3.h against the previous release.

  3. Documentation review:
    1. Latest release on the "index.html" page.
    2. Release announcement in "changes.in".
    3. Release accouncement in "news.html".
    4. No unresolved hyperlinks in the documentation build.
    5. The compile-time options are all up-to-date (compile.html).
    6. Database footprint is up-to-date (features.html).
    7. Test metrics are up-to-date (testing.html).
    8. Check new/changed documentation for spelling and gramatical mistakes.

  4. Compiler warning checks.
    1. Linux GCC -Wall -Wextra (the "tool/warnings.sh" script)
    2. Mac OS X GCC -Wall -Wextra (the "tool/warnings.sh" script)
    3. Clang-6.0.0: CFLAGS='-O0' ./configure --enable-debug --enable-all && scan-build make sqlite3
    4. Clang-10.0.0: CFLAGS='-O0' ./configure --enable-debug --enable-all && scan-build make sqlite3

  5. OMIT, ENABLE, and DISABLE options:
    1. Recent compile-time options have been added to the omittest.tcl and omittest-msvc.tcl scripts and checked in.
    2. tclsh ../tool/omittest.tcl -skip_run -target libsqlite3.a ← on Linux
    3. tclsh tool/omittest-msvc.tcl ← on Windows

  6. Tests for platform Linux x86_64:
    1. tclsh multitest.tcl
    2. tclsh multitest.tcl --scenario coverage
    3. tclsh multitest.tcl --scenario failures - all failures detected
    4. ./configure && make verify-source releasetest
    5. sh tool/symbols.sh - no incorrect exports or dependencies
    6. ./configure --enable-debug --enable-all && make parse.c && CC=clang CFLAGS='-fsanitize=address,undefined' make -e test
    7. Test the reuse-schema branch with ./configure --enable-all && make "OPTS=-DSQLITE_ENABLE_SHARED_SCHEMA" sdevtest
    8. CC=clang CFLAGS='-fsanitize=thread' ./configure && make threadtest5 && ./threadtest5
    9. Run auxiliary test script in the /usr subdirectory of the TH3 repository
    10. Verify that the SQLITE_HAVE_SQLITE3R is needed when building the CLI using sqlite3r.c: ./configure --enable-all && make sqlite3r.c shell.c && gcc -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_HAVE_SQLITE3R sqlite3r.c shell.c -ldl -lpthread && ./a.out '' .recover
    11. From a read-only source tree: $SRC/configure && make mdevtest

  7. Tests for platform Linux ARM (BeagleBoard or RaspberryPI)
    1. tclsh th3make min.rc -DTH3_LOWMEM --unobfuscated
    2. Recompile and test Fossil.

  8. Tests for platform MacOS x64:
    1. ./configure && make verify-source releasetest
    2. tclsh multitest.tcl --xdev
    3. tclsh multitest.tcl --scenario failures - all failures detected

  9. Tests for platform MacOS ARM:
    1. ./configure && make verify-source releasetest
    2. tclsh multitest.tcl --xdev

  10. Tests for platform MacOS (PPC):
    1. .selftest checks (see below)
    2. Recompile and test Fossil.
    3. Verify that Fossil repositories are cross-platform with x86/x64.

  11. Tests for platform Windows (32-bit):
    1. Review the "32-bit Builds" section of doc/compile-for-windows.md for accuracy and completeness and make sure the local build environment is set up accordingly, especially the TCLDIR and PATH variables.
    2. tclsh multitest.tcl --xdev
    3. tclsh multitest.tcl --msvc --scenario failures - verify failures detected
    4. nmake /f Makefile.msc verify-source releasetest
    5. Verify that EXEs and DLLs generated using MSVC contain the correct version number, product name, description, and copyright as resources.

  12. Tests for platform Windows (64-bit):
    1. Review the first part of doc/compile-for-windows.md for correctness. Ensure that the local build environment is correct, especially the TCLDIR variable.
    2. tclsh multitest.tcl --xdev
    3. tclsh multitest.tcl --msvc --scenario failures - verify failures detected
    4. nmake /f Makefile.msc verify-source releasetest
    5. Verify that EXEs and DLLs generated using MSVC contain the correct version number, product name, description, and copyright as resources.
    6. After updating Fossil to use the latest SQLite, verify that it compiles without warnings and that it works

  13. Tests for platform Windows7:
    1. Compile the CLI separately (on Win11) and move the 64-bit EXE to the Win7 platform.
    2. Verify that the --utf8 option does not work.
    3. Perform a .dump on a database that contains schema elements with Unicode characters
    4. Run selftest.txt from the dbs repository

  14. Tests for platform OpenBSD (x86):
    1. make test
    2. th3make quick.rc

  15. WASM
    1. Build and install Fiddle according to website maintenance instructions at https://sqlite.org/devops/doc/trunk/build/website-build.md. Run simple tests.
    2. (On Linux) ./configure --enable-all && cd ext/wasm && make
    3. althttpd --enable-sab --page index.html
    4. Click on the test links - confirm correct results.

  16. On an F2FS filesystem with the F2FS_FEATURE_ATOMIC_WRITE feature, test with: $TOP/configure && make test OPTS="-DSQLITE_ENABLE_BATCH_ATOMIC_WRITE -DSQLITE_DEBUG -DSQLITE_NO_SYNC". Check that test script "atomic2.test" really did run, and did not report "No f2fs atomic-batch-write support. Skipping tests...".
  17. Trunk changes merged and verified on active branches. See https://sqlite.org/devops/doc/trunk/build/release-actions-drh.md for detailed instructions.
    1. begin-concurrent (from trunk)
    2. wal2 (from trunk)
    3. bedrock (from wal2)
    4. reuse-schema (from trunk)
    5. see (in the see-base repository)
    6. client-see (in the see-base repository)
    7. reuse-schema-see (in the see-base repository)

  18. Dbsqlfuzz tests
    1. Develop a new CORPUS database by running dbsqlfuzz for 10 billion iterations
    2. Check-in CORPUS as an unversioned file in the dbsqlfuzz repository
    3. Linux: FUZZDB=$CORPUS make run-fuzzcheck
    4. Mac: FUZZDB=$CORPUS make run-fuzzcheck
    5. Win10/MSVC: fuzzcheck $CORPUS -spinner

  19. Sqllogictest:
    1. Checked in latest SQLite amalgamation.
    2. No SQLite compiler warnings.
    3. tclsh run-all.tcl

  20. Fossil updated to use the latest SQLite.
    1. No SQLite compiler warnings.
    2. Used on active websites with no issues.
    3. fossil all test-integrity -d
    4. fossil all sync --all
    5. fossil all repack
    6. Do the above on Linux
    7. Do the above on Mac
    8. Do the above on RaspberryPi
    9. Do the above on Windows

  21. Wapp updated to use the latest SQLite
    1. Used on active websites with no issues

  22. CEROD tests in the "test/" subdirectory.
  23. SEE tests using TH3. Source directories "th3" and "see" are siblings:
    1. tclsh multitest.tcl --dev --srcdir ../see --see
    2. tclsh multitest.tcl --dev --srcdir ../see --see aes128-ofb
    3. tclsh multitest.tcl --dev --srcdir ../see --see aes256-ofb
    4. tclsh multitest.tcl --dev --srcdir ../see --see rc4
    5. tclsh multitest.tcl --dev --srcdir ../see --see aes128-ccm
    6. tclsh multitest.tcl --dev --srcdir ../see --see cccrypt (Mac)
    7. tclsh multitest.tcl --dev --srcdir ../see --see aes256-openssl
    8. tclsh multitest.tcl --dev --srcdir ../see --see aes256-cryptoapi.c (Windows)
    9. On one of the above, add ++UPDATE_DELETE_LIMIT
    10. At least one of the above on Linux.

  24. ZIPVFS tests:
    1. Verify that the configure script version number agrees with the SQLite version number
    2. testfixture test/testrunner.tcl --zipvfs <ZIPVFS-source-directory> zipvfs
    3. Linux: tclsh multitest.tcl --scenario zipvfs --extra --valgrind --omit 'quick[23]'
    4. Mac: tclsh multitest.tcl --scenario zipvfs
    5. Windows: tclsh multitest.tcl --scenario zipvfs

  25. NDS-Devkit testing
    1. Merge all trunk enhancements into the reuse-schema branch and use that branch to update the devkit.
    2. Test using: tclsh th3make debug.rc nds_devkit.rc
    3. Verify the "NDS DevKit" version number shown at the end of the test

  26. Amalgamation autoconf tarball.
    1. Builds.
    2. Works on Linux.
    3. Works on Mac OS X.
    4. Works on Windows MSVC

  27. TEA archive builds correctly and runs:
    1. Verify that the SQLite version number is correct in autoconf/tea/configure.ac
    2. Linux
    3. Mac OS X
    4. Windows MSVC

  28. Performance tests using speedtest1 compared against the previous release and a release from about one year ago.
    1. Linux
    2. Linux with --testset rtree
    3. Mac
    4. Windows
    5. Windows with --testset rtree

  29. Run make wordcount and do tests on current and prior versions:
    1. rm -f wc.db && ./wordcount wc.db $BIGTEXT --all
    2. rm -f wc.db && ./wordcount wc.db $BIGTEXT --all --cachesize 5 --nosync

  30. Compare performance to the previous release using kvtest.
    1. Linux
    2. Mac
    3. Windows

  31. Check JSON performance
    1. Run the procedures described in test/json/README.md
    2. Verify JSON performance against the previous release

  32. Use the ".selftest" command of the shell to verify that legacy database files are readable and cross-platform
    1. iBook PPC
    2. Linux x64
    3. Linux ARM
    4. Mac x64
    5. Mac ARM
    6. Windows 32-bit
    7. Windows 64-bit

  33. Verify that the performance and size measurement spreadsheet in the documentation (misc/speed-size-graph.ods) is up-to-date.
  34. Verify that the amalgamation builds are byte-for-byte identical on all workstation platforms.
    1. Linux (x64)
    2. Linux (ARM)
    3. Mac OS X
    4. Mac OS X (PPC)
    5. Mac OS X (ARM)
    6. Windows using NMAKE.

  35. Verify that databases (including FTS3 and RTREE databases), rollback journals, and WAL files created by the release candidate are readable and writeable by historical versions of SQLite (as long as no unsupported features are used) and vice versa.
  36. Build and verify correct operation of sqlite3_analyzer on:
    1. Linux
    2. Mac OS X
    3. Windows

  37. Build and verify sqldiff
    1. Linux
    2. Mac
    3. Windows

  38. Build the "atrc" test program and run "./atrc $DB | ./sqlite3 $DB" against multiple databases, visually verify the result
  39. Run the rbu/run_rbu_tests.tcl script in the test-dbs project on Linux.
  40. Verify that the "sqlite3-all.c" build target works and that the resulting "sqlite3-all.c" file and its include files ("sqlite3-?.c") compile and run the same as the single-file amalgamation.
  41. Website built procedures
    1. tools/mkmsvcmin.tcl has been run to update the MSVC makefiles in autoconf
    2. Compile-time options for build products have been updated as necessary
    3. All build products work on their target platforms