download use sqlite rows

This commit is contained in:
Tienson Qin
2026-01-08 17:37:28 +08:00
parent dcff007590
commit e89fdb92b6
3 changed files with 82 additions and 9 deletions

View File

@@ -69,6 +69,7 @@
(defonce *client-ops-conns worker-state/*client-ops-conns)
(defonce *opfs-pools worker-state/*opfs-pools)
(defonce *publishing? (atom false))
(defonce *worker-sync-import-dbs (atom {}))
(defn- check-worker-scope!
[]
@@ -122,6 +123,27 @@
(.exec tx #js {:sql "INSERT INTO kvs (addr, content, addresses) values ($addr, $content, $addresses) on conflict(addr) do update set content = $content, addresses = $addresses"
:bind item})))))
(defn- rows->sqlite-binds
[rows]
(mapv (fn [{:keys [addr content addresses]}]
#js {:$addr addr
:$content content
:$addresses addresses})
rows))
(defn- ensure-worker-sync-import-db!
[repo reset?]
(p/let [^js pool (<get-opfs-pool repo)
^js db (or (get @*worker-sync-import-dbs repo)
(let [^js db (new (.-OpfsSAHPoolDb pool) repo-path)]
(swap! *worker-sync-import-dbs assoc repo db)
db))]
(enable-sqlite-wal-mode! db)
(common-sqlite/create-kvs-table! db)
(when reset?
(.exec db "delete from kvs"))
db))
(defn restore-data-from-addr
"Update sqlite-cli/restore-data-from-addr when making changes"
[db addr]
@@ -581,6 +603,25 @@
(reset-db-from-datoms! repo datoms)
nil)
(def-thread-api :thread-api/worker-sync-import-kvs-rows
[repo rows reset?]
(p/let [_ (when reset?
(close-db! repo))
db (ensure-worker-sync-import-db! repo reset?)]
(when (seq rows)
(upsert-addr-content! db (rows->sqlite-binds rows)))
nil))
(def-thread-api :thread-api/worker-sync-finalize-kvs-import
[repo]
(when-let [^js db (get @*worker-sync-import-dbs repo)]
(.close db)
(swap! *worker-sync-import-dbs dissoc repo))
(p/do!
((@thread-api/*thread-apis :thread-api/create-or-open-db) repo {:close-other-db? false})
((@thread-api/*thread-apis :thread-api/export-db) repo)
(shared-service/broadcast-to-clients! :add-repo {:repo repo})))
(def-thread-api :thread-api/unsafe-unlink-db
[repo]
(p/let [pool (<get-opfs-pool repo)