parent
559e71205d
commit
8320571c4d
2 changed files with 28 additions and 0 deletions
|
|
@ -1933,6 +1933,23 @@
|
||||||
[k [x]]
|
[k [x]]
|
||||||
[(str (sql-kw k) " " (inline-map x "(" ")"))])
|
[(str (sql-kw k) " " (inline-map x "(" ")"))])
|
||||||
|
|
||||||
|
(defn- get-in-navigation
|
||||||
|
"[:get-in expr key-or-index1 key-or-index2 ...]"
|
||||||
|
[_ [expr & kix]]
|
||||||
|
(let [[sql & params] (format-expr expr)
|
||||||
|
[sqls params']
|
||||||
|
(reduce-sql (map #(cond (number? %)
|
||||||
|
[(str "[" % "]")]
|
||||||
|
(ident? %)
|
||||||
|
[(str "." (format-entity %))]
|
||||||
|
:else
|
||||||
|
(let [[sql' & params'] (format-expr %)]
|
||||||
|
(cons (str "[" sql' "]") params')))
|
||||||
|
kix))]
|
||||||
|
(-> [(str "(" sql ")" (join "" sqls))]
|
||||||
|
(into params)
|
||||||
|
(into params'))))
|
||||||
|
|
||||||
(defn ignore-respect-nulls [k [x]]
|
(defn ignore-respect-nulls [k [x]]
|
||||||
(let [[sql & params] (format-expr x)]
|
(let [[sql & params] (format-expr x)]
|
||||||
(into [(str sql " " (sql-kw k))] params)))
|
(into [(str sql " " (sql-kw k))] params)))
|
||||||
|
|
@ -2023,6 +2040,7 @@
|
||||||
(into params-p)
|
(into params-p)
|
||||||
(into params-e))))
|
(into params-e))))
|
||||||
:filter expr-clause-pairs
|
:filter expr-clause-pairs
|
||||||
|
:get-in #'get-in-navigation
|
||||||
:ignore-nulls ignore-respect-nulls
|
:ignore-nulls ignore-respect-nulls
|
||||||
:inline
|
:inline
|
||||||
(fn [_ xs]
|
(fn [_ xs]
|
||||||
|
|
|
||||||
|
|
@ -108,3 +108,13 @@
|
||||||
(testing "inline map literal"
|
(testing "inline map literal"
|
||||||
(is (= ["SELECT {_id: 1, name: 'foo'}"]
|
(is (= ["SELECT {_id: 1, name: 'foo'}"]
|
||||||
(sql/format {:select [[[:inline {:_id 1 :name "foo"}]]]})))))
|
(sql/format {:select [[[:inline {:_id 1 :name "foo"}]]]})))))
|
||||||
|
|
||||||
|
(deftest navigation-dot-index
|
||||||
|
(is (= ["SELECT (a.b).c[1].d"]
|
||||||
|
(sql/format '{select (((get-in a.b c 1 d)))})))
|
||||||
|
(is (= ["SELECT (a.b).c[?].d" 1]
|
||||||
|
(sql/format '{select (((get-in a.b c (lift 1) d)))})))
|
||||||
|
(is (= ["SELECT (a.b).c[?].d" 1]
|
||||||
|
(sql/format '{select (((get-in (. a b) c (lift 1) d)))})))
|
||||||
|
(is (= ["SELECT (OBJECT (_id: 1, b: 'thing').b).c[?].d" 1]
|
||||||
|
(sql/format '{select (((get-in (. (object {_id 1 b "thing"}) b) c (lift 1) d)))}))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue