Date: Fri, 31 Jan 2025 11:45:55 +0000
Subject: [PATCH 145/220] Correct a typo in tool/emcc.sh.in which could cause
all of the configure-time work to locate the emcc binary to go unused.
Reported in [forum:feb325cdde5b6f37|forum post feb325cdde5b6f37].
FossilOrigin-Name: f66efd5b531210407ee8f30cdf6684a7610479fd8810a609c54469f7424a0644
---
manifest | 14 +++++++-------
manifest.uuid | 2 +-
tool/emcc.sh.in | 2 +-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/manifest b/manifest
index 99247a99ee..8b4cea2463 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\sreuse-subroutine\soptimization\s[c9a3498113074bbc]\smight\shave\sgenerated\nbyte-code\sthat\sloops\sforever.\s\sThis\scheck-in\sfixes\sthe\sproblem.
-D 2025-01-30T21:12:58.438
+C Correct\sa\stypo\sin\stool/emcc.sh.in\swhich\scould\scause\sall\sof\sthe\sconfigure-time\swork\sto\slocate\sthe\semcc\sbinary\sto\sgo\sunused.\sReported\sin\s[forum:feb325cdde5b6f37|forum\spost\sfeb325cdde5b6f37].
+D 2025-01-31T11:45:55.505
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -2123,7 +2123,7 @@ F tool/custom.txt 24ed55e71c5edae0067ba159bbf09240d58b160331f7716e95816cd3aa0ba5
F tool/dbhash.c 5da0c61032d23d74f2ab84ffc5740f0e8abec94f2c45c0b4306be7eb3ae96df0
F tool/dbtotxt.c ca48d34eaca6d6b6e4bd6a7be2b72caf34475869054240244c60fa7e69a518d6
F tool/dbtotxt.md c9a57af8739957ef36d2cfad5c4b1443ff3688ed33e4901ee200c8b651f43f3c
-F tool/emcc.sh.in 1f3226166bad1765c0bf42fac3d29037704c2078eb22562f9ddfbe73bff023b0
+F tool/emcc.sh.in 41a049468c8155433e37e656ba5bae063a000768b1d627025f277732c4e7c4a4
F tool/enlargedb.c 3e8b2612b985cfa7e3e8800031ee191b43ae80de96abb5abbd5eada62651ee21
F tool/extract-sqlite3h.tcl 069ceab0cee26cba99952bfa08c0b23e35941c837acabe143f0c355d96c9e2eb x
F tool/extract.c 054069d81b095fbdc189a6f5d4466e40380505e2
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P a700692b39e24f5ca9ea6f879d413e20c2ad2b85f62c867407dafe111f13d931
-R ceeb6c1a37b1d6d8b66aa63af2b79d4d
-U drh
-Z d3c9eaae04d6f46273321f256c2b9c5c
+P 0cc4ed8c6e53aca1f5e94c132bedbc7f561c04a77f1a30b965ffe7560634bfeb
+R 33175d85adee97e4106b94e4e3599ceb
+U stephan
+Z 85e214e0c7f56349a858ab72083d0810
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 9a908b795b..102a5265df 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-0cc4ed8c6e53aca1f5e94c132bedbc7f561c04a77f1a30b965ffe7560634bfeb
+f66efd5b531210407ee8f30cdf6684a7610479fd8810a609c54469f7424a0644
diff --git a/tool/emcc.sh.in b/tool/emcc.sh.in
index 1263e1b0ea..1264df5376 100644
--- a/tool/emcc.sh.in
+++ b/tool/emcc.sh.in
@@ -63,4 +63,4 @@ if [ x = "x${emcc}" ]; then
fi
fi
-exec emcc "$@"
+exec $emcc "$@"
From 824a5bfcf059cb35de6226484667a5677a8c9558 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Fri, 31 Jan 2025 12:09:36 +0000
Subject: [PATCH 146/220] Improvements to the SQLITE_DBCONFIG option
documentation.
FossilOrigin-Name: 59f0ba10062a6ccfd56061a16af3436b9e1b9d23378bff3302bcf33bb3137cb9
---
manifest | 12 +++---
manifest.uuid | 2 +-
src/sqlite.h.in | 105 ++++++++++++++++++++++++++++++------------------
3 files changed, 74 insertions(+), 45 deletions(-)
diff --git a/manifest b/manifest
index a93ad027de..2ee13706dc 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sthe\sSQLITE_DBCONFIG_ENABLE_COMMENTS\ssetting\s(default\son)\sto\senable\sor\ndisable\sthe\sability\sto\sinclude\scomments\sin\sSQL\sinput\stext.
-D 2025-01-31T01:34:19.160
+C Improvements\sto\sthe\sSQLITE_DBCONFIG\soption\sdocumentation.
+D 2025-01-31T12:09:36.393
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -782,7 +782,7 @@ F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 83e88fbb36f89b6703b348777491619554f0fd6f917c9fdf51e4c2e9cda6c04e
F src/shell.c.in b377a59822f207106424f08aead37e78b609222e98f86f04cc8a03563ccf3237
-F src/sqlite.h.in 30a16e4f6c337803ab0917bb98d94015783a993c970ba56f5deed1dd8684e38f
+F src/sqlite.h.in 6bdaf7c577fba45afef371ba69852de9965e23e8b13b9aa099d90281bf0c1e54
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
F src/sqliteInt.h 7f1b070ea3b4ab3c192be553810684f686fdb03f62f90afa2da64d4d61d91ec3
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 86ba57561a8d8c14e401c06b2345a9417053aa3a5f0c84e52460f23f5e6aa8d0
-R a8e75b45389fdcc75e19207c37dcdc78
+P 393749a2e22d5c8eba36e2106a35909420aa6316652d1ab4f18ef699247b6fba
+R 13662bcaa4e43096d085a0dc17072d0e
U drh
-Z 58903bc3f8cbb45b4d2beab95c7e825d
+Z e7786de21407765a3ba181d8f27262b9
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 604c9124fe..6c5aac8ed5 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-393749a2e22d5c8eba36e2106a35909420aa6316652d1ab4f18ef699247b6fba
+59f0ba10062a6ccfd56061a16af3436b9e1b9d23378bff3302bcf33bb3137cb9
diff --git a/src/sqlite.h.in b/src/sqlite.h.in
index a17c2c5b5f..58482f81cb 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -2223,8 +2223,12 @@ struct sqlite3_mem_methods {
**
** [[SQLITE_DBCONFIG_LOOKASIDE]]
** - SQLITE_DBCONFIG_LOOKASIDE
-** - ^This option takes three additional arguments that determine the
-** [lookaside memory allocator] configuration for the [database connection].
+**
- The SQLITE_DBCONFIG_LOOKASIDE option is used to adjust the
+** configuration of the lookaside memory allocator within a database
+** connection.
+** The arguments to the SQLITE_DBCONFIG_LOOKASIDE option are not
+** in the [DBCONFIG arguments|usual format].
+** The SQLITE_DBCONFIG_LOOKASIDE option takes three arguments, not two.
** ^The first argument (the third parameter to [sqlite3_db_config()] is a
** pointer to a memory buffer to use for lookaside memory.
** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
@@ -2247,7 +2251,8 @@ struct sqlite3_mem_methods {
** [[SQLITE_DBCONFIG_ENABLE_FKEY]]
**
- SQLITE_DBCONFIG_ENABLE_FKEY
** - ^This option is used to enable or disable the enforcement of
-** [foreign key constraints]. There should be two additional arguments.
+** [foreign key constraints]. This is the same setting that is
+** enabled or disabled by the [PRAGMA foreign_keys] statement.
** The first argument is an integer which is 0 to disable FK enforcement,
** positive to enable FK enforcement or negative to leave FK enforcement
** unchanged. The second parameter is a pointer to an integer into which
@@ -2269,13 +2274,13 @@ struct sqlite3_mem_methods {
**
Originally this option disabled all triggers. ^(However, since
** SQLite version 3.35.0, TEMP triggers are still allowed even if
** this option is off. So, in other words, this option now only disables
-** triggers in the main database schema or in the schemas of ATTACH-ed
+** triggers in the main database schema or in the schemas of [ATTACH]-ed
** databases.)^
**
** [[SQLITE_DBCONFIG_ENABLE_VIEW]]
** - SQLITE_DBCONFIG_ENABLE_VIEW
** - ^This option is used to enable or disable [CREATE VIEW | views].
-** There should be two additional arguments.
+** There must be two additional arguments.
** The first argument is an integer which is 0 to disable views,
** positive to enable views or negative to leave the setting unchanged.
** The second parameter is a pointer to an integer into which
@@ -2294,7 +2299,7 @@ struct sqlite3_mem_methods {
**
- ^This option is used to enable or disable the
** [fts3_tokenizer()] function which is part of the
** [FTS3] full-text search engine extension.
-** There should be two additional arguments.
+** There must be two additional arguments.
** The first argument is an integer which is 0 to disable fts3_tokenizer() or
** positive to enable fts3_tokenizer() or negative to leave the setting
** unchanged.
@@ -2309,7 +2314,7 @@ struct sqlite3_mem_methods {
** interface independently of the [load_extension()] SQL function.
** The [sqlite3_enable_load_extension()] API enables or disables both the
** C-API [sqlite3_load_extension()] and the SQL function [load_extension()].
-** There should be two additional arguments.
+** There must be two additional arguments.
** When the first argument to this interface is 1, then only the C-API is
** enabled and the SQL function remains disabled. If the first argument to
** this interface is 0, then both the C-API and the SQL function are disabled.
@@ -2323,22 +2328,27 @@ struct sqlite3_mem_methods {
**
** [[SQLITE_DBCONFIG_MAINDBNAME]]
- SQLITE_DBCONFIG_MAINDBNAME
** - ^This option is used to change the name of the "main" database
-** schema. ^The sole argument is a pointer to a constant UTF8 string
-** which will become the new schema name in place of "main". ^SQLite
-** does not make a copy of the new main schema name string, so the application
-** must ensure that the argument passed into this DBCONFIG option is unchanged
+** schema. This option does not follow the
+** [DBCONFIG arguments|usual SQLITE_DBCONFIG argument format].
+** This option takes exactly one argument, which ust be a pointer
+** to a constant UTF8 string which will become the new schema name
+** in place of "main". ^SQLite does not make a copy of the new main
+** schema name string, so the application must ensure that the argument
+** passed into SQLITE_DBCONFIG MAINDBNAME is unchanged
** until after the database connection closes.
**
**
** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]]
** - SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
-** - Usually, when a database in wal mode is closed or detached from a
-** database handle, SQLite checks if this will mean that there are now no
-** connections at all to the database. If so, it performs a checkpoint
-** operation before closing the connection. This option may be used to
-** override this behavior. The first parameter passed to this operation
-** is an integer - positive to disable checkpoints-on-close, or zero (the
-** default) to enable them, and negative to leave the setting unchanged.
+**
- Usually, when a database in [WAL mode] is closed or detached from a
+** database handle, SQLite checks if if there are other connections to the
+** same database, and if there are no other database connection (if the
+** connection being closed is the last open connection to the database),
+** then SQLite performs a [checkpoint] before closing the connection and
+** deletes the WAL file. The SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE option can
+** be used to override that behavior. The first parameter passed to this
+** operation is an integer - positive to disable checkpoints-on-close, or
+** zero (the default) to enable them, and negative to leave the setting unchanged.
** The second parameter is a pointer to an integer
** into which is written 0 or 1 to indicate whether checkpoints-on-close
** have been disabled - 0 if they are not disabled, 1 if they are.
@@ -2500,7 +2510,7 @@ struct sqlite3_mem_methods {
** statistics. For statistics to be collected, the flag must be set on
** the database handle both when the SQL statement is prepared and when it
** is stepped. The flag is set (collection of statistics is enabled)
-** by default. This option takes two arguments: an integer and a pointer to
+** by default.
This option takes two arguments: an integer and a pointer to
** an integer.. The first argument is 1, 0, or -1 to enable, disable, or
** leave unchanged the statement scanstatus option. If the second argument
** is not NULL, then the value of the statement scanstatus setting after
@@ -2514,7 +2524,7 @@ struct sqlite3_mem_methods {
** in which tables and indexes are scanned so that the scans start at the end
** and work toward the beginning rather than starting at the beginning and
** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the
-** same as setting [PRAGMA reverse_unordered_selects]. This option takes
+** same as setting [PRAGMA reverse_unordered_selects].
This option takes
** two arguments which are an integer and a pointer to an integer. The first
** argument is 1, 0, or -1 to enable, disable, or leave unchanged the
** reverse scan order flag, respectively. If the second argument is not NULL,
@@ -2525,11 +2535,12 @@ struct sqlite3_mem_methods {
**
** [[SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE]]
**
- SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE
-** - The SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE option enables the ability
-** of the [ATTACH DATABASE] SQL command to create a new database if the
-** database filed named by the SQL command does not already exist. This
-** ability of [ATTACH] to create a new database is enabled by default, but
-** can be disabled, using the current DBCONFIG option if desired.
+**
- The SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE option enables or disables
+** the ability of the [ATTACH DATABASE] SQL command to create a new database
+** file if the database filed named in the ATTACH command does not already
+** exist. This ability of ATTACH to create a new database is enabled by
+** default. Applications can disable or reenable the ability for ATTACH to
+** create new database files using this DBCONFIG option.
** This option takes two arguments which are an integer and a pointer
** to an integer. The first argument is 1, 0, or -1 to enable, disable, or
** leave unchanged the attach-create flag, respectively. If the second
@@ -2540,29 +2551,30 @@ struct sqlite3_mem_methods {
**
** [[SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE]]
**
- SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE
-** - The SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE option enables the ability
-** of the [ATTACH DATABASE] SQL command to create a new database that is
-** open for writing. This capability is enabled by default, but
-** can be disabled, using the current DBCONFIG option if desired. If this
-** capability is disabled, the [ATTACH] command will still work, but the
-** database is opened read-only. If this option is disabled, then the
-** ability to create a new database using [ATTACH] is also disabled,
+**
- The SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE option enables or disables the
+** ability of the [ATTACH DATABASE] SQL command to open a database for writing.
+** This capability is enabled by default. Applications can disable or
+** reenable this capability using the current DBCONFIG option. If the
+** the this capability is disabled, the [ATTACH] command will still work,
+** but the database will be opened read-only. If this option is disabled,
+** then the ability to create a new database using [ATTACH] is also disabled,
** regardless of the value of the [SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE]
-** option.
+** option.
** This option takes two arguments which are an integer and a pointer
** to an integer. The first argument is 1, 0, or -1 to enable, disable, or
** leave unchanged the ability to ATTACH another database for writing,
** respectively. If the second argument is not NULL, then 0 or 1 is written
-** into the integer that the second argument points to depending on if the
-** ability to ATTACH a read/write database is set
+** into the integer to which the second argument points, depending on whether
+** the ability to ATTACH a read/write database is enabled or disabled
** after processing the first argument.
**
**
-** [[SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE]]
+** [[SQLITE_DBCONFIG_ENABLE_COMMENTS]]
** - SQLITE_DBCONFIG_ENABLE_COMMENTS
** - The SQLITE_DBCONFIG_ENABLE_COMMENTS option enables or disables the
-** ability to include comments in SQL text. Comments are enabled by default,
-** but can be disabled, using the current DBCONFIG option if desired.
+** ability to include comments in SQL text. Comments are enabled by default.
+** An application can disable or reenable comments in SQL text using this
+** DBCONFIG option.
** This option takes two arguments which are an integer and a pointer
** to an integer. The first argument is 1, 0, or -1 to enable, disable, or
** leave unchanged the ability to use comments in SQL text,
@@ -2572,6 +2584,23 @@ struct sqlite3_mem_methods {
**
**
**
+**
+** [[DBCONFIG arguments]] Arguments To SQLITE_DBCONFIG Options
+**
+** Most of the SQLITE_DBCONFIG options take two argument, an integer
+** and a pointer to an integer. If the first integer argument is 1, then
+** the option becomes enabled. If the first integer argument is 0, then the
+** option is disabled. If the first argument is -1, then the option setting
+** is unchanged. The second argument, the pointer to an integer, may be NULL.
+** If the second argument is not NULL, then a value of 0 or 1 is written into
+** the integer to which the second argument points, depending on whether the
+** setting is disabled or enabled after applying any changes specified by
+** the first argument.
+**
+**
While most SQLITE_DBCONFIG options use the argument format
+** described in the previous paragraph, the [SQLITE_DBCONFIG_MAINDBNAME]
+** and [SQLITE_DBCONFIG_LOOKASIDE] options are different. See the
+** documentation of those exceptional options for details.
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
From efbf4815411adc7c63f7caf49c5f60cb6cccaaca Mon Sep 17 00:00:00 2001
From: stephan
Date: Fri, 31 Jan 2025 12:30:37 +0000
Subject: [PATCH 147/220] Minor wasm-specific doc touchups.
FossilOrigin-Name: 56b618da9073db8b8d5dafa177a3c9e4c4d927bf512e14b0e6d23937f91ce4cf
---
ext/wasm/README-dist.txt | 12 ++++++++----
ext/wasm/README.md | 9 +++++----
ext/wasm/api/README.md | 24 ++++++++++++++----------
manifest | 16 ++++++++--------
manifest.uuid | 2 +-
5 files changed, 36 insertions(+), 27 deletions(-)
diff --git a/ext/wasm/README-dist.txt b/ext/wasm/README-dist.txt
index 6656a2072a..4a527fc5ef 100644
--- a/ext/wasm/README-dist.txt
+++ b/ext/wasm/README-dist.txt
@@ -31,16 +31,20 @@ build:
use of and is not demonstrated here.
Browsers will not serve WASM files from file:// URLs, so the test and
-demonstration apps require a web server and that server must include
-the following headers in its response when serving the files:
+demonstration apps require a web server and that server must, for the
+OPFS[^1]-related features, include the following headers in its response
+when serving the files:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
-The core library will function without those headers but certain
-features, most notably OPFS storage, will not be available.
+Most functionality will work without those headers but the OPFS[^1]
+storage capability will not be available without them.
One simple way to get the demo apps up and running on Unix-style
systems is to install althttpd (https://sqlite.org/althttpd) and run:
althttpd --enable-sab --page index.html
+
+
+[^1]: https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system
diff --git a/ext/wasm/README.md b/ext/wasm/README.md
index 21330f0eba..c41e54bd2a 100644
--- a/ext/wasm/README.md
+++ b/ext/wasm/README.md
@@ -35,7 +35,7 @@ after upgrading it! Our build process makes no guarantees about which
Emscripten version(s) will or won't work, but it's important that
production builds are built using a compatible version. During active
development, the EMSDK is frequently updated, the goal being to keep
-sqlite3.wasm working with "the latest" EMSDK.)
+`sqlite3.wasm` working with "the latest" EMSDK.)
The SQLite configure script will search for the EMSDK. One way
to ensure that it finds it is:
@@ -95,14 +95,14 @@ $ make httpd
That will open the system's browser and visit the index page, from
which (almost) all of the test and demo applications can be accessed.
(`ext/wasm/SQLTester` is not listed in that page because it's only of
-real utility when it's used in conjunction with the proprietary test
-suite, which most users don't have access to.)
+real utility when it's used in conjunction with the project's
+proprietary test suite, which most users don't have access to.)
Note that when serving this app via [althttpd][], it must be a version
from 2022-09-26 or newer so that it recognizes the `--enable-sab`
flag, which causes althttpd to emit two HTTP response headers which
are required to enable JavaScript's `SharedArrayBuffer` and `Atomics`
-APIs. Those APIs are required in order to enable the OPFS-related
+APIs. Those APIs are required in order to enable the [OPFS][]-related
features in the apps which use them.
# Testing on a remote machine that is accessed via SSH
@@ -129,3 +129,4 @@ be tunneled using SSH.
[emscripten]: https://emscripten.org
[althttpd]: https://sqlite.org/althttpd
[SharedArrayBuffer]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer
+[OPFS]: https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system
diff --git a/ext/wasm/api/README.md b/ext/wasm/api/README.md
index ebd4aaacb1..ce7e58ebed 100644
--- a/ext/wasm/api/README.md
+++ b/ext/wasm/api/README.md
@@ -85,17 +85,18 @@ browser client:
Installs the `sqlite3.vtab` namespace, which contain helpers for use
by downstream code which creates `sqlite3_module` implementations.
- **`sqlite3-vfs-opfs.c-pp.js`**\
- is an sqlite3 VFS implementation which supports the Origin-Private
- FileSystem (OPFS) as a storage layer to provide persistent storage
- for database files in a browser. It requires...
+ is an sqlite3 VFS implementation which supports the [Origin-Private
+ FileSystem (OPFS)][OPFS] as a storage layer to provide persistent
+ storage for database files in a browser. It requires...
- **`sqlite3-opfs-async-proxy.js`**\
- is the asynchronous backend part of the OPFS proxy. It speaks
- directly to the (async) OPFS API and channels those results back
- to its synchronous counterpart. This file, because it must be
- started in its own Worker, is not part of the amalgamation.
+ is the asynchronous backend part of the [OPFS][] proxy. It
+ speaks directly to the (async) OPFS API and channels those
+ results back to its synchronous counterpart. This file, because
+ it must be started in its own Worker, is not part of the
+ amalgamation.
- **`sqlite3-vfs-opfs-sahpool.c-pp.js`**\
- is another sqlite3 VFS supporting the OPFS, but uses a completely
- different approach that the above-listed one.
+ is another sqlite3 VFS supporting the [OPFS][], but uses a
+ completely different approach that the above-listed one.
- **`sqlite3-api-cleanup.js`**\
The previous files do not immediately extend the library. Instead
they add callback functions to be called during its
@@ -152,7 +153,7 @@ into the build-generated `sqlite3.js` along with `sqlite3-api.js`.
flag. This file overwrites the Emscripten-installed
`sqlite3InitModule()` function with one which, after the module is
loaded, also initializes the asynchronous parts of the sqlite3
- module. For example, the OPFS VFS support.
+ module. For example, the [OPFS][] VFS support.
Preprocessing of Source Files
@@ -164,3 +165,6 @@ builds. The preprocessor application itself is in
[`c-pp.c`](/file/ext/wasm/c-pp.c) and the complete technical details
of such preprocessing are maintained in
[`GNUMakefile`](/file/ext/wasm/GNUmakefile).
+
+
+[OPFS]: https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system
diff --git a/manifest b/manifest
index 8b4cea2463..6fe6f41613 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Correct\sa\stypo\sin\stool/emcc.sh.in\swhich\scould\scause\sall\sof\sthe\sconfigure-time\swork\sto\slocate\sthe\semcc\sbinary\sto\sgo\sunused.\sReported\sin\s[forum:feb325cdde5b6f37|forum\spost\sfeb325cdde5b6f37].
-D 2025-01-31T11:45:55.505
+C Minor\swasm-specific\sdoc\stouchups.
+D 2025-01-31T12:30:37.066
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -620,8 +620,8 @@ F ext/session/sqlite3session.h 683ccbf16e2c2521661fc4c1cf918ce57002039efbcabcd80
F ext/session/test_session.c 12e0a2c15fd60f92da4bb29c697c9177ff0c0dbcdc5129a54c47e999f147937a
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F ext/wasm/GNUmakefile 47f121d057c08ba49443c06c1c51ba2572e3d5d28a06c968cf0b2ccd5878c3d3
-F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
-F ext/wasm/README.md 6c1dd9e4448c672f4a072c56d3ce9164b3c7dc818ea8f18b49c6834bfd5efe24
+F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a
+F ext/wasm/README.md b89605f65661cf35bf034ff6d43e448cc169b8017fc105d498e33b81218b482c
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
F ext/wasm/SQLTester/SQLTester.mjs 66e1adc3d79467b68e3e40614fd42c1a577c7e219ec0985db966eded52a941e5
F ext/wasm/SQLTester/SQLTester.run.mjs 57f2adb33f43f2784abbf8026c1bfd049d8013af1998e7dcb8b50c89ffc332e0
@@ -631,7 +631,7 @@ F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-core 2bcbbfe3b95c043ed6037e2708a2ee078
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-extras fe40d6d758646e38f8b15f709044951e10884214f5453d35502100179c388c13
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-see fb29e62082a658f0d81102488414d422c393c4b20cc2f685b216bc566237957b
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
-F ext/wasm/api/README.md 34fe11466f9c1d81b10a0469e1114e5f1c5a6365c73d80a1a6ca639a1a358b73
+F ext/wasm/api/README.md c64ec8e84449c069e0217706d9d7d31b3bd53627228b2ba0c3cddbdc2350ca66
F ext/wasm/api/extern-post-js.c-pp.js 3fcd904f1204685dea84e5ae90d8b7e65a1dcebab1e838386d8328b74cce46c9
F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41
F ext/wasm/api/post-js-footer.js 365405929f41ca0e6d389ed8a8da3f3c93e11d3ef43a90ae151e37fa9f75bf41
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 0cc4ed8c6e53aca1f5e94c132bedbc7f561c04a77f1a30b965ffe7560634bfeb
-R 33175d85adee97e4106b94e4e3599ceb
+P f66efd5b531210407ee8f30cdf6684a7610479fd8810a609c54469f7424a0644
+R ee4ef9a21aa00ca447e26df7a5840479
U stephan
-Z 85e214e0c7f56349a858ab72083d0810
+Z effbdee03a11b5ac430008ff904c3705
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 102a5265df..b55f345c59 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-f66efd5b531210407ee8f30cdf6684a7610479fd8810a609c54469f7424a0644
+56b618da9073db8b8d5dafa177a3c9e4c4d927bf512e14b0e6d23937f91ce4cf
From a0337903030a123f09eae41a5146993ff81d83e4 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Fri, 31 Jan 2025 14:52:05 +0000
Subject: [PATCH 148/220] If any errors occur while processing sqlite_dbpage
changes, cancel pending truncate operations.
FossilOrigin-Name: 6138e0dc4e0e4e19cb048fe0cd969156151fdc427eee21188d2a822642aad043
---
manifest | 13 ++++++-------
manifest.uuid | 2 +-
src/dbpage.c | 1 +
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/manifest b/manifest
index 1e668b1a88..d8bb70d2ca 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Three\snew\soptions\sto\ssqlite3_db_config():\s\sATTACH_CREATE,\sATTACH_WRITE,\nand\sCOMMENTS.
-D 2025-01-31T13:32:03.815
+C If\sany\serrors\soccur\swhile\sprocessing\ssqlite_dbpage\schanges,\scancel\npending\struncate\soperations.
+D 2025-01-31T14:52:05.955
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -727,7 +727,7 @@ F src/callback.c acae8c8dddda41ee85cfdf19b926eefe830f371069f8aadca3aa39adf5b1c85
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/ctime.c d35723024b963edce9c0fad5b3303e8bb9266083784844baed10a6dedfe26f3b
F src/date.c 842c08ac143a56a627b05ac51d68624f2b7b03e3b4cba596205e735eed64ee57
-F src/dbpage.c e90410e5d4c0217dfddc4184a81e38ec4903c25d4ec0f201060a0e54e7c2099f
+F src/dbpage.c 2e677acb658a29965e55398bbc61161cb7819da538057c8032adac7ab8e4a8c0
F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c
F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42
F src/expr.c 8705be31ee713aaa43c97d91399db09f16ee41b88250406eb99de6b47f550a98
@@ -2209,9 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 56b618da9073db8b8d5dafa177a3c9e4c4d927bf512e14b0e6d23937f91ce4cf 59f0ba10062a6ccfd56061a16af3436b9e1b9d23378bff3302bcf33bb3137cb9
-R 9c4677ef318fd9ecf4b5844727767716
-T +closed 59f0ba10062a6ccfd56061a16af3436b9e1b9d23378bff3302bcf33bb3137cb9
+P 325e547a2195571ece4bb22ca65d67d8c2cb42030618916d37930666cf221917
+R 3bd4da0aa5d426accdfc728b0601224c
U drh
-Z 0620756e82ee0b6bee5e8e012928d482
+Z d6c5c6307ddd02cca8c78f06a45a0bc2
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 9ec94fb69f..464282d7dd 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-325e547a2195571ece4bb22ca65d67d8c2cb42030618916d37930666cf221917
+6138e0dc4e0e4e19cb048fe0cd969156151fdc427eee21188d2a822642aad043
diff --git a/src/dbpage.c b/src/dbpage.c
index 40ebe4f14a..eb5ab33fe1 100644
--- a/src/dbpage.c
+++ b/src/dbpage.c
@@ -424,6 +424,7 @@ static int dbpageUpdate(
return rc;
update_fail:
+ pTab->pgnoTrunc = 0;
sqlite3_free(pVtab->zErrMsg);
pVtab->zErrMsg = sqlite3_mprintf("%s", zErr);
return SQLITE_ERROR;
From f6ca35d88cad6521ad06c6c9e1bfe0e3066d8cbb Mon Sep 17 00:00:00 2001
From: dan
Date: Fri, 31 Jan 2025 14:52:36 +0000
Subject: [PATCH 149/220] Fix a problem with LIKE and GLOB processing in
utf-16be databases in cases where the utf-8 encoding of a character ends with
the byte 0xBF.
FossilOrigin-Name: 4b4f33d791fe4318c4597bee7d2f9e486ed223e731982af470f5cc0dbdc600fc
---
manifest | 16 +++++-----
manifest.uuid | 2 +-
src/whereexpr.c | 32 ++++++++++++--------
test/like3.test | 80 +++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 109 insertions(+), 21 deletions(-)
diff --git a/manifest b/manifest
index d8bb70d2ca..1632def2a1 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C If\sany\serrors\soccur\swhile\sprocessing\ssqlite_dbpage\schanges,\scancel\npending\struncate\soperations.
-D 2025-01-31T14:52:05.955
+C Fix\sa\sproblem\swith\sLIKE\sand\sGLOB\sprocessing\sin\sutf-16be\sdatabases\sin\scases\swhere\sthe\sutf-8\sencoding\sof\sa\scharacter\sends\swith\sthe\sbyte\s0xBF.
+D 2025-01-31T14:52:36.806
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -867,7 +867,7 @@ F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
F src/where.c 09dc313e7223ca1217c39c7026b00f16ff449a8323511a762fcba7863a00f4cd
F src/whereInt.h d20cddddb1d61b18d5cb1fcfa9b77fbeebbc4afe44d996e603452a23b3009ee1
F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab
-F src/whereexpr.c 0f93a29cabd3a338d09a1f5c6770620a1ac51ec1157f3229502a7e7767c60b6f
+F src/whereexpr.c fd80811331cebf37a96a1bbbe93a20425eb04a925baa7c2306d72e0797a47a4c
F src/window.c 2bf01f9941a64fbcead61a0e3cb5db3fca5094b30d2ff0d23274c2a81d2e2385
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
@@ -1401,7 +1401,7 @@ F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200
F test/lemon-test01.y 70110eff607ab137ccc851edb2bc7e14a6d4f246b5d2d25f82a60b69d87a9ff2
F test/like.test b3ea2ba3558199aa8f25a42ddeb54772e234fab50868c9f066047acdbda8fc58
F test/like2.test d3be15fefee3e02fc88942a9b98f26c5339bbdef7783c90023c092c4955fe3d3
-F test/like3.test a76e5938fadbe6d32807284c796bafd869974a961057bc5fc5a28e06de98745c
+F test/like3.test a9d78297426279c3db1206490444f3193f579890b3c4118a52960afe2b4863cd
F test/limit.test 350f5d03c29e7dff9a2cde016f84f8d368d40bcd02fa2b2a52fa10c4bf3cbfaf
F test/limit2.test 9409b033284642a859fafc95f29a5a6a557bd57c1f0d7c3f554bd64ed69df77e
F test/literal.test a65dca9fef86e51b8e45544268e37abbd4bb94ba35fd65f6fdcab2f288cd8f79
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 325e547a2195571ece4bb22ca65d67d8c2cb42030618916d37930666cf221917
-R 3bd4da0aa5d426accdfc728b0601224c
-U drh
-Z d6c5c6307ddd02cca8c78f06a45a0bc2
+P 6138e0dc4e0e4e19cb048fe0cd969156151fdc427eee21188d2a822642aad043
+R 6c74985ff3e26b84d99b79b3d7d419a0
+U dan
+Z f41b656617240d39be19007efc0ec242
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 464282d7dd..afbb673c85 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-6138e0dc4e0e4e19cb048fe0cd969156151fdc427eee21188d2a822642aad043
+4b4f33d791fe4318c4597bee7d2f9e486ed223e731982af470f5cc0dbdc600fc
diff --git a/src/whereexpr.c b/src/whereexpr.c
index 2b6eb6a78d..0a963f4f92 100644
--- a/src/whereexpr.c
+++ b/src/whereexpr.c
@@ -219,12 +219,12 @@ static int isLikeOrGlob(
z = (u8*)pRight->u.zToken;
}
if( z ){
- /* Count the number of prefix bytes prior to the first wildcard.
- ** or U+fffd character. If the underlying database has a UTF16LE
- ** encoding, then only consider ASCII characters. Note that the
- ** encoding of z[] is UTF8 - we are dealing with only UTF8 here in
- ** this code, but the database engine itself might be processing
- ** content using a different encoding. */
+ /* Count the number of prefix bytes prior to the first wildcard,
+ ** U+fffd character, or malformed utf-8. If the underlying database
+ ** has a UTF16LE encoding, then only consider ASCII characters. Note that
+ ** the encoding of z[] is UTF8 - we are dealing with only UTF8 here in this
+ ** code, but the database engine itself might be processing content using a
+ ** different encoding. */
cnt = 0;
while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
cnt++;
@@ -232,7 +232,9 @@ static int isLikeOrGlob(
cnt++;
}else if( c>=0x80 ){
const u8 *z2 = z+cnt-1;
- if( sqlite3Utf8Read(&z2)==0xfffd || ENC(db)==SQLITE_UTF16LE ){
+ if( sqlite3Utf8Read(&z2)==0xfffd || c==0xFF /* bad utf-8 */
+ || ENC(db)==SQLITE_UTF16LE
+ ){
cnt--;
break;
}else{
@@ -1384,9 +1386,8 @@ static void exprAnalyze(
}
if( !db->mallocFailed ){
- u8 c, *pC; /* Last character before the first wildcard */
+ u8 *pC; /* Last character before the first wildcard */
pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1];
- c = *pC;
if( noCase ){
/* The point is to increment the last character before the first
** wildcard. But if we increment '@', that will push it into the
@@ -1394,10 +1395,17 @@ static void exprAnalyze(
** inequality. To avoid this, make sure to also run the full
** LIKE on all candidate expressions by clearing the isComplete flag
*/
- if( c=='A'-1 ) isComplete = 0;
- c = sqlite3UpperToLower[c];
+ if( *pC=='A'-1 ) isComplete = 0;
+ *pC = sqlite3UpperToLower[*pC];
}
- *pC = c + 1;
+
+ /* Increment the value of the last utf8 character in the prefix. */
+ while( *pC==0xBF && pC>(u8*)pStr2->u.zToken ){
+ *pC = 0x80;
+ pC--;
+ }
+ assert( *pC!=0xFF ); /* isLikeOrGlob() guarantees this */
+ (*pC)++;
}
zCollSeqName = noCase ? "NOCASE" : sqlite3StrBINARY;
pNewExpr1 = sqlite3ExprDup(db, pLeft, 0);
diff --git a/test/like3.test b/test/like3.test
index a93e113d62..2987e0e0e2 100644
--- a/test/like3.test
+++ b/test/like3.test
@@ -275,4 +275,84 @@ do_eqp_test like3-6.240 {
}
}
+#-------------------------------------------------------------------------
+
+ifcapable utf16 {
+ reset_db
+ do_execsql_test like3-7.0 {
+ PRAGMA encoding = 'UTF-16be';
+
+ CREATE TABLE Example(word TEXT NOT NULL);
+ CREATE INDEX Example_word on Example(word);
+
+ INSERT INTO Example VALUES(char(0x307F));
+ }
+
+ do_execsql_test like3-7.1 {
+ SELECT char(0x307F)=='み';
+ } {1}
+
+ do_execsql_test like3-7.1 {
+ SELECT * FROM Example WHERE word GLOB 'み*'
+ } {み}
+
+ do_execsql_test like3-7.2 {
+ SELECT * FROM Example WHERE word >= char(0x307F) AND word < char(0x3080);
+ } {み}
+}
+
+#-------------------------------------------------------------------------
+reset_db
+
+foreach enc {
+ UTF-8
+ UTF-16le
+ UTF-16be
+} {
+ foreach {tn expr} {
+ 1 "CAST (X'FF' AS TEXT)"
+ 2 "CAST (X'FFBF' AS TEXT)"
+ 3 "CAST (X'FFBFBF' AS TEXT)"
+ 4 "CAST (X'FFBFBFBF' AS TEXT)"
+
+ 5 "'abc' || CAST (X'FF' AS TEXT)"
+ 6 "'def' || CAST (X'FFBF' AS TEXT)"
+ 7 "'ghi' || CAST (X'FFBFBF' AS TEXT)"
+ 8 "'jkl' || CAST (X'FFBFBFBF' AS TEXT)"
+ } {
+ reset_db
+ execsql "PRAGMA encoding = '$enc'"
+ do_execsql_test like3-8.$tn.0 {
+ CREATE TABLE t1(x);
+ }
+
+ do_execsql_test like3-8.$tn.1 {
+ PRAGMA encoding
+ } $enc
+
+ do_execsql_test like3-8.$tn.1 "
+ INSERT INTO t1 VALUES( $expr )
+ "
+
+ do_execsql_test like3-8.$tn.2 {
+ SELECT typeof(x) FROM t1
+ } {text}
+
+ set x [db one {SELECT x || '%' FROM t1}]
+
+ do_execsql_test like3-8.$tn.3 {
+ SELECT rowid FROM t1 WHERE x LIKE $x
+ } 1
+
+ do_execsql_test like3-8.$tn.4 {
+ CREATE INDEX i1 ON t1(x);
+ }
+
+ do_execsql_test like3-8.$tn.5 {
+ SELECT rowid FROM t1 WHERE x LIKE $x
+ } 1
+ }
+}
+
finish_test
+
From 8fbf400bb0b6d094eaf8b7e17c02a6ad624f5708 Mon Sep 17 00:00:00 2001
From: dan
Date: Fri, 31 Jan 2025 18:33:37 +0000
Subject: [PATCH 150/220] Remove an assert() that is not true if a
trace-callback is deregistered while there are active statements.
FossilOrigin-Name: 0ecfc4d0ebdb272a69f8f98ddb069c7e0735fb899804027eb16f241d83b3d046
---
manifest | 14 +++++++-------
manifest.uuid | 2 +-
src/vdbeapi.c | 1 -
test/trace3.test | 16 ++++++++++++++++
4 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/manifest b/manifest
index 1632def2a1..c6be9deac2 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sproblem\swith\sLIKE\sand\sGLOB\sprocessing\sin\sutf-16be\sdatabases\sin\scases\swhere\sthe\sutf-8\sencoding\sof\sa\scharacter\sends\swith\sthe\sbyte\s0xBF.
-D 2025-01-31T14:52:36.806
+C Remove\san\sassert()\sthat\sis\snot\strue\sif\sa\strace-callback\sis\sderegistered\swhile\sthere\sare\sactive\sstatements.
+D 2025-01-31T18:33:37.705
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -852,7 +852,7 @@ F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40
F src/vdbe.c b428a751953c0c2ff85e3e152ec16e29d488895cd541c8c20876ff9f3bf6978a
F src/vdbe.h 3d26d5c7660c5c7bd33ffb0d8784615072d8b23c81f8110870efe2631136bc89
F src/vdbeInt.h 895b1ab7536f018d3d70d690f6c0adbd1062b6dddce1c2cad912927856d4033c
-F src/vdbeapi.c 08d0445b6066b04e5014d5d322b75736a61fe847ed88eb6e1a186c79dd9ed117
+F src/vdbeapi.c 82fe278a7c71b653235c6f9fb5de0b5de589908dfcb011ba2a782e8becf06f86
F src/vdbeaux.c 885e16100597507fbbe09d82cbb963bff3fd8a9c1e358dc4f463fc95feb18e8b
F src/vdbeblob.c 255be187436da38b01f276c02e6a08103489bbe2a7c6c21537b7aecbe0e1f797
F src/vdbemem.c 977438546df236c6a3e7d8b4fe86c0643c13b89b00235db1f11c3a91a4796d30
@@ -1893,7 +1893,7 @@ F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
F test/tpch01.test 4479008f85f6f8f25f7ab2cb305d665752b4727fa28a8df3d8e0ad46520c62ff
F test/trace.test a659a9862957f4789e37a92b3bf6d2caf5c86b02cdeefc41e850ae53acf6992a
F test/trace2.test f5cb67ad3bc09e0c58e8cca78dfd0b5639259983
-F test/trace3.test 4f418ed30d15d9d17dcf13a17f0bd99a92e3038e038798e35db7525f82f4c281
+F test/trace3.test 2deeac66359c9f007f0fc9fb6336994a5d68fc1a65129f322a9e9546fd537d0a
F test/trans.test 45f6f9ab6f66a7b5744f1caac06b558f95da62501916906cf55586a896f9f439
F test/trans2.test 62bd045bfc7a1c14c5ba83ba64d21ade31583f76
F test/trans3.test 91a100e5412b488e22a655fe423a14c26403ab94
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 6138e0dc4e0e4e19cb048fe0cd969156151fdc427eee21188d2a822642aad043
-R 6c74985ff3e26b84d99b79b3d7d419a0
+P 4b4f33d791fe4318c4597bee7d2f9e486ed223e731982af470f5cc0dbdc600fc
+R eb94bfac632b4e0afd83fa9877b4b4ff
U dan
-Z f41b656617240d39be19007efc0ec242
+Z 76e080bb074040fe3e81e0d36c896c38
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index afbb673c85..9707f1eb83 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-4b4f33d791fe4318c4597bee7d2f9e486ed223e731982af470f5cc0dbdc600fc
+0ecfc4d0ebdb272a69f8f98ddb069c7e0735fb899804027eb16f241d83b3d046
diff --git a/src/vdbeapi.c b/src/vdbeapi.c
index aab7ac8a3c..0dc09d501e 100644
--- a/src/vdbeapi.c
+++ b/src/vdbeapi.c
@@ -63,7 +63,6 @@ static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){
sqlite3_int64 iNow;
sqlite3_int64 iElapse;
assert( p->startTime>0 );
- assert( (db->mTrace & (SQLITE_TRACE_PROFILE|SQLITE_TRACE_XPROFILE))!=0 );
assert( db->init.busy==0 );
assert( p->zSql!=0 );
sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
diff --git a/test/trace3.test b/test/trace3.test
index 496cc2360a..639aefafa6 100644
--- a/test/trace3.test
+++ b/test/trace3.test
@@ -342,5 +342,21 @@ do_test 12.1.2 {
sqlite3_finalize $STMT
} {SQLITE_OK}
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 13.0 {
+ CREATE TABLE T1(a, b);
+ INSERT INTO t1 VALUES(1, 2), (3, 4);
+}
+
+proc trace_callback {args} {}
+db trace_v2 trace_callback profile
+
+do_test 13.1 {
+ db eval { SELECT * FROM t1 } {
+ db trace_v2 "" ""
+ }
+ set {} {}
+} {}
finish_test
From 82f3052e618f95b87717c4d926f2e9bd2965a233 Mon Sep 17 00:00:00 2001
From: stephan
Date: Fri, 31 Jan 2025 18:45:03 +0000
Subject: [PATCH 151/220] Expose the new
SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE/WRITE and
SQLITE_DBCONFIG_ENABLE_COMMENTS (from [325e547a21955]) to JS/WASM.
FossilOrigin-Name: 8da1a9af66f905c683e9c3445d609b5c0e11ac912be192c468ddd79f237837f4
---
ext/wasm/api/sqlite3-api-prologue.js | 75 +++++++++++++++-------------
ext/wasm/api/sqlite3-wasm.c | 7 ++-
ext/wasm/tester1.c-pp.js | 39 ++++++++++++++-
manifest | 18 +++----
manifest.uuid | 2 +-
5 files changed, 94 insertions(+), 47 deletions(-)
diff --git a/ext/wasm/api/sqlite3-api-prologue.js b/ext/wasm/api/sqlite3-api-prologue.js
index ee973990a3..277efa14ab 100644
--- a/ext/wasm/api/sqlite3-api-prologue.js
+++ b/ext/wasm/api/sqlite3-api-prologue.js
@@ -1712,41 +1712,48 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
missing or falsy pointer argument as 0.
*/
capi.sqlite3_db_config = function(pDb, op, ...args){
- if(!this.s){
- this.s = wasm.xWrap('sqlite3__wasm_db_config_s','int',
- ['sqlite3*', 'int', 'string:static']
- /* MAINDBNAME requires a static string */);
- this.pii = wasm.xWrap('sqlite3__wasm_db_config_pii', 'int',
- ['sqlite3*', 'int', '*','int', 'int']);
- this.ip = wasm.xWrap('sqlite3__wasm_db_config_ip','int',
- ['sqlite3*', 'int', 'int','*']);
- }
switch(op){
- case capi.SQLITE_DBCONFIG_ENABLE_FKEY:
- case capi.SQLITE_DBCONFIG_ENABLE_TRIGGER:
- case capi.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER:
- case capi.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION:
- case capi.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE:
- case capi.SQLITE_DBCONFIG_ENABLE_QPSG:
- case capi.SQLITE_DBCONFIG_TRIGGER_EQP:
- case capi.SQLITE_DBCONFIG_RESET_DATABASE:
- case capi.SQLITE_DBCONFIG_DEFENSIVE:
- case capi.SQLITE_DBCONFIG_WRITABLE_SCHEMA:
- case capi.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE:
- case capi.SQLITE_DBCONFIG_DQS_DML:
- case capi.SQLITE_DBCONFIG_DQS_DDL:
- case capi.SQLITE_DBCONFIG_ENABLE_VIEW:
- case capi.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT:
- case capi.SQLITE_DBCONFIG_TRUSTED_SCHEMA:
- case capi.SQLITE_DBCONFIG_STMT_SCANSTATUS:
- case capi.SQLITE_DBCONFIG_REVERSE_SCANORDER:
- return this.ip(pDb, op, args[0], args[1] || 0);
- case capi.SQLITE_DBCONFIG_LOOKASIDE:
- return this.pii(pDb, op, args[0], args[1], args[2]);
- case capi.SQLITE_DBCONFIG_MAINDBNAME:
- return this.s(pDb, op, args[0]);
- default:
- return capi.SQLITE_MISUSE;
+ case capi.SQLITE_DBCONFIG_ENABLE_FKEY:
+ case capi.SQLITE_DBCONFIG_ENABLE_TRIGGER:
+ case capi.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER:
+ case capi.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION:
+ case capi.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE:
+ case capi.SQLITE_DBCONFIG_ENABLE_QPSG:
+ case capi.SQLITE_DBCONFIG_TRIGGER_EQP:
+ case capi.SQLITE_DBCONFIG_RESET_DATABASE:
+ case capi.SQLITE_DBCONFIG_DEFENSIVE:
+ case capi.SQLITE_DBCONFIG_WRITABLE_SCHEMA:
+ case capi.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE:
+ case capi.SQLITE_DBCONFIG_DQS_DML:
+ case capi.SQLITE_DBCONFIG_DQS_DDL:
+ case capi.SQLITE_DBCONFIG_ENABLE_VIEW:
+ case capi.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT:
+ case capi.SQLITE_DBCONFIG_TRUSTED_SCHEMA:
+ case capi.SQLITE_DBCONFIG_STMT_SCANSTATUS:
+ case capi.SQLITE_DBCONFIG_REVERSE_SCANORDER:
+ case capi.SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE:
+ case capi.SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE:
+ case capi.SQLITE_DBCONFIG_ENABLE_COMMENTS:
+ if( !this.ip ){
+ this.ip = wasm.xWrap('sqlite3__wasm_db_config_ip','int',
+ ['sqlite3*', 'int', 'int', '*']);
+ }
+ return this.ip(pDb, op, args[0], args[1] || 0);
+ case capi.SQLITE_DBCONFIG_LOOKASIDE:
+ if( !this.pii ){
+ this.pii = wasm.xWrap('sqlite3__wasm_db_config_pii', 'int',
+ ['sqlite3*', 'int', '*', 'int', 'int']);
+ }
+ return this.pii(pDb, op, args[0], args[1], args[2]);
+ case capi.SQLITE_DBCONFIG_MAINDBNAME:
+ if(!this.s){
+ this.s = wasm.xWrap('sqlite3__wasm_db_config_s','int',
+ ['sqlite3*', 'int', 'string:static']
+ /* MAINDBNAME requires a static string */);
+ }
+ return this.s(pDb, op, args[0]);
+ default:
+ return capi.SQLITE_MISUSE;
}
}.bind(Object.create(null));
diff --git a/ext/wasm/api/sqlite3-wasm.c b/ext/wasm/api/sqlite3-wasm.c
index c5dd495e54..461afe0663 100644
--- a/ext/wasm/api/sqlite3-wasm.c
+++ b/ext/wasm/api/sqlite3-wasm.c
@@ -331,7 +331,6 @@ SQLITE_WASM_EXPORT void sqlite3__wasm_pstack_restore(unsigned char * p){
*/
SQLITE_WASM_EXPORT void * sqlite3__wasm_pstack_alloc(int n){
if( n<=0 ) return 0;
- //if( n & 0x7 ) n += 8 - (n & 0x7) /* align to 8-byte boundary */;
n = (n + 7) & ~7 /* align to 8-byte boundary */;
if( PStack.pBegin + n > PStack.pPos /*not enough space left*/
|| PStack.pBegin + n <= PStack.pBegin /*overflow*/ ) return 0;
@@ -597,6 +596,9 @@ const char * sqlite3__wasm_enum_json(void){
DefInt(SQLITE_DBCONFIG_TRUSTED_SCHEMA);
DefInt(SQLITE_DBCONFIG_STMT_SCANSTATUS);
DefInt(SQLITE_DBCONFIG_REVERSE_SCANORDER);
+ DefInt(SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE);
+ DefInt(SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE);
+ DefInt(SQLITE_DBCONFIG_ENABLE_COMMENTS);
DefInt(SQLITE_DBCONFIG_MAX);
} _DefGroup;
@@ -1630,6 +1632,9 @@ int sqlite3__wasm_db_config_ip(sqlite3 *pDb, int op, int arg1, int* pArg2){
case SQLITE_DBCONFIG_TRUSTED_SCHEMA:
case SQLITE_DBCONFIG_STMT_SCANSTATUS:
case SQLITE_DBCONFIG_REVERSE_SCANORDER:
+ case SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE:
+ case SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE:
+ case SQLITE_DBCONFIG_ENABLE_COMMENTS:
return sqlite3_db_config(pDb, op, arg1, pArg2);
default: return SQLITE_MISUSE;
}
diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js
index a21a1c330e..f83ecbd873 100644
--- a/ext/wasm/tester1.c-pp.js
+++ b/ext/wasm/tester1.c-pp.js
@@ -1241,6 +1241,12 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
}finally{
wasm.pstack.restore(stack);
}
+
+ capi.sqlite3_db_config(this.db, capi.SQLITE_DBCONFIG_ENABLE_COMMENTS, 0, null);
+ T.mustThrow(()=>this.db.exec("select 1 /* with comments */"), "SQL comments are disallowed");
+ capi.sqlite3_db_config(this.db, capi.SQLITE_DBCONFIG_ENABLE_COMMENTS, 1, null);
+ this.db.exec("select 1 /* with comments */");
+ /* SQLITE_DBCONFIG_ENABLE_ATTACH_... are in the ATTACH-specific tests */
})
////////////////////////////////////////////////////////////////////
@@ -1999,7 +2005,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
}/*window UDFs*/)
////////////////////////////////////////////////////////////////////
- .t("ATTACH", function(){
+ .t("ATTACH", function(sqlite3){
const db = this.db;
const resultRows = [];
db.exec({
@@ -2078,7 +2084,36 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
db.exec("detach foo");
T.mustThrow(()=>db.exec("select * from foo.bar"),
"Because foo is no longer attached.");
- })
+
+ /* SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE/WRITE... */
+ const db2 = new sqlite3.oo1.DB();
+ try{
+ capi.sqlite3_db_config(db2, capi.SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE, 0, null);
+ T.mustThrow(()=>db2.exec("attach 'attached.db' as foo"),
+ "Cannot create a new db via ATTACH");
+ capi.sqlite3_db_config(db2, capi.SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE, 1, null);
+ db2.exec([
+ "attach 'attached.db' as foo;",
+ "create table foo.t(a);",
+ "insert into foo.t(a) values(1);",
+ "detach foo;"
+ ]);
+ capi.sqlite3_db_config(db2, capi.SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE, 0, null);
+ db2.exec("attach 'attached.db' as foo");
+ T.mustThrow(()=>db2.exec("insert into foo.t(a) values(2)"),
+ "ATTACH_WRITE is false");
+ capi.sqlite3_db_config(db2, capi.SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE, 1, null);
+ db2.exec([
+ "detach foo;",
+ "attach 'attached.db' as foo;",
+ "insert into foo.t(a) values(2);",
+ "drop table foo.t;",
+ "detach foo"
+ ]);
+ }finally{
+ db2.close();
+ }
+ })/*ATTACH tests*/
////////////////////////////////////////////////////////////////////
.t("Read-only", function(sqlite3){
diff --git a/manifest b/manifest
index c6be9deac2..fde31f9ad0 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\san\sassert()\sthat\sis\snot\strue\sif\sa\strace-callback\sis\sderegistered\swhile\sthere\sare\sactive\sstatements.
-D 2025-01-31T18:33:37.705
+C Expose\sthe\snew\sSQLITE_DBCONFIG_ENABLE_ATTACH_CREATE/WRITE\sand\sSQLITE_DBCONFIG_ENABLE_COMMENTS\s(from\s[325e547a21955])\sto\sJS/WASM.
+D 2025-01-31T18:45:03.025
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -640,7 +640,7 @@ F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ad
F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
F ext/wasm/api/sqlite3-api-glue.c-pp.js fb6dbfe692cc23000a65a4cd95a1a47ed5eb592dc9d8b55363b3c2952a787244
F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
-F ext/wasm/api/sqlite3-api-prologue.js 3caa0d1f46fe1bfbd1cce31b57b4446ca073ddb15f67476a9ff6c93456467712
+F ext/wasm/api/sqlite3-api-prologue.js 5ff913355b3144f1c9719d0406667fa6e13eb813c71ed7ce29440e2e65363e82
F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
F ext/wasm/api/sqlite3-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89
F ext/wasm/api/sqlite3-opfs-async-proxy.js 3774befd97cd1a5e2895c8225a894aad946848c6d9b4028acc988b5d123475af
@@ -648,7 +648,7 @@ F ext/wasm/api/sqlite3-vfs-helper.c-pp.js 3f828cc66758acb40e9c5b4dcfd87fd478a14c
F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js bb5e96cd0fd6e1e54538256433f1c60a4e3095063c4d1a79a8a022fc59be9571
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 9b86ca2d8276cf919fbc9ba2a10e9786033b64f92c2db844d951804dee6c4b4e
F ext/wasm/api/sqlite3-vtab-helper.c-pp.js e809739d71e8b35dfe1b55d24d91f02d04239e6aef7ca1ea92a15a29e704f616
-F ext/wasm/api/sqlite3-wasm.c 83f5e9f998e9fa4261eb84e9f092210e3ffe03895119f5ded0429eb34ab9d2be
+F ext/wasm/api/sqlite3-wasm.c 6f9d8529072d072359cd22dc5dfb0572c524684686569cfbd0f9640d7619fc10
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js 46f303ba8ddd1b2f0a391798837beddfa72e8c897038c8047eda49ce7d5ed46b
F ext/wasm/api/sqlite3-worker1.c-pp.js 5e8706c2c4af2a57fbcdc02f4e7ef79869971bc21bb8ede777687786ce1c92d5
F ext/wasm/batch-runner-sahpool.html e9a38fdeb36a13eac7b50241dfe7ae066fe3f51f5c0b0151e7baee5fce0d07a7
@@ -696,7 +696,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
-F ext/wasm/tester1.c-pp.js 228101c290003423f0bfb66a6ebbfc6904fa7b1b69466e700c135f74ee83d62a
+F ext/wasm/tester1.c-pp.js 05df7cfd2cb8aa8728afb68c90a8af51fdf724c0e892f0f986a695584edae195
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 4b4f33d791fe4318c4597bee7d2f9e486ed223e731982af470f5cc0dbdc600fc
-R eb94bfac632b4e0afd83fa9877b4b4ff
-U dan
-Z 76e080bb074040fe3e81e0d36c896c38
+P 0ecfc4d0ebdb272a69f8f98ddb069c7e0735fb899804027eb16f241d83b3d046
+R 17139128f5a15a8bba68ad5baf1b2013
+U stephan
+Z 3fb4b52cbb9f7ac493f2fee0f2c8e021
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 9707f1eb83..9d3fb7ec88 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-0ecfc4d0ebdb272a69f8f98ddb069c7e0735fb899804027eb16f241d83b3d046
+8da1a9af66f905c683e9c3445d609b5c0e11ac912be192c468ddd79f237837f4
From 45b2669ad363ad3eb0e3e75de1b18d9e5593f837 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Fri, 31 Jan 2025 18:56:58 +0000
Subject: [PATCH 152/220] Fix test case numbering in tests recently added to
like3.test.
FossilOrigin-Name: 6df2098c548b58c2910837726b666a628d5c712c560c0221a771e8181f71fae7
---
manifest | 14 +++++++-------
manifest.uuid | 2 +-
test/like3.test | 16 ++++++++--------
3 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/manifest b/manifest
index fde31f9ad0..f8e251197c 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Expose\sthe\snew\sSQLITE_DBCONFIG_ENABLE_ATTACH_CREATE/WRITE\sand\sSQLITE_DBCONFIG_ENABLE_COMMENTS\s(from\s[325e547a21955])\sto\sJS/WASM.
-D 2025-01-31T18:45:03.025
+C Fix\stest\scase\snumbering\sin\stests\srecently\sadded\sto\slike3.test.
+D 2025-01-31T18:56:58.478
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -1401,7 +1401,7 @@ F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200
F test/lemon-test01.y 70110eff607ab137ccc851edb2bc7e14a6d4f246b5d2d25f82a60b69d87a9ff2
F test/like.test b3ea2ba3558199aa8f25a42ddeb54772e234fab50868c9f066047acdbda8fc58
F test/like2.test d3be15fefee3e02fc88942a9b98f26c5339bbdef7783c90023c092c4955fe3d3
-F test/like3.test a9d78297426279c3db1206490444f3193f579890b3c4118a52960afe2b4863cd
+F test/like3.test b21284df226d6028feeb4dcc56ad9d32673d82c14a63f15f25471292c36491e7
F test/limit.test 350f5d03c29e7dff9a2cde016f84f8d368d40bcd02fa2b2a52fa10c4bf3cbfaf
F test/limit2.test 9409b033284642a859fafc95f29a5a6a557bd57c1f0d7c3f554bd64ed69df77e
F test/literal.test a65dca9fef86e51b8e45544268e37abbd4bb94ba35fd65f6fdcab2f288cd8f79
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 0ecfc4d0ebdb272a69f8f98ddb069c7e0735fb899804027eb16f241d83b3d046
-R 17139128f5a15a8bba68ad5baf1b2013
-U stephan
-Z 3fb4b52cbb9f7ac493f2fee0f2c8e021
+P 8da1a9af66f905c683e9c3445d609b5c0e11ac912be192c468ddd79f237837f4
+R 7c3dd7099324ee3f6570f3eda4b7c65a
+U drh
+Z f8d1c9b3f391a5065e5e11e0179528b8
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 9d3fb7ec88..dc09f5f03d 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-8da1a9af66f905c683e9c3445d609b5c0e11ac912be192c468ddd79f237837f4
+6df2098c548b58c2910837726b666a628d5c712c560c0221a771e8181f71fae7
diff --git a/test/like3.test b/test/like3.test
index 2987e0e0e2..0b28574376 100644
--- a/test/like3.test
+++ b/test/like3.test
@@ -322,37 +322,37 @@ foreach enc {
} {
reset_db
execsql "PRAGMA encoding = '$enc'"
- do_execsql_test like3-8.$tn.0 {
+ set tn utf[string range $enc 4 end].$tn
+ do_execsql_test like3-8.$tn.1 {
CREATE TABLE t1(x);
}
- do_execsql_test like3-8.$tn.1 {
+ do_execsql_test like3-8.$tn.2 {
PRAGMA encoding
} $enc
- do_execsql_test like3-8.$tn.1 "
+ do_execsql_test like3-8.$tn.3 "
INSERT INTO t1 VALUES( $expr )
"
- do_execsql_test like3-8.$tn.2 {
+ do_execsql_test like3-8.$tn.4 {
SELECT typeof(x) FROM t1
} {text}
set x [db one {SELECT x || '%' FROM t1}]
- do_execsql_test like3-8.$tn.3 {
+ do_execsql_test like3-8.$tn.5 {
SELECT rowid FROM t1 WHERE x LIKE $x
} 1
- do_execsql_test like3-8.$tn.4 {
+ do_execsql_test like3-8.$tn.6 {
CREATE INDEX i1 ON t1(x);
}
- do_execsql_test like3-8.$tn.5 {
+ do_execsql_test like3-8.$tn.7 {
SELECT rowid FROM t1 WHERE x LIKE $x
} 1
}
}
finish_test
-
From 276d213b2aff1132a3fec04ae96b2273b70235de Mon Sep 17 00:00:00 2001
From: drh <>
Date: Fri, 31 Jan 2025 20:18:34 +0000
Subject: [PATCH 153/220] Tweaks to [4b4f33d791fe4318] to make it easier to
test.
FossilOrigin-Name: 2567298f4b0fdfeb42aa6bba7e0bec3bc8d0b89bf644a79b41893dd6a6c5774c
---
manifest | 12 ++++++------
manifest.uuid | 2 +-
src/whereexpr.c | 4 ++--
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/manifest b/manifest
index f8e251197c..c8b50bd721 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\stest\scase\snumbering\sin\stests\srecently\sadded\sto\slike3.test.
-D 2025-01-31T18:56:58.478
+C Tweaks\sto\s[4b4f33d791fe4318]\sto\smake\sit\seasier\sto\stest.
+D 2025-01-31T20:18:34.963
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -867,7 +867,7 @@ F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
F src/where.c 09dc313e7223ca1217c39c7026b00f16ff449a8323511a762fcba7863a00f4cd
F src/whereInt.h d20cddddb1d61b18d5cb1fcfa9b77fbeebbc4afe44d996e603452a23b3009ee1
F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab
-F src/whereexpr.c fd80811331cebf37a96a1bbbe93a20425eb04a925baa7c2306d72e0797a47a4c
+F src/whereexpr.c d304e3fec8309cddffd194a2d06c49de3aac1c32a7ef9f6bd78546abc7d77352
F src/window.c 2bf01f9941a64fbcead61a0e3cb5db3fca5094b30d2ff0d23274c2a81d2e2385
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 8da1a9af66f905c683e9c3445d609b5c0e11ac912be192c468ddd79f237837f4
-R 7c3dd7099324ee3f6570f3eda4b7c65a
+P 6df2098c548b58c2910837726b666a628d5c712c560c0221a771e8181f71fae7
+R 135ac307112d80006ac833a8ae148e6e
U drh
-Z f8d1c9b3f391a5065e5e11e0179528b8
+Z 1e05e96ac0e79f8e8ee82c826159e60e
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index dc09f5f03d..79096bfae9 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-6df2098c548b58c2910837726b666a628d5c712c560c0221a771e8181f71fae7
+2567298f4b0fdfeb42aa6bba7e0bec3bc8d0b89bf644a79b41893dd6a6c5774c
diff --git a/src/whereexpr.c b/src/whereexpr.c
index 0a963f4f92..2c4d0fef0d 100644
--- a/src/whereexpr.c
+++ b/src/whereexpr.c
@@ -232,7 +232,7 @@ static int isLikeOrGlob(
cnt++;
}else if( c>=0x80 ){
const u8 *z2 = z+cnt-1;
- if( sqlite3Utf8Read(&z2)==0xfffd || c==0xFF /* bad utf-8 */
+ if( c==0xff || sqlite3Utf8Read(&z2)==0xfffd /* bad utf-8 */
|| ENC(db)==SQLITE_UTF16LE
){
cnt--;
@@ -1400,7 +1400,7 @@ static void exprAnalyze(
}
/* Increment the value of the last utf8 character in the prefix. */
- while( *pC==0xBF && pC>(u8*)pStr2->u.zToken ){
+ while( *pC==0xBF && ALWAYS(pC>(u8*)pStr2->u.zToken) ){
*pC = 0x80;
pC--;
}
From fdc17e0bc8f99ebece39a7668af0f40fa4fe6323 Mon Sep 17 00:00:00 2001
From: stephan
Date: Sat, 1 Feb 2025 09:44:48 +0000
Subject: [PATCH 154/220] JS doc typo fixes. No functional changes.
FossilOrigin-Name: e0d9c74c1cdddb2321131255b94f9cda6530be3f2a06aed4abb54dcda092481e
---
ext/wasm/common/whwasmutil.js | 9 +++++----
manifest | 14 +++++++-------
manifest.uuid | 2 +-
3 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/ext/wasm/common/whwasmutil.js b/ext/wasm/common/whwasmutil.js
index 8fe4a990b6..de0f667876 100644
--- a/ext/wasm/common/whwasmutil.js
+++ b/ext/wasm/common/whwasmutil.js
@@ -51,7 +51,7 @@
Its global-scope symbol is intended only to provide an easy way to
make it available to 3rd-party scripts and "should" be deleted
- after calling it. That symbols is _not_ used within the library.
+ after calling it. That symbol is _not_ used within the library.
Forewarning: this API explicitly targets only browser
environments. If a given non-browser environment has the
@@ -69,7 +69,8 @@
- WASM-exported "indirect function table" access and
manipulation. e.g. creating new WASM-side functions using JS
functions, analog to Emscripten's addFunction() and
- uninstallFunction() but slightly different.
+ uninstallFunction() but slightly different and with more useful
+ lifetime semantics.
- Get/set specific heap memory values, analog to Emscripten's
getValue() and setValue().
@@ -165,7 +166,7 @@
This code is developed and maintained in conjunction with the
Jaccwabyt project:
- https://fossil.wanderinghorse.net/r/jaccwabbyt
+ https://fossil.wanderinghorse.net/r/jaccwabyt
More specifically:
@@ -1627,7 +1628,7 @@ globalThis.WhWasmUtilInstaller = function(target){
need a level of hand-written wrappers around them, depending on
how they're used, in order to provide the client with JS
strings. Alternately, clients will need to perform such conversions
- on their own, e.g. using cstrtojs(). Or maybe we can find a way
+ on their own, e.g. using cstrToJs(). Or maybe we can find a way
to perform such conversions here, via addition of an xWrap()-style
function signature to the options argument.
*/
diff --git a/manifest b/manifest
index c8b50bd721..30514be215 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Tweaks\sto\s[4b4f33d791fe4318]\sto\smake\sit\seasier\sto\stest.
-D 2025-01-31T20:18:34.963
+C JS\sdoc\stypo\sfixes.\sNo\sfunctional\schanges.
+D 2025-02-01T09:44:48.567
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -659,7 +659,7 @@ F ext/wasm/c-pp.c 6d131069644964223305582a80973477fa8b06b57306781690d7874ebd3a4f
F ext/wasm/common/SqliteTestUtil.js 7adaeffef757d8708418dc9190f72df22367b531831775804b31598b44f6aa51
F ext/wasm/common/emscripten.css 11bd104b6c0d597c67d40cc8ecc0a60dae2b965151e3b6a37fa5708bac3acd15
F ext/wasm/common/testing.css e97549bab24126c24e0daabfe2de9bb478fb0a69fdb2ddd0a73a992c091aad6f
-F ext/wasm/common/whwasmutil.js d76c69617e95d85ffc9996f7d9d7481df6976dcbd860ecd82bd8c075e3a101ae
+F ext/wasm/common/whwasmutil.js 8528ac79418ee7eafe7c8f634a08704e47d694d3fd8ea6368be27a5229733338
F ext/wasm/config.make.in 4bc43443f768a61efd43cf995a5e618f58ac9afc0936706014193537d82c41cb
F ext/wasm/demo-123-worker.html a0b58d9caef098a626a1a1db567076fca4245e8d60ba94557ede8684350a81ed
F ext/wasm/demo-123.html 8c70a412ce386bd3796534257935eb1e3ea5c581e5d5aea0490b8232e570a508
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 6df2098c548b58c2910837726b666a628d5c712c560c0221a771e8181f71fae7
-R 135ac307112d80006ac833a8ae148e6e
-U drh
-Z 1e05e96ac0e79f8e8ee82c826159e60e
+P 2567298f4b0fdfeb42aa6bba7e0bec3bc8d0b89bf644a79b41893dd6a6c5774c
+R eac70bc609a1618826ffd2d47e1f8359
+U stephan
+Z d7bceb2ba8b79e070ba4dc11d65193f3
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 79096bfae9..0484fa7054 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-2567298f4b0fdfeb42aa6bba7e0bec3bc8d0b89bf644a79b41893dd6a6c5774c
+e0d9c74c1cdddb2321131255b94f9cda6530be3f2a06aed4abb54dcda092481e
From de50617bcb1d3f5de83ef0a9b31d2b9e1d4d3c52 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Sat, 1 Feb 2025 20:53:17 +0000
Subject: [PATCH 155/220] Fix an issue with sqlite3_normalized_sql() caused by
changes needed to support SQLITE_DBCONFIG_ENABLE_COMMENT.
FossilOrigin-Name: 79d287a39443f2d098fcc24199627555a656b34aa5bf5d484f91cb513d83e143
---
manifest | 14 +++++++-------
manifest.uuid | 2 +-
src/tokenize.c | 1 +
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/manifest b/manifest
index 30514be215..d242405d2d 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C JS\sdoc\stypo\sfixes.\sNo\sfunctional\schanges.
-D 2025-02-01T09:44:48.567
+C Fix\san\sissue\swith\ssqlite3_normalized_sql()\scaused\sby\schanges\sneeded\sto\nsupport\sSQLITE_DBCONFIG_ENABLE_COMMENT.
+D 2025-02-01T20:53:17.603
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -841,7 +841,7 @@ F src/test_windirent.h da2e5b73c32d09905fbdd00f27cd802212a32a58ead882736fe4f5eb7
F src/test_window.c 6d80e11fba89a1796525e6f0048ff0c7789aa2c6b0b11c80827dc1437bd8ea72
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
-F src/tokenize.c cedfe799fc73106302078388547040698c5c5a3950f4ea1e4344e1b736c7d568
+F src/tokenize.c 375a772e2342274f4bf73605a70633237da09deed00a9bf4c4816a56777ea7c9
F src/treeview.c d85ce76e6d1498d781957c07cb234da6d77ce0ed2d196480d516f54dabc62279
F src/trigger.c 247e2d712d5edc6021d52a169f6ac9a9c10d7144bc4ac7ea06c1ed2aa414659f
F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 2567298f4b0fdfeb42aa6bba7e0bec3bc8d0b89bf644a79b41893dd6a6c5774c
-R eac70bc609a1618826ffd2d47e1f8359
-U stephan
-Z d7bceb2ba8b79e070ba4dc11d65193f3
+P e0d9c74c1cdddb2321131255b94f9cda6530be3f2a06aed4abb54dcda092481e
+R 645350b0e058e36134a55fdb6b3f2eb5
+U drh
+Z 9d4896add67bdd3bb69392ede8dfd087
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 0484fa7054..f1811e8ef6 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-e0d9c74c1cdddb2321131255b94f9cda6530be3f2a06aed4abb54dcda092481e
+79d287a39443f2d098fcc24199627555a656b34aa5bf5d484f91cb513d83e143
diff --git a/src/tokenize.c b/src/tokenize.c
index 901a4f0384..fe300ca529 100644
--- a/src/tokenize.c
+++ b/src/tokenize.c
@@ -801,6 +801,7 @@ char *sqlite3Normalize(
n = sqlite3GetToken((unsigned char*)zSql+i, &tokenType);
if( NEVER(n<=0) ) break;
switch( tokenType ){
+ case TK_COMMENT:
case TK_SPACE: {
break;
}
From 5c72a39cfbf461e66ce7482a17d9448f65108883 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Sat, 1 Feb 2025 21:06:49 +0000
Subject: [PATCH 156/220] Enable SQLITE_ENABLE_NORMALIZE for several test
configurations.
FossilOrigin-Name: b07c64077a3912ef7cdf23e9411df6387f38baa32f5a11fffec5ba4f93935e27
---
manifest | 12 ++++++------
manifest.uuid | 2 +-
test/testrunner_data.tcl | 5 +++++
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/manifest b/manifest
index d242405d2d..b39253660b 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\san\sissue\swith\ssqlite3_normalized_sql()\scaused\sby\schanges\sneeded\sto\nsupport\sSQLITE_DBCONFIG_ENABLE_COMMENT.
-D 2025-02-01T20:53:17.603
+C Enable\sSQLITE_ENABLE_NORMALIZE\sfor\sseveral\stest\sconfigurations.
+D 2025-02-01T21:06:49.292
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -1729,7 +1729,7 @@ F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637
F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc
F test/tester.tcl 7b44f1a9b9a2de8112695b908afc21dd9a68cd2d44e84b73f1b27b53492c0d59
F test/testrunner.tcl 90ed8b6c2b26dc1f6af08aeb04670a5df86172f3d9828d8af000f972afa50061 x
-F test/testrunner_data.tcl ba4aeea28aa03cfa6fe7e57782ddecb7a7b91c3a0b3251583cb4f0ee002de6a6
+F test/testrunner_data.tcl 63ff9eba1d11a3b0a6fc8446d5fa32da21aabda55b994e8fcbd4a8ce81f48378
F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899
F test/thread002.test c24c83408e35ba5a952a3638b7ac03ccdf1ce4409289c54a050ac4c5f1de7502
F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P e0d9c74c1cdddb2321131255b94f9cda6530be3f2a06aed4abb54dcda092481e
-R 645350b0e058e36134a55fdb6b3f2eb5
+P 79d287a39443f2d098fcc24199627555a656b34aa5bf5d484f91cb513d83e143
+R 888619b059aabb68efc45862c1d541fe
U drh
-Z 9d4896add67bdd3bb69392ede8dfd087
+Z 9448395bcbe74c7bef7eba8e89fa76da
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index f1811e8ef6..30dffb89e1 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-79d287a39443f2d098fcc24199627555a656b34aa5bf5d484f91cb513d83e143
+b07c64077a3912ef7cdf23e9411df6387f38baa32f5a11fffec5ba4f93935e27
diff --git a/test/testrunner_data.tcl b/test/testrunner_data.tcl
index 9abfb242da..2cfa7f3b31 100644
--- a/test/testrunner_data.tcl
+++ b/test/testrunner_data.tcl
@@ -97,6 +97,7 @@ namespace eval trd {
set build(All-Debug) {
--with-debug --enable-all
-DSQLITE_ENABLE_ORDERED_SET_AGGREGATES
+ -DSQLITE_ENABLE_NORMALIZE
}
set build(All-O0) {
-O0 --enable-all
@@ -110,6 +111,7 @@ namespace eval trd {
CC=clang -fsanitize=address,undefined -fno-sanitize-recover=undefined
-DSQLITE_ENABLE_STAT4
-DSQLITE_OMIT_LOOKASIDE=1
+ -DSQLITE_ENABLE_NORMALIZE
-DCONFIG_SLOWDOWN_FACTOR=5.0
-DSQLITE_ENABLE_RBU
--with-debug
@@ -168,6 +170,7 @@ namespace eval trd {
-DSQLITE_SOUNDEX=1
-DSQLITE_ENABLE_ATOMIC_WRITE=1
-DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
+ -DSQLITE_ENABLE_NORMALIZE
-DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1
-DSQLITE_ENABLE_STAT4
-DSQLITE_ENABLE_STMT_SCANSTATUS
@@ -183,6 +186,7 @@ namespace eval trd {
-DSQLITE_ENABLE_FTS3=1
-DSQLITE_ENABLE_RTREE=1
-DSQLITE_ENABLE_MEMSYS5=1
+ -DSQLITE_ENABLE_NORMALIZE
-DSQLITE_ENABLE_COLUMN_METADATA=1
-DSQLITE_ENABLE_STAT4
-DSQLITE_ENABLE_HIDDEN_COLUMNS
@@ -299,6 +303,7 @@ namespace eval trd {
-DSQLITE_ENABLE_FTS3=1
-DSQLITE_ENABLE_FTS3_PARENTHESIS=1
-DSQLITE_ENABLE_FTS3_TOKENIZER=1
+ -DSQLITE_ENABLE_NORMALIZE=1
-DSQLITE_ENABLE_PERSIST_WAL=1
-DSQLITE_ENABLE_PURGEABLE_PCACHE=1
-DSQLITE_ENABLE_RTREE=1
From 454a426e31f75e8f09973c7704b47e5df6c88dc7 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Sat, 1 Feb 2025 23:28:49 +0000
Subject: [PATCH 157/220] Remove an ALWAYS() added by [2567298f4b0fdfeb]
because dbsqlfuzz found a way to reach it. The test case was added to TH3.
FossilOrigin-Name: d08a7aa8987458a91fcb861d58289e622ba8722936c7874a284f9f2fd782e269
---
manifest | 12 ++++++------
manifest.uuid | 2 +-
src/whereexpr.c | 2 +-
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/manifest b/manifest
index b39253660b..a1b8b7be69 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enable\sSQLITE_ENABLE_NORMALIZE\sfor\sseveral\stest\sconfigurations.
-D 2025-02-01T21:06:49.292
+C Remove\san\sALWAYS()\sadded\sby\s[2567298f4b0fdfeb]\sbecause\sdbsqlfuzz\sfound\sa\sway\nto\sreach\sit.\s\sThe\stest\scase\swas\sadded\sto\sTH3.
+D 2025-02-01T23:28:49.538
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -867,7 +867,7 @@ F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
F src/where.c 09dc313e7223ca1217c39c7026b00f16ff449a8323511a762fcba7863a00f4cd
F src/whereInt.h d20cddddb1d61b18d5cb1fcfa9b77fbeebbc4afe44d996e603452a23b3009ee1
F src/wherecode.c 0c3d3199a2b769a5e2bb70feb5003dc85b3d86842ecaf903a47f2b4205ca5dab
-F src/whereexpr.c d304e3fec8309cddffd194a2d06c49de3aac1c32a7ef9f6bd78546abc7d77352
+F src/whereexpr.c 2415c8eee5ff89a8b709d7d83d71c1ff986cd720d0520057e1d8a5371339012a
F src/window.c 2bf01f9941a64fbcead61a0e3cb5db3fca5094b30d2ff0d23274c2a81d2e2385
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 79d287a39443f2d098fcc24199627555a656b34aa5bf5d484f91cb513d83e143
-R 888619b059aabb68efc45862c1d541fe
+P b07c64077a3912ef7cdf23e9411df6387f38baa32f5a11fffec5ba4f93935e27
+R 1587f5175225e9073d51285cc57826f6
U drh
-Z 9448395bcbe74c7bef7eba8e89fa76da
+Z 785e2e3ea6ab6da1a366fb937ef1ab28
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 30dffb89e1..262be1b4aa 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-b07c64077a3912ef7cdf23e9411df6387f38baa32f5a11fffec5ba4f93935e27
+d08a7aa8987458a91fcb861d58289e622ba8722936c7874a284f9f2fd782e269
diff --git a/src/whereexpr.c b/src/whereexpr.c
index 2c4d0fef0d..4a24dadd23 100644
--- a/src/whereexpr.c
+++ b/src/whereexpr.c
@@ -1400,7 +1400,7 @@ static void exprAnalyze(
}
/* Increment the value of the last utf8 character in the prefix. */
- while( *pC==0xBF && ALWAYS(pC>(u8*)pStr2->u.zToken) ){
+ while( *pC==0xBF && pC>(u8*)pStr2->u.zToken ){
*pC = 0x80;
pC--;
}
From 4b99ec0b8c0dafa7d0949e2559bd0b231dcf2d13 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Sat, 1 Feb 2025 23:34:33 +0000
Subject: [PATCH 158/220] Fix a comment typo - in a comment used to generate
documentation.
FossilOrigin-Name: b8de75eeded79a8312218d7a543e7c7d11181c9f4004e875495608d11a81ff38
---
manifest | 12 ++++++------
manifest.uuid | 2 +-
src/sqlite.h.in | 2 +-
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/manifest b/manifest
index a1b8b7be69..7159e8849a 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\san\sALWAYS()\sadded\sby\s[2567298f4b0fdfeb]\sbecause\sdbsqlfuzz\sfound\sa\sway\nto\sreach\sit.\s\sThe\stest\scase\swas\sadded\sto\sTH3.
-D 2025-02-01T23:28:49.538
+C Fix\sa\scomment\stypo\s-\sin\sa\scomment\sused\sto\sgenerate\sdocumentation.
+D 2025-02-01T23:34:33.636
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -782,7 +782,7 @@ F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 83e88fbb36f89b6703b348777491619554f0fd6f917c9fdf51e4c2e9cda6c04e
F src/shell.c.in b377a59822f207106424f08aead37e78b609222e98f86f04cc8a03563ccf3237
-F src/sqlite.h.in 6bdaf7c577fba45afef371ba69852de9965e23e8b13b9aa099d90281bf0c1e54
+F src/sqlite.h.in cc9a2d5a719b7434e2699ff7c28a56209b8aa459b7f80ff1d4d7d8ac6ebfd96e
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
F src/sqliteInt.h 7f1b070ea3b4ab3c192be553810684f686fdb03f62f90afa2da64d4d61d91ec3
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P b07c64077a3912ef7cdf23e9411df6387f38baa32f5a11fffec5ba4f93935e27
-R 1587f5175225e9073d51285cc57826f6
+P d08a7aa8987458a91fcb861d58289e622ba8722936c7874a284f9f2fd782e269
+R e49065fa7e2398b7b6e928bf8f7bfc59
U drh
-Z 785e2e3ea6ab6da1a366fb937ef1ab28
+Z 8691b65bebb646fe5d4e88f85d5d14cb
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 262be1b4aa..4cc6cbc2ef 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-d08a7aa8987458a91fcb861d58289e622ba8722936c7874a284f9f2fd782e269
+b8de75eeded79a8312218d7a543e7c7d11181c9f4004e875495608d11a81ff38
diff --git a/src/sqlite.h.in b/src/sqlite.h.in
index 58482f81cb..885f187a43 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -2587,7 +2587,7 @@ struct sqlite3_mem_methods {
**
** [[DBCONFIG arguments]] Arguments To SQLITE_DBCONFIG Options
**
-** Most of the SQLITE_DBCONFIG options take two argument, an integer
+**
Most of the SQLITE_DBCONFIG options take two arguments: an integer
** and a pointer to an integer. If the first integer argument is 1, then
** the option becomes enabled. If the first integer argument is 0, then the
** option is disabled. If the first argument is -1, then the option setting
From c49bfdbbee49c6a877d585ec08da131e2814730f Mon Sep 17 00:00:00 2001
From: drh <>
Date: Sat, 1 Feb 2025 23:49:01 +0000
Subject: [PATCH 159/220] Add a missing "db2 close" to the
ext/session/session_gen.test test module.
FossilOrigin-Name: 4068f586ddadd3a818645574f7584fcee6d373dbf45805c545100883b495598a
---
ext/session/session_gen.test | 1 +
manifest | 12 ++++++------
manifest.uuid | 2 +-
3 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/ext/session/session_gen.test b/ext/session/session_gen.test
index 8d3c5887f3..e9de4beaba 100644
--- a/ext/session/session_gen.test
+++ b/ext/session/session_gen.test
@@ -181,6 +181,7 @@ foreach {tn sql} {
compare_db db db2
} {}
}
+db2 close
}]}
diff --git a/manifest b/manifest
index 7159e8849a..7bc3347512 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\scomment\stypo\s-\sin\sa\scomment\sused\sto\sgenerate\sdocumentation.
-D 2025-02-01T23:34:33.636
+C Add\sa\smissing\s"db2\sclose"\sto\sthe\sext/session/session_gen.test\stest\smodule.
+D 2025-02-01T23:49:01.341
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -593,7 +593,7 @@ F ext/session/sessionF.test d37ed800881e742c208df443537bf29aa49fd56eac520d0f0c6d
F ext/session/sessionG.test 3efe388282d641b65485b5462e67851002cd91a282dc95b685d085eb8efdad0a
F ext/session/sessionH.test 71bbff6b1abb2c4ac62b84dee53273c37e0b21e5fde3aed80929403e091ef859
F ext/session/session_common.tcl a31f537a929a695a852d241c9434f2847cadf329856401921139fbb03a5a7697
-F ext/session/session_gen.test 3f2ff2bd71694b82bd17c5ab2002635c54affb909fca2ee749b2daf95ff86648
+F ext/session/session_gen.test 942a0002df10da53c45b40b581cc3ed25e7ff42bda1e7ba497273dc2887aa8e6
F ext/session/session_speed_test.c dcf0ef58d76b70c8fbd9eab3be77cf9deb8bc1638fed8be518b62d6cbdef88b3
F ext/session/sessionalter.test e852acb3d2357aac7d0b920a2109da758c4331bfdf85b41d39aa3a8c18914f65
F ext/session/sessionat.test 00c8badb35e43a2f12a716d2734a44d614ff62361979b6b85419035bc04b45ee
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P d08a7aa8987458a91fcb861d58289e622ba8722936c7874a284f9f2fd782e269
-R e49065fa7e2398b7b6e928bf8f7bfc59
+P b8de75eeded79a8312218d7a543e7c7d11181c9f4004e875495608d11a81ff38
+R 70de67d2731c96d5565daabba5a9f711
U drh
-Z 8691b65bebb646fe5d4e88f85d5d14cb
+Z 0c60cdc79cd4db383ea08f9fcd4c5692
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 4cc6cbc2ef..f6733e5fe5 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-b8de75eeded79a8312218d7a543e7c7d11181c9f4004e875495608d11a81ff38
+4068f586ddadd3a818645574f7584fcee6d373dbf45805c545100883b495598a
From 14613b1b1d9ef977229a9b8279e54c569469d2a9 Mon Sep 17 00:00:00 2001
From: stephan
Date: Sun, 2 Feb 2025 12:15:25 +0000
Subject: [PATCH 160/220] URL typo fix in code comments. No code changes.
FossilOrigin-Name: 002a123094e4ef14eb5ec28033adca6083ba2717e1eaa23e80595e37a947e6c2
---
ext/wasm/common/whwasmutil.js | 2 +-
manifest | 14 +++++++-------
manifest.uuid | 2 +-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/ext/wasm/common/whwasmutil.js b/ext/wasm/common/whwasmutil.js
index de0f667876..509d33b371 100644
--- a/ext/wasm/common/whwasmutil.js
+++ b/ext/wasm/common/whwasmutil.js
@@ -170,7 +170,7 @@
More specifically:
- https://fossil.wanderinghorse.net/r/jaccwabbyt/file/common/whwasmutil.js
+ https://fossil.wanderinghorse.net/r/jaccwabyt/file/common/whwasmutil.js
*/
globalThis.WhWasmUtilInstaller = function(target){
'use strict';
diff --git a/manifest b/manifest
index 7bc3347512..6b499b9e73 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\smissing\s"db2\sclose"\sto\sthe\sext/session/session_gen.test\stest\smodule.
-D 2025-02-01T23:49:01.341
+C URL\stypo\sfix\sin\scode\scomments.\sNo\scode\schanges.
+D 2025-02-02T12:15:25.699
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -659,7 +659,7 @@ F ext/wasm/c-pp.c 6d131069644964223305582a80973477fa8b06b57306781690d7874ebd3a4f
F ext/wasm/common/SqliteTestUtil.js 7adaeffef757d8708418dc9190f72df22367b531831775804b31598b44f6aa51
F ext/wasm/common/emscripten.css 11bd104b6c0d597c67d40cc8ecc0a60dae2b965151e3b6a37fa5708bac3acd15
F ext/wasm/common/testing.css e97549bab24126c24e0daabfe2de9bb478fb0a69fdb2ddd0a73a992c091aad6f
-F ext/wasm/common/whwasmutil.js 8528ac79418ee7eafe7c8f634a08704e47d694d3fd8ea6368be27a5229733338
+F ext/wasm/common/whwasmutil.js c2e459286c1ada789cda6b17761bb1eea6034be572468eed78c049354f1051ba
F ext/wasm/config.make.in 4bc43443f768a61efd43cf995a5e618f58ac9afc0936706014193537d82c41cb
F ext/wasm/demo-123-worker.html a0b58d9caef098a626a1a1db567076fca4245e8d60ba94557ede8684350a81ed
F ext/wasm/demo-123.html 8c70a412ce386bd3796534257935eb1e3ea5c581e5d5aea0490b8232e570a508
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P b8de75eeded79a8312218d7a543e7c7d11181c9f4004e875495608d11a81ff38
-R 70de67d2731c96d5565daabba5a9f711
-U drh
-Z 0c60cdc79cd4db383ea08f9fcd4c5692
+P 4068f586ddadd3a818645574f7584fcee6d373dbf45805c545100883b495598a
+R bd36ece0544440b71f6e303d972a7e2f
+U stephan
+Z 78f6520da2cf6d27938a2b853e051a64
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index f6733e5fe5..3c1ca149ca 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-4068f586ddadd3a818645574f7584fcee6d373dbf45805c545100883b495598a
+002a123094e4ef14eb5ec28033adca6083ba2717e1eaa23e80595e37a947e6c2
From c229f1181790894dd60262b46357def1e2f3d932 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Sun, 2 Feb 2025 16:52:21 +0000
Subject: [PATCH 161/220] Update to the "--help" output from speedtest1.
FossilOrigin-Name: 5216452047eecdd6c0f6ab85b304f975ed05a394a4ad9ae793fb65d645502b12
---
manifest | 14 +++++++-------
manifest.uuid | 2 +-
test/speedtest1.c | 4 ++--
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/manifest b/manifest
index 6b499b9e73..c251f9984c 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C URL\stypo\sfix\sin\scode\scomments.\sNo\scode\schanges.
-D 2025-02-02T12:15:25.699
+C Update\sto\sthe\s"--help"\soutput\sfrom\sspeedtest1.
+D 2025-02-02T16:52:21.308
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -1681,7 +1681,7 @@ F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
F test/speed4p.test 377a0c48e5a92e0b11c1c5ebb1bc9d83a7312c922bc0cb05970ef5d6a96d1f0c
F test/speedtest.md ee958457ae1b729d9715ae33c0320600000bf1d9ddea1a88dcf79f56729d6fad
F test/speedtest.tcl 8a9362c1e429318e741b91d26888e7edcc326f98c3aea505ffd618cc5b9e7f0a x
-F test/speedtest1.c 323ce0956430a5aae56ea20f502da7bea3fb62b8ed02e9b0f12ab078b2b258f5
+F test/speedtest1.c f17c04829e6e9ccd60f23c38f1a6cc640e3ae807ce54192f062eb22dece40e61
F test/spellfix.test 951a6405d49d1a23d6b78027d3877b4a33eeb8221dcab5704b499755bb4f552e
F test/spellfix2.test dfc8f519a3fc204cb2dfa8b4f29821ae90f6f8c3
F test/spellfix3.test 0f9efaaa502a0e0a09848028518a6fb096c8ad33
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 4068f586ddadd3a818645574f7584fcee6d373dbf45805c545100883b495598a
-R bd36ece0544440b71f6e303d972a7e2f
-U stephan
-Z 78f6520da2cf6d27938a2b853e051a64
+P 002a123094e4ef14eb5ec28033adca6083ba2717e1eaa23e80595e37a947e6c2
+R 0dfb19693dad143344d481eff7a8c7a1
+U drh
+Z eab3264d2412f89567991828cb35b655
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 3c1ca149ca..4f45593820 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-002a123094e4ef14eb5ec28033adca6083ba2717e1eaa23e80595e37a947e6c2
+5216452047eecdd6c0f6ab85b304f975ed05a394a4ad9ae793fb65d645502b12
diff --git a/test/speedtest1.c b/test/speedtest1.c
index 8847ed04bf..7bceae8512 100644
--- a/test/speedtest1.c
+++ b/test/speedtest1.c
@@ -43,8 +43,8 @@ static const char zHelp[] =
" --stmtscanstatus Activate SQLITE_DBCONFIG_STMT_SCANSTATUS\n"
" --temp N N from 0 to 9. 0: no temp table. 9: all temp tables\n"
" --testset T Run test-set T (main, cte, rtree, orm, fp, json, debug)\n"
- " Can be a comma-separated list of values, with /SCALE suffixes\n"
- " or macro \"mix1\"\n"
+ " Can be a comma-separated list of values, with /SCALE\n"
+ " suffixes or macro \"mix1\"\n"
" --trace Turn on SQL tracing\n"
" --threads N Use up to N threads for sorting\n"
" --utf16be Set text encoding to UTF-16BE\n"
From f306ca52861de23de08b2247e8f30ce426fa8fcb Mon Sep 17 00:00:00 2001
From: drh <>
Date: Sun, 2 Feb 2025 18:01:32 +0000
Subject: [PATCH 162/220] Add a header comment to test/speedtest1.c that
outlines how to compile the program using historical amalgamation sources,
for comparison testing.
FossilOrigin-Name: 602d4dd69ec9a724c69cb41ab15376ec731bfd4894fac0a2b25076b857786c6d
---
manifest | 12 ++++++------
manifest.uuid | 2 +-
test/speedtest1.c | 25 ++++++++++++++++++++++++-
3 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/manifest b/manifest
index c251f9984c..4c732ac4a4 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Update\sto\sthe\s"--help"\soutput\sfrom\sspeedtest1.
-D 2025-02-02T16:52:21.308
+C Add\sa\sheader\scomment\sto\stest/speedtest1.c\sthat\soutlines\show\sto\scompile\sthe\nprogram\susing\shistorical\samalgamation\ssources,\sfor\scomparison\stesting.
+D 2025-02-02T18:01:32.649
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -1681,7 +1681,7 @@ F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
F test/speed4p.test 377a0c48e5a92e0b11c1c5ebb1bc9d83a7312c922bc0cb05970ef5d6a96d1f0c
F test/speedtest.md ee958457ae1b729d9715ae33c0320600000bf1d9ddea1a88dcf79f56729d6fad
F test/speedtest.tcl 8a9362c1e429318e741b91d26888e7edcc326f98c3aea505ffd618cc5b9e7f0a x
-F test/speedtest1.c f17c04829e6e9ccd60f23c38f1a6cc640e3ae807ce54192f062eb22dece40e61
+F test/speedtest1.c 204acd8af326bbca2c28f68166635d4574381f4cabbac1bc243663f5dcc5051d
F test/spellfix.test 951a6405d49d1a23d6b78027d3877b4a33eeb8221dcab5704b499755bb4f552e
F test/spellfix2.test dfc8f519a3fc204cb2dfa8b4f29821ae90f6f8c3
F test/spellfix3.test 0f9efaaa502a0e0a09848028518a6fb096c8ad33
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 002a123094e4ef14eb5ec28033adca6083ba2717e1eaa23e80595e37a947e6c2
-R 0dfb19693dad143344d481eff7a8c7a1
+P 5216452047eecdd6c0f6ab85b304f975ed05a394a4ad9ae793fb65d645502b12
+R e5e73e420449b95dfe1df31fa75f6670
U drh
-Z eab3264d2412f89567991828cb35b655
+Z c88ad2ace3864df1c4b3b50fb44cd819
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 4f45593820..e6c8d08022 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-5216452047eecdd6c0f6ab85b304f975ed05a394a4ad9ae793fb65d645502b12
+602d4dd69ec9a724c69cb41ab15376ec731bfd4894fac0a2b25076b857786c6d
diff --git a/test/speedtest1.c b/test/speedtest1.c
index 7bceae8512..9d8ddc4545 100644
--- a/test/speedtest1.c
+++ b/test/speedtest1.c
@@ -1,6 +1,28 @@
/*
** A program for performance testing.
**
+** To build this program against an historical version of SQLite for comparison
+** testing:
+**
+** Unix:
+**
+** ./configure --all
+** make clean speedtest1
+** mv speedtest1 speedtest1-current
+** cp $HISTORICAL_SQLITE3_C_H .
+** touch sqlite3.c sqlite3.h .target_source
+** make speedtest1
+** mv speedtest1 speedtest1-baseline
+**
+** Windows:
+**
+** nmake /f Makefile.msc clean speedtest1.exe
+** mv speedtest1.exe speedtest1-current.exe
+** cp $HISTORICAL_SQLITE_C_H .
+** touch sqlite3.c sqlite3.h .target_source
+** nmake /f Makefile.msc speedtest1.exe
+** mv speedtest1.exe speedtest1-baseline.exe
+**
** The available command-line options are described below:
*/
static const char zHelp[] =
@@ -42,7 +64,8 @@ static const char zHelp[] =
" --stats Show statistics at the end\n"
" --stmtscanstatus Activate SQLITE_DBCONFIG_STMT_SCANSTATUS\n"
" --temp N N from 0 to 9. 0: no temp table. 9: all temp tables\n"
- " --testset T Run test-set T (main, cte, rtree, orm, fp, json, debug)\n"
+ " --testset T Run test-set T (main, cte, rtree, orm, fp, json,"
+ " debug)\n"
" Can be a comma-separated list of values, with /SCALE\n"
" suffixes or macro \"mix1\"\n"
" --trace Turn on SQL tracing\n"
From 4170780a82421bf723a95838d8e3e04d157de823 Mon Sep 17 00:00:00 2001
From: drh <>
Date: Mon, 3 Feb 2025 12:42:03 +0000
Subject: [PATCH 163/220] The "clean" target on Makefile.msc should not delete
the auto.def file.
FossilOrigin-Name: 72fbcedfb09febb72fa325cb21d160cd33dca7fe5579817143f47d90a20ec2ef
---
Makefile.msc | 3 ++-
manifest | 12 ++++++------
manifest.uuid | 2 +-
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/Makefile.msc b/Makefile.msc
index 33c5ef107e..f5a1a9164d 100644
--- a/Makefile.msc
+++ b/Makefile.msc
@@ -2811,7 +2811,8 @@ moreclean: clean
clean:
del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
- del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+ del /Q *.bsc *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+ del /Q sqlite3.def tclsqlite3.def 2>NUL
del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
# <>
del /Q $(SQLITE3TCLDLL) pkgIndex.tcl 2>NUL
diff --git a/manifest b/manifest
index 4c732ac4a4..604113d5d4 100644
--- a/manifest
+++ b/manifest
@@ -1,11 +1,11 @@
-C Add\sa\sheader\scomment\sto\stest/speedtest1.c\sthat\soutlines\show\sto\scompile\sthe\nprogram\susing\shistorical\samalgamation\ssources,\sfor\scomparison\stesting.
-D 2025-02-02T18:01:32.649
+C The\s"clean"\starget\son\sMakefile.msc\sshould\snot\sdelete\sthe\sauto.def\sfile.
+D 2025-02-03T12:42:03.773
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
F Makefile.in 38485d15d9190cdad0d7bee25af7b442028865964025dcc61f40fd8d6e369cfc
F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0
-F Makefile.msc 39785ec45f9ae0311e49094eff2ee079562246fed6be3b9f632a99d4df20056a
+F Makefile.msc b335ae09e0396f6fb1ff3cc477b5d42f7b19f5b657b9deb8761c02fb9ec93df9
F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159
F VERSION 01f7606130e48fd58a74d1e45e565f2674819d6eadbc219d328d94bb3362b818
F art/icon-243x273.gif 9750b734f82fdb3dc43127753d5e6fbf3b62c9f4e136c2fbf573b2f57ea87af5
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 5216452047eecdd6c0f6ab85b304f975ed05a394a4ad9ae793fb65d645502b12
-R e5e73e420449b95dfe1df31fa75f6670
+P 602d4dd69ec9a724c69cb41ab15376ec731bfd4894fac0a2b25076b857786c6d
+R 24aae7cdfe868af0a232714dd29906e1
U drh
-Z c88ad2ace3864df1c4b3b50fb44cd819
+Z 6573e99f3b8fb91d202a158e322a8831
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index e6c8d08022..e76b7795a9 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-602d4dd69ec9a724c69cb41ab15376ec731bfd4894fac0a2b25076b857786c6d
+72fbcedfb09febb72fa325cb21d160cd33dca7fe5579817143f47d90a20ec2ef
From 3cf467a3ec3f5311cb70e229f9f675d567fabeea Mon Sep 17 00:00:00 2001
From: drh <>
Date: Mon, 3 Feb 2025 13:20:11 +0000
Subject: [PATCH 164/220] Adjust the build process to avoid extra CR characters
inserted by jimsh on Windows.
FossilOrigin-Name: 1f54853932cec9ba20e9be48a59f1817b8b45e4c4d6ef8a06d34f86dd688e28e
---
Makefile.msc | 4 ++--
main.mk | 6 +++---
manifest | 20 ++++++++++----------
manifest.uuid | 2 +-
tool/mkshellc.tcl | 3 +++
tool/mksqlite3c.tcl | 2 +-
tool/mksqlite3h.tcl | 31 +++++++++++++++++++++++++------
7 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/Makefile.msc b/Makefile.msc
index f5a1a9164d..c1a8f88b6e 100644
--- a/Makefile.msc
+++ b/Makefile.msc
@@ -2334,7 +2334,7 @@ parse.c: $(TOP)\src\parse.y lemon.exe
.\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) -S parse.y
$(SQLITE3H): $(TOP)\src\sqlite.h.in $(TOP)\manifest mksourceid.exe $(TOP)\VERSION $(JIM_TCLSH)
- $(JIM_TCLSH) $(TOP)\tool\mksqlite3h.tcl "$(TOP:\=/)" > $(SQLITE3H) $(MKSQLITE3H_ARGS)
+ $(JIM_TCLSH) $(TOP)\tool\mksqlite3h.tcl "$(TOP:\=/)" -o $(SQLITE3H) $(MKSQLITE3H_ARGS)
sqlite3ext.h: .target_source
!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
@@ -2398,7 +2398,7 @@ SHELL_DEP = $(SHELL_DEP) $(TOP)\ext\misc\zipfile.c
!ENDIF
shell.c: $(SHELL_DEP) $(TOP)\tool\mkshellc.tcl $(JIM_TCLSH)
- $(JIM_TCLSH) $(TOP)\tool\mkshellc.tcl > shell.c
+ $(JIM_TCLSH) $(TOP)\tool\mkshellc.tcl shell.c
zlib:
pushd $(ZLIBDIR) && $(MAKE) /f win32\Makefile.msc clean $(ZLIBLIB) && popd
diff --git a/main.mk b/main.mk
index f2212c4f11..00632a5d5c 100644
--- a/main.mk
+++ b/main.mk
@@ -1066,7 +1066,7 @@ mksourceid$(B.exe): $(MAKE_SANITY_CHECK) $(TOP)/tool/mksourceid.c
sqlite3.h: $(MAKE_SANITY_CHECK) $(TOP)/src/sqlite.h.in \
$(TOP)/manifest mksourceid$(B.exe) \
$(TOP)/VERSION $(B.tclsh)
- $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) >sqlite3.h
+ $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) -o sqlite3.h
sqlite3.c: .target_source sqlite3.h $(TOP)/tool/mksqlite3c.tcl src-verify$(B.exe) \
$(B.tclsh)
@@ -1075,7 +1075,7 @@ sqlite3.c: .target_source sqlite3.h $(TOP)/tool/mksqlite3c.tcl src-verify$(B.exe
cp $(TOP)/ext/session/sqlite3session.h .
sqlite3r.h: sqlite3.h $(B.tclsh)
- $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) --enable-recover >sqlite3r.h
+ $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) --enable-recover -o sqlite3r.h
sqlite3r.c: sqlite3.c sqlite3r.h $(B.tclsh)
cp $(TOP)/ext/recover/sqlite3recover.c tsrc/
@@ -2210,7 +2210,7 @@ SHELL_DEP = \
$(TOP)/src/test_windirent.h
shell.c: $(SHELL_DEP) $(TOP)/tool/mkshellc.tcl $(B.tclsh)
- $(B.tclsh) $(TOP)/tool/mkshellc.tcl >shell.c
+ $(B.tclsh) $(TOP)/tool/mkshellc.tcl shell.c
#
# Rules to build the extension objects.
diff --git a/manifest b/manifest
index 604113d5d4..ae3fd789be 100644
--- a/manifest
+++ b/manifest
@@ -1,11 +1,11 @@
-C The\s"clean"\starget\son\sMakefile.msc\sshould\snot\sdelete\sthe\sauto.def\sfile.
-D 2025-02-03T12:42:03.773
+C Adjust\sthe\sbuild\sprocess\sto\savoid\sextra\sCR\scharacters\sinserted\sby\sjimsh\non\sWindows.
+D 2025-02-03T13:20:11.678
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
F Makefile.in 38485d15d9190cdad0d7bee25af7b442028865964025dcc61f40fd8d6e369cfc
F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0
-F Makefile.msc b335ae09e0396f6fb1ff3cc477b5d42f7b19f5b657b9deb8761c02fb9ec93df9
+F Makefile.msc a9b95ae9807e17f9b0734ebe97d68032141c3f95286bb64593cb73b206f043cf
F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159
F VERSION 01f7606130e48fd58a74d1e45e565f2674819d6eadbc219d328d94bb3362b818
F art/icon-243x273.gif 9750b734f82fdb3dc43127753d5e6fbf3b62c9f4e136c2fbf573b2f57ea87af5
@@ -702,7 +702,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
F ext/wasm/wasmfs.make 68999f5bd8c489239592d59a420f8c627c99169bbd6fa16a404751f757b9f702
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
-F main.mk 043987843e8365dbaf74dce60c11683b62e2bcfcb3122574c14a0324d37a72f3
+F main.mk 8cfe182232ac7bbc87530792db6f31c09f2a2f35e9887d0412978746efe42ea9
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
@@ -2153,12 +2153,12 @@ F tool/mkopcodec.tcl 33d20791e191df43209b77d37f0ff0904620b28465cca6990cf8d60da61
F tool/mkopcodeh.tcl 2b4e6967a670ef21bf53a164964c35c6163277d002a4c6f56fa231d68c88d023
F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa
F tool/mkpragmatab.tcl 32e359ccb21011958a821955254bd7a5fa7915d01a8c16fed91ffc8b40cb4adf
-F tool/mkshellc.tcl 2bc29c201933ae72a16a79070fe80aded80c24ea487ecd2f8df20c2973c87bfc
+F tool/mkshellc.tcl 9ce74de0fa904a2c56a96f8d8b5261246bacb0eaa8d7e184f9e18ff94145ebbc
F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f
-F tool/mksqlite3c.tcl 9e88a30981280e33489fe4782f4ab1e5349ba1866603fba7f1a948d5599b9124
-F tool/mksqlite3h.tcl 5a8d23f35462bfcf74324a19465abd0ad6717b92a404d177160963c292df5d04
+F tool/mksqlite3c.tcl 1b24a4388f544a7f42fc2d03f34422182d3b2263453f65f642890259566369c1
+F tool/mksqlite3h.tcl 3cc8f3fbb3eca38c899549385622637667254067d865a70ad16e0996c2fd3214
F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b
F tool/mksrczip.tcl 81efd9974dbb36005383f2cd655520057a2ae5aa85ac2441a80c7c28f803ac52
F tool/mktoolzip.tcl 34b4e92be544f820e2cc26f143f7d5aec511e826ec394cc82969a5dcf7c7a27c
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 602d4dd69ec9a724c69cb41ab15376ec731bfd4894fac0a2b25076b857786c6d
-R 24aae7cdfe868af0a232714dd29906e1
+P 72fbcedfb09febb72fa325cb21d160cd33dca7fe5579817143f47d90a20ec2ef
+R 4d732beb3e0a16061f12827a776553c4
U drh
-Z 6573e99f3b8fb91d202a158e322a8831
+Z 6e6db52bccac51a05d3eab6549c06d4c
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index e76b7795a9..5ca1ca5a2b 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-72fbcedfb09febb72fa325cb21d160cd33dca7fe5579817143f47d90a20ec2ef
+1f54853932cec9ba20e9be48a59f1817b8b45e4c4d6ef8a06d34f86dd688e28e
diff --git a/tool/mkshellc.tcl b/tool/mkshellc.tcl
index af9804e4fa..85e14f8498 100644
--- a/tool/mkshellc.tcl
+++ b/tool/mkshellc.tcl
@@ -12,6 +12,9 @@
set topdir [file dir [file dir [file normal $argv0]]]
set out stdout
fconfigure stdout -translation binary
+if {[lindex $argv 0]!=""} {
+ set out [open [lindex $argv 0] wb]
+}
puts $out {/* DO NOT EDIT!
** This file is automatically generated by the script in the canonical
** SQLite source tree at tool/mkshellc.tcl. That script combines source
diff --git a/tool/mksqlite3c.tcl b/tool/mksqlite3c.tcl
index 1b3958f460..ddc1e58776 100644
--- a/tool/mksqlite3c.tcl
+++ b/tool/mksqlite3c.tcl
@@ -130,7 +130,7 @@ if {[file executable $vsrcprog] && [file readable $srcroot/manifest]} {
} else {
puts $out " with changes in files:\n**"
foreach f [lrange $res 1 end] {
- puts $out "** $f"
+ puts $out "** [string trim $f]"
}
}
} else {
diff --git a/tool/mksqlite3h.tcl b/tool/mksqlite3h.tcl
index b409d306b2..8ef123bc72 100644
--- a/tool/mksqlite3h.tcl
+++ b/tool/mksqlite3h.tcl
@@ -24,18 +24,36 @@
# 6) Adds the SQLITE_CALLBACK calling convention macro in front of all
# callback declarations.
#
-# This script outputs to stdout.
+# This script outputs to stdout unless the -o FILENAME option is used.
#
# Example usage:
#
-# tclsh mksqlite3h.tcl ../sqlite >sqlite3.h
+# tclsh mksqlite3h.tcl ../sqlite [OPTIONS]
+# ^^^^^^^^^
+# Root of source tree
+#
+# Where options are:
+#
+# --enable-recover Include the sqlite3recover extension
+# -o FILENAME Write results to FILENAME instead of stdout
+# --useapicall SQLITE_APICALL instead of SQLITE_CDECL
#
+# Default output stream
+set out stdout
# Get the source tree root directory from the command-line
#
set TOP [lindex $argv 0]
+# If the -o FILENAME option is present, use FILENAME for output.
+#
+set x [lsearch $argv -o]
+if {$x>0} {
+ incr x
+ set out [open [lindex $argv $x] wb]
+}
+
# Enable use of SQLITE_APICALL macros at the right points?
#
set useapicall 0
@@ -44,6 +62,7 @@ set useapicall 0
#
set enable_recover 0
+# Process command-line arguments
if {[lsearch -regexp [lrange $argv 1 end] {^-+useapicall}] != -1} {
set useapicall 1
}
@@ -118,7 +137,7 @@ set cdecllist {
foreach file $filelist {
set in [open $file rb]
if {![regexp {sqlite\.h\.in} $file]} {
- puts "/******** Begin file [file tail $file] *********/"
+ puts $out "/******** Begin file [file tail $file] *********/"
}
while {![eof $in]} {
@@ -161,11 +180,11 @@ foreach file $filelist {
"(SQLITE_SYSAPI *sqlite3_syscall_ptr)"] $line]
regsub {\(\*} $line {(SQLITE_CALLBACK *} line
}
- puts $line
+ puts $out $line
}
close $in
if {![regexp {sqlite\.h\.in} $file]} {
- puts "/******** End of [file tail $file] *********/"
+ puts $out "/******** End of [file tail $file] *********/"
}
}
-puts "#endif /* SQLITE3_H */"
+puts $out "#endif /* SQLITE3_H */"
From d256b568806e32efd063f280a55830dbbf21ddff Mon Sep 17 00:00:00 2001
From: stephan
Date: Mon, 3 Feb 2025 14:04:27 +0000
Subject: [PATCH 165/220] Correct the FuncPtrAdapter signature for the JS
binding of sqlite3_set_auxdata(). Reported in
[https://github.com/sqlite/sqlite-wasm/issues/92|the npm subproject, ticket
#92].
FossilOrigin-Name: 76c8435a5f390001038b8ee94322ff478c9d5f29501ed1c5891c952a41e377aa
---
ext/wasm/api/sqlite3-api-glue.c-pp.js | 2 +-
manifest | 14 +++++++-------
manifest.uuid | 2 +-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/ext/wasm/api/sqlite3-api-glue.c-pp.js b/ext/wasm/api/sqlite3-api-glue.c-pp.js
index 680218370a..ddcf2535fd 100644
--- a/ext/wasm/api/sqlite3-api-glue.c-pp.js
+++ b/ext/wasm/api/sqlite3-api-glue.c-pp.js
@@ -232,7 +232,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
"sqlite3_context*", "int", "*",
new wasm.xWrap.FuncPtrAdapter({
name: 'xDestroyAuxData',
- signature: 'v(*)',
+ signature: 'v(p)',
contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */]
})
]],
diff --git a/manifest b/manifest
index ae3fd789be..7030dfa0ff 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Adjust\sthe\sbuild\sprocess\sto\savoid\sextra\sCR\scharacters\sinserted\sby\sjimsh\non\sWindows.
-D 2025-02-03T13:20:11.678
+C Correct\sthe\sFuncPtrAdapter\ssignature\sfor\sthe\sJS\sbinding\sof\ssqlite3_set_auxdata().\sReported\sin\s[https://github.com/sqlite/sqlite-wasm/issues/92|the\snpm\ssubproject,\sticket\s#92].
+D 2025-02-03T14:04:27.614
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -638,7 +638,7 @@ F ext/wasm/api/post-js-footer.js 365405929f41ca0e6d389ed8a8da3f3c93e11d3ef43a90a
F ext/wasm/api/post-js-header.js 54b2b4294501b3866245cc94315a16f5424c0e87729d0fb610fba151593c6d26
F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
-F ext/wasm/api/sqlite3-api-glue.c-pp.js fb6dbfe692cc23000a65a4cd95a1a47ed5eb592dc9d8b55363b3c2952a787244
+F ext/wasm/api/sqlite3-api-glue.c-pp.js 0fc6a377907a5101ee426fda7e91def6a310785b23b7a39dd8b2c5e47ee36b4b
F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
F ext/wasm/api/sqlite3-api-prologue.js 5ff913355b3144f1c9719d0406667fa6e13eb813c71ed7ce29440e2e65363e82
F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 72fbcedfb09febb72fa325cb21d160cd33dca7fe5579817143f47d90a20ec2ef
-R 4d732beb3e0a16061f12827a776553c4
-U drh
-Z 6e6db52bccac51a05d3eab6549c06d4c
+P 1f54853932cec9ba20e9be48a59f1817b8b45e4c4d6ef8a06d34f86dd688e28e
+R d1320d9ef5942af95a84d7f496345d0f
+U stephan
+Z 691559c7ab028b93ffa7b33fa4caf5f0
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 5ca1ca5a2b..e59ab15d96 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-1f54853932cec9ba20e9be48a59f1817b8b45e4c4d6ef8a06d34f86dd688e28e
+76c8435a5f390001038b8ee94322ff478c9d5f29501ed1c5891c952a41e377aa
From 77586831edf2f93cd8a74c1845aa6ed609cdfc1f Mon Sep 17 00:00:00 2001
From: drh <>
Date: Mon, 3 Feb 2025 14:40:05 +0000
Subject: [PATCH 166/220] Bring the autoconf-tarball Makefile.msc into
alignment with the main Makefile.msc.
FossilOrigin-Name: 52a7a162d131532de8f4403b099fa122fc72c80f71494fb561afc4e0ff8e6bf4
---
autoconf/Makefile.msc | 3 ++-
manifest | 14 +++++++-------
manifest.uuid | 2 +-
3 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/autoconf/Makefile.msc b/autoconf/Makefile.msc
index 1f0e42db4b..47e0a83af8 100644
--- a/autoconf/Makefile.msc
+++ b/autoconf/Makefile.msc
@@ -1087,5 +1087,6 @@ $(LIBRESOBJS): $(TOP)\sqlite3.rc rcver.vc $(SQLITE3H)
clean:
del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
- del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+ del /Q *.bsc *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+ del /Q sqlite3.def tclsqlite3.def 2>NUL
del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
diff --git a/manifest b/manifest
index 7030dfa0ff..1335b4ed07 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Correct\sthe\sFuncPtrAdapter\ssignature\sfor\sthe\sJS\sbinding\sof\ssqlite3_set_auxdata().\sReported\sin\s[https://github.com/sqlite/sqlite-wasm/issues/92|the\snpm\ssubproject,\sticket\s#92].
-D 2025-02-03T14:04:27.614
+C Bring\sthe\sautoconf-tarball\sMakefile.msc\sinto\salignment\swith\sthe\smain\nMakefile.msc.
+D 2025-02-03T14:40:05.237
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -17,7 +17,7 @@ F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821
F auto.def e7e92090c98aeb0174d29988c259834eb1b71ae1ea927015c3ef300f6f9b68ae
F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac
F autoconf/Makefile.in 56697ad25ecf23afa317148b06bdc14f85960b42e5ec434ac1ba87f63a3cb789
-F autoconf/Makefile.msc ffff61fe851443015ddb6600ab69a9df503cfec25459b336be7ba8c9a9e473f8
+F autoconf/Makefile.msc 0a071367537dc395285a5d624ac4f99f3a387b27cc5e89752423c0499e15aec4
F autoconf/README.first f1d3876e9a7852c22f275a6f06814e64934cecbc0b5b9617d64849094c1fd136
F autoconf/README.txt 7f01dc3915e2d68f329011073662369e62a0938a2c69398807823c57591cb288
F autoconf/auto.def 23bc095a3890c0ca334abf7ef67d1c8af4c22c12832bcc738015e868d54fe9d7
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 1f54853932cec9ba20e9be48a59f1817b8b45e4c4d6ef8a06d34f86dd688e28e
-R d1320d9ef5942af95a84d7f496345d0f
-U stephan
-Z 691559c7ab028b93ffa7b33fa4caf5f0
+P 76c8435a5f390001038b8ee94322ff478c9d5f29501ed1c5891c952a41e377aa
+R ffc4ba900908f24af2ec6f8d798eed37
+U drh
+Z bc5ceaf13617b69dbeab721c1380d466
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index e59ab15d96..a166adab6f 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-76c8435a5f390001038b8ee94322ff478c9d5f29501ed1c5891c952a41e377aa
+52a7a162d131532de8f4403b099fa122fc72c80f71494fb561afc4e0ff8e6bf4
From d98689f4d39c4729ef95a93317eaa7892a6aaed6 Mon Sep 17 00:00:00 2001
From: stephan
Date: Mon, 3 Feb 2025 14:55:56 +0000
Subject: [PATCH 167/220] Add a more complete test for [76c8435a] and add some
commentary about (A) the inability to automatically clean up
automatically-generated WASM proxy functions for sqlite3_set_auxdata()
destructors and (B) how to deal with (A) to avoid leaking WASM proxy
functions.
FossilOrigin-Name: d693c2dddbd10a2e0b77893b04b11502e30b768f1b06814105f7f35172845fb9
---
ext/wasm/api/sqlite3-api-glue.c-pp.js | 29 ++++++++++++
ext/wasm/tester1.c-pp.js | 67 +++++++++++++++++++++++++++
manifest | 17 ++++---
manifest.uuid | 2 +-
4 files changed, 105 insertions(+), 10 deletions(-)
diff --git a/ext/wasm/api/sqlite3-api-glue.c-pp.js b/ext/wasm/api/sqlite3-api-glue.c-pp.js
index ddcf2535fd..bcaff7243d 100644
--- a/ext/wasm/api/sqlite3-api-glue.c-pp.js
+++ b/ext/wasm/api/sqlite3-api-glue.c-pp.js
@@ -228,6 +228,31 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
}),
'*'
]],
+ /**
+ 2025-02-03: We do not have a way to automatically clean up
+ destructors which are automatically converted from JS functions
+ via the final argument to sqlite3_set_auxdata(). Because of
+ that, it is strongly recommended that clients use
+ wasm.installFunction() to create such callbacks, then pass that
+ pointer to sqlite3_set_auxdata(). Relying on automated
+ conversions here will lead to leaks of JS/WASM proxy functions
+ because sqlite3_set_auxdata() is frequently called in UDFs.
+
+ The sqlite3.oo1.DB class's onclose handlers can be used for this
+ purpose. For example:
+
+ const pAuxDtor = wasm.installFunction('v(p)', function(ptr){
+ //free ptr
+ });
+ myDb.onclose = {
+ after: ()=>{
+ wasm.uninstallFunction(pAuxDtor);
+ }
+ };
+
+ Then pass pAuxDtor as the final argument to appropriate
+ sqlite3_set_auxdata() calls.
+ */
["sqlite3_set_auxdata", undefined, [
"sqlite3_context*", "int", "*",
new wasm.xWrap.FuncPtrAdapter({
@@ -1047,6 +1072,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
'sqlite3_set_authorizer',
'sqlite3_trace_v2',
'sqlite3_update_hook'
+ /*
+ We do not yet have a way to clean up automatically-converted
+ sqlite3_set_auxdata() finalizers.
+ */
]) {
const x = wasm.exports[name];
if( !x ){
diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js
index f83ecbd873..880edcec1d 100644
--- a/ext/wasm/tester1.c-pp.js
+++ b/ext/wasm/tester1.c-pp.js
@@ -3437,6 +3437,73 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
}
}
})
+ .t({
+ /* https://github.com/sqlite/sqlite-wasm/issues/92 */
+ name: 'sqlite3_set_auxdata() binding signature',
+ test: function(sqlite3){
+ const db = new sqlite3.oo1.DB();
+ const stack = wasm.pstack.pointer;
+ const pAux = wasm.pstack.alloc(4);
+ let pAuxDestructed = 0;
+ const args = [];
+ const pAuxDtor = wasm.installFunction('v(p)', function(ptr){
+ //log("freeing auxdata");
+ ++pAuxDestructed;
+ });
+ let pAuxDtorDestructed = false;
+ db.onclose = {
+ after: ()=>{
+ pAuxDtorDestructed = true;
+ wasm.uninstallFunction(pAuxDtor);
+ }
+ };
+ try{
+ db.createFunction("auxtest",{
+ xFunc: function(pCx, x, y){
+ args.push(x);
+ T.assert(wasm.isPtr(pCx));
+ const localAux = capi.sqlite3_get_auxdata(pCx, 0);
+ if( !localAux ){
+ //log("setting auxdata");
+ /**
+ We do not currently an automated way to clean up
+ auxdata finalizer functions (the 4th argument to
+ sqlite3_set_auxdata()) which get automatically
+ converted from JS to WASM. Because of that, relying
+ on automated conversions for those is not
+ recommended. Instead, follow the pattern show in
+ this function: use wasm.installFunction() to create
+ the function, then pass the resulting function
+ pointer this function, and cleanup (at some point)
+ using wasm.uninstallFunction().
+ */
+ capi.sqlite3_set_auxdata(pCx, 0, pAux, pAuxDtor);
+ }else{
+ /* This is never actually hit in this example and it's
+ not entirely clear how to cause it to. The point of
+ this test, however, is to demonstrate that the
+ finalizer impl gets triggered, so we're not going to
+ fret over this at the moment. */
+ //log("seen auxdata",localAux);
+ T.assert(pAux===localAux);
+ }
+ return x;
+ }
+ });
+ db.exec([
+ "create table t(a);",
+ "insert into t(a) values(1),(2),(3);",
+ "select auxtest(a,a), auxtest(a,a) from t order by a"
+ ]);
+ }finally{
+ db.close();
+ wasm.pstack.restore(stack);
+ }
+ T.assert(6===args.length);
+ T.assert(pAuxDestructed>0);
+ T.assert(pAuxDtorDestructed);
+ }
+ })
;/*end of Bug Reports group*/;
////////////////////////////////////////////////////////////////////////
diff --git a/manifest b/manifest
index c36f2724d2..54fc8aa8ae 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sthe\sbuild\sprocess\son\sWindows\sso\sthat\sit\sgenerates\sidentical\ssqlite3.c,\nsqlite3.h,\sand\sshell.c\sfiles\son\sWindows\sand\sUnix.\s\sThis\spatch\salso\sincludes\na\schange\sto\sJS\sbindings\sthat\sgot\scaught\sup\sin\sthe\sbranch.
-D 2025-02-03T14:44:16.557
+C Add\sa\smore\scomplete\stest\sfor\s[76c8435a]\sand\sadd\ssome\scommentary\sabout\s(A)\sthe\sinability\sto\sautomatically\sclean\sup\sautomatically-generated\sWASM\sproxy\sfunctions\sfor\ssqlite3_set_auxdata()\sdestructors\sand\s(B)\show\sto\sdeal\swith\s(A)\sto\savoid\sleaking\sWASM\sproxy\sfunctions.
+D 2025-02-03T14:55:56.185
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -638,7 +638,7 @@ F ext/wasm/api/post-js-footer.js 365405929f41ca0e6d389ed8a8da3f3c93e11d3ef43a90a
F ext/wasm/api/post-js-header.js 54b2b4294501b3866245cc94315a16f5424c0e87729d0fb610fba151593c6d26
F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
-F ext/wasm/api/sqlite3-api-glue.c-pp.js 0fc6a377907a5101ee426fda7e91def6a310785b23b7a39dd8b2c5e47ee36b4b
+F ext/wasm/api/sqlite3-api-glue.c-pp.js 6e2f2eaf681e342fcb047fcdd01d6e3c1b466fb9b45c1acc38676164a8b60f45
F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
F ext/wasm/api/sqlite3-api-prologue.js 5ff913355b3144f1c9719d0406667fa6e13eb813c71ed7ce29440e2e65363e82
F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
@@ -696,7 +696,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
-F ext/wasm/tester1.c-pp.js 05df7cfd2cb8aa8728afb68c90a8af51fdf724c0e892f0f986a695584edae195
+F ext/wasm/tester1.c-pp.js fb8d0761daaa69bd40c8253cc2d6c8c37ada97e1751b7f07af7369842ba2aeae
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@@ -2209,9 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 602d4dd69ec9a724c69cb41ab15376ec731bfd4894fac0a2b25076b857786c6d 52a7a162d131532de8f4403b099fa122fc72c80f71494fb561afc4e0ff8e6bf4
-R ffc4ba900908f24af2ec6f8d798eed37
-T +closed 52a7a162d131532de8f4403b099fa122fc72c80f71494fb561afc4e0ff8e6bf4
-U drh
-Z 167889892c0bdca97b0a614e610568d1
+P 91ef45fc2902e46813366ec6b8317209f39f10e4a23c3808e33aceedab9da6c7
+R f2c90877762eddda2efda339cfb2ee34
+U stephan
+Z 6cfffa02c18a4e52a298c977368cc8d7
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 367348a3ff..c7225ebda1 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-91ef45fc2902e46813366ec6b8317209f39f10e4a23c3808e33aceedab9da6c7
+d693c2dddbd10a2e0b77893b04b11502e30b768f1b06814105f7f35172845fb9
From 3cd34ab981ebed34bce66c19bb9144e40c6e9204 Mon Sep 17 00:00:00 2001
From: stephan
Date: Mon, 3 Feb 2025 17:34:12 +0000
Subject: [PATCH 168/220] Rework [76c8435a] to eliminate automatic JS-to-WASM
function conversions of sqlite3_set_auxdata() destructors because it can
leads to leaks on every call of a UDF. This feature never worked before
[76c8435a] but fixing it was ill-conceived because of the memory leakage it
introduces. WASM function pointers can still be used as destructors in this
context.
FossilOrigin-Name: 3fb993af0caf041da934cea29c039b27c468be0b75bce1537a6425767cf9bf8d
---
ext/wasm/api/sqlite3-api-glue.c-pp.js | 37 +++++++++++++++++----------
ext/wasm/tester1.c-pp.js | 6 ++---
manifest | 14 +++++-----
manifest.uuid | 2 +-
4 files changed, 35 insertions(+), 24 deletions(-)
diff --git a/ext/wasm/api/sqlite3-api-glue.c-pp.js b/ext/wasm/api/sqlite3-api-glue.c-pp.js
index bcaff7243d..a40b832824 100644
--- a/ext/wasm/api/sqlite3-api-glue.c-pp.js
+++ b/ext/wasm/api/sqlite3-api-glue.c-pp.js
@@ -229,14 +229,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
'*'
]],
/**
- 2025-02-03: We do not have a way to automatically clean up
- destructors which are automatically converted from JS functions
- via the final argument to sqlite3_set_auxdata(). Because of
- that, it is strongly recommended that clients use
- wasm.installFunction() to create such callbacks, then pass that
- pointer to sqlite3_set_auxdata(). Relying on automated
- conversions here will lead to leaks of JS/WASM proxy functions
- because sqlite3_set_auxdata() is frequently called in UDFs.
+ We do not have a way to automatically clean up destructors
+ which are automatically converted from JS functions via the
+ final argument to sqlite3_set_auxdata(). Because of that,
+ automatic function conversion is not supported for this
+ function. Clients should use wasm.installFunction() to create
+ such callbacks, then pass that pointer to
+ sqlite3_set_auxdata(). Relying on automated conversions here
+ would lead to leaks of JS/WASM proxy functions because
+ sqlite3_set_auxdata() is frequently called in UDFs.
The sqlite3.oo1.DB class's onclose handlers can be used for this
purpose. For example:
@@ -252,14 +253,24 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
Then pass pAuxDtor as the final argument to appropriate
sqlite3_set_auxdata() calls.
+
+ Note that versions prior to 3.49.0 ostensibly had automatic
+ function conversion here but a typo prevented it from
+ working. Rather than fix it, it was removed because testing the
+ fix brought the huge potential for memory leaks to the
+ forefront.
*/
["sqlite3_set_auxdata", undefined, [
"sqlite3_context*", "int", "*",
- new wasm.xWrap.FuncPtrAdapter({
- name: 'xDestroyAuxData',
- signature: 'v(p)',
- contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */]
- })
+ true
+ ? "*"
+ : new wasm.xWrap.FuncPtrAdapter({
+ /* If we can find a way to automate their cleanup, JS functions can
+ be auto-converted with this. */
+ name: 'xDestroyAuxData',
+ signature: 'v(p)',
+ contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */]
+ })
]],
["sqlite3_shutdown", undefined],
["sqlite3_sourceid", "string"],
diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js
index 880edcec1d..9038d68328 100644
--- a/ext/wasm/tester1.c-pp.js
+++ b/ext/wasm/tester1.c-pp.js
@@ -3469,9 +3469,9 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
We do not currently an automated way to clean up
auxdata finalizer functions (the 4th argument to
sqlite3_set_auxdata()) which get automatically
- converted from JS to WASM. Because of that, relying
- on automated conversions for those is not
- recommended. Instead, follow the pattern show in
+ converted from JS to WASM. Because of that, enabling
+ automated conversions here would lead to leaks more
+ often than not. Instead, follow the pattern show in
this function: use wasm.installFunction() to create
the function, then pass the resulting function
pointer this function, and cleanup (at some point)
diff --git a/manifest b/manifest
index 54fc8aa8ae..a55702d8dd 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\smore\scomplete\stest\sfor\s[76c8435a]\sand\sadd\ssome\scommentary\sabout\s(A)\sthe\sinability\sto\sautomatically\sclean\sup\sautomatically-generated\sWASM\sproxy\sfunctions\sfor\ssqlite3_set_auxdata()\sdestructors\sand\s(B)\show\sto\sdeal\swith\s(A)\sto\savoid\sleaking\sWASM\sproxy\sfunctions.
-D 2025-02-03T14:55:56.185
+C Rework\s[76c8435a]\sto\seliminate\sautomatic\sJS-to-WASM\sfunction\sconversions\sof\ssqlite3_set_auxdata()\sdestructors\sbecause\sit\scan\sleads\sto\sleaks\son\severy\scall\sof\sa\sUDF.\sThis\sfeature\snever\sworked\sbefore\s[76c8435a]\sbut\sfixing\sit\swas\sill-conceived\sbecause\sof\sthe\smemory\sleakage\sit\sintroduces.\sWASM\sfunction\spointers\scan\sstill\sbe\sused\sas\sdestructors\sin\sthis\scontext.
+D 2025-02-03T17:34:12.962
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -638,7 +638,7 @@ F ext/wasm/api/post-js-footer.js 365405929f41ca0e6d389ed8a8da3f3c93e11d3ef43a90a
F ext/wasm/api/post-js-header.js 54b2b4294501b3866245cc94315a16f5424c0e87729d0fb610fba151593c6d26
F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
-F ext/wasm/api/sqlite3-api-glue.c-pp.js 6e2f2eaf681e342fcb047fcdd01d6e3c1b466fb9b45c1acc38676164a8b60f45
+F ext/wasm/api/sqlite3-api-glue.c-pp.js 5c0209e6a28164b4c2c1a34b0bb4aee3b7b1a264988d7e71fac08b8ede5b7ae3
F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
F ext/wasm/api/sqlite3-api-prologue.js 5ff913355b3144f1c9719d0406667fa6e13eb813c71ed7ce29440e2e65363e82
F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
@@ -696,7 +696,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
-F ext/wasm/tester1.c-pp.js fb8d0761daaa69bd40c8253cc2d6c8c37ada97e1751b7f07af7369842ba2aeae
+F ext/wasm/tester1.c-pp.js 45000532cf83f23a52b31581c1db44bfb82e383b1b68703ae4d3d838de3a833e
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@@ -2209,8 +2209,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 91ef45fc2902e46813366ec6b8317209f39f10e4a23c3808e33aceedab9da6c7
-R f2c90877762eddda2efda339cfb2ee34
+P d693c2dddbd10a2e0b77893b04b11502e30b768f1b06814105f7f35172845fb9
+R bdcc5096cc30e3d83fdf5d66602909e7
U stephan
-Z 6cfffa02c18a4e52a298c977368cc8d7
+Z fd720e9f1383b7c5da4643ab36634ed7
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index c7225ebda1..01d5aa1d3c 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-d693c2dddbd10a2e0b77893b04b11502e30b768f1b06814105f7f35172845fb9
+3fb993af0caf041da934cea29c039b27c468be0b75bce1537a6425767cf9bf8d
From c6281e48933587fe9dcc6e023babea4b7d4bf13c Mon Sep 17 00:00:00 2001
From: drh <>
Date: Mon, 3 Feb 2025 17:45:41 +0000
Subject: [PATCH 169/220] New test case for test/fuzzdata8.db
FossilOrigin-Name: 8a882f976e22100b91c7ca4119123f16ad5f03311f0a6dc17449bcdcff29618c
---
manifest | 18 +++++++++---------
manifest.uuid | 2 +-
test/fuzzdata8.db | Bin 4239360 -> 4241408 bytes
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/manifest b/manifest
index 809b43bc20..4d31836afa 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Version\s3.48.0
-D 2025-01-14T11:05:00.186
+C New\stest\scase\sfor\stest/fuzzdata8.db
+D 2025-02-03T17:45:41.279
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -1283,7 +1283,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4
F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5
F test/fuzzdata6.db b8725a5f5cf7a3b7241a9038e57ca7e7cc8c3f4d86b44bd770617bda245ab2b0
F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2
-F test/fuzzdata8.db 4a53b6d077c6a5c23b609d8d3ac66996fa55ba3f8d02f9b6efdd0214a767a35a
+F test/fuzzdata8.db deb6533e6dfdb5841eb6a56607bdb74986a57f5739f3975ea542a1f7e7e24d97
F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc
@@ -2205,11 +2205,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 315079b150b47e013e2cde4985bc39d24e0f6f6c6e60f9383fb8ea4ea897c67a
-R 0ed0cfcc7f2bc831da5d62a3490571ed
-T +sym-major-relase *
-T +sym-relase *
-T +sym-version-3.48.0 *
+P d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e84010
+R 02fce09966e6e21a0a59cdeb994f84e8
+T *branch * fuzz-data
+T *sym-fuzz-data *
+T -sym-trunk *
U drh
-Z cc77aac977f98c5521d75f4212754ff8
+Z b5d75fe3951f12b9fb4038728f5d0116
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 582262f689..8024622a5d 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e84010
+8a882f976e22100b91c7ca4119123f16ad5f03311f0a6dc17449bcdcff29618c
diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db
index 3e34180071ede5e023878d8528fe65a8fd9d24b9..f03f3f27191ee07a1014d1babeca93242543de8f 100644
GIT binary patch
delta 63340
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 |