mirror of
https://github.com/logseq/logseq.git
synced 2026-05-01 09:26:28 +00:00
enhance: between support (between :created-at -1d)
So now `between` support: 1. (between start end) to query journal blocks 2. (between :created-at|:updated-at start end) 3. (between :created-at|:updated-at start)
This commit is contained in:
@@ -205,7 +205,27 @@
|
||||
|
||||
;; build-query fns
|
||||
;; ===============
|
||||
(defn- build-between-two-arg
|
||||
(defn- resolve-timestamp-property
|
||||
[e]
|
||||
(let [k (-> (second e)
|
||||
(name)
|
||||
(string/lower-case)
|
||||
(string/replace "_" "-")
|
||||
keyword)]
|
||||
(case k
|
||||
:created-at
|
||||
:block/created-at
|
||||
:updated-at
|
||||
:block/updated-at
|
||||
k)))
|
||||
|
||||
(defn get-timestamp-property
|
||||
[e]
|
||||
(let [k (resolve-timestamp-property e)]
|
||||
(when (contains? #{:block/created-at :block/updated-at} k)
|
||||
k)))
|
||||
|
||||
(defn- build-journal-between-two-arg
|
||||
[e]
|
||||
(let [start (->journal-day-int (nth e 1))
|
||||
end (->journal-day-int (nth e 2))
|
||||
@@ -213,32 +233,49 @@
|
||||
{:query (list 'between '?b start end)
|
||||
:rules [:between]}))
|
||||
|
||||
(defn- build-between-three-arg
|
||||
(defn- file-based-build-between-three-arg
|
||||
[e]
|
||||
(let [k (-> (second e)
|
||||
(name)
|
||||
(string/lower-case)
|
||||
(string/replace "-" "_"))]
|
||||
(when (contains? #{"created_at" "last_modified_at"} k)
|
||||
(let [start (->timestamp (nth e 2))
|
||||
end (->timestamp (nth e 3))]
|
||||
(when (and start end)
|
||||
(let [[start end] (sort [start end])
|
||||
sym '?v]
|
||||
{:query [['?b :block/properties '?prop]
|
||||
[(list 'get '?prop k) sym]
|
||||
[(list '>= sym start)]
|
||||
[(list '< sym end)]]}))))))
|
||||
(when-let [k (get-timestamp-property e)]
|
||||
(let [start (->timestamp (nth e 2))
|
||||
end (->timestamp (nth e 3))]
|
||||
(when (and start end)
|
||||
(let [[start end] (sort [start end])
|
||||
sym '?v]
|
||||
{:query [['?b :block/properties '?prop]
|
||||
[(list 'get '?prop k) sym]
|
||||
[(list '>= sym start)]
|
||||
[(list '< sym end)]]})))))
|
||||
|
||||
(defn- db-based-build-between-three-arg
|
||||
[e]
|
||||
(when-let [k (get-timestamp-property e)]
|
||||
(let [start (->timestamp (nth e 2))
|
||||
end (->timestamp (nth e 3))]
|
||||
(when (and start end)
|
||||
(let [[start end] (sort [start end])
|
||||
sym '?v]
|
||||
{:query [['?b k sym]
|
||||
[(list '>= sym start)]
|
||||
[(list '< sym end)]]})))))
|
||||
|
||||
(defn- db-based-build-between-two-arg
|
||||
[e]
|
||||
(db-based-build-between-three-arg (concat e ['now])))
|
||||
|
||||
(defn- build-between
|
||||
[e]
|
||||
[e db-graph?]
|
||||
(cond
|
||||
(= 3 (count e))
|
||||
(build-between-two-arg e)
|
||||
(let [k (get-timestamp-property e)]
|
||||
(if (and db-graph? k)
|
||||
(db-based-build-between-two-arg e)
|
||||
(build-journal-between-two-arg e)))
|
||||
|
||||
;; (between created_at -1d today)
|
||||
(= 4 (count e))
|
||||
(build-between-three-arg e)))
|
||||
(if db-graph?
|
||||
(db-based-build-between-three-arg e)
|
||||
(file-based-build-between-three-arg e))))
|
||||
|
||||
(defn ->file-property-value
|
||||
"Parses property values for file graphs and handles non-string values or any page-ref like values"
|
||||
@@ -467,7 +504,7 @@ Some bindings in this fn:
|
||||
(build-and-or-not e env level fe)
|
||||
|
||||
(= 'between fe)
|
||||
(build-between e)
|
||||
(build-between e (:db-graph? env))
|
||||
|
||||
(= 'property fe)
|
||||
(build-property e env)
|
||||
|
||||
Reference in New Issue
Block a user