diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index cf3f46b..df6e725 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -55,7 +55,7 @@ jobs: if: matrix.os == 'macos-latest' - name: Coverage report - uses: ncruces/go-coverage-report@main + uses: ncruces/go-coverage-report@v0 with: chart: 'true' amend: 'true' diff --git a/embed/README.md b/embed/README.md index 8003043..ab23672 100644 --- a/embed/README.md +++ b/embed/README.md @@ -19,4 +19,5 @@ The following optional features are compiled in: See the [configuration options](../sqlite3/sqlite_cfg.h). -Built using [`zig`](https://ziglang.org/) version 0.10.1. \ No newline at end of file +Built using [`wasi-sdk`](https://github.com/WebAssembly/wasi-sdk), +and [`binaryen`](https://github.com/WebAssembly/binaryen). \ No newline at end of file diff --git a/embed/build.sh b/embed/build.sh index a099c31..139b32d 100755 --- a/embed/build.sh +++ b/embed/build.sh @@ -1,18 +1,28 @@ #!/usr/bin/env bash -set -eo pipefail +set -euo pipefail cd -P -- "$(dirname -- "$0")" -zig cc --target=wasm32-wasi -flto -g0 -O2 \ - -o sqlite3.wasm ../sqlite3/main.c \ - -I../sqlite3/ \ +ROOT=../ +BINARYEN="$ROOT/tools/binaryen-version_112/bin" +WASI_SDK="$ROOT/tools/wasi-sdk-20.0/bin" + +"$WASI_SDK/clang" --target=wasm32-wasi -flto -g0 -O2 \ + -o sqlite3.wasm "$ROOT/sqlite3/main.c" \ + -I"$ROOT/sqlite3" \ + -mexec-model=reactor \ -mmutable-globals \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ - -mexec-model=reactor \ + -Wl,--initial-memory=327680 \ + -Wl,--stack-first \ + -Wl,--import-undefined \ -D_HAVE_SQLITE_CONFIG_H \ $(awk '{print "-Wl,--export="$0}' exports.txt) trap 'rm -f sqlite3.tmp' EXIT -wasm-ctor-eval -g -c _initialize sqlite3.wasm -o sqlite3.tmp -wasm-opt -g -O2 sqlite3.tmp -o sqlite3.wasm \ No newline at end of file +"$BINARYEN/wasm-ctor-eval" -g -c _initialize sqlite3.wasm -o sqlite3.tmp +"$BINARYEN/wasm-opt" -g -O2 sqlite3.tmp -o sqlite3.wasm \ + --enable-multivalue --enable-mutable-globals \ + --enable-bulk-memory --enable-reference-types \ + --enable-nontrapping-float-to-int --enable-sign-ext \ No newline at end of file diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index 6c63d81..558de5b 100755 Binary files a/embed/sqlite3.wasm and b/embed/sqlite3.wasm differ diff --git a/internal/vfs/tests/mptest/testdata/build.sh b/internal/vfs/tests/mptest/testdata/build.sh index b942ddb..d039de4 100755 --- a/internal/vfs/tests/mptest/testdata/build.sh +++ b/internal/vfs/tests/mptest/testdata/build.sh @@ -1,17 +1,29 @@ #!/usr/bin/env bash -set -eo pipefail +set -euo pipefail cd -P -- "$(dirname -- "$0")" -zig cc --target=wasm32-wasi -flto -g0 -O2 \ +ROOT=../../../../../ +BINARYEN="$ROOT/tools/binaryen-version_112/bin" +WASI_SDK="$ROOT/tools/wasi-sdk-20.0/bin" + +"$WASI_SDK/clang" --target=wasm32-wasi -flto -g0 -O2 \ -o mptest.wasm main.c \ - -I../../../../../sqlite3/ \ + -I"$ROOT/sqlite3" \ -mmutable-globals \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ + -Wl,--stack-first \ + -Wl,--import-undefined \ -D_HAVE_SQLITE_CONFIG_H \ -DSQLITE_DEFAULT_SYNCHRONOUS=0 \ -DSQLITE_DEFAULT_LOCKING_MODE=0 \ -DHAVE_USLEEP -DSQLITE_NO_SYNC \ -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ - -D_WASI_EMULATED_GETPID -lwasi-emulated-getpid \ No newline at end of file + -D_WASI_EMULATED_GETPID -lwasi-emulated-getpid + +"$BINARYEN/wasm-opt" -g -O2 mptest.wasm -o mptest.tmp \ + --enable-multivalue --enable-mutable-globals \ + --enable-bulk-memory --enable-reference-types \ + --enable-nontrapping-float-to-int --enable-sign-ext +mv mptest.tmp mptest.wasm \ No newline at end of file diff --git a/internal/vfs/tests/mptest/testdata/main.c b/internal/vfs/tests/mptest/testdata/main.c index 27239ab..60485e8 100644 --- a/internal/vfs/tests/mptest/testdata/main.c +++ b/internal/vfs/tests/mptest/testdata/main.c @@ -4,7 +4,6 @@ #include "sqlite3.c" // #include "os.c" -#include "qsort.c" sqlite3_destructor_type malloc_destructor = &free; size_t sqlite3_interrupt_offset = offsetof(sqlite3, u1.isInterrupted); diff --git a/internal/vfs/tests/mptest/testdata/mptest.wasm b/internal/vfs/tests/mptest/testdata/mptest.wasm old mode 100755 new mode 100644 index f99ea0a..25ad9c8 --- a/internal/vfs/tests/mptest/testdata/mptest.wasm +++ b/internal/vfs/tests/mptest/testdata/mptest.wasm @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21efc4fb06ac7a3316634f438c51b66c93b1e75b70a850eb3acd6ff8c1c64b3d -size 1630624 +oid sha256:37ceeed293b9f09e9770b40eda3f625447f5a3a74208709886d4411d12f93414 +size 1486113 diff --git a/internal/vfs/tests/speedtest1/testdata/build.sh b/internal/vfs/tests/speedtest1/testdata/build.sh index 94e0a72..f878664 100755 --- a/internal/vfs/tests/speedtest1/testdata/build.sh +++ b/internal/vfs/tests/speedtest1/testdata/build.sh @@ -1,12 +1,24 @@ #!/usr/bin/env bash -set -eo pipefail +set -euo pipefail cd -P -- "$(dirname -- "$0")" -zig cc --target=wasm32-wasi -flto -g0 -O2 \ - -o speedtest1.wasm main.c \ - -I../../../../../sqlite3/ \ +ROOT=../../../../../ +BINARYEN="$ROOT/tools/binaryen-version_112/bin" +WASI_SDK="$ROOT/tools/wasi-sdk-20.0/bin" + +"$WASI_SDK/clang" --target=wasm32-wasi -flto -g0 -O2 \ + -o speedtest1.wasm main.c \ + -I"$ROOT/sqlite3" \ -mmutable-globals \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ - -D_HAVE_SQLITE_CONFIG_H \ No newline at end of file + -Wl,--stack-first \ + -Wl,--import-undefined \ + -D_HAVE_SQLITE_CONFIG_H + +"$BINARYEN/wasm-opt" -g -O2 speedtest1.wasm -o speedtest1.tmp \ + --enable-multivalue --enable-mutable-globals \ + --enable-bulk-memory --enable-reference-types \ + --enable-nontrapping-float-to-int --enable-sign-ext +mv speedtest1.tmp speedtest1.wasm \ No newline at end of file diff --git a/internal/vfs/tests/speedtest1/testdata/main.c b/internal/vfs/tests/speedtest1/testdata/main.c index 833dd82..9bd0d86 100644 --- a/internal/vfs/tests/speedtest1/testdata/main.c +++ b/internal/vfs/tests/speedtest1/testdata/main.c @@ -4,7 +4,6 @@ #include "sqlite3.c" // #include "os.c" -#include "qsort.c" sqlite3_destructor_type malloc_destructor = &free; size_t sqlite3_interrupt_offset = offsetof(sqlite3, u1.isInterrupted); diff --git a/internal/vfs/tests/speedtest1/testdata/speedtest1.wasm b/internal/vfs/tests/speedtest1/testdata/speedtest1.wasm old mode 100755 new mode 100644 index a29d3ae..9dc2c98 --- a/internal/vfs/tests/speedtest1/testdata/speedtest1.wasm +++ b/internal/vfs/tests/speedtest1/testdata/speedtest1.wasm @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3ce4ed200234ac50126a5562fd95a84843898e73e0724687153f9ae458b8a3b -size 1675943 +oid sha256:8167119c344a68217b0301e2e8c288f2e75611d296d7822f841b65911da0275c +size 1520569 diff --git a/module_test.go b/module_test.go index de64b12..32a55ea 100644 --- a/module_test.go +++ b/module_test.go @@ -49,14 +49,18 @@ func TestConn_new(t *testing.T) { } defer m.close() - testOOM := func(size uint64) { + t.Run("MaxUint32", func(t *testing.T) { defer func() { _ = recover() }() - m.new(size) + m.new(math.MaxUint32) t.Error("want panic") - } + }) - testOOM(math.MaxUint32) - testOOM(_MAX_ALLOCATION_SIZE) + t.Run("_MAX_ALLOCATION_SIZE", func(t *testing.T) { + defer func() { _ = recover() }() + m.new(_MAX_ALLOCATION_SIZE) + m.new(_MAX_ALLOCATION_SIZE) + t.Error("want panic") + }) } func TestConn_newArena(t *testing.T) { diff --git a/sqlite3/download.sh b/sqlite3/download.sh index 3797447..6106f50 100755 --- a/sqlite3/download.sh +++ b/sqlite3/download.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -set -eo pipefail +set -euo pipefail cd -P -- "$(dirname -- "$0")" @@ -17,7 +17,7 @@ curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/ext/misc/regexp.c curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/ext/misc/series.c" cd ~- -cd ../tests/mptest/testdata/ +cd ../internal/vfs/tests/mptest/testdata/ curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/mptest/mptest.c" curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/mptest/config01.test" curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/mptest/config02.test" @@ -26,6 +26,6 @@ curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/mptest/crash02.su curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/mptest/multiwrite01.test" cd ~- -cd ../tests/speedtest1/testdata/ +cd ../internal/vfs/tests/speedtest1/testdata/ curl -#OL "https://github.com/sqlite/sqlite/raw/version-3.41.2/test/speedtest1.c" cd ~- \ No newline at end of file diff --git a/sqlite3/format.sh b/sqlite3/format.sh index c65cbc6..4f4621d 100755 --- a/sqlite3/format.sh +++ b/sqlite3/format.sh @@ -1,4 +1,6 @@ #!/usr/bin/env bash +set -euo pipefail + cd -P -- "$(dirname -- "$0")" shopt -s extglob diff --git a/sqlite3/main.c b/sqlite3/main.c index a1fa15d..db47536 100644 --- a/sqlite3/main.c +++ b/sqlite3/main.c @@ -4,7 +4,6 @@ #include "sqlite3.c" // #include "os.c" -#include "qsort.c" // #include "ext/base64.c" #include "ext/decimal.c" diff --git a/sqlite3/qsort.c b/sqlite3/qsort.c deleted file mode 100644 index 129af1e..0000000 --- a/sqlite3/qsort.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -void qsort_r(void *, size_t, size_t, - int (*)(const void *, const void *, void *), void *); - -typedef int (*cmpfun)(const void *, const void *); - -static int wrapper_cmp(const void *v1, const void *v2, void *cmp) { - return ((cmpfun)cmp)(v1, v2); -} - -void qsort(void *base, size_t nel, size_t width, cmpfun cmp) { - qsort_r(base, nel, width, wrapper_cmp, cmp); -} \ No newline at end of file