You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- The `DATABASE``ConnectionFactoryOption` is interpreted as the
166
170
[service name](https://docs.oracle.com/en/database/oracle/oracle-database/21/netag/identifying-and-accessing-database.html#GUID-153861C1-16AD-41EC-A179-074146B722E6) of an Oracle Database instance.
167
171
System Identifiers (SID) are not recognized.
168
172
- A subset of Oracle JDBC's connection properties are supported as extended
169
-
Options. For Options having any of the following names, a CharSequence value may be specified:
173
+
options. Extended options that configure Oracle JDBC connection properties are declared in `oracle.r2dbc.OracleR2dbcOptions`. These options all have the same name as their corresponding Oracle JDBC connection property, and will accept a `CharSequence` value:
- Cached query results can cause phantom reads even if the serializable
196
199
transaction isolation level is set. Set this to "false" if using the
197
200
serializable isolation level.
198
-
- Oracle Net Descriptors of the form ```(DESCRIPTION=...)``` may be specified as an io.r2dbc.spi.Option having the name `oracleNetDescriptor`.
199
-
- If `oracleNetDescriptor` is specified, then it is invalid to specify any other options that might conflict with information in the descriptor, such as: `HOST`, `PORT`, `DATABASE`, and `SSL`.
200
-
- The `oracleNetDescriptor` option may appear in the query section of an R2DBC URL: `r2dbc:oracle://?oracleNetDescriptor=(DESCRIPTION=...)`
201
-
- The `oracleNetDescriptor` option may be provided programatically: `ConnectionFactoryOptions.builder().option(Option.valueOf("oracleNetDescriptor"), "(DESCRIPTION=...)")`
202
-
- The `oracleNetDescriptor` option may be set as the alias of a descriptor in a tnsnames.ora file. The directory of tnsnames.ora may be set using an io.r2dbc.spi.Option having the name `TNS_ADMIN`: `r2dbc:oracle://?oracleNetDescriptor=myAlias&TNS_ADMIN=/path/to/tnsnames/`
203
-
201
+
- Oracle Net Descriptors of the form ```(DESCRIPTION=...)``` may be specified using `oracle.r2dbc.OracleR2dbcOptions.DESCRIPTOR`.
202
+
- If a descriptor is specified, then it is invalid to specify any other options that might conflict with information in the descriptor, such as: `HOST`, `PORT`, `DATABASE`, and `SSL`.
203
+
- The `DESCRIPTOR` option has the name `oracle.r2dbc.descriptor`, and this may appear in the query section of an R2DBC URL: `r2dbc:oracle://?oracle.r2dbc.descriptor=(DESCRIPTION=...)`
204
+
- The `DESCRIPTOR` option may be provided programmatically:
- The `DESCRIPTOR` option may be set to an aliased entry of a tnsnames.ora file. The directory of tnsnames.ora may be set using an option with the name `TNS_ADMIN`: `r2dbc:oracle://?oracle.r2dbc.descriptor=myAlias&TNS_ADMIN=/path/to/tnsnames/`
209
+
- A `java.util.concurrent.Executor` to use for executing asynchronous callbacks may specified using `oracle.r2dbc.OracleR2dbcOptions.EXECUTOR`.
210
+
- The `EXECUTOR` option can only be set programmatically, it can not be set in the query section of an R2DBC URL:
- Oracle R2DBC's ConnectionFactory and ConnectionFactoryProvider are thread safe.
221
+
- Oracle R2DBC's `ConnectionFactory` and `ConnectionFactoryProvider` are thread safe.
207
222
- All other SPI implementations are not thread safe.
208
-
- Executing parallel database calls is not supported over a single Connection.
209
-
If a thread attempts to initiate a parallel call, that thread is blocked until
210
-
the connection is no longer executing any other call. This is a
211
-
limitation of the Oracle Database, which does not support parallel calls
212
-
within a single session.
223
+
- Executing parallel database calls is not supported over a single `Connection`.
224
+
If a thread attempts to initiate a parallel call, that call will be enqueued. The enqueued call will not be executed until the connection is no longer executing any other call. This is a limitation of the Oracle Database, which does not support parallel calls within a single session.
213
225
214
226
### Reactive Streams
215
227
- The Oracle R2DBC javadoc of every method that returns a Publisher specifies the
@@ -228,7 +240,7 @@ or Oracle JDBC Driver error message](https://docs.oracle.com/en/database/oracle/
228
240
- READ COMMITTED is the default transaction isolation level
229
241
- SERIALIZABLE is the only isolation level, besides READ COMMITED, that
230
242
Oracle Database supports.
231
-
- Transaction savepoints are not supported in this release.
243
+
- To avoid phantom reads, configure `oracle.r2dbc.OracleR2dbcOptions.ENABLE_QUERY_RESULT_CACHE` as `false` when using SERIALIZABLE isolation.
232
244
- Oracle Database does not support a lock wait timeout that is configurable
233
245
within the scope of a transaction or session. SPI methods that configure a
@@ -287,35 +299,35 @@ of each row affected by an INSERT or UPDATE.
287
299
```Result``` for each returned cursor.
288
300
289
301
### Type Mappings
290
-
- javax.json.JsonObject and oracle.sql.json.OracleJsonObject are supported as
291
-
Java type mappings for JSON column values.
292
-
- java.time.Duration is supported as a Java type mapping for INTERVAL DAY TO SECOND
302
+
-`javax.json.JsonObject` and `oracle.sql.json.OracleJsonObject` are supported as
303
+
Java type mappings for `JSON` column values.
304
+
-`java.time.Duration` is supported as a Java type mapping for `INTERVAL DAY TO SECOND`
293
305
column values.
294
-
- java.time.Period is supported as a Java type mapping for INTERVAL YEAR TO MONTH
306
+
-`java.time.Period` is supported as a Java type mapping for `INTERVAL YEAR TO MONTH`
295
307
column values.
296
-
- java.time.LocalDateTime is supported as a Java type mapping for DATE column values.
297
-
The Oracle Database type named "DATE" stores the same information as a LocalDateTime:
298
-
year, month, day, hour, minute, and second.
308
+
-`java.time.LocalDateTime` is supported as a Java type mapping for `DATE` column values.
309
+
The Oracle Database type named "DATE" stores the same information as a `LocalDateTime`:
310
+
year, month, day, hour, minute, and second.
299
311
300
312
### BLOB, CLOB, and NCLOB
301
313
When a SQL query returns a LOB value, a
302
314
portion of that value is prefetched from the database and the remaining portion
303
315
must be fetched with additional database calls. The number of prefetched
304
-
bytes is configured by an ```Option``` named [oracle.jdbc.defaultLobPrefetchSize](https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_DEFAULT_LOB_PREFETCH_SIZE)
305
-
. The default value of this ```Option``` is 1 GB.
316
+
bytes is configured by an `Option` named [oracle.jdbc.defaultLobPrefetchSize](https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_DEFAULT_LOB_PREFETCH_SIZE)
317
+
. The default value of this `Option` is 1 GB.
306
318
307
-
The ```Row.get(...)``` method allows LOB values to be mapped into materialized
308
-
types like ```ByteBuffer``` and ```String```. If the prefetch size is large
309
-
enough to have fetched the entire LOB value, then ```Row.get(...)``` can
310
-
return a ```ByteBuffer/String``` without any additional database calls.
319
+
The `Row.get(...)` method allows LOB values to be mapped into materialized
320
+
types like `ByteBuffer` and `String`. If the prefetch size is large
321
+
enough to have fetched the entire LOB value, then `Row.get(...)` can
322
+
return a `ByteBuffer/String` without any additional database calls.
311
323
Otherwise, if the LOB value is larger than the prefetch size, then
312
-
```Row.get(...)``` must execute a **blocking database call** to fetch the
324
+
`Row.get(...)` must execute a **blocking database call** to fetch the
313
325
remainder of that value.
314
326
315
327
For systems in which LOB values are too large to be prefetched, a smaller
316
-
prefetch size can be configured, and LOB values may be mapped into ```Blob```
317
-
or ```Clob``` objects rather than ```ByteBuffer``` or ```String```. ```Blob```
318
-
and ```Clob``` objects allow the LOB value to be streamed using non-blocking
328
+
prefetch size can be configured, and LOB values may be mapped into `Blob`
329
+
or `Clob` objects rather than `ByteBuffer` or `String`. `Blob`
330
+
and `Clob` objects allow the LOB value to be streamed using non-blocking
0 commit comments