mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 22:25:01 +00:00
fix: import property that changes from :node to :default
on same page :as :node property is defined. Also affects :date -> :default. Fixes https://github.com/logseq/db-test/issues/340
This commit is contained in:
@@ -1397,17 +1397,26 @@
|
||||
"Separates new pages from new properties tx in preparation for properties to
|
||||
be transacted separately. Also builds property pages tx and converts existing
|
||||
pages that are now properties"
|
||||
[pages-tx old-properties existing-pages import-state]
|
||||
[pages-tx old-properties existing-pages import-state upstream-properties]
|
||||
(let [new-properties (set/difference (set (keys @(:property-schemas import-state))) (set old-properties))
|
||||
;; _ (when (seq new-properties) (prn :new-properties new-properties))
|
||||
[properties-tx pages-tx'] ((juxt filter remove)
|
||||
#(contains? new-properties (keyword (:block/name %))) pages-tx)
|
||||
property-pages-tx (map (fn [{block-uuid :block/uuid :block/keys [title]}]
|
||||
(let [property-name (keyword (string/lower-case title))
|
||||
db-ident (get-ident @(:all-idents import-state) property-name)]
|
||||
(sqlite-util/build-new-property db-ident
|
||||
(get-property-schema @(:property-schemas import-state) property-name)
|
||||
{:title title :block-uuid block-uuid})))
|
||||
db-ident (get-ident @(:all-idents import-state) property-name)
|
||||
upstream-property (get upstream-properties property-name)]
|
||||
(sqlite-util/build-new-property
|
||||
db-ident
|
||||
;; Tweak new properties that have upstream changes in flight to behave like
|
||||
;; existing properties i.e. they should be defined by the upstream property
|
||||
(if (and upstream-property
|
||||
(#{:date :node} (:from-type upstream-property))
|
||||
(= :default (get-in upstream-property [:schema :logseq.property/type])))
|
||||
;; Assumes :many for :date and :node like infer-property-schema-and-get-property-change
|
||||
{:logseq.property/type (:from-type upstream-property) :db/cardinality :many}
|
||||
(get-property-schema @(:property-schemas import-state) property-name))
|
||||
{:title title :block-uuid block-uuid})))
|
||||
properties-tx)
|
||||
converted-property-pages-tx
|
||||
(map (fn [kw-name]
|
||||
@@ -1561,7 +1570,8 @@
|
||||
|
||||
(defn- save-from-tx
|
||||
"Save importer state from given txs"
|
||||
[txs {:keys [import-state]}]
|
||||
[txs {:keys [import-state] :as _opts}]
|
||||
;; (when (string/includes? (:file _opts) "some-file.md") (cljs.pprint/pprint txs))
|
||||
(when-let [nodes (seq (filter :block/name txs))]
|
||||
(swap! (:all-existing-page-uuids import-state) merge (into {} (map (juxt :block/uuid identity) nodes)))))
|
||||
|
||||
@@ -1600,7 +1610,7 @@
|
||||
(assoc tx-options :whiteboard? (some? (seq whiteboard-pages)))))
|
||||
vec)
|
||||
{:keys [property-pages-tx property-page-properties-tx] pages-tx' :pages-tx}
|
||||
(split-pages-and-properties-tx pages-tx old-properties existing-pages (:import-state options))
|
||||
(split-pages-and-properties-tx pages-tx old-properties existing-pages (:import-state options) @(:upstream-properties tx-options))
|
||||
;; _ (when (seq property-pages-tx) (cljs.pprint/pprint {:property-pages-tx property-pages-tx}))
|
||||
;; Necessary to transact new property entities first so that block+page properties can be transacted next
|
||||
main-props-tx-report (d/transact! conn property-pages-tx {::new-graph? true ::path file})
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
|
||||
;; Counts
|
||||
;; Includes journals as property values e.g. :logseq.property/deadline
|
||||
(is (= 26 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Journal]] @conn))))
|
||||
(is (= 27 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Journal]] @conn))))
|
||||
|
||||
(is (= 3 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Asset]] @conn))))
|
||||
(is (= 4 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Task]] @conn))))
|
||||
@@ -253,7 +253,7 @@
|
||||
set))))
|
||||
|
||||
(testing "user properties"
|
||||
(is (= 19
|
||||
(is (= 20
|
||||
(->> @conn
|
||||
(d/q '[:find [(pull ?b [:db/ident]) ...]
|
||||
:where [?b :block/tags :logseq.class/Property]])
|
||||
@@ -523,7 +523,11 @@
|
||||
(is (= "20"
|
||||
(:user.property/duration (db-test/readable-properties (db-test/find-block-by-content @conn "existing :number to :default"))))
|
||||
"existing :number property value correctly saved as :default")
|
||||
(is (= :default
|
||||
(:logseq.property/type (d/entity @conn :user.property/people2)))
|
||||
":node property changes to :default when :node is defined in same file")
|
||||
|
||||
;; tests :node :many to :default transition after :node is defined in separate file
|
||||
(is (= {:logseq.property/type :default :db/cardinality :db.cardinality/many}
|
||||
(select-keys (d/entity @conn :user.property/people) [:logseq.property/type :db/cardinality]))
|
||||
":node property to :default value changes to :default and keeps existing cardinality")
|
||||
|
||||
4
deps/graph-parser/test/resources/exporter-test-graph/journals/2025_06_23.md
vendored
Normal file
4
deps/graph-parser/test/resources/exporter-test-graph/journals/2025_06_23.md
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
- tests :node to :default like :people property but for a new property
|
||||
people2:: [[Gabriel]]
|
||||
- changes :node to :default
|
||||
people2:: some text
|
||||
Reference in New Issue
Block a user