fix: file graph issues

pull/11177/head
Tienson Qin 2024-04-25 15:57:14 +08:00
parent 349542b7b9
commit bcd04dba05
4 changed files with 70 additions and 60 deletions

View File

@ -6,7 +6,8 @@
[logseq.db.sqlite.util :as sqlite-util]
[logseq.common.util.date-time :as date-time-util]
[logseq.common.util :as common-util]
[logseq.common.config :as common-config]))
[logseq.common.config :as common-config]
[logseq.db.frontend.entity-plus :as entity-plus]))
(defn- get-pages-by-name
[db page-name]
@ -88,50 +89,51 @@
(defn- property-with-values
[db block]
(let [block (d/entity db (:db/id block))
class-properties (when (contains? (:block/type block) "class")
(let [property-ids (map :db/id (:class/schema.properties block))]
(when (seq property-ids)
(d/pull-many db '[*] property-ids))))
block-properties (when (seq (:block/raw-properties block))
(let [pairs (d/pull-many db '[*] (map :db/id (:block/raw-properties block)))]
(mapcat
(fn [pair]
(let [property (d/entity db (:db/id (:property/pair-property pair)))
property-values (get pair (:db/ident property))
values (if (and (coll? property-values)
(map? (first property-values)))
property-values
#{property-values})
value-ids (when (every? map? values)
(->> (map :db/id values)
(filter (fn [id] (or (int? id) (keyword? id))))))
value-blocks (->>
(when (seq value-ids)
(mapcat
(fn [id]
(let [b (d/entity db id)]
(cons (d/pull db '[*] id)
(let [ids (map :db/id (:block/raw-properties b))]
(when (seq ids)
(d/pull-many db '[*] ids))))))
value-ids))
(when (entity-plus/db-based-graph? db)
(let [block (d/entity db (:db/id block))
class-properties (when (contains? (:block/type block) "class")
(let [property-ids (map :db/id (:class/schema.properties block))]
(when (seq property-ids)
(d/pull-many db '[*] property-ids))))
block-properties (when (seq (:block/raw-properties block))
(let [pairs (d/pull-many db '[*] (map :db/id (:block/raw-properties block)))]
(mapcat
(fn [pair]
(let [property (d/entity db (:db/id (:property/pair-property pair)))
property-values (get pair (:db/ident property))
values (if (and (coll? property-values)
(map? (first property-values)))
property-values
#{property-values})
value-ids (when (every? map? values)
(->> (map :db/id values)
(filter (fn [id] (or (int? id) (keyword? id))))))
value-blocks (->>
(when (seq value-ids)
(mapcat
(fn [id]
(let [b (d/entity db id)]
(cons (d/pull db '[*] id)
(let [ids (map :db/id (:block/raw-properties b))]
(when (seq ids)
(d/pull-many db '[*] ids))))))
value-ids))
;; FIXME: why d/pull returns {:db/id db-ident} instead of {:db/id number-eid}?
(map (fn [block]
(let [from-property-id (get-in block [:logseq.property/created-from-property :db/id])]
(if (keyword? from-property-id)
(assoc-in block [:logseq.property/created-from-property :db/id] (:db/id (d/entity db from-property-id)))
block)))))
page (when (seq values)
(when-let [page-id (:db/id (:block/page (d/entity db (:db/id (first values)))))]
(d/pull db '[*] page-id)))
property' (d/pull db '[*] (:db/id property))]
(remove nil? (concat [page]
[property']
value-blocks
[pair]))))
pairs)))]
(concat class-properties block-properties)))
(map (fn [block]
(let [from-property-id (get-in block [:logseq.property/created-from-property :db/id])]
(if (keyword? from-property-id)
(assoc-in block [:logseq.property/created-from-property :db/id] (:db/id (d/entity db from-property-id)))
block)))))
page (when (seq values)
(when-let [page-id (:db/id (:block/page (d/entity db (:db/id (first values)))))]
(d/pull db '[*] page-id)))
property' (d/pull db '[*] (:db/id property))]
(remove nil? (concat [page]
[property']
value-blocks
[pair]))))
pairs)))]
(concat class-properties block-properties))))
(defn get-block-and-children
[db id children?]
@ -261,7 +263,8 @@
latest-journals (get-latest-journals db 3)
all-files (get-all-files db)
home-page-data (get-home-page db all-files)
structured-blocks (get-structured-blocks db)
structured-blocks (when (entity-plus/db-based-graph? db)
(get-structured-blocks db))
data (concat idents structured-blocks favorites latest-journals all-files home-page-data)]
{:schema schema
:initial-data data}))

View File

@ -248,10 +248,9 @@
:on-enter non-exist-block-handler
:empty-placeholder [:div.text-gray-500.text-sm.px-4.py-2 (t :editor/block-search)]
:item-render (fn [{:block/keys [page uuid]}] ;; content returned from search engine is normalized
(let [page (or (:block/original-name page)
(:block/name page))
(let [page-entity (db/entity [:block/uuid page])
repo (state/sub :git/current-repo)
format (db/get-page-format page)
format (get page-entity :block/format :markdown)
block (db-model/query-block-by-uuid uuid)
content (:block/content block)]
(when-not (string/blank? content)

View File

@ -17,7 +17,8 @@
(p/let [result (.search-blocks sqlite (state/get-current-repo) q (bean/->js option))
result (bean/->clj result)]
(keep (fn [{:keys [content page] :as block}]
{:block/uuid (uuid (:uuid block))
{:page? (= (:uuid block) page)
:block/uuid (uuid (:uuid block))
:block/content content
:block/page (uuid page)}) result))
(p/resolved nil)))

View File

@ -10,7 +10,8 @@
[frontend.worker.util :as worker-util]
[logseq.db.sqlite.util :as sqlite-util]
[logseq.common.util :as common-util]
[logseq.db :as ldb]))
[logseq.db :as ldb]
[cljs-bean.core :as bean]))
;; TODO: use sqlite for fuzzy search
(defonce indices (atom nil))
@ -81,10 +82,14 @@
[^Object db blocks]
(.transaction db (fn [tx]
(doseq [item blocks]
(.exec tx #js {:sql "INSERT INTO blocks (id, content, page) VALUES ($id, $content, $page) ON CONFLICT (id) DO UPDATE SET (content, page) = ($content, $page)"
:bind #js {:$id (.-id item)
:$content (.-content item)
:$page (.-page item)}})))))
(if (and (common-util/uuid-string? (.-id item))
(common-util/uuid-string? (.-page item)))
(.exec tx #js {:sql "INSERT INTO blocks (id, content, page) VALUES ($id, $content, $page) ON CONFLICT (id) DO UPDATE SET (content, page) = ($content, $page)"
:bind #js {:$id (.-id item)
:$content (.-content item)
:$page (.-page item)}})
(throw (ex-info "Search upsert-blocks wrong data: "
(bean/->clj item))))))))
(defn delete-blocks!
[db ids]
@ -158,10 +163,11 @@
matched-result (search-blocks-aux db match-sql match-input page limit)
non-match-result (search-blocks-aux db non-match-sql non-match-input page limit)
all-result (->> (concat matched-result non-match-result)
(map (fn [[id page _content snippet]]
{:uuid id
:content snippet
:page page})))]
(map (fn [result]
(let [[id page _content snippet] result]
{:uuid id
:content snippet
:page page}))))]
(->>
all-result
(common-util/distinct-by :uuid)
@ -252,8 +258,9 @@
(str content (when (not= content "") "\n") (get-db-properties-str db properties))
content)]
(when-not (string/blank? content')
(assert (or (:block/uuid page) uuid))
{:id (str uuid)
:page (str (:block/uuid page))
:page (str (or (:block/uuid page) uuid))
:content (sanitize content')
:format format})))))
@ -264,7 +271,7 @@
{:db/id (:db/id e)
:block/name (:block/name e)
:block/uuid id
:block/page (:db/id (:block/page e))
:block/page (:block/page e)
:block/content (:block/content e)
:block/format (:block/format e)
:block/properties (:block/properties e)})))