summaryrefslogtreecommitdiff
path: root/src/clojure_sql/jdbc.clj
diff options
context:
space:
mode:
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)))))))))