From dc3dc6853df33cfa1a75c5739d57325050b511de Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Wed, 31 May 2023 03:24:21 +0100 Subject: [PATCH] MemoryVFS journal. --- embed/sqlite3.wasm | Bin 1446374 -> 1444471 bytes sqlite3/deserialize.patch | 20 +++++++++++++++ sqlite3/download.sh | 3 +++ sqlite3/sqlite_cfg.h | 16 +++--------- sqlite3/vfs.c | 5 ++-- sqlite3/vfs_find.patch | 11 +++++++++ sqlite3vfs/example_test.go | 2 +- sqlite3vfs/memory.go | 15 ++++++------ sqlite3vfs/tests/mptest/testdata/mptest.wasm | 4 +-- .../tests/speedtest1/testdata/speedtest1.wasm | 4 +-- tests/db_test.go | 2 +- tests/vfs_test.go | 23 +----------------- 12 files changed, 54 insertions(+), 51 deletions(-) create mode 100644 sqlite3/deserialize.patch create mode 100644 sqlite3/vfs_find.patch diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index 70c9aff59f9f9ef44e71840597d125acaa56fa08..dcef8980cd3de1faa9822d02a8e482cbabfa11be 100755 GIT binary patch delta 249986 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 _VIb3 z*ZcdB3o4L*>;pFx%a=doSL0G>Ts}1}&W}{#b+}X^XvpvHn_xpeN3#MV&GuqG!+<^b zBV>>YWXVUECMlLl`*}lLZZ%$;_*hlRF)n>^i8is}H#C9#NURCF(ZuGD zd2KZDgK_|-8AU^>kJvF{T_0d@eF0@?5Y zCUcI+H3xW2JRLc}M*`>EgB(9C8u<+foHiM*{wZH>a!Ac5#g)r7pp)V%ea@R3O{B@E zKIc!c4RZJA{I0kJT@lp#5An?qi_|aFcy9cH--I^!mxwz{