diff options
author | Carlo Zancanaro <carlo@clearboxsystems.com.au> | 2013-06-20 13:58:31 +1000 |
---|---|---|
committer | Carlo Zancanaro <carlo@clearboxsystems.com.au> | 2013-06-20 13:58:31 +1000 |
commit | 3ce695f6b2daf943490b2b4a9dac7be01bdd6356 (patch) | |
tree | 1da9ab364603d2f784ab3e6a44ceb9003811d91e /src/clojure_sql/core.clj | |
parent | b8fef59b7b85ae414ad64d2fb6540b3aea66602c (diff) |
A few small changes/fixes to join behaviour, and code cleanup
Fix compilation of cross joins.
Remove the sort clauses on queries when they become subqueries in joins because
then the sorting means nothing (although when take/drop stuff is added the sort
will be relevant, so we'll see about that).
Favour the left side of a join, which is mostly only relevant for the outer
join case (and technically it's not quite right for full-outer joins, maybe,
but I'll get to that later).
Diffstat (limited to 'src/clojure_sql/core.clj')
-rw-r--r-- | src/clojure_sql/core.clj | 91 |
1 files changed, 9 insertions, 82 deletions
diff --git a/src/clojure_sql/core.clj b/src/clojure_sql/core.clj index 4e3db34..72438a6 100644 --- a/src/clojure_sql/core.clj +++ b/src/clojure_sql/core.clj @@ -1,5 +1,5 @@ (ns clojure-sql.core - (:refer-clojure :exclude [sort-by]) + (:refer-clojure :exclude [sort]) (:require [clojure.set :as set] [clojure-sql.compiler :as c] [clojure-sql.dsl :as d] @@ -17,85 +17,12 @@ (binding [*out* writer] (pr (c/compile nil query)))) -(comment - (def table #'d/table) - (def project #'d/project) - (def rename #'d/rename) - (def join #'d/join) - (def select #'d/select) - (def sort-by #'d/sort-by) - - (def insert! #'c/insert!) - (def update! #'c/update!) - (def delete! #'c/delete!)) - - - - - - -(comment - - (let [users (-> (table :users) - (project [:id :username :password]) - (select '(= :deleted false))) - people (-> (table :people) - (project [:id :fname :sname]) - (select '(= :deleted false))) - uid-pid-match '(= :uid :pid) - is-carlo `(= :fname "Carlo'; SELECT * FROM users --")] - (-> (join (-> users - (rename {:id :uid})) - (join (-> people - (rename {:id :pid})) - (-> (table {:others :o}) - (project {:id :oid})) - :on '(= :pid :oid)) - :on uid-pid-match) - (select is-carlo) - (project [:fname :sname :oid]))) - - (-> (table :users) - (project [:username]) - (join (table :something-else-with-a-username)) - (select '(or (= :username "john") - (not (= :username "carlo")))) - (project [:username])) - - (-> (table {:nodes :child}) - (project [:parent-id, :name]) - (rename {:name :child.name - :parent-id :pid}) - (join (-> (table {:nodes :parent}) - (project [:id, :name]) - (rename {:name :parent.name})) - :on '(= :pid :id)) - (project [:child.name :parent.name])) - - (-> (table :users) - (project [:id]) - (join (-> (table :people) - (project [:id])))) - (-> (table :users) - (project [:id :name]) - (rename {:id :name - :name :id})) - (-> (table :users) - (project {:id :name - :name :id}) - (select '(= :id 10))) - - (-> (table :anotherStack) - (project [:anotherNumber]) - (join (-> (table :collection) - (project [:number])))) - - (-> (table :anotherStack) - (project [:anotherNumber]) - (join (-> (table :collection) - (project [:number]))) - (select '(is-okay 10))) - - (-> (table :users) - (select '(= (left :username 1) "bloo")))) +(def table #'d/table) +(def project #'d/project) +(def rename #'d/rename) +(def join #'d/join) +(def select #'d/select) +(def group #'d/group) +(def having #'d/having) +(def sort #'d/sort) |