From 2746c6b08b878190ee7c54a7414bf444c660ff1e Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Mon, 25 Nov 2013 01:13:11 +1100 Subject: Add a 'distinct' operator - still a bug to fix on renaming --- src/clojure_sql/dsl.clj | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/clojure_sql/dsl.clj') 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)) -- cgit v1.2.3