diff options
Diffstat (limited to 'src/clojure_sql/core.clj')
-rw-r--r-- | src/clojure_sql/core.clj | 87 |
1 files changed, 54 insertions, 33 deletions
diff --git a/src/clojure_sql/core.clj b/src/clojure_sql/core.clj index cdfa1c9..4f88a53 100644 --- a/src/clojure_sql/core.clj +++ b/src/clojure_sql/core.clj @@ -3,58 +3,72 @@ (:require [clojure.set :as set] [clojure-sql.compiler :as c] [clojure-sql.dsl :as d] + [clojure-sql.query :as q] [clojure-sql.util :as u] [clojure.walk])) -(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 ^:private ^:dynamic *database-type* nil) +(defn set-database-type! [new-type] + (alter-var-root #'*database-type* (constantly new-type)) + nil) + +(q/set-query-deref-behaviour! #(c/compile *database-type* %)) +(defmethod print-method clojure_sql.query.Query [query writer] + (binding [*out* writer] + (pr (c/compile nil query)))) + +(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!) + + -(def insert! d/insert!) -(def update! d/update!) -(def delete! d/delete!) (comment - (binding [*database-type* :mysql] - (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])))) + (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) - (join (table :something-else-with-a-username) - :on true) + (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}) + (rename {:name :child.name + :parent-id :pid}) (join (-> (table {:nodes :parent}) (project [:id, :name]) (rename {:name :parent.name})) - :on '(= :parent-id :id)) + :on '(= :pid :id)) (project [:child.name :parent.name])) (-> (table :users) @@ -67,12 +81,19 @@ :name :id})) (-> (table :users) (project {:id :name - :name :id})) + :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")))) |