cds-dbs icon indicating copy to clipboard operation
cds-dbs copied to clipboard

feat: Add `sql.js` fallback for `sqlite` in `wasm`

Open BobdenOs opened this issue 2 months ago • 1 comments

This PR adds support for another SQLite driver sql.js is a browser orientated driver which compiles SQLite to wasm.

Enabling the possibility to run cds with @cap-js/sqlite in more environments.

For example better-sqlite3 cannot be loaded into the default npm promoted online environment runkit: https://runkit.com/bobdenos/cds-test

Error: Could not locate the bindings file. Tried:
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/build/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/build/Debug/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/build/Release/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/out/Debug/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/Debug/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/out/Release/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/Release/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/build/default/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/compiled/18.11.0/linux/x64/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node
 → /app/available_modules/1713909839000/@cap-js/sqlite/node_modules/better-sqlite3/lib/binding/node-v108-linux-x64/better_sqlite3.node

There are some limitations with sql.js when comparing to better-sqlite3. Which is mostly that it uses more memory and is around 50% slower for running the @cap-js/sqlite tests. Where better-sqlite3 takes ~10 seconds to run all tests. It takes sql.js ~14 seconds, but all current tests are green. Which should be good enough for experimentation scenarios.

BobdenOs avatar Apr 23 '24 22:04 BobdenOs