diff options
Diffstat (limited to 'src/clojure_sql/jdbc.clj')
-rw-r--r-- | src/clojure_sql/jdbc.clj | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/clojure_sql/jdbc.clj b/src/clojure_sql/jdbc.clj index 44ed55e..5a3a55d 100644 --- a/src/clojure_sql/jdbc.clj +++ b/src/clojure_sql/jdbc.clj @@ -1,6 +1,8 @@ (ns clojure-sql.jdbc (:require [clojure.java.jdbc :as jdbc] - [clojure-sql.core :refer [set-query-executor!]] + [clojure-sql.query :refer [QueryExecutor fn->QueryExecutor]] + [clojure-sql.compiler :as compiler] + ;;[clojure-sql.core :refer [set-query-executor!]] [clojure.string :as string])) (defn ^:private dotted-to-nested-map-one [obj] @@ -16,13 +18,26 @@ (defn ^:private dotted-to-nested-maps [objs] (mapv dotted-to-nested-map-one objs)) -(defn use-jdbc! [connection-string] - (set-query-executor! (fn [type query] - (jdbc/with-connection connection-string - (case type - :select (jdbc/with-query-results results query - (dotted-to-nested-maps results)) - :insert (jdbc/do-prepared-return-keys (first query) (next query)) - :update (jdbc/do-prepared-return-keys (first query) (next query)) - :delete (first (jdbc/do-prepared (first query) (next query))) - (assert false (str "Unknown query type: " type))))))) +(defn jdbc-executor [connection-string] + (let [[_ db-type] (re-find #"^jdbc:([^:]+)" connection-string)] + (reify QueryExecutor + (query [_ query] + (let [compiled (compiler/compile-select db-type query)] + (jdbc/with-connection connection-string + (jdbc/with-query-results results compiled + (dotted-to-nested-maps results))))) + + (insert! [_ query records] + (let [compiled (compiler/compile-insert db-type query records)] + (jdbc/with-connection connection-string + (jdbc/do-prepared-return-keys (first query) (next query))))) + + (update! [_ query partial-record] + (let [compiled (compiler/compile-update db-type query partial-record)] + (jdbc/with-connection connection-string + (jdbc/do-prepared-return-keys (first query) (next query))))) + + (delete! [_ query] + (let [compiled (compiler/compile-delete db-type query)] + (jdbc/with-connection connection-string + (first (jdbc/do-prepared (first query) (next query))))))))) |