summaryrefslogtreecommitdiff
path: root/src/clojure_sql/dsl.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure_sql/dsl.clj')
-rw-r--r--src/clojure_sql/dsl.clj11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/clojure_sql/dsl.clj b/src/clojure_sql/dsl.clj
index 2a22eea..5c804d2 100644
--- a/src/clojure_sql/dsl.clj
+++ b/src/clojure_sql/dsl.clj
@@ -69,7 +69,6 @@
(throw (ex-info "Cannot union queries with different fields"
{:queries queries})))
-
(defn ^:private rename-table [query from to]
(q/map->Query (walk/prewalk-replace {from to} (into {} query))))
@@ -201,6 +200,7 @@
(nil? (:having query))
(nil? (:take query))
(nil? (:drop query))
+ (nil? (:distinct query))
(nil? (:set-operation query))))
(defn ^:private convert-to-subquery [query]
@@ -214,6 +214,7 @@
(cond (joinable? query) query
(:take query) (convert-to-subquery query)
(:drop query) (convert-to-subquery query)
+ (:distinct query) (convert-to-subquery query)
:else (convert-to-subquery (remove-sort query))))
(defn ^:private rename-all-tables [query]
@@ -393,6 +394,14 @@
(assoc query :drop (+ old-drop n))
(assoc query :drop n))))
+(defn distinct
+ "Return only unique rows from this query."
+ [query]
+ (assoc (if (or (:take query) (:drop query))
+ (convert-to-subquery query)
+ query)
+ :distinct true))
+
(defn ^:private union-compatible? [& queries]
(and (every? (comp seq keys :fields) queries)
(apply = (map (comp set keys :fields) queries))