Selaa lähdekoodia

Merge branch 'master' into refactor/page-parent

Tienson Qin 8 kuukautta sitten
vanhempi
sitoutus
3759046885

+ 6 - 0
deps/db/src/logseq/db/frontend/class.cljs

@@ -1,6 +1,7 @@
 (ns logseq.db.frontend.class
   "Class related fns for DB graphs and frontend/datascript usage"
   (:require [clojure.set :as set]
+            [clojure.string :as string]
             [datascript.core :as d]
             [flatland.ordered.map :refer [ordered-map]]
             [logseq.common.defkeywords :refer [defkeywords]]
@@ -153,3 +154,8 @@
   "Determines if keyword is a logseq class"
   [kw]
   (= logseq-class (namespace kw)))
+
+(defn user-class-namespace?
+  "Determines if namespace string is a user class"
+  [s]
+  (string/includes? s ".class"))

+ 0 - 6
deps/db/src/logseq/db/frontend/property.cljs

@@ -623,11 +623,6 @@
   [s]
   (string/includes? s ".property"))
 
-(defn user-class-namespace?
-  "Determines if namespace string is a user class"
-  [s]
-  (string/includes? s ".class"))
-
 (defn internal-property?
   "Determines if ident kw is an internal property. This includes db-attribute properties
    unlike logseq-property? and doesn't include non-property idents unlike internal-ident?"
@@ -644,7 +639,6 @@
     (and k-name
          (or (contains? logseq-property-namespaces k-name)
              (user-property-namespace? k-name)
-             (user-class-namespace? k-name)
              ;; disallow private db-attribute-properties as they cause unwanted refs
              ;; and appear noisily in debugging contexts
              (and (keyword? k) (contains? public-db-attribute-properties k))))))

+ 2 - 1
deps/db/src/logseq/db/sqlite/build.cljs

@@ -66,7 +66,8 @@
 (defn- get-ident [all-idents kw]
   (if (and (qualified-keyword? kw)
            ;; Loosen checks to any property or class for build-existing-tx?
-           (db-property/property? kw))
+           (or (db-property/property? kw)
+               (db-class/user-class-namespace? (namespace kw))))
     kw
     (or (get all-idents kw)
         (throw (ex-info (str "No ident found for " (pr-str kw)) {})))))

+ 0 - 1
deps/db/src/logseq/db/sqlite/util.cljs

@@ -65,7 +65,6 @@
    * :block-uuid - :block/uuid for property"
   ([db-ident prop-schema] (build-new-property db-ident prop-schema {}))
   ([db-ident prop-schema {:keys [title block-uuid ref-type? properties]}]
-   (assert (keyword? db-ident))
    (let [db-ident' (if (qualified-keyword? db-ident)
                      db-ident
                      (db-property/create-user-property-ident-from-name (name db-ident)))

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

@@ -192,11 +192,62 @@
          move-top-parents-to-library
          update-children-parent-and-order)))))
 
+(defn separate-classes-and-properties
+  [conn _sqlite-db]
+  ;; find all properties that're classes, create new properties to separate them
+  ;; from classes.
+  (let [db @conn
+        class-ids (d/q
+                   '[:find [?b ...]
+                     :where
+                     [?b :block/tags ?t1]
+                     [?b :block/tags ?t2]
+                     [?t1 :db/ident :logseq.class/Property]
+                     [?t2 :db/ident :logseq.class/Tag]]
+                   db)]
+    (mapcat
+     (fn [id]
+       (let [class (d/entity db id)
+             ident (:db/ident class)
+             new-property (sqlite-util/build-new-property
+                           (:block/title class)
+                           (select-keys class [:logseq.property/type :db/cardinality])
+                           {:title (:block/title class)
+                            :ref-type? true
+                            :properties (merge
+                                         (select-keys class [:logseq.property/hide? :logseq.property/public?
+                                                             :logseq.property/view-context :logseq.property/ui-position
+                                                             :logseq.property/default-value :logseq.property/hide-empty-value :logseq.property/enable-history?])
+                                         {:logseq.property/classes id})})
+             retract-property-attrs [[:db/retract id :block/tags :logseq.class/Property]
+                                     [:db/retract id :logseq.property/type]
+                                     [:db/retract id :db/cardinality]
+                                     [:db/retract id :db/valueType]
+                                     [:db/retract id :db/index]
+                                     [:db/retract id :logseq.property/classes]
+                                     [:db/retract id :logseq.property/hide?]
+                                     [:db/retract id :logseq.property/public?]
+                                     [:db/retract id :logseq.property/view-context]
+                                     [:db/retract id :logseq.property/ui-position]
+                                     [:db/retract id :logseq.property/default-value]
+                                     [:db/retract id :logseq.property/hide-empty-value]
+                                     [:db/retract id :logseq.property/enable-history?]]
+             datoms (d/datoms db :avet ident)]
+         (concat [new-property]
+                 retract-property-attrs
+                 (mapcat
+                  (fn [d]
+                    [[:db/retract (:e d) ident (:v d)]
+                     [:db/add (:e d) (:db/ident new-property) (:v d)]])
+                  datoms))))
+     class-ids)))
+
 (def 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
    and :fix."
-  [["65.1" {:fix fix-rename-parent-to-extends}]])
+  [["65.0" {:fix separate-classes-and-properties}]
+   ["65.1" {:fix fix-rename-parent-to-extends}]])
 
 (let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first)
                                      schema-version->updates)))]

+ 3 - 1
src/main/logseq/api/block.cljs

@@ -147,7 +147,9 @@
               repo (state/get-current-repo)
               block (if includeChildren
                       ;; nested children results
-                      (let [blocks (db-model/get-block-and-children repo uuid)]
+                      (let [blocks (->> (db-model/get-block-and-children repo uuid)
+                                        (map (fn [b]
+                                               (dissoc (db-utils/pull (:db/id b)) :block.temp/fully-loaded?))))]
                         (first (outliner-tree/blocks->vec-tree blocks uuid)))
                       ;; attached shallow children
                       (assoc block :block/children

+ 39 - 1
src/test/frontend/worker/migrate_test.cljs

@@ -102,4 +102,42 @@
         "Initial version not changed by fn")
     (is (= graph-created-at
            (:kv/value (d/entity @conn :logseq.kv/graph-created-at)))
-        "Graph created at not changed by fn")))
+        "Graph created at not changed by fn")))
+
+(deftest test-separate-classes-and-properties
+  (testing "Separate properties from classes"
+    (let [db-transit (str (fs-node/readFileSync "src/test/migration/65.0.transit"))
+          db (ldb/read-transit-str db-transit)
+          conn (d/conn-from-db db)
+          tx-data (db-migrate/separate-classes-and-properties conn nil)
+          new-property (first tx-data)]
+      (is (= (dissoc new-property
+                     :block/updated-at
+                     :block/created-at
+                     :db/ident
+                     :block/uuid
+                     :block/order)
+             {:db/index true,
+              :logseq.property/type :node,
+              :db/valueType :db.type/ref,
+              :block/tags #{:logseq.class/Property},
+              :block/title "Book",
+              :db/cardinality :db.cardinality/one,
+              :logseq.property/classes 156,
+              :block/name "book"}))
+      (is (= (rest tx-data)
+             [[:db/retract 156 :block/tags :logseq.class/Property]
+              [:db/retract 156 :logseq.property/type]
+              [:db/retract 156 :db/cardinality]
+              [:db/retract 156 :db/valueType]
+              [:db/retract 156 :db/index]
+              [:db/retract 156 :logseq.property/classes]
+              [:db/retract 156 :logseq.property/hide?]
+              [:db/retract 156 :logseq.property/public?]
+              [:db/retract 156 :logseq.property/view-context]
+              [:db/retract 156 :logseq.property/ui-position]
+              [:db/retract 156 :logseq.property/default-value]
+              [:db/retract 156 :logseq.property/hide-empty-value]
+              [:db/retract 156 :logseq.property/enable-history?]
+              [:db/retract 157 :user.class/Book-FrG9O7sY 155]
+              [:db/add 157 (:db/ident new-property) 155]])))))

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/test/migration/65.0.transit


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä