2019-01-08 07:03:20 +00:00
|
|
|
;; copyright (c) 2018-2019 Sean Corfield, all rights reserved
|
2019-01-08 04:38:58 +00:00
|
|
|
|
2019-01-08 07:03:20 +00:00
|
|
|
(ns next.jdbc
|
|
|
|
|
""
|
2019-03-31 23:54:34 +00:00
|
|
|
(:require [next.jdbc.connection] ; used to extend protocols
|
|
|
|
|
[next.jdbc.prepare :as prepare] ; used to extend protocols
|
|
|
|
|
[next.jdbc.protocols :as p]
|
|
|
|
|
[next.jdbc.result-set :as rs]
|
2019-04-01 02:30:01 +00:00
|
|
|
[next.jdbc.sql :as sql]
|
2019-04-01 01:22:04 +00:00
|
|
|
[next.jdbc.transaction])) ; used to extend protocols
|
2019-01-08 07:03:20 +00:00
|
|
|
|
|
|
|
|
(set! *warn-on-reflection* true)
|
|
|
|
|
|
2019-03-31 23:54:34 +00:00
|
|
|
(defn get-datasource [spec] (p/get-datasource spec))
|
2019-01-11 03:23:35 +00:00
|
|
|
|
2019-03-31 23:54:34 +00:00
|
|
|
(defn get-connection [spec opts] (p/get-connection spec opts))
|
2019-01-10 07:30:46 +00:00
|
|
|
|
2019-03-31 23:54:34 +00:00
|
|
|
(defn prepare [spec sql-params opts] (p/prepare spec sql-params opts))
|
2019-01-08 07:03:20 +00:00
|
|
|
|
2019-03-31 06:12:37 +00:00
|
|
|
(defn reducible!
|
2019-03-31 03:36:53 +00:00
|
|
|
"General SQL execution function.
|
|
|
|
|
|
|
|
|
|
Returns a reducible that, when reduced, runs the SQL and yields the result."
|
2019-03-31 23:54:34 +00:00
|
|
|
([stmt] (p/-execute stmt [] {}))
|
2019-03-31 03:36:53 +00:00
|
|
|
([connectable sql-params & [opts]]
|
2019-03-31 23:54:34 +00:00
|
|
|
(p/-execute connectable sql-params opts)))
|
2019-01-26 08:21:03 +00:00
|
|
|
|
2019-03-31 06:13:01 +00:00
|
|
|
(defn execute!
|
2019-01-26 08:21:03 +00:00
|
|
|
""
|
2019-03-31 23:54:34 +00:00
|
|
|
([stmt]
|
|
|
|
|
(rs/execute! stmt [] {}))
|
|
|
|
|
([connectable sql-params]
|
|
|
|
|
(rs/execute! connectable sql-params {}))
|
2019-03-31 06:13:01 +00:00
|
|
|
([connectable sql-params opts]
|
2019-03-31 23:54:34 +00:00
|
|
|
(rs/execute! connectable sql-params opts)))
|
2019-01-26 08:21:03 +00:00
|
|
|
|
2019-03-31 06:13:01 +00:00
|
|
|
(defn execute-one!
|
2019-01-26 08:21:03 +00:00
|
|
|
""
|
2019-03-31 23:54:34 +00:00
|
|
|
([stmt]
|
|
|
|
|
(rs/execute-one! stmt [] {}))
|
|
|
|
|
([connectable sql-params]
|
|
|
|
|
(rs/execute-one! connectable sql-params {}))
|
2019-03-31 06:13:01 +00:00
|
|
|
([connectable sql-params opts]
|
2019-03-31 23:54:34 +00:00
|
|
|
(rs/execute-one! connectable sql-params opts)))
|
|
|
|
|
|
|
|
|
|
(defmacro with-transaction
|
|
|
|
|
[[sym connectable opts] & body]
|
|
|
|
|
`(p/-transact ~connectable (fn [~sym] ~@body) ~opts))
|
2019-04-01 02:30:01 +00:00
|
|
|
|
|
|
|
|
(defn insert!
|
|
|
|
|
""
|
|
|
|
|
([connectable table key-map]
|
|
|
|
|
(rs/execute! connectable
|
|
|
|
|
(sql/for-insert table key-map {})
|
|
|
|
|
{:return-keys true}))
|
|
|
|
|
([connectable table key-map opts]
|
|
|
|
|
(rs/execute! connectable
|
|
|
|
|
(sql/for-insert table key-map opts)
|
|
|
|
|
(merge {:return-keys true} opts))))
|
|
|
|
|
|
|
|
|
|
(defn insert-multi!
|
|
|
|
|
""
|
|
|
|
|
([connectable table cols rows]
|
|
|
|
|
(rs/execute! connectable
|
|
|
|
|
(sql/for-insert-multi table cols rows {})
|
|
|
|
|
{:return-keys true}))
|
|
|
|
|
([connectable table cols rows opts]
|
|
|
|
|
(rs/execute! connectable
|
|
|
|
|
(sql/for-insert-multi table cols rows opts)
|
|
|
|
|
(merge {:return-keys true} opts))))
|
|
|
|
|
|
|
|
|
|
(defn find-by-keys
|
|
|
|
|
""
|
|
|
|
|
([connectable table key-map]
|
|
|
|
|
(rs/execute! connectable (sql/for-query table key-map {}) {}))
|
|
|
|
|
([connectable table key-map opts]
|
|
|
|
|
(rs/execute! connectable (sql/for-query table key-map opts) opts)))
|
|
|
|
|
|
|
|
|
|
(defn get-by-id
|
|
|
|
|
""
|
|
|
|
|
([connectable table pk]
|
|
|
|
|
(rs/execute-one! connectable (sql/for-query table {:id pk} {}) {}))
|
|
|
|
|
([connectable table pk opts]
|
|
|
|
|
(rs/execute-one! connectable (sql/for-query table {:id pk} opts) opts))
|
|
|
|
|
([connectable table pk pk-name opts]
|
|
|
|
|
(rs/execute-one! connectable (sql/for-query table {pk-name pk} opts) opts)))
|
|
|
|
|
|
|
|
|
|
(defn update!
|
|
|
|
|
""
|
|
|
|
|
([connectable table key-map where-params]
|
|
|
|
|
(rs/execute! connectable (sql/for-update table key-map where-params {}) {}))
|
|
|
|
|
([connectable table key-map where-params opts]
|
|
|
|
|
(rs/execute! connectable (sql/for-update table key-map where-params opts) opts)))
|
|
|
|
|
|
|
|
|
|
(defn delete!
|
|
|
|
|
""
|
|
|
|
|
([connectable table where-params]
|
|
|
|
|
(rs/execute! connectable (sql/for-delete table where-params {}) {}))
|
|
|
|
|
([connectable table where-params opts]
|
|
|
|
|
(rs/execute! connectable (sql/for-delete table where-params opts) opts)))
|