git » sdk » commit 1aeaa66

Only allow queries after migrations are done

author Stephen Paul Weber
2026-04-29 19:13:59 UTC
committer Stephen Paul Weber
2026-04-29 19:16:36 UTC
parent 4c5f33b0dff8e753913f925de9a55b2a5cc32c1c

Only allow queries after migrations are done

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 \};/ {