| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-04-29 19:13:59 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-04-29 19:16:36 UTC |
| parent | 4c5f33b0dff8e753913f925de9a55b2a5cc32c1c |
| borogove/persistence/SqliteDriver.js.hx | +11 | -8 |
| optional-sqlite.awk | +1 | -1 |
diff --git a/borogove/persistence/SqliteDriver.js.hx b/borogove/persistence/SqliteDriver.js.hx index 0c760f9..cedf394 100644 --- a/borogove/persistence/SqliteDriver.js.hx +++ b/borogove/persistence/SqliteDriver.js.hx @@ -24,8 +24,11 @@ extern class Worker1 { class SqliteDriver { private var sqlite: Promiser; private var dbId: String; + private final ready: Promise<Bool>; + private var setReady: (Bool)->Void; public function new(dbfile: String, migrate: (Array<String>->Promise<haxe.iterators.ArrayIterator<Dynamic>>)->Promise<Any>) { + ready = new Promise((resolve, reject) -> setReady = resolve); Worker1.v2({ worker: () -> new js.html.Worker( untyped new js.html.URL("sqlite-worker1.mjs", js.Syntax.code("import.meta.url")), @@ -36,17 +39,13 @@ class SqliteDriver { return sqlite("open", { filename: dbfile, vfs: "opfs-sahpool" }); }).then(openResult -> { dbId = openResult.dbId; - return migrate((sql) -> this.execMany(sql.map(q -> { sql: q, params: [] }))); + return migrate((sql) -> this.execute(sql.map(q -> { sql: q, params: [] }))); + }).then(_ -> { + setReady(true); }); } - public function execMany(qs: Array<{ sql: String, ?params: Array<Dynamic> }>): Promise<haxe.iterators.ArrayIterator<Dynamic>> { - if (sqlite == null || dbId == null) { - // Not ready yet - return new Promise((resolve, reject) -> haxe.Timer.delay(() -> resolve(null), 100)) - .then(_ -> execMany(qs)); - } - + private function execute(qs: Array<{ sql: String, ?params: Array<Dynamic> }>): Promise<haxe.iterators.ArrayIterator<Dynamic>> { final first = qs.shift(); final sql = qs.map(q -> Sqlite.prepare(q) + ";"); final items: Array<Dynamic> = []; @@ -68,6 +67,10 @@ class SqliteDriver { }).then(_ -> allDone).then(_ -> items.iterator()); } + public function execMany(qs: Array<{ sql: String, ?params: Array<Dynamic> }>): Promise<haxe.iterators.ArrayIterator<Dynamic>> { + return ready.then(_ -> execute(qs)); + } + public function exec(sql: String, ?params: Array<Dynamic>) { return execMany([{ sql: sql, params: params }]); } diff --git a/optional-sqlite.awk b/optional-sqlite.awk index 9d8e763..2399d8b 100644 --- a/optional-sqlite.awk +++ b/optional-sqlite.awk @@ -20,7 +20,7 @@ BEGIN { } /borogove_persistence_SqliteDriver.__name__ = "borogove\.persistence\.SqliteDriver";/ { - if (skipping) extra = 6 + if (skipping) extra = 8 } /^export \{ borogove_persistence_Sqlite \};/ {