summaryrefslogtreecommitdiff
path: root/src/clojure_sql/jdbc.clj
diff options
context:
space:
mode:
authorCarlo Zancanaro <carlo@clearboxsystems.com.au>2013-11-12 16:58:44 +1100
committerCarlo Zancanaro <carlo@clearboxsystems.com.au>2013-11-12 16:58:44 +1100
commitfe513564989d9151a79d5494f2958ae190c20d02 (patch)
treee2a802702a1fb19f4dfe7220bc9f09a3710f239b /src/clojure_sql/jdbc.clj
parent1685984030a9d1cd588196d9e2cf648e57034f72 (diff)
Change the query executor model: now it's query local and the interface is managed by a protocol.
Diffstat (limited to 'src/clojure_sql/jdbc.clj')
-rw-r--r--src/clojure_sql/jdbc.clj37
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)))))))))