Fix where/having helpers; add select-distinct
This commit is contained in:
parent
a83998d354
commit
98b18bbb6e
3 changed files with 64 additions and 53 deletions
|
|
@ -459,9 +459,8 @@ Here's a big, complicated query. Note that Honey SQL makes no attempt to verify
|
||||||
|
|
||||||
```clojure
|
```clojure
|
||||||
(def big-complicated-map
|
(def big-complicated-map
|
||||||
(-> (select :f.* :b.baz :c.quux [:b.bla "bla-bla"]
|
(-> (select-distinct :f.* :b.baz :c.quux [:b.bla "bla-bla"]
|
||||||
[[:now]] [[:raw "@x := 10"]])
|
[[:now]] [[:raw "@x := 10"]])
|
||||||
#_(modifiers :distinct) ; this is not implemented yet
|
|
||||||
(from [:foo :f] [:baz :b])
|
(from [:foo :f] [:baz :b])
|
||||||
(join :draq [:= :f.b :draq.x])
|
(join :draq [:= :f.b :draq.x])
|
||||||
(left-join [:clod :c] [:= :f.a :c.d])
|
(left-join [:clod :c] [:= :f.a :c.d])
|
||||||
|
|
@ -479,9 +478,8 @@ Here's a big, complicated query. Note that Honey SQL makes no attempt to verify
|
||||||
```
|
```
|
||||||
```clojure
|
```clojure
|
||||||
big-complicated-map
|
big-complicated-map
|
||||||
=> {:select [:f.* :b.baz :c.quux [:b.bla "bla-bla"]
|
=> {:select-distinct [:f.* :b.baz :c.quux [:b.bla "bla-bla"]
|
||||||
[[:now]] [[:raw "@x := 10"]]]
|
[[:now]] [[:raw "@x := 10"]]]
|
||||||
:modifiers [:distinct]
|
|
||||||
:from [[:foo :f] [:baz :b]]
|
:from [[:foo :f] [:baz :b]]
|
||||||
:join [:draq [:= :f.b :draq.x]]
|
:join [:draq [:= :f.b :draq.x]]
|
||||||
:left-join [[:clod :c] [:= :f.a :c.d]]
|
:left-join [[:clod :c] [:= :f.a :c.d]]
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
(def ^:private default-clause-order
|
(def ^:private default-clause-order
|
||||||
"The (default) order for known clauses. Can have items added and removed."
|
"The (default) order for known clauses. Can have items added and removed."
|
||||||
[:nest :with :with-recursive :intersect :union :union-all :except :except-all
|
[:nest :with :with-recursive :intersect :union :union-all :except :except-all
|
||||||
:select :insert-into :update :delete :delete-from :truncate
|
:select :select-distinct :insert-into :update :delete :delete-from :truncate
|
||||||
:columns :composite :set :from
|
:columns :composite :set :from
|
||||||
:join :left-join :right-join :inner-join :outer-join :full-join
|
:join :left-join :right-join :inner-join :outer-join :full-join
|
||||||
:cross-join
|
:cross-join
|
||||||
|
|
@ -371,6 +371,7 @@
|
||||||
:except #'format-on-set-op
|
:except #'format-on-set-op
|
||||||
:except-all #'format-on-set-op
|
:except-all #'format-on-set-op
|
||||||
:select #'format-selects
|
:select #'format-selects
|
||||||
|
:select-distinct #'format-selects
|
||||||
:insert-into #'format-insert
|
:insert-into #'format-insert
|
||||||
:update #'format-selector
|
:update #'format-selector
|
||||||
:delete #'format-selects
|
:delete #'format-selects
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,19 @@
|
||||||
(defn- default-merge [current args]
|
(defn- default-merge [current args]
|
||||||
(into (vec current) args))
|
(into (vec current) args))
|
||||||
|
|
||||||
|
(defn- and-merge
|
||||||
|
[current args]
|
||||||
|
(let [merged (default-merge current args)]
|
||||||
|
(cond (= 1 (count merged))
|
||||||
|
(vec (first merged))
|
||||||
|
(= :and (first merged))
|
||||||
|
merged
|
||||||
|
:else
|
||||||
|
(into [:and] merged))))
|
||||||
|
|
||||||
(def ^:private special-merges
|
(def ^:private special-merges
|
||||||
{:where (fn [current args]
|
{:where #'and-merge
|
||||||
(if (= :and (first (first args)))
|
:having #'and-merge})
|
||||||
(default-merge current args)
|
|
||||||
(-> [:and]
|
|
||||||
(into current)
|
|
||||||
(into args))))})
|
|
||||||
|
|
||||||
(defn- helper-merge [data k args]
|
(defn- helper-merge [data k args]
|
||||||
(let [merge-fn (special-merges k default-merge)]
|
(let [merge-fn (special-merges k default-merge)]
|
||||||
|
|
@ -26,6 +32,11 @@
|
||||||
(helper-merge data k args))
|
(helper-merge data k args))
|
||||||
(helper-merge {} k args)))
|
(helper-merge {} k args)))
|
||||||
|
|
||||||
|
(defn- generic-1 [k [data arg]]
|
||||||
|
(if (map? data)
|
||||||
|
(assoc data k arg)
|
||||||
|
(assoc {} k data)))
|
||||||
|
|
||||||
(defn nest [& args] (generic :nest args))
|
(defn nest [& args] (generic :nest args))
|
||||||
(defn with [& args] (generic :with args))
|
(defn with [& args] (generic :with args))
|
||||||
(defn with-recursive [& args] (generic :with-recursive args))
|
(defn with-recursive [& args] (generic :with-recursive args))
|
||||||
|
|
@ -35,6 +46,7 @@
|
||||||
(defn except [& args] (generic :except args))
|
(defn except [& args] (generic :except args))
|
||||||
(defn except-all [& args] (generic :except-all args))
|
(defn except-all [& args] (generic :except-all args))
|
||||||
(defn select [& args] (generic :select args))
|
(defn select [& args] (generic :select args))
|
||||||
|
(defn select-distinct [& args] (generic :select-distinct args))
|
||||||
(defn insert-into [& args] (generic :insert-into args))
|
(defn insert-into [& args] (generic :insert-into args))
|
||||||
(defn update [& args] (generic :update args))
|
(defn update [& args] (generic :update args))
|
||||||
(defn delete [& args] (generic :delete args))
|
(defn delete [& args] (generic :delete args))
|
||||||
|
|
@ -55,8 +67,8 @@
|
||||||
(defn group-by [& args] (generic :group-by args))
|
(defn group-by [& args] (generic :group-by args))
|
||||||
(defn having [& args] (generic :having args))
|
(defn having [& args] (generic :having args))
|
||||||
(defn order-by [& args] (generic :order-by args))
|
(defn order-by [& args] (generic :order-by args))
|
||||||
(defn limit [& args] (generic :limit args))
|
(defn limit [& args] (generic-1 :limit args))
|
||||||
(defn offset [& args] (generic :offset args))
|
(defn offset [& args] (generic-1 :offset args))
|
||||||
(defn for [& args] (generic :for args))
|
(defn for [& args] (generic :for args))
|
||||||
(defn values [& args] (generic :values args))
|
(defn values [& args] (generic :values args))
|
||||||
(defn on-conflict [& args] (generic :on-conflict args))
|
(defn on-conflict [& args] (generic :on-conflict args))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue