db provided to views can now also be a function that returns a db

This commit is contained in:
Gered 2016-05-20 18:30:36 -04:00
parent 06edd82ff5
commit 42b8e57f7c

View file

@ -8,11 +8,14 @@
[clojure.java.jdbc :as j]
[clojure.tools.logging :refer [warn]]))
(defrecord HSQLView [id db query-fn row-fn]
(defrecord HSQLView [id db-or-db-fn query-fn row-fn]
IView
(id [_] id)
(data [_ namespace parameters]
(let [start (System/currentTimeMillis)
(let [db (if (fn? db-or-db-fn)
(db-or-db-fn namespace)
db-or-db-fn)
start (System/currentTimeMillis)
data (j/query db (hsql/format (apply query-fn parameters)) :row-fn row-fn)
time (- (System/currentTimeMillis) start)]
(when (>= time 1000) (warn id "took" time "msecs"))
@ -24,6 +27,8 @@
(boolean (some #(not-empty (intersection (:hint %) tables)) nhints)))))
(defn view
"Creates a Honey SQL view that uses a jdbc database configuration"
[id db hsql-fn & {:keys [row-fn]}]
(HSQLView. id db hsql-fn (or row-fn identity)))
"Creates a Honey SQL view that uses a JDBC database configuration. The db passed in
can either be a standard database connection map, or it can be a function that gets
passed a namespace and returns a database connection map."
[id db-or-db-fn hsql-fn & {:keys [row-fn]}]
(HSQLView. id db-or-db-fn hsql-fn (or row-fn identity)))