fix #218 by moving the protocol option

This commit is contained in:
Sean Corfield 2022-08-28 21:30:26 -07:00
parent aac1a6642d
commit af57829fcb
5 changed files with 18 additions and 6 deletions

View file

@ -3,6 +3,7 @@
Only accretive/fixative changes will be made from now on. Only accretive/fixative changes will be made from now on.
* 1.2.next in progress * 1.2.next in progress
* Address [#218](https://github.com/seancorfield/next-jdbc/issues/218) by moving `:extend-via-metadata true` after the protocols' docstrings.
* Document `:useBulkCopyForBatchInsert` for Microsoft SQL Server via PR [#216](https://github.com/seancorfield/next-jdbc/issues/216) -- [danskarda](https://github.com/danskarda). * Document `:useBulkCopyForBatchInsert` for Microsoft SQL Server via PR [#216](https://github.com/seancorfield/next-jdbc/issues/216) -- [danskarda](https://github.com/danskarda).
* Address [#214](https://github.com/seancorfield/next-jdbc/issues/214) by updating test/CI versions. * Address [#214](https://github.com/seancorfield/next-jdbc/issues/214) by updating test/CI versions.
* Address [#212](https://github.com/seancorfield/next-jdbc/issues/212) by documenting the problem with SQLite's JDBC driver. * Address [#212](https://github.com/seancorfield/next-jdbc/issues/212) by documenting the problem with SQLite's JDBC driver.

View file

@ -26,12 +26,13 @@
(set! *warn-on-reflection* true) (set! *warn-on-reflection* true)
(defprotocol SettableParameter :extend-via-metadata true (defprotocol SettableParameter
"Protocol for setting SQL parameters in statement objects, which "Protocol for setting SQL parameters in statement objects, which
can convert from Clojure values. The default implementation just can convert from Clojure values. The default implementation just
calls `.setObject` on the parameter value. It can be extended to calls `.setObject` on the parameter value. It can be extended to
use other methods of `PreparedStatement` to convert and set parameter use other methods of `PreparedStatement` to convert and set parameter
values. Extension via metadata is supported." values. Extension via metadata is supported."
:extend-via-metadata true
(set-parameter [val stmt ix] (set-parameter [val stmt ix]
"Convert a Clojure value into a SQL value and store it as the ix'th "Convert a Clojure value into a SQL value and store it as the ix'th
parameter in the given SQL statement object.")) parameter in the given SQL statement object."))

View file

@ -11,13 +11,14 @@
(set! *warn-on-reflection* true) (set! *warn-on-reflection* true)
(defprotocol Sourceable :extend-via-metadata true (defprotocol Sourceable
"Protocol for producing a `javax.sql.DataSource`. "Protocol for producing a `javax.sql.DataSource`.
Implementations are provided for strings, hash maps (`db-spec` structures), Implementations are provided for strings, hash maps (`db-spec` structures),
and also a `DataSource` (which just returns itself). and also a `DataSource` (which just returns itself).
Extension via metadata is supported." Extension via metadata is supported."
:extend-via-metadata true
(get-datasource ^javax.sql.DataSource [this] (get-datasource ^javax.sql.DataSource [this]
"Produce a `javax.sql.DataSource`.")) "Produce a `javax.sql.DataSource`."))
@ -54,10 +55,11 @@
(prepare ^java.sql.PreparedStatement [this sql-params opts] (prepare ^java.sql.PreparedStatement [this sql-params opts]
"Produce a new `java.sql.PreparedStatement` for use with `with-open`.")) "Produce a new `java.sql.PreparedStatement` for use with `with-open`."))
(defprotocol Transactable :extend-via-metadata true (defprotocol Transactable
"Protocol for running SQL operations in a transaction. "Protocol for running SQL operations in a transaction.
Implementations are provided for `Connection`, `DataSource`, and `Object` Implementations are provided for `Connection`, `DataSource`, and `Object`
(on the assumption that an `Object` can be turned into a `DataSource`)." (on the assumption that an `Object` can be turned into a `DataSource`)."
:extend-via-metadata true
(-transact [this body-fn opts] (-transact [this body-fn opts]
"Run the `body-fn` inside a transaction.")) "Run the `body-fn` inside a transaction."))

View file

@ -106,12 +106,13 @@
(get-unqualified-modified-column-names rsmeta (get-unqualified-modified-column-names rsmeta
(assoc opts :label-fn lower-case))) (assoc opts :label-fn lower-case)))
(defprotocol ReadableColumn :extend-via-metadata true (defprotocol ReadableColumn
"Protocol for reading objects from the `java.sql.ResultSet`. Default "Protocol for reading objects from the `java.sql.ResultSet`. Default
implementations (for `Object` and `nil`) return the argument, and the implementations (for `Object` and `nil`) return the argument, and the
`Boolean` implementation ensures a canonicalized `true`/`false` value, `Boolean` implementation ensures a canonicalized `true`/`false` value,
but it can be extended to provide custom behavior for special types. but it can be extended to provide custom behavior for special types.
Extension via metadata is supported." Extension via metadata is supported."
:extend-via-metadata true
(read-column-by-label [val label] (read-column-by-label [val label]
"Function for transforming values after reading them via a column label.") "Function for transforming values after reading them via a column label.")
(read-column-by-index [val rsmeta idx] (read-column-by-index [val rsmeta idx]
@ -443,7 +444,7 @@
(definterface MapifiedResultSet) (definterface MapifiedResultSet)
(defprotocol InspectableMapifiedResultSet :extend-via-metadata true (defprotocol InspectableMapifiedResultSet
"Protocol for exposing aspects of the (current) result set via functions. "Protocol for exposing aspects of the (current) result set via functions.
The intent here is to expose information that is associated with either The intent here is to expose information that is associated with either
@ -452,6 +453,7 @@
`next.jdbc/plan`, including situations where the reducing function has `next.jdbc/plan`, including situations where the reducing function has
to realize a row by calling `datafiable-row` but still wants to call to realize a row by calling `datafiable-row` but still wants to call
these functions on the (realized) row." these functions on the (realized) row."
:extend-via-metadata true
(row-number [this] (row-number [this]
"Return the current 1-based row number, if available. "Return the current 1-based row number, if available.

View file

@ -129,6 +129,12 @@
(= "derby" db) (= "derby" db)
(assoc :create true)))) (assoc :create true))))
(deftest test-sourceable-via-metadata
(doseq [db test-dbs]
(let [ds (p/get-datasource
^{`p/get-datasource (fn [v] (p/get-datasource (first v)))} [db])]
(is (instance? javax.sql.DataSource ds)))))
(deftest test-get-connection (deftest test-get-connection
(doseq [db test-dbs] (doseq [db test-dbs]
(println 'test-get-connection (:dbtype db)) (println 'test-get-connection (:dbtype db))