conn.cljs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. (ns frontend.db.conn
  2. "Contains db connections."
  3. (:require [clojure.string :as string]
  4. [frontend.util :as util]
  5. [frontend.mobile.util :as mobile-util]
  6. [frontend.state :as state]
  7. [frontend.config :as config]
  8. [frontend.util.text :as text-util]
  9. [logseq.graph-parser.text :as text]
  10. [logseq.db :as ldb]
  11. [logseq.common.util :as common-util]
  12. [logseq.db.sqlite.util :as sqlite-util]))
  13. (defonce conns (atom {}))
  14. (defn get-repo-path
  15. [url]
  16. (assert (string? url) (str "url is not a string: " (type url)))
  17. url)
  18. (defn get-repo-name
  19. [repo-url]
  20. (cond
  21. (mobile-util/native-platform?)
  22. (text-util/get-graph-name-from-path repo-url)
  23. (config/local-file-based-graph? repo-url)
  24. (config/get-local-dir repo-url)
  25. :else
  26. (get-repo-path repo-url)))
  27. (defn get-short-repo-name
  28. "repo-name: from get-repo-name. Dir/Name => Name"
  29. [repo-name]
  30. (let [repo-name' (cond
  31. (util/electron?)
  32. (text/get-file-basename repo-name)
  33. (mobile-util/native-platform?)
  34. (common-util/safe-decode-uri-component (text/get-file-basename repo-name))
  35. :else
  36. repo-name)]
  37. (if (config/db-based-graph? repo-name')
  38. (string/replace-first repo-name' config/db-version-prefix "")
  39. repo-name')))
  40. (defn datascript-db
  41. [repo]
  42. (when repo
  43. (let [path (get-repo-path repo)]
  44. (str (if (util/electron?) "" config/idb-db-prefix)
  45. path))))
  46. (def get-schema sqlite-util/get-schema)
  47. (defn get-db
  48. ([]
  49. (get-db (state/get-current-repo) true))
  50. ([repo-or-deref?]
  51. (if (boolean? repo-or-deref?)
  52. (get-db (state/get-current-repo) repo-or-deref?)
  53. (get-db repo-or-deref? true)))
  54. ([repo deref?]
  55. (let [repo (if repo repo (state/get-current-repo))]
  56. (when-let [conn (get @conns (datascript-db repo))]
  57. (if deref?
  58. @conn
  59. conn)))))
  60. (defn remove-conn!
  61. [repo]
  62. (swap! conns dissoc (datascript-db repo)))
  63. (defn kv
  64. [key value & {:keys [id]}]
  65. {:db/id (or id -1)
  66. :db/ident key
  67. key value})
  68. (if util/node-test?
  69. (defn transact!
  70. ([repo tx-data]
  71. (transact! repo tx-data nil))
  72. ([repo tx-data tx-meta]
  73. (ldb/transact! (get-db repo false) tx-data tx-meta)))
  74. (defn transact!
  75. ([repo tx-data]
  76. (transact! repo tx-data nil))
  77. ([repo tx-data tx-meta]
  78. (ldb/transact! repo tx-data tx-meta))))
  79. (defn start!
  80. ([repo]
  81. (start! repo {}))
  82. ([repo {:keys [listen-handler create-default-pages?]
  83. :or {create-default-pages? false}}]
  84. (let [db-name (datascript-db repo)
  85. db-conn (ldb/start-conn :schema (get-schema repo)
  86. :create-default-pages? create-default-pages?)]
  87. (swap! conns assoc db-name db-conn)
  88. (when listen-handler
  89. (listen-handler repo)))))
  90. (defn destroy-all!
  91. []
  92. (reset! conns {}))