Merge trunk fixes into the index-expr-opt branch.

FossilOrigin-Name: c7b9cc645b394a1b638a9a13ca83d321215aaa78d69ca70c6baa0ee692ed21bf
This commit is contained in:
drh 2022-10-18 11:28:33 +00:00
commit 451393c4f4
9 changed files with 184 additions and 50 deletions

View File

@ -125,9 +125,10 @@ else
$(info Development build. Use '$(MAKE) release' for a smaller release build.)
endif
version-info: version-info.c $(sqlite3.c) $(MAKEFILE)
$(CC) -O0 -I$(dir.top) -o $@ $(SQLITE_OPT) $< $(sqlite3.c)
CLEAN_FILES := version-info
version-info := $(dir.wasm)/version-info
$(version-info): $(dir.wasm)/version-info.c $(sqlite3.h) $(MAKEFILE)
$(CC) -O0 -I$(dir.top) -o $@ $<
CLEAN_FILES := $(version-info)
EXPORTED_FUNCTIONS.api.in := $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-api
@ -161,12 +162,12 @@ $(sqlite3-api.js): $(sqlite3-api.jses) $(MAKEFILE)
echo "/* END FILE: $$i */"; \
done > $@
$(sqlite3-api-build-version.js): version-info
$(sqlite3-api-build-version.js): $(version-info)
@echo "Making $@..."
@{ \
echo 'self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){'; \
echo -n ' sqlite3.version = '; \
./version-info --json; \
$(version-info) --json; \
echo ';'; \
echo '});'; \
} > $@
@ -344,7 +345,7 @@ $(sqlite3.js): $(MAKEFILE) $(sqlite3.wasm.obj) \
chmod -x $(sqlite3.wasm)
$(maybe-wasm-strip) $(sqlite3.wasm)
@ls -la $@ $(sqlite3.wasm)
$(sqlite3.wasm): $(sqlite3.js)
CLEAN_FILES += $(sqlite3.js) $(sqlite3.wasm)
all: $(sqlite3.js)
wasm: $(sqlite3.js)
@ -520,9 +521,9 @@ endif
########################################################################
# Create deliverables: TODO
#ifneq (,$(filter dist,$(MAKECMDGOALS)))
#include dist.make
#endif
ifneq (,$(filter dist,$(MAKECMDGOALS)))
include dist.make
endif
########################################################################
# Push files to public wasm-testing.sqlite.org server
@ -538,4 +539,3 @@ push:
$(wasm-testing.include) $(wasm-testing.dest)
ssh wasm-testing 'cd $(wasm-testing.dir) && bash .gzip' || \
echo "SSH failed: it's likely that stale content will be served via old gzip files."

26
ext/wasm/README-dist.txt Normal file
View File

@ -0,0 +1,26 @@
This is the README for the sqlite3 WASM/JS distribution.
Main project page: https://sqlite.org
TODO: link to main WASM/JS docs, once they are online
This archive contains two related deliverables:
- ./main contains the sqlite3.js and sqlite3.wasm file which make up
the standard sqlite3 WASM/JS build.
- ./wasmfs contains a build of those files which includes the
Emscripten WASMFS[^1]. It offers an alternative approach
to accessing the browser-side Origin-Private FileSystem
but is less portable than the main build, so is provided
as a separate binary.
Both directories contain small demonstration apps. Browsers will not
server WASM files from file:// URLs, so the demonstrations require a
web server and that server must include the following headers in its
response when serving the files:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
[^1]: https://emscripten.org

62
ext/wasm/dist.make Normal file
View File

@ -0,0 +1,62 @@
#!/do/not/make
#^^^ help emacs select edit mode
#
# Intended to include'd by ./GNUmakefile.
#
# 'make dist' rules for creating a distribution archive of the WASM/JS
# pieces, noting that we only build a dist of the built files, not the
# numerous pieces required to build them.
#######################################################################
MAKEFILE.dist := $(lastword $(MAKEFILE_LIST))
########################################################################
# Chicken/egg situation: we need $(version-info) to get the version
# info for the archive name, but that binary may not yet be built, so
# we have to use a temporary name for the archive.
dist-name = sqlite-wasm-TEMP
dist-archive = $(dist-name).zip
#ifeq (0,1)
# $(info WARNING *******************************************************************)
# $(info ** Be sure to create the desired build configuration before creating the)
# $(info ** distribution archive. Use one of the following targets to do so:)
# $(info ** o2: builds with -O2, resulting in the fastest builds)
# $(info ** oz: builds with -Oz, resulting in the smallest builds)
# $(info /WARNING *******************************************************************)
#endif
demo-123.html := $(dir.wasm)/demo-123.html
demo-123-worker.html := $(dir.wasm)/demo-123-worker.html
demo-123.js := $(dir.wasm)/demo-123.js
demo-files := $(demo-123.js) $(demo-123.html) $(demo-123-worker.html)
README-dist := $(dir.wasm)/README-dist.txt
$(dist-archive): $(sqlite3.wasm) $(sqlite3.js) $(sqlite3-wasmfs.wasm) $(sqlite3-wasmfs.js)
#$(dist-archive): $(sqlite3.h) $(sqlite3.c) $(sqlite3-wasm.c)
$(dist-archive): $(MAKEFILE.dist) $(version-info) $(demo-files) $(README-dist)
$(dist-archive): oz
rm -fr $(dist-name)
mkdir -p $(dist-name)/main $(dist-name)/wasmfs
cp -p $(README-dist) $(dist-name)/README.txt
cp -p $(sqlite3.wasm) $(sqlite3.js) $(dist-name)/main
cp -p $(demo-files) $(dist-name)/main
cp -p $(sqlite3-wasmfs.wasm) $(sqlite3-wasmfs.js) $(dist-name)/wasmfs
for i in $(demo-123.js) $(demo-123.html); do \
sed -e 's/\bsqlite3\.js\b/sqlite3-wasmfs.js/' $$i \
> $(dist-name)/wasmfs/$${i##*/} || exit; \
done
vnum=$$($(version-info) --version-number); \
vdir=sqlite-wasm-$$vnum; \
arc=$$vdir.zip; \
rm -f $$arc; \
mv $(dist-name) $$vdir; \
zip -qr $$arc $$vdir; \
rm -fr $$vdir; \
ls -la $$arc; \
unzip -l $$arc
#$(shell $(version-info) --version-number)
dist: $(dist-archive)
clean-dist:
rm -f $(dist-archive)
clean: clean-dist

View File

@ -46,11 +46,11 @@ fiddle.EXPORTED_FUNCTIONS.in := \
EXPORTED_FUNCTIONS.api
EXPORTED_FUNCTIONS.fiddle: $(fiddle.EXPORTED_FUNCTIONS.in) $(MAKEFILE.fiddle)
grep -h -v jaccwabyt $(fiddle.EXPORTED_FUNCTIONS.in) | sort -u > $@
sort -u $(fiddle.EXPORTED_FUNCTIONS.in) > $@
fiddle-module.js := $(dir.fiddle)/fiddle-module.js
fiddle-module.wasm := $(subst .js,.wasm,$(fiddle-module.js))
fiddle.cs := $(dir.top)/shell.c $(sqlite3-wasm.c)
fiddle.cses := $(dir.top)/shell.c $(sqlite3-wasm.c)
SOAP.js := sqlite3-opfs-async-proxy.js
$(dir.fiddle)/$(SOAP.js): $(SOAP.js)
@ -59,10 +59,10 @@ $(dir.fiddle)/$(SOAP.js): $(SOAP.js)
$(eval $(call call-make-pre-js,fiddle-module))
$(fiddle-module.js): $(MAKEFILE) $(MAKEFILE.fiddle) \
EXPORTED_FUNCTIONS.fiddle EXPORTED_RUNTIME_METHODS.fiddle \
$(fiddle.cs) $(pre-post-fiddle-module.deps) $(dir.fiddle)/$(SOAP.js)
$(fiddle.cses) $(pre-post-fiddle-module.deps) $(dir.fiddle)/$(SOAP.js)
$(emcc.bin) -o $@ $(fiddle.emcc-flags) \
$(pre-post-common.flags) $(pre-post-fiddle-module.flags) \
$(fiddle.cs)
$(fiddle.cses)
$(maybe-wasm-strip) $(fiddle-module.wasm)
gzip < $@ > $@.gz
gzip < $(fiddle-module.wasm) > $(fiddle-module.wasm).gz

View File

@ -12,15 +12,71 @@
** This file simply outputs sqlite3 version information in JSON form,
** intended for embedding in the sqlite3 JS API build.
*/
#include <stdio.h>
#include "sqlite3.h"
#include <stdio.h>
#include <string.h>
static void usage(const char *zAppName){
puts("Emits version info about the sqlite3 it is built against.");
printf("Usage: %s [--quote] --INFO-FLAG:\n\n", zAppName);
puts(" --version Emit SQLITE_VERSION (3.X.Y)");
puts(" --version-number Emit SQLITE_VERSION_NUMBER (30XXYYZZ)");
puts(" --source-id Emit SQLITE_SOURCE_ID");
puts(" --json Emit all info in JSON form");
puts("\nThe non-JSON formats may be modified by:\n");
puts(" --quote Add double quotes around output.");
}
int main(int argc, char const * const * argv){
if(argc || argv){/*unused*/}
printf("{\"libVersion\": \"%s\", "
"\"libVersionNumber\": %d, "
"\"sourceId\": \"%s\"}"/*missing newline is intentional*/,
SQLITE_VERSION,
SQLITE_VERSION_NUMBER,
SQLITE_SOURCE_ID);
int fJson = 0;
int fVersion = 0;
int fVersionNumber = 0;
int fSourceInfo = 0;
int fQuote = 0;
int nFlags = 0;
int i;
for( i = 1; i < argc; ++i ){
const char * zArg = argv[i];
while('-'==*zArg) ++zArg;
if( 0==strcmp("version", zArg) ){
fVersion = 1;
}else if( 0==strcmp("version-number", zArg) ){
fVersionNumber = 1;
}else if( 0==strcmp("source-id", zArg) ){
fSourceInfo = 1;
}else if( 0==strcmp("json", zArg) ){
fJson = 1;
}else if( 0==strcmp("quote", zArg) ){
fQuote = 1;
--nFlags;
}else{
printf("Unhandled flag: %s\n", argv[i]);
usage(argv[0]);
return 1;
}
++nFlags;
}
if( 0==nFlags ) fJson = 1;
if( fJson ){
printf("{\"libVersion\": \"%s\", "
"\"libVersionNumber\": %d, "
"\"sourceId\": \"%s\"}"/*missing newline is intentional*/,
SQLITE_VERSION,
SQLITE_VERSION_NUMBER,
SQLITE_SOURCE_ID);
}else{
if(fQuote) printf("%c", '"');
if( fVersion ){
printf("%s", SQLITE_VERSION);
}else if( fVersionNumber ){
printf("%d", SQLITE_VERSION_NUMBER);
}else if( fSourceInfo ){
printf("%s", SQLITE_SOURCE_ID);
}
if(fQuote) printf("%c", '"');
puts("");
}
return 0;
}

View File

@ -9,7 +9,6 @@ MAKEFILE.wasmfs := $(lastword $(MAKEFILE_LIST))
sqlite3-wasmfs.js := sqlite3-wasmfs.js
sqlite3-wasmfs.wasm := sqlite3-wasmfs.wasm
sqlite3-wasmfs.wasm.c := $(dir.api)/sqlite3-wasm.c
CLEAN_FILES += $(sqlite3-wasmfs.js) $(sqlite3-wasmfs.wasm) \
$(subst .js,.worker.js,$(sqlite3-wasmfs.js))
@ -27,12 +26,6 @@ sqlite3-wasmfs.cflags += -pthread
sqlite3-wasmfs.cflags += -I. -I.. -I$(dir.top)
sqlite3-wasmfs.cflags += $(SQLITE_OPT) -DSQLITE_WASM_WASMFS
sqlite3-wasmfs.extra.c :=
ifeq (1,1)
# To get testing1.js to run with $(sqlite3-wasmfs.js) we need...
sqlite3-wasmfs.extra.c += $(jaccwabyt_test.c)
endif
########################################################################
# emcc flags specific to building the final .js/.wasm file...
sqlite3-wasmfs.jsflags := -fPIC
@ -42,12 +35,7 @@ sqlite3-wasmfs.jsflags += -sMODULARIZE
sqlite3-wasmfs.jsflags += -sSTRICT_JS
sqlite3-wasmfs.jsflags += -sDYNAMIC_EXECUTION=0
sqlite3-wasmfs.jsflags += -sNO_POLYFILL
ifeq (,$(sqlite3-wasmfs.extra.c))
sqlite3-wasmfs.jsflags += -sEXPORTED_FUNCTIONS=@$(dir.api)/EXPORTED_FUNCTIONS.sqlite3-api
else
# need more exports for jaccwabyt test code...
sqlite3-wasmfs.jsflags += -sEXPORTED_FUNCTIONS=@$(dir.wasm)/EXPORTED_FUNCTIONS.api
endif
sqlite3-wasmfs.jsflags += -sEXPORTED_FUNCTIONS=@$(dir.api)/EXPORTED_FUNCTIONS.sqlite3-api
sqlite3-wasmfs.jsflags += -sEXPORTED_RUNTIME_METHODS=FS,wasmMemory,allocateUTF8OnStack
# wasmMemory ==> for -sIMPORTED_MEMORY
# allocateUTF8OnStack ==> wasmfs internals
@ -78,17 +66,17 @@ sqlite3-wasmfs.jsflags += $(sqlite3-wasmfs.fsflags)
sqlite3-wasmfs.jsflags += -sWASM_BIGINT=$(emcc_enable_bigint)
$(eval $(call call-make-pre-js,sqlite3-wasmfs))
sqlite3-wasmfs.jsflags += $(pre-post-common.flags) $(pre-post-sqlite3-wasmfs.flags)
$(sqlite3-wasmfs.js): $(sqlite3-wasmfs.wasm.c) $(sqlite3-wasm.c) $(sqlite3-wasmfs.extra.c) \
$(sqlite3-wasmfs.js): $(sqlite3-wasm.c) \
EXPORTED_FUNCTIONS.api $(MAKEFILE) $(MAKEFILE.wasmfs) \
$(pre-post-sqlite3-wasmfs.deps)
@echo "Building $@ ..."
$(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \
$(sqlite3-wasmfs.cflags) $(sqlite3-wasmfs.jsflags) \
$(sqlite3-wasmfs.wasm.c) $(sqlite3-wasmfs.extra.c)
$(sqlite3-wasm.c)
chmod -x $(sqlite3-wasmfs.wasm)
$(maybe-wasm-strip) $(sqlite3-wasmfs.wasm)
@ls -la $@ $(sqlite3-wasmfs.wasm)
$(sqlite3-wasmfs.wasm): $(sqlite3-wasmfs.js)
wasmfs: $(sqlite3-wasmfs.js)
all: wasmfs

View File

@ -1,5 +1,5 @@
C Merge\strunk\schanges\sinto\sthe\sindex-expr-opt\sbranch.
D 2022-10-17T16:31:55.281
C Merge\strunk\sfixes\sinto\sthe\sindex-expr-opt\sbranch.
D 2022-10-18T11:28:33.210
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -473,7 +473,8 @@ F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle 0e88c8cfc3719e4b7e74980d9da664c709e68acf863e48386cda376edfd3bfb0
F ext/wasm/GNUmakefile 0fd09868726368d849c2cf03e6ac9884a07d236855c7802a89f0f8a16c034d10
F ext/wasm/GNUmakefile 2fd83d7183bce3f9236fdd2dbe20a4ea37b1d7b26e1a422054ec63008319f065
F ext/wasm/README-dist.txt bc1fb4f90a28ad2ed0e555a637f393b9249d8d928ac509dad6293b7cae628ea4
F ext/wasm/README.md 1e5b28158b74ab3ffc9d54fcbc020f0bbeb82c2ff8bbd904214c86c70e8a3066
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 89983a8d122c35a90c65ec667844b95a78bcd04f3198a99c1e0c8368c1a0b03a
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
@ -503,7 +504,8 @@ F ext/wasm/demo-123.html 7c239c9951d1b113f9f532969ac039294cf1dcfee2b3ae0a2c1ed2b
F ext/wasm/demo-123.js e0cbeb3495e14103763d5c49794a24d67cf3d78e0ed5b82843be70c0c2ee4b3b
F ext/wasm/demo-kvvfs1.html 7d4f28873de67f51ac18c584b7d920825139866a96049a49c424d6f5a0ea5e7f
F ext/wasm/demo-kvvfs1.js 105596bd2ccd0b1deb5fde8e99b536e8242d4bb5932fac0c8403ff3a6bc547e8
F ext/wasm/fiddle.make 3f4efd62bc2a9c883bfcea52ae2755114a62d444d6d042df287f4aef301d6c6c
F ext/wasm/dist.make d7076e90f04396f1cc54cb41ee106451496179c10d54bbdebb65ae7b1ae12211
F ext/wasm/fiddle.make b609dfde299b4523d7123b7e0cecaa1a0aff0dd984e62cea653aae91f5063c90
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
F ext/wasm/fiddle/fiddle-worker.js 531859a471924a0ea48afa218e6877f0c164ca324d51e15843ed6ecc1c65c7ee
F ext/wasm/fiddle/fiddle.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2
@ -533,8 +535,8 @@ F ext/wasm/testing-worker1-promiser.js bd788e33c1807e0a6dda9c9a9d784bd3350ca49c9
F ext/wasm/testing1.html 50575755e43232dbe4c2f97c9086b3118eb91ec2ee1fae931e6d7669fb17fcae
F ext/wasm/testing2.html a66951c38137ff1d687df79466351f3c734fa9c6d9cce71d3cf97c291b2167e3
F ext/wasm/testing2.js 88f40ef3cd8201bdadd120a711c36bbf0ce56cc0eab1d5e7debb71fed7822494
F ext/wasm/version-info.c 03c6fb4efefd7c5b14f618b36648e71da741e39059ea5059c39495fdceaed144 w ext/wasm/version-json.c
F ext/wasm/wasmfs.make 3cce1820006196de140f90f2da4b4ea657083fb5bfee7d125be43f7a85748c8f
F ext/wasm/version-info.c 5fa356d38859d71a0369b5c37e1935def7413fcc8a4e349a39d9052c1d0479f4
F ext/wasm/wasmfs.make 9a51480d0a5ef33dd1c06c305379775302b735cb27737c2490ea449575ca5e25
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
@ -695,7 +697,7 @@ F src/vdbe.c 0c7cb1b934ad8611e14e7efaf2c3a95df7dd3f7964d63ea07fef42a23df86131
F src/vdbe.h 58675f47dcf3105bab182c3ad3726efd60ffd003e954386904ac9107d0d2b743
F src/vdbeInt.h 17b7461ffcf9ee760d1341731715a419f6b8c763089a7ece25c2e8098d702b3f
F src/vdbeapi.c 1e8713d0b653acb43cd1bdf579c40e005c4844ea90f414f065946a83db3c27fb
F src/vdbeaux.c 6946c7082a0d61566794bd35253f0ccd013a9dba3f33488a23fd5360a5744e5b
F src/vdbeaux.c fe4e8d270582d5eb7c4d44222b74584d8e47c5e6ba90849416115ce5eb47d5a4
F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd
F src/vdbemem.c 6cfed43758d57b6e3b99d9cdedfeccd86e45a07e427b22d8487cbdbebb6c522a
F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35
@ -2033,8 +2035,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 8f460b3b15bf4b88a224907d2f83e4ed6bf84d6b3f480008a1b187ea49c6ce1d b6413a6dff8ac9b7088b1381afbbbf799e376455d11786530cc5fc825747ab53
R b72777913e19bbbdbff94b30aa294e78
P a1485ce6c8374135290eb0a1e4eb4e225497ad7096847a4e2377c9c054946ca7 4fb77e96fa89a23a9365320c4190834edd6c09cfaf1ca30b34ce19b747ebbec0
R 06e54729ebe8b28a1f23ad9b3ac13bf6
U drh
Z f862d5509bce1d889210db6919a1c731
Z 583beba47cad975fdaa8bbe5cfc4a890
# Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
a1485ce6c8374135290eb0a1e4eb4e225497ad7096847a4e2377c9c054946ca7
c7b9cc645b394a1b638a9a13ca83d321215aaa78d69ca70c6baa0ee692ed21bf

View File

@ -4691,7 +4691,7 @@ int sqlite3VdbeRecordCompareWithSkip(
/* RHS is null */
else{
serial_type = aKey1[idx1];
rc = (serial_type!=0);
rc = (serial_type!=0 && serial_type!=10);
}
if( rc!=0 ){