fix #256 by documenting the new macros
This commit is contained in:
parent
c8cf8c7d2f
commit
190958b74e
5 changed files with 33 additions and 4 deletions
|
|
@ -4,7 +4,7 @@ Only accretive/fixative changes will be made from now on.
|
||||||
|
|
||||||
* 1.3.next in progress
|
* 1.3.next in progress
|
||||||
* Fix [#257](https://github.com/seancorfield/next-jdbc/issues/257) by making the `fdef` spec for `with-transaction` more permissive. Also add specs for `on-connection` and the `+options` variants of both macros.
|
* Fix [#257](https://github.com/seancorfield/next-jdbc/issues/257) by making the `fdef` spec for `with-transaction` more permissive. Also add specs for `on-connection` and the `+options` variants of both macros.
|
||||||
* Address [#256](https://github.com/seancorfield/next-jdbc/issues/256) by adding `with-transaction+options` and `on-connection+options`. Documentation TBD.
|
* Address [#256](https://github.com/seancorfield/next-jdbc/issues/256) by adding `with-transaction+options` and `on-connection+options`.
|
||||||
* Update `tools.build` to 0.9.5 (and remove `:java-opts` from `build/test`)
|
* Update `tools.build` to 0.9.5 (and remove `:java-opts` from `build/test`)
|
||||||
|
|
||||||
* 1.3.883 -- 2023-06-25
|
* 1.3.883 -- 2023-06-25
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ In addition to the above, `next.jdbc/execute-batch!` (which may create a `Prepar
|
||||||
|
|
||||||
## Transactions
|
## Transactions
|
||||||
|
|
||||||
The `transact` function and `with-transaction` macro accept the following options:
|
The `transact` function and `with-transaction` (`+options`) macro accept the following options:
|
||||||
|
|
||||||
* `:isolation` -- a keyword that identifies the isolation to be used for this transaction: `:none`, `:read-committed`, `:read-uncommitted`, `:repeatable-read`, or `:serializable`; these represent increasingly strict levels of transaction isolation and may not all be available depending on the database and/or JDBC driver being used,
|
* `:isolation` -- a keyword that identifies the isolation to be used for this transaction: `:none`, `:read-committed`, `:read-uncommitted`, `:repeatable-read`, or `:serializable`; these represent increasingly strict levels of transaction isolation and may not all be available depending on the database and/or JDBC driver being used,
|
||||||
* `:read-only` -- a `Boolean` that indicates whether the transaction should be read-only or not (the default),
|
* `:read-only` -- a `Boolean` that indicates whether the transaction should be read-only or not (the default),
|
||||||
|
|
|
||||||
|
|
@ -445,7 +445,7 @@ You can read more about [working with transactions](/doc/transactions.md) furthe
|
||||||
(jdbc/execute! con-opts ...) ; auto-committed
|
(jdbc/execute! con-opts ...) ; auto-committed
|
||||||
|
|
||||||
(jdbc/with-transaction [tx con-opts] ; will commit or rollback this group:
|
(jdbc/with-transaction [tx con-opts] ; will commit or rollback this group:
|
||||||
(let [tx-opts (jdbc/with-options tx (:options con-opts)]
|
(let [tx-opts (jdbc/with-options tx (:options con-opts))]
|
||||||
(jdbc/execute! tx-opts ...)
|
(jdbc/execute! tx-opts ...)
|
||||||
(jdbc/execute! tx-opts ...)
|
(jdbc/execute! tx-opts ...)
|
||||||
(into [] (map :column) (jdbc/plan tx-opts ...))))
|
(into [] (map :column) (jdbc/plan tx-opts ...))))
|
||||||
|
|
@ -453,6 +453,11 @@ You can read more about [working with transactions](/doc/transactions.md) furthe
|
||||||
(jdbc/execute! con-opts ...))) ; auto-committed
|
(jdbc/execute! con-opts ...))) ; auto-committed
|
||||||
```
|
```
|
||||||
|
|
||||||
|
As of 1.3.next, you can use `next.jdbc/with-transaction+options` instead,
|
||||||
|
which will automatically rewrap the `Connection` with the options from the
|
||||||
|
initial transactable. Be aware that means you cannot use Java interop on the
|
||||||
|
new connectable because it is no longer a plain Java `java.sql.Connection` object.
|
||||||
|
|
||||||
### Prepared Statement Caveat
|
### Prepared Statement Caveat
|
||||||
|
|
||||||
Not all databases support using a `PreparedStatement` for every type of SQL operation. You might have to create a `java.sql.Statement` instead, directly from a `java.sql.Connection` and use that, without parameters, in `plan`, `execute!`, or `execute-one!`. See the following example:
|
Not all databases support using a `PreparedStatement` for every type of SQL operation. You might have to create a `java.sql.Statement` instead, directly from a `java.sql.Connection` and use that, without parameters, in `plan`, `execute!`, or `execute-one!`. See the following example:
|
||||||
|
|
@ -629,6 +634,14 @@ if one is passed or create a new one if needed (and automatically close it after
|
||||||
|
|
||||||
> Note: to avoid confusion and/or incorrect usage, you cannot pass options to `on-connection` because they would be ignored in some cases (existing `Connection` or a wrapped `Connection`).
|
> Note: to avoid confusion and/or incorrect usage, you cannot pass options to `on-connection` because they would be ignored in some cases (existing `Connection` or a wrapped `Connection`).
|
||||||
|
|
||||||
|
As of 1.3.next, if you want the options from a wrapped connectable to flow
|
||||||
|
through to the new connectable inside `on-connection`, you can use the
|
||||||
|
`on-connection+options` variant of the macro. This will automatically rewrap
|
||||||
|
the connectable produced with the options from the initial connectable.
|
||||||
|
Be aware that means you cannot
|
||||||
|
use plain Java interop inside the body of the macro because the connectable
|
||||||
|
is no longer a plain Java `java.sql.Connection` object.
|
||||||
|
|
||||||
## Logging
|
## Logging
|
||||||
|
|
||||||
Sometimes it is convenient to have database operations logged automatically. `next.jdbc/with-logging`
|
Sometimes it is convenient to have database operations logged automatically. `next.jdbc/with-logging`
|
||||||
|
|
|
||||||
|
|
@ -108,3 +108,15 @@ transactions in the code under test.
|
||||||
* `(binding [next.jdbc.transaction/*nested-tx* :prohibit] ...)` will cause any attempt to start a nested transaction to throw an exception instead; this could be a useful way to detect the potentially buggy behavior described above (for either `:allow` or `:ignore`).
|
* `(binding [next.jdbc.transaction/*nested-tx* :prohibit] ...)` will cause any attempt to start a nested transaction to throw an exception instead; this could be a useful way to detect the potentially buggy behavior described above (for either `:allow` or `:ignore`).
|
||||||
|
|
||||||
> Note: this is a **global** setting (per thread) and not related to just a single connection, so you can't use this setting if you are working with multiple databases in the same context.
|
> Note: this is a **global** setting (per thread) and not related to just a single connection, so you can't use this setting if you are working with multiple databases in the same context.
|
||||||
|
|
||||||
|
### `with-options`
|
||||||
|
|
||||||
|
If you are using `with-options` to produce wrapped connectables / transactables,
|
||||||
|
it's important to be aware that `with-transaction` produces a bare Java
|
||||||
|
`java.sql.Connection` object that cannot have options -- but does allow direct
|
||||||
|
interop. If you want to use `with-options` with `with-transaction`, you must
|
||||||
|
either rewrap the `Connection` with a nested call to `with-options` or,
|
||||||
|
as of 1.3.next, you can use `with-transaction+options` which will automatically
|
||||||
|
rewrap the `Connection` in a new connectable along with the options from the
|
||||||
|
original transactable. Be aware that you cannot use Java interop on this
|
||||||
|
wrapped connectable.
|
||||||
|
|
|
||||||
|
|
@ -392,7 +392,11 @@
|
||||||
|
|
||||||
Otherwise, creates a new `Connection` object from the connectable,
|
Otherwise, creates a new `Connection` object from the connectable,
|
||||||
wraps that with options, executes the body, and automatically closes
|
wraps that with options, executes the body, and automatically closes
|
||||||
the new `Connection` for you."
|
the new `Connection` for you.
|
||||||
|
|
||||||
|
Note: the bound `sym` will be a **wrapped** connectable and not a plain
|
||||||
|
Java object, so you cannot call JDBC methods directly on it like you can
|
||||||
|
with `on-connection`."
|
||||||
[[sym connectable] & body]
|
[[sym connectable] & body]
|
||||||
`(let [con-obj# ~connectable]
|
`(let [con-obj# ~connectable]
|
||||||
(cond (instance? java.sql.Connection con-obj#)
|
(cond (instance? java.sql.Connection con-obj#)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue