fix: property table and property "All" queries

inconsistently treat empty values as being a property value.  Empty
value directly on a node was treated as a property value but not if the
node obtained the empty property value via a class.
Fixes https://github.com/logseq/db-test/issues/230#issuecomment-2726323364
This commit is contained in:
Gabriel Horner
2025-05-02 10:49:19 -04:00
parent d08acfc3ba
commit 79e4f54da8
3 changed files with 11 additions and 13 deletions

2
deps/db/bb.edn vendored
View File

@@ -38,7 +38,7 @@
:property :simple-query-property :private-property
:property-scalar-default-value
:property-missing-value
:has-property-or-default-value)))))}}
:has-property-or-object-property)))))}}
:tasks/config
{:large-vars

View File

@@ -414,9 +414,9 @@
'[:find [?b ...]
:in $ % ?prop
:where
(has-property-or-default-value? ?b ?prop)]
(has-property-or-object-property? ?b ?prop)]
db
(rules/extract-rules rules/db-query-dsl-rules [:has-property-or-default-value]
(rules/extract-rules rules/db-query-dsl-rules [:has-property-or-object-property]
{:deps rules/rules-dependencies})
property-ident)
(keep (fn [id] (non-hidden-e id))))

View File

@@ -138,21 +138,19 @@
[(= ?t ?tc)]
(parent ?t ?tc))]
:has-property-or-default-value
'[(has-property-or-default-value? ?b ?prop)
:has-property-or-object-property
'[(has-property-or-object-property? ?b ?prop)
[?prop-e :db/ident ?prop]
(or
[?b ?prop _]
(and (object-has-class-property? ?b ?prop)
(or [?prop-e :logseq.property/default-value _]
[?prop-e :logseq.property/scalar-default-value _])))]
(object-has-class-property? ?b ?prop))]
;; Checks if a property exists for simple queries. Supports default values
:has-simple-query-property
'[(has-simple-query-property ?b ?prop)
[?prop-e :db/ident ?prop]
[?prop-e :block/tags :logseq.class/Property]
(has-property-or-default-value? ?b ?prop)
(has-property-or-object-property? ?b ?prop)
(or
[(missing? $ ?prop-e :logseq.property/public?)]
[?prop-e :logseq.property/public? true])]
@@ -162,7 +160,7 @@
'[(has-private-simple-query-property ?b ?prop)
[?prop-e :db/ident ?prop]
[?prop-e :block/tags :logseq.class/Property]
(has-property-or-default-value? ?b ?prop)]
(has-property-or-object-property? ?b ?prop)]
;; Checks if a property exists for any features that are not simple queries
:has-property
@@ -237,10 +235,10 @@
{:task #{:simple-query-property}
:priority #{:simple-query-property}
:property-missing-value #{:object-has-class-property}
:has-property-or-default-value #{:object-has-class-property}
:has-property-or-object-property #{:object-has-class-property}
:object-has-class-property #{:parent}
:has-simple-query-property #{:has-property-or-default-value}
:has-private-simple-query-property #{:has-property-or-default-value}
:has-simple-query-property #{:has-property-or-object-property}
:has-private-simple-query-property #{:has-property-or-object-property}
:property-default-value #{:existing-property-value :property-missing-value}
:property-scalar-default-value #{:existing-property-value :property-missing-value}
:property-value #{:property-default-value :property-scalar-default-value}