mirror of
https://github.com/logseq/logseq.git
synced 2026-05-05 03:16:37 +00:00
Merge branch 'master' into dev/var-sizes-linter
This commit is contained in:
@@ -17,13 +17,16 @@
|
||||
:file/content "---
|
||||
title: Dec 26th, 2020
|
||||
tags: [[page-tag-1]], page-tag-2
|
||||
parent: [[child page 1]]
|
||||
parent: [[child page 1]], [[child-no-space]]
|
||||
---
|
||||
- DONE 26-b1 [[page 1]]
|
||||
created-at:: 1608968448113
|
||||
last-modified-at:: 1608968448113
|
||||
prop-a:: val-a
|
||||
prop-c:: [[page a]], [[page b]], [[page c]]
|
||||
prop-num:: 2000
|
||||
prop-linked-num:: [[3000]]
|
||||
prop-d:: [[no-space-link]]
|
||||
- LATER 26-b2-modified-later [[page 2]] #tag1
|
||||
created-at:: 1608968448114
|
||||
last-modified-at:: 1608968448120
|
||||
@@ -94,6 +97,97 @@ last-modified-at:: 1609084800002"}]]
|
||||
|
||||
(defonce empty-result {:query nil :result nil})
|
||||
|
||||
(deftest block-property-queries
|
||||
(are [x y] (= (q-count x) y)
|
||||
"(property prop-a val-a)"
|
||||
{:query (dsl/->property-query "prop-a" "val-a")
|
||||
:count 2}
|
||||
|
||||
"(property prop-b val-b)"
|
||||
{:query (dsl/->property-query "prop-b" "val-b")
|
||||
:count 1}
|
||||
|
||||
"(and (property prop-b val-b))"
|
||||
{:query '([?b :block/properties ?prop]
|
||||
[(missing? $ ?b :block/name)]
|
||||
[(get ?prop :prop-b) ?v]
|
||||
(or [(= ?v "val-b")] [(contains? ?v "val-b")] [(contains? ?v "val-b")]))
|
||||
:count 1}
|
||||
|
||||
"(and (property prop-c \"page c\"))"
|
||||
{:query (dsl/->property-query "prop-c" "page c")
|
||||
:count 1}
|
||||
|
||||
;; TODO: optimize
|
||||
"(and (property prop-c \"page c\") (property prop-c \"page b\"))"
|
||||
{:query '[[?b :block/properties ?prop]
|
||||
[(missing? $ ?b :block/name)]
|
||||
[(get ?prop :prop-c) ?v]
|
||||
(or [(= ?v "page c")] [(contains? ?v "page c")] [(contains? ?v "page c")])
|
||||
[(get ?prop :prop-c) ?v1]
|
||||
(or [(= ?v1 "page b")] [(contains? ?v1 "page b")] [(contains? ?v1 "page b")])]
|
||||
:count 1}
|
||||
|
||||
"(or (property prop-c \"page c\") (property prop-b val-b))"
|
||||
{:query '[[?b :block/content ?content]
|
||||
(or
|
||||
(and [?b :block/properties ?prop] [(missing? $ ?b :block/name)] [(get ?prop :prop-c) ?v] (or [(= ?v "page c")] [(contains? ?v "page c")] [(contains? ?v "page c")]))
|
||||
(and [?b :block/properties ?prop] [(missing? $ ?b :block/name)] [(get ?prop :prop-b) ?v] (or [(= ?v "val-b")] [(contains? ?v "val-b")] [(contains? ?v "val-b")])))]
|
||||
:count 2}
|
||||
|
||||
"(property prop-num 2000)"
|
||||
{:query (dsl/->property-query "prop-num" 2000)
|
||||
:count 1}
|
||||
|
||||
"(property prop-linked-num 3000)"
|
||||
{:query (dsl/->property-query "prop-linked-num" 3000)
|
||||
:count 1}
|
||||
|
||||
"(property prop-d no-space-link)"
|
||||
{:query (dsl/->property-query "prop-d" "no-space-link")
|
||||
:count 1}))
|
||||
|
||||
(deftest page-property-queries
|
||||
(are [x y] (= (q-count x) y)
|
||||
"(page-property parent)"
|
||||
{:query '[[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?prop-v]
|
||||
[true]], :count 3}
|
||||
|
||||
"(page-property parent [[child page 1]])"
|
||||
{:query (dsl/->page-property-query "parent" "child page 1")
|
||||
:count 2}
|
||||
|
||||
"(page-property parent [[child-no-space]])"
|
||||
{:query (dsl/->page-property-query "parent" "child-no-space")
|
||||
:count 1}
|
||||
|
||||
"(page-property parent \"child page 1\")"
|
||||
{:query (dsl/->page-property-query "parent" "child page 1")
|
||||
:count 2}
|
||||
|
||||
"(and (page-property parent [[child page 1]]) (page-property parent [[child page 2]]))"
|
||||
{:query '([?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or [(= ?v "child page 1")] [(contains? ?v "child page 1")])
|
||||
(or [(= ?v "child page 2")] [(contains? ?v "child page 2")]))
|
||||
:count 1}
|
||||
|
||||
"(or (page-property parent [[child page 1]]) (page-property parent [[child page 2]]))"
|
||||
{:query '(or (and
|
||||
[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or [(= ?v "child page 1")] [(contains? ?v "child page 1")]))
|
||||
(and
|
||||
[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or [(= ?v "child page 2")] [(contains? ?v "child page 2")])))
|
||||
:count 3}))
|
||||
|
||||
(deftest ^:large-vars/cleanup-todo test-parse
|
||||
[]
|
||||
(testing "nil or blank strings should be ignored"
|
||||
@@ -117,43 +211,7 @@ last-modified-at:: 1609084800002"}]]
|
||||
{:query '[[?b :block/path-refs [:block/name "page 2"]]]
|
||||
:count 4}))
|
||||
|
||||
(testing "Block properties query"
|
||||
(are [x y] (= (q-count x) y)
|
||||
"(property prop-a val-a)"
|
||||
{:query '[[?b :block/properties ?prop] [(missing? $ ?b :block/name)] [(get ?prop :prop-a) ?v] (or [(= ?v "val-a")] [(contains? ?v "val-a")])]
|
||||
:count 2}
|
||||
|
||||
"(property prop-b val-b)"
|
||||
{:query '[[?b :block/properties ?prop] [(missing? $ ?b :block/name)] [(get ?prop :prop-b) ?v] (or [(= ?v "val-b")] [(contains? ?v "val-b")])]
|
||||
:count 1}
|
||||
|
||||
"(and (property prop-b val-b))"
|
||||
{:query '([?b :block/properties ?prop]
|
||||
[(missing? $ ?b :block/name)]
|
||||
[(get ?prop :prop-b) ?v]
|
||||
(or [(= ?v "val-b")] [(contains? ?v "val-b")]))
|
||||
:count 1}
|
||||
|
||||
"(and (property prop-c \"page c\"))"
|
||||
{:query '[[?b :block/properties ?prop] [(missing? $ ?b :block/name)] [(get ?prop :prop-c) ?v] (or [(= ?v "page c")] [(contains? ?v "page c")])]
|
||||
:count 1}
|
||||
|
||||
;; TODO: optimize
|
||||
"(and (property prop-c \"page c\") (property prop-c \"page b\"))"
|
||||
{:query '[[?b :block/properties ?prop]
|
||||
[(missing? $ ?b :block/name)]
|
||||
[(get ?prop :prop-c) ?v]
|
||||
(or [(= ?v "page c")] [(contains? ?v "page c")])
|
||||
[(get ?prop :prop-c) ?v1]
|
||||
(or [(= ?v1 "page b")] [(contains? ?v1 "page b")])]
|
||||
:count 1}
|
||||
|
||||
"(or (property prop-c \"page c\") (property prop-b val-b))"
|
||||
{:query '[[?b :block/content ?content]
|
||||
(or
|
||||
(and [?b :block/properties ?prop] [(missing? $ ?b :block/name)] [(get ?prop :prop-c) ?v] (or [(= ?v "page c")] [(contains? ?v "page c")]))
|
||||
(and [?b :block/properties ?prop] [(missing? $ ?b :block/name)] [(get ?prop :prop-b) ?v] (or [(= ?v "val-b")] [(contains? ?v "val-b")])))]
|
||||
:count 2}))
|
||||
|
||||
(testing "task queries"
|
||||
(are [x y] (= (q-count x) y)
|
||||
@@ -247,50 +305,7 @@ last-modified-at:: 1609084800002"}]]
|
||||
[(contains? #{"page-tag-1" "page-tag-2"} ?tag1)]]
|
||||
:count 2}))
|
||||
|
||||
(testing "page-property queries"
|
||||
(are [x y] (= (q-count x) y)
|
||||
"(page-property parent)"
|
||||
{:query '[[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?prop-v]
|
||||
[true]], :count 3}
|
||||
|
||||
"(page-property parent [[child page 1]])"
|
||||
{:query '[[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or [(= ?v "child page 1")] [(contains? ?v "child page 1")])]
|
||||
:count 2}
|
||||
|
||||
"(page-property parent \"child page 1\")"
|
||||
{:query '[[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or
|
||||
[(= ?v "child page 1")]
|
||||
[(contains? ?v "child page 1")])]
|
||||
:count 2}
|
||||
|
||||
"(and (page-property parent [[child page 1]]) (page-property parent [[child page 2]]))"
|
||||
{:query '([?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or [(= ?v "child page 1")] [(contains? ?v "child page 1")])
|
||||
(or [(= ?v "child page 2")] [(contains? ?v "child page 2")]))
|
||||
:count 1}
|
||||
|
||||
"(or (page-property parent [[child page 1]]) (page-property parent [[child page 2]]))"
|
||||
{:query '(or (and
|
||||
[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or [(= ?v "child page 1")] [(contains? ?v "child page 1")]))
|
||||
(and
|
||||
[?p :block/name]
|
||||
[?p :block/properties ?prop]
|
||||
[(get ?prop :parent) ?v]
|
||||
(or [(= ?v "child page 2")] [(contains? ?v "child page 2")])))
|
||||
:count 3}))
|
||||
|
||||
;; boolean queries
|
||||
(testing "AND queries"
|
||||
@@ -319,7 +334,7 @@ last-modified-at:: 1609084800002"}]]
|
||||
"(not [[page 1]])"
|
||||
{:query '([?b :block/uuid]
|
||||
(not [?b :block/path-refs [:block/name "page 1"]]))
|
||||
:count 36}))
|
||||
:count 39}))
|
||||
|
||||
(testing "Between query"
|
||||
(are [x y] (= (count-only x) y)
|
||||
@@ -367,7 +382,7 @@ last-modified-at:: 1609084800002"}]]
|
||||
(and [?b :block/path-refs [:block/name "page 1"]])
|
||||
(and [?b :block/path-refs [:block/name "page 2"]])
|
||||
[?b])))
|
||||
:count 39})
|
||||
:count 42})
|
||||
|
||||
;; FIXME: not working
|
||||
;; (are [x y] (= (q-count x) y)
|
||||
@@ -461,7 +476,7 @@ last-modified-at:: 1609084800002"}]]
|
||||
(done))))
|
||||
:after config/destroy-test-db!})
|
||||
|
||||
#_(run-tests)
|
||||
#_(cljs.test/run-tests)
|
||||
|
||||
(comment
|
||||
(require '[clojure.pprint :as pprint])
|
||||
|
||||
Reference in New Issue
Block a user