Browse Source

Merge branch 'feat/db' into feat/capacitor-new

charlie 6 months ago
parent
commit
dc8b1ebe71

+ 1 - 1
deps.edn

@@ -5,7 +5,7 @@
                                          :sha     "5d672bf84ed944414b9f61eeb83808ead7be9127"}
 
   datascript/datascript                 {:git/url "https://github.com/logseq/datascript" ;; fork
-                                         :sha     "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"}
+                                         :sha     "4b1f15f05a6b4a718a62c247956206480e361ea6"}
 
   datascript-transit/datascript-transit {:mvn/version "0.3.0"}
   borkdude/rewrite-edn                  {:mvn/version "0.4.7"}

+ 1 - 1
deps/db/deps.edn

@@ -1,7 +1,7 @@
 {:deps
  ;; These deps are kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
  {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
-                         :sha     "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"}
+                         :sha     "4b1f15f05a6b4a718a62c247956206480e361ea6"}
   datascript-transit/datascript-transit {:mvn/version "0.3.0"
                                          :exclusions [datascript/datascript]}
   cljs-bean/cljs-bean         {:mvn/version "1.5.0"}

+ 8 - 8
deps/db/src/logseq/db/common/sqlite.cljs

@@ -285,14 +285,14 @@
 
 (defn get-recent-updated-pages
   [db]
-  (->> (d/datoms db :avet :block/updated-at)
-       vec
-       rseq
-       (keep (fn [datom]
-               (let [e (d/entity db (:e datom))]
-                 (when (and (common-entity-util/page? e) (not (entity-util/hidden? e)))
-                   e))))
-       (take 30)))
+  (some->>
+   (d/datoms db :avet :block/updated-at)
+   rseq
+   (keep (fn [datom]
+           (let [e (d/entity db (:e datom))]
+             (when (and (common-entity-util/page? e) (not (entity-util/hidden? e)))
+               e))))
+   (take 30)))
 
 (defn get-initial-data
   "Returns current database schema and initial data.

+ 1 - 1
deps/db/src/logseq/db/frontend/class.cljs

@@ -110,7 +110,7 @@
 (def private-tags
   "Built-in classes that are private and should not be used by a user directly.
   These used to be in block/type"
-  (set/union internal-tags
+  (set/union (disj internal-tags :logseq.class/Root)
              #{:logseq.class/Journal :logseq.class/Whiteboard}))
 
 (def hidden-tags

+ 1 - 1
deps/db/src/logseq/db/frontend/schema.cljs

@@ -37,7 +37,7 @@
          (map (juxt :major :minor)
               [(parse-schema-version x) (parse-schema-version y)])))
 
-(def version (parse-schema-version "64.5"))
+(def version (parse-schema-version "64.6"))
 
 (defn major-version
   "Return a number.

+ 1 - 1
deps/outliner/deps.edn

@@ -1,7 +1,7 @@
 {:deps
  ;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
  {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
-                         :sha     "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"}
+                         :sha     "4b1f15f05a6b4a718a62c247956206480e361ea6"}
   logseq/db             {:local/root "../db"}
   logseq/graph-parser   {:local/root "../db"}
   com.cognitect/transit-cljs {:mvn/version "0.8.280"}

+ 1 - 1
src/main/frontend/components/block.cljs

@@ -2365,7 +2365,7 @@
         query (:logseq.property/query block)
         advanced-query? (and query? (= :code (:logseq.property.node/display-type query)))
         show-query? (and *show-query? @*show-query?)]
-    [:div
+    [:div.w-full
      {:class (if (and query? blank?)
                "inline-flex"
                "inline")

+ 11 - 8
src/main/frontend/components/export.cljs

@@ -103,24 +103,22 @@
           [:div
            [:a.font-medium {:on-click #(export/export-repo-as-zip! current-repo)}
             (t :export-zip)]])
+
         (when db-based?
           [:div
            [:a.font-medium {:on-click #(db-export-handler/export-repo-as-db-edn! current-repo)}
             (t :export-db-edn)]])
-        (when db-based?
+
+        (when-not (mobile-util/native-platform?)
           [:div
-           [:a.font-medium {:on-click #(export/export-repo-as-debug-transit! current-repo)}
-            "Export debug transit file"]
-           [:p.text-sm.opacity-70 "Any sensitive data will be removed in the exported transit file, you can send it to us for debugging."]])
+           [:a.font-medium {:on-click #(export-text/export-repo-as-markdown! current-repo)}
+            (t :export-markdown)]])
 
         (when (util/electron?)
           [:div
            [:a.font-medium {:on-click #(export/download-repo-as-html! current-repo)}
             (t :export-public-pages)]])
-        (when-not (or (mobile-util/native-platform?) db-based?)
-          [:div
-           [:a.font-medium {:on-click #(export-text/export-repo-as-markdown! current-repo)}
-            (t :export-markdown)]])
+
         (when-not (or (mobile-util/native-platform?) db-based?)
           [:div
            [:a.font-medium {:on-click #(export-opml/export-repo-as-opml! current-repo)}
@@ -129,6 +127,11 @@
           [:div
            [:a.font-medium {:on-click #(export/export-repo-as-roam-json! current-repo)}
             (t :export-roam-json)]])
+        (when db-based?
+          [:div
+           [:a.font-medium {:on-click #(export/export-repo-as-debug-transit! current-repo)}
+            "Export debug transit file"]
+           [:p.text-sm.opacity-70.mb-0 "Any sensitive data will be removed in the exported transit file, you can send it to us for debugging."]])
 
         (when (and db-based? util/web-platform? (utils/nfsSupported))
           [:div

+ 4 - 3
src/main/frontend/handler/export/common.cljs

@@ -195,12 +195,13 @@
   (state/<invoke-db-worker :thread-api/export-get-debug-datoms repo))
 
 (defn <get-all-page->content
-  [repo]
-  (state/<invoke-db-worker :thread-api/export-get-all-page->content repo))
+  [repo options]
+  (state/<invoke-db-worker :thread-api/export-get-all-page->content repo options))
 
 (defn <get-file-contents
   [repo suffix]
-  (p/let [page->content (<get-all-page->content repo)]
+  (p/let [page->content (<get-all-page->content repo
+                                                {:export-bullet-indentation (state/get-export-bullet-indentation)})]
     (clojure.core/map (fn [[page-title content]]
                         {:path (str page-title "." suffix)
                          :content content

+ 3 - 4
src/main/frontend/handler/export/text.cljs

@@ -1,6 +1,5 @@
 (ns frontend.handler.export.text
   "export blocks/pages as text"
-  (:refer-clojure :exclude [map filter mapcat concat remove newline])
   (:require [clojure.string :as string]
             [frontend.config :as config]
             [frontend.db :as db]
@@ -545,9 +544,9 @@
 (defn export-repo-as-markdown!
   "TODO: indent-style and remove-options"
   [repo]
-  (p/let [files (util/profile :get-file-content (common/<get-file-contents repo "md"))]
-    (when (seq files)
-      (let [files (export-files-as-markdown files nil)
+  (p/let [files* (util/profile :get-file-content (common/<get-file-contents repo "md"))]
+    (when (seq files*)
+      (let [files (export-files-as-markdown files* nil)
             repo' (if (config/db-based-graph? repo)
                     (string/replace repo config/db-version-prefix "")
                     (path/basename repo))

+ 25 - 1
src/main/frontend/worker/db/migrate.cljs

@@ -661,6 +661,29 @@
            [:db/add (:e view-datom) :logseq.property.view/group-by-property block-page-prop-id])
          list-views)))
 
+(defn- cardinality-one-multiple-values
+  [conn _search-db]
+  (let [db @conn
+        attrs (keep (fn [[k v]]
+                      (when (and (keyword? k)
+                                 (not= :db.cardinality/many (:db/cardinality v))
+                                 (not= :db.cardinality/many (:db/cardinality (d/entity db k)))
+                                 (or (get db-schema/schema k)
+                                     (ldb/property? (d/entity db k))))
+                        k)) (:schema db))
+        block-ids (map :e (d/datoms db :avet :block/uuid))]
+    (->>
+     (mapcat
+      (fn [id]
+        (mapcat (fn [attr]
+                  (let [datoms (d/datoms db :eavt id attr)]
+                    (when (> (count datoms) 1)
+                      (map (fn [datom]
+                             [:db/retract (:e datom) (:a datom) (:v datom)])
+                           (butlast datoms))))) attrs))
+      block-ids)
+     (remove nil?))))
+
 (def ^:large-vars/cleanup-todo schema-version->updates
   "A vec of tuples defining datascript migrations. Each tuple consists of the
    schema version integer and a migration map. A migration map can have keys of :properties, :classes
@@ -769,7 +792,8 @@
    ["64.3" {:properties [:logseq.property/used-template :logseq.property/template-applied-to]
             :classes [:logseq.class/Template]}]
    ["64.4" {:properties [:logseq.property/created-by-ref]}]
-   ["64.5" {:fix add-group-by-property-for-list-views}]])
+   ["64.5" {:fix add-group-by-property-for-list-views}]
+   ["64.6" {:fix cardinality-one-multiple-values}]])
 
 (let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first)
                                      schema-version->updates)))

+ 2 - 2
src/main/frontend/worker/db_worker.cljs

@@ -731,9 +731,9 @@
     (worker-export/get-all-pages repo @conn)))
 
 (def-thread-api :thread-api/export-get-all-page->content
-  [repo]
+  [repo options]
   (when-let [conn (worker-state/get-datascript-conn repo)]
-    (worker-export/get-all-page->content repo @conn)))
+    (worker-export/get-all-page->content repo @conn options)))
 
 (def-thread-api :thread-api/undo
   [repo _page-block-uuid-str]

+ 13 - 6
src/main/frontend/worker/export.cljs

@@ -6,7 +6,8 @@
             [logseq.db :as ldb]
             [logseq.db.sqlite.util :as sqlite-util]
             [logseq.graph-parser.property :as gp-property]
-            [logseq.outliner.tree :as otree]))
+            [logseq.outliner.tree :as otree]
+            [logseq.db.sqlite.create-graph :as sqlite-create-graph]))
 
 (defn- safe-keywordize
   [block]
@@ -45,12 +46,18 @@
                 (assoc page' :block/children children))))))
 
 (defn get-all-page->content
-  [repo db]
-  (->> (d/datoms db :avet :block/name)
-       (map (fn [d]
-              (let [e (d/entity db (:e d))]
+  [repo db options]
+  (let [filter-fn (if (ldb/db-based-graph? db)
+                    (fn [ent]
+                      (or (not (:logseq.property/built-in? ent))
+                          (contains? sqlite-create-graph/built-in-pages-names (:block/title ent))))
+                    (constantly true))]
+    (->> (d/datoms db :avet :block/name)
+         (map #(d/entity db (:e %)))
+         (filter filter-fn)
+         (map (fn [e]
                 [(:block/title e)
-                 (common-file/block->content repo db (:block/uuid e) {} {})])))))
+                 (common-file/block->content repo db (:block/uuid e) {} options)])))))
 
 (defn get-debug-datoms
   [conn ^Object db]