我有一个为 SQLite 数据库提供服务的 API 端点。我想在网络应用程序中加载此数据库,然后查询它。不需要坚持,因为我不写它。
创建一个新的数据库效果很好:
new sqlite3.oo1.DB();
但是,构造函数和之前的任何其他函数都不接受现有数据库作为参数。构造函数可以将文件名作为参数,但这似乎不起作用。它甚至没有触发 HTTP 请求就失败了。
sql.js 有一个这样的构造函数:
new SQL.Database(new Uint8Array(buffer));
这可行,但我不能使用 sql.js,因为它没有 FTS5。
如何加载现有数据库?这不是很容易吗?
我让它工作了:我自己编译了 sql.js,添加了 FTS5 支持。
这很容易。只需将 FTS5 选项添加到 Makefile:
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,7 @@ SQLITE_COMPILATION_FLAGS = \
-DSQLITE_DISABLE_LFS \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS \
+ -DSQLITE_ENABLE_FTS5 \
-DSQLITE_THREADSAFE=0 \
-DSQLITE_ENABLE_NORMALIZE
然后
make
。在我的系统上,我遇到了 sha3sum 不存在和 emscripten 尝试写入只读文件系统的一些问题,但这两个问题都可以轻松解决。生成的wasm和js文件可以在之后的dist/
目录中找到。
存储库上有一个默认启用它的提案,但它似乎已停滞:sql-js/sql.js#199