absurd-sql
absurd-sql copied to clipboard
IDB name is undefined
I am using the latest version of the absurd-sql + your sql.js (0.0.53). When I do this:
main:
function init() {
let worker = new Worker(
new URL('./SqlNotesRepository.worker.js', import.meta.url),
{
name: 'sql-notes-worker',
type: 'module',
},
);
// This is only required because Safari doesn't support nested
// workers. This installs a handler that will proxy creating web
// workers through the main thread
initBackend(worker);
}
init()
worker:
import initSqlJs from '@jlongster/sql.js';
import { SQLiteFS } from 'absurd-sql';
import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend';
const run = async () => {
let SQL = await initSqlJs({
locateFile: (file: string) => `/sqljs/${file}`,
});
let sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend());
SQL.register_for_idb(sqlFS);
SQL.FS.mkdir('/blocked');
SQL.FS.mount(sqlFS, {}, '/blocked');
const db = new SQL.Database(`/blocked/123.sqlite`, {
filename: true,
});
db.exec(`
PRAGMA journal_mode=MEMORY;
`);
let sqlstr =
"CREATE TABLE IF NOT EXISTS hello (a int, b char); \
INSERT INTO hello VALUES (0, 'hello'); \
INSERT INTO hello VALUES (1, 'world');";
db.run(sqlstr); // Run the query without returning anything
};
run();
The new IndexedDB DB got created, but its name is undefined
But in your example site, IndexedDB DBs have the correct names 🤔
Also, on page reload I am getting this message on insert:
And I think it somehow may relate to the issue 🤔 The interesting is that when it overwrites(I guess) all blocks from the previous site open — it starts working well.
Btw, great lib 👍 I was making a note-taking app, and I was on stage where I was needed to introduce a full-text search, and in IndexedDB it is a headache. Now I am going to rewrite the persistence layer to absurd-sql, and I am super excited to get overall speed improvements with a text search for free 🙂 And it also gives me the easy way to improve the speed when I will be porting the app to the phones/desktops — ionic/cordova/electron has wrappers for the native SQLite.
Thanks for the issues! You are using the fallback mode, which has the limitation that only one tab can write the to db at a time. It falls back to this mode when SharedArrayBuffer
isn't available. Unfortunately, for browsers to make it available you need to make sure you site is served with these headers:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
If you are using webpack dev mode, check out the webpack config in the examples
folder and you'll see how to get it to serve those headers.
The undefined name might be a bug in the fallback mode. I'll check it out!
@jlongster ooops, you were absolutely right! All issues are gone 🙂 Thank you so much for the help and the fast reply
But it seems that a bug in the fallback mode is still present though
Re-opening to track the fallback mode bug
Some investigations. At https://priceless-keller-d097e5.netlify.app on safari IDB creates correctly:
But on https://app-next.actualbudget.com/subscribe the IDB is undefined too:
I also cloned the current repo and started the bench example, it shows the DB name is undefined too(but I see the message SharedArrayBuffer is not available in your browser. Falling back..
)
@jlongster do you know on which version of absurd-sql priceless-keller-d097e5.netlify.app
is running?
Nevermind, I found that this commit https://github.com/jlongster/absurd-sql/commit/33f9898d8b1d297242fb4a7f780ac3a2062d4a58 breaks safari support