==============================================================================
Databricks JDBC Driver Release Notes 
==============================================================================

The release notes summarize enhancements, new features, known issues, workflow changes, and version history for the Databricks JDBC Driver (OSS).

Version History ==============================================================
3.4.1 ========================================================================
Released 2026-05-26

BREAKING CHANGES in 3.4.1

Metadata JDBC Spec Compliance

This release unifies metadata behavior across Thrift and SQL Exec API backends
using SQL SHOW commands for all metadata operations on SQL warehouses. Several
non-spec-compliant behaviors have been corrected. Review the changes below before
upgrading. These changes do not affect metadata on All-Purpose Clusters.

 * `getTables`/`getColumns`/`getSchemas`: Catalog parameter is now treated as an exact-match identifier per JDBC spec. Passing `%` or wildcard patterns as catalog previously returned results across all catalogs. Use `null` to search all catalogs.
 * `getTables` with empty types array: Now returns zero rows per JDBC spec. Use `null` to return all types.
 * `getSchemas`: Now includes `information_schema` in results. Excludes `global_temp` schema (previously returned by Thrift for all catalogs).
 * `getPrimaryKeys`/`getImportedKeys`/`getCrossReference` with non-existent catalog, schema, or table: Now returns empty `ResultSet` instead of throwing `SQLException`.
 * `getImportedKeys` `UPDATE_RULE`/`DELETE_RULE`: Now returns `3` (`NO_ACTION`) instead of `0` (`CASCADE`) for Thrift, and `3` instead of `null` for SEA. This reflects that Unity Catalog foreign keys are informational and non-enforced.
 * `PreparedStatement.setDate()` now sends parameter type as `DATE` instead of `TIMESTAMP`. Previously, `setDate()` incorrectly serialized the parameter type as TIMESTAMP due to a mapping bug. Server-side behavior is unchanged (Databricks accepts both), but applications that inspect parameter types may see the difference.

Default Behavior Changes

 * Native geospatial type support (`GEOMETRY` and `GEOGRAPHY`) is now enabled by default. `getObject()` now returns `IGeometry`/`IGeography` instances instead of EWKT strings. Set `EnableGeoSpatialSupport=0` to restore the previous behavior.
 * `EnableArrow` connection property is deprecated and ignored. Arrow serialization is now always enabled. Setting `EnableArrow=0` previously disabled Arrow and forced columnar/JSON inline results; this value is now ignored and a deprecation warning is logged. For JSON inline results with SEA, disable CloudFetch via `EnableQueryResultDownload=0`. Exception: on AIX platforms and PowerPC architectures (`os.arch` contains `ppc`), `EnableArrow` is still honoured and defaults to disabled due to known Arrow native library compatibility issues.

Added

 * Added result set heartbeat / keep-alive to prevent server-side result expiry during slow consumption. When enabled via EnableHeartbeat=1, the driver periodically polls the backend to keep the operation alive while the client reads results. Configurable interval via `HeartbeatIntervalSeconds` (default 60s). Heartbeat automatically stops when results are fully consumed, ResultSet is closed, or the server returns a terminal state. Disabled by default due to cost implications (heartbeats keep the warehouse running).
 * Metadata operations now use SQL SHOW commands for both Thrift and SEA backends, ensuring consistent behavior for SQL warehouses regardless of underlying protocol. To revert to native Thrift metadata RPCs, set `UseQueryForMetadata=0`.

Updated

 * Bump `databricks-sdk-java` from 0.69.0 to 0.106.0. The driver's own `AgentDetector` injection in `UserAgentManager.setUserAgent` is removed because SDK 0.106 now natively emits the `agent/<name>` User-Agent token via its built-in `UserAgent.agentProvider()`; keeping both layered produced a duplicate token on every SDK-routed request. The bootstrap `buildUserAgentForConnectorService` path retains its own `AgentDetector` call because it bypasses `UserAgent.asString()`.
 * `getColumnTypeName()` for DECIMAL columns now preserves precision/scale suffix (e.g., `"DECIMAL(10,2)"`) consistently across both Thrift and SEA backends.
 * `EnableGeoSpatialSupport` no longer requires `EnableComplexDatatypeSupport=1`. Geospatial types (GEOMETRY, GEOGRAPHY) can now be enabled independently of complex type support (ARRAY, MAP, STRUCT).
 * Arrow schema deserialization failures (Thrift metadata path) now surface a dedicated driver error code `ARROW_SCHEMA_PARSING_ERROR` (vendor code `22000`) and a proper SQLSTATE `22000` (Data Exception) on the thrown `SQLException`, instead of the generic `RESULT_SET_ERROR` (1004) and the enum name as SQLSTATE. The exception message is unchanged.
 * When a Statement is re-executed, the previous server-side operation is now explicitly closed before starting the new execution, preventing orphaned server-side operations when Statements are reused.
 * Server-side operations are now closed proactively when `ResultSet.close()` is called, improving resource utilization. The client-side Statement remains open and reusable for re-execution.

Fixed

 * Bump shaded `jackson-core` from 2.18.6 to 2.18.7 to address SNYK-JAVA-COMFASTERXMLJACKSONCORE-15907551 (DoS via oversized JSON documents bypassing size limits). Fixes #1436.
 * Bump shaded `httpclient5`/`httpcore5`/`httpcore5-h2` from 5.3.1 to 5.5.2 to address CVE-2025-8671 (HTTP/2 stream-reset DoS in `httpcore5-h2`). Fixes #1436.
 * Bump shaded `netty-buffer`/`netty-common` from 4.2.12.Final to 4.2.13.Final to clear OWASP scanner reports for the May 2026 batch of netty codec CVEs (CVE-2026-42577/42579/42580/42581/42582/42583/42584/42585/42586/42587, CVE-2026-44248, CVE-2026-41417, CVE-2026-42578). The driver does not use any netty HTTP/codec components — these vulnerabilities are not exploitable in this usage — but the bump silences the false-positive CPE matches.
 * Bump shaded `commons-configuration2` from 2.10.1 to 2.15.0 to address CVE-2026-45205 (uncontrolled recursion when parsing untrusted YAML configurations). The driver does not parse untrusted YAML, so the practical risk is negligible.
 * Bump `lz4-java` from `org.lz4:lz4-java:1.8.1` to `at.yawk.lz4:lz4-java:1.10.1` to address CVE-2025-66566 (information leak via uncleared output buffers in the safe/unsafe Java decompressors). `org.lz4:lz4-java:1.8.1` is a relocation-only POM that resolves to `at.yawk.lz4:lz4-java:1.8.1`, so the published `databricks-jdbc-thin` artifact previously pulled the vulnerable fork transitively. The upstream `org.lz4` GA is no longer maintained; `at.yawk.lz4` is the fork that received the fix. Fixes #1455.
 * Fix `PreparedStatement.getMetaData()` crash (`IllegalArgumentException`) for SQL type aliases (VARCHAR, INTEGER, NUMERIC, DEC, REAL, NVARCHAR, NCHAR) returned by DESCRIBE QUERY
 * Fixed `DatabaseMetaData.getTables()` in Thrift mode returning rows when called with an empty `types` array. Per JDBC spec, empty types means "no types selected" and now correctly returns zero rows (matching SEA mode).
 * Fixed `?` characters inside SQL comments, string literals, and quoted identifiers being incorrectly counted as parameter placeholders when `supportManyParameters=1`. `SQLInterpolator` now uses `SqlCommentParser` to locate only real placeholders. Fixes #1331.
 * Fixed `MetadataOperationTimeout` not being applied when metadata operations use SHOW commands. Operations like `getTables`, `getSchemas`, and `getColumns` now respect the `MetadataOperationTimeout` connection property instead of hanging indefinitely with no timeout.
 * Reclassify transient server errors to standard SQL states (08S01, 40001) across all Thrift error sites. This ensures UC unavailability and concurrent modification errors surface consistently for better retry handling. Note: Dashboards and branching logic keyed on legacy XXUCC or 42000 must be updated.
 * Fixed telemetry HTTP client socket leak that prevented CRaC checkpoint. After `Connection.close()`, delayed telemetry flush tasks could re-create HTTP clients that were never closed, leaking TCP sockets. Fixes #1325.
 * Fixed client-side enforcement of `maxRows` limit. When `statement.setMaxRows()` is set, `ResultSet.next()` now returns false once the row limit is reached, even if the server returns more rows. Applies to all result types (Thrift, SEA, inline, CloudFetch).
 * Bump shaded `bouncycastle` (`bcprov-jdk18on`, `bcpkix-jdk18on`) from 1.79 to 1.84 to address CVE-2026-5598 (covert timing channel, severity 8.9) and two related MEDIUM CVEs (GHSA-wg6q-6289-32hp, GHSA-c3fc-8qff-9hwx). All three are unsurfaced by NVD-CPE scanners but visible to GHSA-backed scanners like OSV.
 * Bump shaded `libthrift` from 0.19.0 to 0.23.0 to clear the May 2026 Apache Thrift advisory batch (GHSA-7pwc-h2j2-rjgj covering CVE-2026-41603/41604/41605/43869). The libthrift 0.21 release changed `ProcessFunction`'s generic signatures, which required regenerating the project's checked-in Thrift-generated Java sources with the matching compiler.

Known gaps

 * With direct results explicitly disabled, large highly-compressible result sets may be silently truncated (fewer rows than expected, no error). Keep direct results enabled (the default) to avoid this; fix coming in an upcoming release.


3.3.3 ========================================================================
Released 2026-04-29

Enhancements & New Features

 * Added `CallableStatement` support with IN parameters. `Connection.prepareCall()` now returns a working `DatabricksCallableStatement` that supports positional parameter binding and execution via `{call proc(?)}` JDBC escape syntax. OUT/INOUT parameters and named parameters throw `SQLFeatureNotSupportedException`.
 * Added AI coding agent detection to the User-Agent header. When the driver is invoked by a known AI coding agent (e.g. Claude Code, Cursor, Gemini CLI), `agent/<product>` is appended to the User-Agent string.
 * Added support for using SQL SHOW commands for Thrift-mode metadata operations (`getTables`, `getColumns`, `getSchemas`, `getFunctions`, `getPrimaryKeys`, `getImportedKeys`, `getCrossReference`). Enable by setting `UseQueryForMetadata=1`. This aligns Thrift metadata behavior with Statement Execution API (SEA) mode.

Resolved Issues

 * Fixed unresolvable Maven Central POM for the uber JAR. The published POM no longer declares a transitive dependency on the internal `databricks-jdbc-core` coordinate (which is not published to Maven Central), restoring resolution for downstream consumers.
 * Improved error messages for cancelled statements: operations cancelled via `Statement.cancel()` or closed connections now return SQL state `HY008` (operation cancelled) instead of generic error codes.
 * Fixed race condition between chunk download error handling and result set close that could cause invalid state transition warnings (`CHUNK_RELEASED -> DOWNLOAD_FAILED`) during Arrow Cloud Fetch operations in resource-constrained environments.
 * Fixed `EnableBatchedInserts` silently falling back to individual execution when table or schema names contain special characters (e.g., hyphens) inside backtick-quoted identifiers. Added a warn log when the fallback occurs.
 * Fixed `IntervalConverter` crash (`IllegalArgumentException: Invalid interval metadata`) when INTERVAL columns are returned via CloudFetch.
 * Fixed `Statement` being prematurely closed after queries that return inline results, which prevented re-execution, `getResultSet()`, and `getExecutionResult()` from working.
 * Fixed primitive types within complex types (ARRAY, MAP, STRUCT) not being correctly parsed when Arrow serialization uses alternate formats: TIMESTAMP/TIMESTAMP_NTZ as epoch microseconds or component arrays, and BINARY as base64-encoded strings.
 * Fixed `PARSE_SYNTAX_ERROR` for column names containing special characters (e.g., dots) when `EnableBatchedInserts` is enabled.
 * Fixed Volume ingestion for SEA mode, which was broken due to statement being closed prematurely.
 * Fixed unclear `error: [null]` messages during transient HTTP failures (e.g. 502 Bad Gateway) in Thrift polling. Error messages now include server error details and use SQL state `08S01` (communication link failure) so callers can identify retryable errors. Also fixed `DatabricksError` (RuntimeException) from SDK client being unhandled in CloudFetch download paths.
 * Fixed escaped pattern characters in catalogName for `getSchemas`, as returned catalogName should be unescaped.
 * Fixed `getColumnClassName()` returning null for VARIANT columns in SEA mode by adding VARIANT to the type system.
 * Fixed `getColumns()` returning `DATA_TYPE=0` (NULL) for GEOMETRY/GEOGRAPHY columns in Thrift mode. Now returns `Types.VARCHAR` (12) when geospatial is disabled and `Types.OTHER` (1111) when enabled, consistent with SEA mode.
 * Fixed `getCrossReference()` returning 0 rows when parent args are passed in uppercase.

3.3.2 ========================================================================
DEPRECATED, Use v3.3.3 instead

Released 2026-04-27

Enhancements & New Features

 * Added `CallableStatement` support with IN parameters. `Connection.prepareCall()` now returns a working `DatabricksCallableStatement` that supports positional parameter binding and execution via `{call proc(?)}` JDBC escape syntax. OUT/INOUT parameters and named parameters throw `SQLFeatureNotSupportedException`.
 * Added AI coding agent detection to the User-Agent header. When the driver is invoked by a known AI coding agent (e.g. Claude Code, Cursor, Gemini CLI), `agent/<product>` is appended to the User-Agent string.
 * Added support for using SQL SHOW commands for Thrift-mode metadata operations (`getTables`, `getColumns`, `getSchemas`, `getFunctions`, `getPrimaryKeys`, `getImportedKeys`, `getCrossReference`). Enable by setting `UseQueryForMetadata=1`. This aligns Thrift metadata behavior with Statement Execution API (SEA) mode.

Resolved Issues

 * Improved error messages for cancelled statements: operations cancelled via `Statement.cancel()` or closed connections now return SQL state `HY008` (operation cancelled) instead of generic error codes.
 * Fixed race condition between chunk download error handling and result set close that could cause invalid state transition warnings (`CHUNK_RELEASED -> DOWNLOAD_FAILED`) during Arrow Cloud Fetch operations in resource-constrained environments.
 * Fixed `EnableBatchedInserts` silently falling back to individual execution when table or schema names contain special characters (e.g., hyphens) inside backtick-quoted identifiers. Added a warn log when the fallback occurs.
 * Fixed `IntervalConverter` crash (`IllegalArgumentException: Invalid interval metadata`) when INTERVAL columns are returned via CloudFetch.
 * Fixed `Statement` being prematurely closed after queries that return inline results, which prevented re-execution, `getResultSet()`, and `getExecutionResult()` from working.
 * Fixed primitive types within complex types (ARRAY, MAP, STRUCT) not being correctly parsed when Arrow serialization uses alternate formats: TIMESTAMP/TIMESTAMP_NTZ as epoch microseconds or component arrays, and BINARY as base64-encoded strings.
 * Fixed `PARSE_SYNTAX_ERROR` for column names containing special characters (e.g., dots) when `EnableBatchedInserts` is enabled.
 * Fixed Volume ingestion for SEA mode, which was broken due to statement being closed prematurely.
 * Fixed unclear `error: [null]` messages during transient HTTP failures (e.g. 502 Bad Gateway) in Thrift polling. Error messages now include server error details and use SQL state `08S01` (communication link failure) so callers can identify retryable errors. Also fixed `DatabricksError` (RuntimeException) from SDK client being unhandled in CloudFetch download paths.
 * Fixed escaped pattern characters in catalogName for `getSchemas`, as returned catalogName should be unescaped.
 * Fixed `getColumnClassName()` returning null for VARIANT columns in SEA mode by adding VARIANT to the type system.
 * Fixed `getColumns()` returning `DATA_TYPE=0` (NULL) for GEOMETRY/GEOGRAPHY columns in Thrift mode. Now returns `Types.VARCHAR` (12) when geospatial is disabled and `Types.OTHER` (1111) when enabled, consistent with SEA mode.
 * Fixed `getCrossReference()` returning 0 rows when parent args are passed in uppercase.

3.3.1 ========================================================================
Released 2026-03-17

Enhancements & New Features

 * Added `DatabaseMetaData.getProcedures()` and `DatabaseMetaData.getProcedureColumns()` to discover stored procedures and their parameters. Queries `information_schema.routines` and `information_schema.parameters` using parameterized SQL for both SEA and Thrift transports.
 * Added connection property `OAuthWebServerTimeout` to configure the OAuth browser authentication timeout for U2M (user-to-machine) flows, and also updated hardcoded 1-hour timeout to default 120 seconds timeout.
 * Added connection property `UseQueryForMetadata` to use SQL SHOW commands instead of Thrift RPCs for metadata operations (getCatalogs, getSchemas, getTables, getColumns, getFunctions). This fixes incorrect wildcard matching where `_` was treated as a single-character wildcard in Thrift metadata pattern filters.
 * Added connection property `TreatMetadataCatalogNameAsPattern` to control whether catalog names are treated as patterns in Thrift metadata RPCs. When disabled (default), unescaped `_` in catalog names is escaped to prevent single-character wildcard matching.
 * Bumped `com.fasterxml.jackson.core:jackson-core` from 2.18.3 to 2.18.6.
 * Fat jar now routes SDK and Apache HTTP client logs through Java Util Logging (JUL), removing the need for external logging libraries.
 * Added Apache Arrow on-heap memory management for processing Arrow query results. Previously, Arrow result processing was unusable on JDK 16+ without passing the `--add-opens=java.base/java.nio=ALL-UNNAMED` JVM argument, due to stricter encapsulation of internal APIs. With this change, there is no JVM argument required - the driver automatically falls back to an on-heap memory path that uses standard JVM heap allocation instead of direct memory access.
 * Log timestamps now explicitly display timezone.
 * [Breaking Change] `PreparedStatement.setTimestamp(int, Timestamp, Calendar)` now properly applies Calendar timezone conversion using LocalDateTime pattern. Previously Calendar parameter was ineffective.
 * `DatabaseMetaData.getColumns()` with null catalog parameter now retrieves columns from all available catalogs when using SQL Execution API.

Resolved Issues

 * Fixed statement timeout when the server returns `TIMEDOUT_STATE` directly in the `ExecuteStatement` response, the driver now throws `SQLTimeoutException` instead of `DatabricksHttpException`.
 * Fixed Thrift polling infinite loop when server restarts invalidate operation handles, and added configurable timeout (`MetadataOperationTimeout`, default 300s) with sleep between polls for metadata operations.
 * Fixed `DatabricksParameterMetaData.countParameters` and `DatabricksStatement.trimCommentsAndWhitespaces` with a `SqlCommentParser` utility class.
 * Fixed `rollback()` to throw `SQLException` when called in auto-commit mode (no active transaction), aligning with JDBC spec.
 * Fixed `fetchAutoCommitStateFromServer()` to accept both `"1"`/`"0"` and `"true"`/`"false"` responses from `SET AUTOCOMMIT` query.
 * Fixed socket leak in SDK HTTP client that prevented CRaC checkpointing.
 * Fixed `IdleConnectionEvictor` thread leak in long-running services.
 * Fixed Date fields within complex types (ARRAY, STRUCT, MAP) being returned as epoch day integers instead of proper date values.
 * Fixed `DatabaseMetaData.getColumns()` returning the column type name in `COLUMN_DEF` for columns with no default value. `COLUMN_DEF` now correctly returns `null` per the JDBC specification.
 * Coalesce concurrent expired cloud fetch link refreshes into a single batch FetchResults RPC to prevent thread pool exhaustion under high concurrency.

3.2.1 ========================================================================
Released 2026-02-16

Enhancements & New Features

 * Added streaming prefetch mode for Thrift inline results (columnar and Arrow) with background batch prefetching and configurable sliding window for improved throughput.
 * Added `EnableInlineStreaming` connection parameter to enable/disable streaming mode (default: enabled).
 * Added `ThriftMaxBatchesInMemory` connection parameter to control the sliding window size for streaming (default: 3).
 * Added support for disabling CloudFetch via `EnableQueryResultDownload=0` to use inline Arrow results instead.
 * Added `EnableMetricViewMetadata` connection parameter to enable/disable Metric View table type (default: disabled).
 * Added `NonRowcountQueryPrefixes` connection parameter to specify comma-separated query prefixes that should return result sets instead of row counts.
 * Enhanced error logging for token exchange failures.
 * Geospatial column type names now include SRID information (e.g., `GEOMETRY(4326)` instead of `GEOMETRY`).
 * Changed default value of `IgnoreTransactions` from `0` to `1` to disable multi-statement transactions by default. Preview participants can opt-in by setting `IgnoreTransactions=0`. Also updated `supportsTransactions()` to respect this flag.
 * Implemented lazy loading for inline Arrow results, fetching arrow batches on demand instead of all at once. This improves memory usage and initial response time for large result sets when using the Thrift protocol with Arrow format.
 * Enhanced `enableMultipleCatalogSupport` behavior: When this parameter is disabled (`enableMultipleCatalogSupport=0`), metadata operations (such as `getSchemas()`, `getTables()`, `getColumns()`, etc.) now return results only when the catalog parameter is either `null` or matches the current catalog. For any other catalog name, an empty result set is returned. This ensures metadata queries are restricted to the current catalog context. When enabled (`enableMultipleCatalogSupport=1`), metadata operations continue to work across all accessible catalogs.

Resolved Issues

 * Fixed `getTypeInfo()` and `getClientInfoProperties()` to return fresh ResultSet instances on each call instead of shared static instances. This resolves issues where calling these methods multiple times would fail due to exhausted cursor state (Issue #1178).
 * Fixed complex data type metadata support when retrieving 0 rows in Arrow format.
 * Normalized TIMESTAMP_NTZ to TIMESTAMP in Thrift path for consistency with SEA behavior.
 * Fixed complex types not being returned as objects in SEA Inline mode when `EnableComplexDatatypeSupport=true`.
 * Fixed `StringIndexOutOfBoundsException` when parsing complex data types in Thrift CloudFetch mode. The issue occurred when metadata contained incomplete type information (e.g., "ARRAY" instead of "ARRAY<INT>"). Now retrieves complete type information from Arrow metadata.
 * Fixed timeout exception handling to throw `SQLTimeoutException` instead of `DatabricksHttpException` when queries timeout during result fetching phase. This completes the timeout exception fix to handle both query execution polling and result fetching phases.
 * Fixed `getResultSet()` to return null in case of DML statements to honour JDBC spec.

3.1.1 ========================================================================
Released 2026-01-07

Enhancements & New Features

 * Added token caching for all authentication providers to reduce token endpoint calls.
 * We will be rolling out the use of Databricks SQL Execution API by default for queries submitted on DBSQL. To continue using Databricks Thrift Server backend for execution, set `UseThriftClient` to `1`.
 * Changed default value of `IgnoreTransactions` from `0` to `1` to disable multi-statement transactions by default. Preview participants can opt-in by setting `IgnoreTransactions=0`. Also updated `supportsTransactions()` to respect this flag.

Resolved Issues

 * [PECOBLR-1131] Fix incorrect refetching of expired CloudFetch links when using Thrift protocol.
 * Fixed logging to respect params when the driver is shaded.
 * Fixed `isWildcard` to return true only when the value is `*`

3.0.7 ========================================================================
Released 2025-12-18

Enhancements & New Features

 * Log timestamps now explicitly display timezone.
 * DatabaseMetaData.getColumns() with null catalog parameter now retrieves columns from all catalogs when using SQL Execution API, aligning the behaviour with thrift.
 * DatabaseMetaData.getFunctions() with null catalog parameter now retrieves columns from the current catalog when using SQL Execution API, aligning the behaviour with thrift.

Resolved Issues

 * Fix timeout exception handling to throw SQLTimeoutException instead of DatabricksSQLException when queries timeout.
 * Removes dangerous global timezone modification that caused race conditions.
 * Fixed Statement.getLargeUpdateCount() to return -1 instead of throwing Exception when there were no more results or result is not an update count.
 * CVE-2025-66566. Updated lz4-java dependency to 1.10.1.
 * Fix INVALID_IDENTIFIER error when using catalog/schema/table names for SQL Exec API with hyphens or special characters in metadata operations (getSchemas(), getTables(), getColumns(), etc.) and connection methods (setCatalog(), setSchema()). Per Databricks identifier rules, special characters are now properly enclosed in backticks.
 * Fix Auth_Scope handling inconsistency in Azure U2M OAuth.

Breaking Changes

 * PreparedStatement.setTimestamp(int, Timestamp, Calendar) now properly applies Calendar timezone conversion using LocalDateTime pattern (inline with getTimestamp). Previously Calendar parameter was ineffective.

3.0.6 ========================================================================
Released 2025-12-11

Enhancements & New Features

 * Added the EnableTokenFederation url param to enable or disable Token federation feature. By default it is set to 1
 * Added the ApiRetriableHttpCodes, ApiRetryTimeout url params to enable retries for specific HTTP codes irrespective of Retry-After header. By default the HTTP codes list is empty.
 * Added validation for positive integer configuration properties (RowsFetchedPerBlock, BatchInsertSize, etc.) to prevent hangs and errors when set to zero or negative values.
 * Updated Circuit breaker to be triggered by 429 errors too.
 * Refactored chunk download to keep a sliding window of chunk links. The window advances as the main thread consumes chunks. These changes can be enabled using the connection property EnableStreamingChunkProvider=1. The changes are expected to make chunk download faster and robust.
 * Added separate circuit breaker to handle 429 from SEA connection creation calls, and fall back to Thrift.

Resolved Issues

 * Fix driver crash when using `INTERVAL` types.
 * Fix connection failure in restricted environments when `LogLevel.OFF` is used.
 * Fix U2M by including SDK OAuth HTML callback resources.
 * Fix microsecond precision loss in `PreparedStatement.setTimestamp(int,Timestamp, Calendar)` and address thread-safety issues with global timezone modification.
 * Fix metadata methods (`getColumns`, `getFunctions`, `getPrimaryKeys`, `getImportedKeys`) to return empty ResultSets instead of throwing exceptions when catalog parameter is NULL, for SEA.

3.0.5 ========================================================================
Released 2025-11-20

Enhancements & New Features

 * Added support for high-performance batched writes with parameter interpolation:
   - `supportManyParameters=1`: Enables parameter interpolation to bypass 256-parameter limit (default: 0)
   - `EnableBatchedInserts=1`: Enables multi-row INSERT batching (default: 0)
   - `BatchInsertSize=<SIZE>`: Maximum rows per batch (default: 1000)
   - Note: Large batches are chunked for execution. If a chunk fails, previous chunks remain committed (no transaction rollback). Consider using staging tables for critical workflows.
 * Added Feature-flag integration for SQL Exec API rollout
 * Call statements will return result sets in response
 * Minimized OAuth requests by reducing calls in feature flags and telemetry.

Resolved Issues

 * Fix: SQLInterpolator failing to escape temporal fields and special characters.
 * Fixed: Errors in table creation when using BIGINT, SMALLINT, TINYINT, or VOID types.
 * Fixed: PreparedStatement.getMetaData() now correctly reports TINYINT columns as Types.TINYINT (java.lang.Byte) instead of Types.SMALLINT (java.lang.Integer).
 * Fixed: TINYINT to String conversion to return numeric representation (e.g., "65") instead of character representation (e.g., "A").
 * Fixed: Complex types (Structs, arrays, maps) now show detailed type information in metadata calls in Thrift mode

3.0.4 ========================================================================
Released 2025-11-12

Enhancements & New Features

 * Added support for geospatial data types.
 * Added support for telemetry log levels, which can be controlled via the connection parameter `TelemetryLogLevel`. This allows users to configure the verbosity of telemetry logging from OFF to TRACE.
 * Added full support for JDBC transaction control methods in Databricks. Transaction support in Databricks is currently available as a Private Preview. The `IgnoreTransactions` connection parameter can be set to `1` to disable or no-op transaction control methods.
 * Added a new config attribute `DisableOauthRefreshToken` to control whether refresh tokens are requested in OAuth exchanges. By default, the driver does not include the `offline_access` scope. If `offline_access` is explicitly provided by the user, it is preserved and not removed.

Resolved Issues

 * Fixed SQL syntax error when LIKE queries contain empty ESCAPE clauses.
 * Fix: driver failing to authenticate on token update in U2M flow.
 * Fix: driver failing to parse complex data types with nullable attributes.
 * Fixed: Resolved SDK token-caching regression causing token refresh on every call. SDK is now configured once to avoid excessive token endpoint hits and rate limiting.
 * Fixed: TimestampConverter.toString() returning ISO8601 format with timezone conversion instead of SQL standard format.
 * Fixed: Driver not loading complete JSON result in the case of SEA Inline without Arrow

3.0.3 ========================================================================
Released 2025-10-30

Enhancements & New Features

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 3.0.3.

 * Fixed excessive calls to token endpoint during getToken.

3.0.1 ========================================================================
DEPRECATED, Use v3.0.3 instead

Released 2025-10-13

Enhancements & New Features

 * Added `enableMultipleCatalogSupport` connection parameter to control catalog metadata behavior.


Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 3.0.1.

 * Fixed complex data type conversion issues by improving StringConverter to handle Databricks complex objects (arrays/maps/structs), JDBC arrays/structs, and generic collections.
 * Fixed ComplexDataTypeParser to correctly parse ISO timestamps with T separators and timezone offsets, preventing Arrow ingestion failures.

1.0.11 -----------------------------------------------------------------------
DEPRECATED, Use v3.0.3 instead

Released 2025-10-06

Enhancements & New Features

 * Enabled direct results by default in SEA mode to improve latency for short and small queries.
 * Telemetry data is now captured more efficiently and consistently due to enhancements in the log and connection close flush logic.
 * Updated Databricks SDK version to v0.65.0 to fix OAuthClient to properly encode complex query parameters.
 * Added IgnoreTransactions connection parameter to silently ignore transaction method calls.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.11.

 * Fixed state leaking issue in thrift client.
 * Fixed timestamp values returning only milliseconds instead of the full nanosecond precision.
 * Fixed Statement.getUpdateCount() for DML queries.

1.0.10 -----------------------------------------------------------------------
DEPRECATED, Use v3.0.3 instead

Released 2025-09-18

Enhancements & New Features

 * Added Query Tags support to attach key-value tags to SQL queries.
 * Added support for SQL Scripting.
 * Added a client property `enableVolumeOperations` to enable GET/PUT/REMOVE volume operations on a stream.
 * Support for fetching schemas across all catalogs in `DatabaseMetaData#getSchemas`.
 * Added `EnableSQLValidationForIsValid` connection property to control whether `isValid()` executes a server-side query.
 * Implemented multi-row INSERT batching optimization for prepared statements.
 * Implemented lazy/incremental fetching for columnar results in Thrift mode without Arrow support to reduce memory usage.
 * Added new artifact `databricks-jdbc-thin` for thin jar with runtime dependency metadata.
 * Introduced a memory-efficient columnar data access mechanism for JDBC result processing.
 * Added support for using a custom Discovery URL in U2M flows on AWS and GCP.
 * Databricks SDK dependency upgraded to latest version 0.64.0.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.10.

 * Integrated Azure U2M flow into driver for improved stability.
 * Fixed `ResultSet.getString` for Boolean columns in Metadata result set.
 * Fixed volume operations not completing unless the ResultSet is fully iterated.
 * Fixed `connection.getMetadata().getColumns()` to return the correct SQL data type code for complex type columns.
 * Fixed a bug in metadata parsing for nested decimal fields within struct types.
 * Fixed case sensitive table search in `connection.getMetadata().getTables()`.
 * Fixed `connection.getMetadata().getColumns()` to return the correct scale.

1.0.9 ------------------------------------------------------------------------

Released 2025-08-19

Enhancements & New Features

 * Added support for providing custom HTTP options: `HttpMaxConnectionsPerRoute` and `HttpConnectionRequestTimeout`.
 * Added V2 of chunk download using async http client.
 * Telemetry is enabled by default, subject to server-side rollout.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.9.

 * Fixed Statement.getUpdateCount to return -1 for non-DML queries.
 * Fixed Statement.setMaxRows(0) to be interpreted as no limit.
 * Fixed retry behaviour to not throw an exception when there is no retry-after header for 503 and 429 status codes.
 * Fixed encoded UserAgent parsing in BI tools.
 * Fixed setting empty schema as the default schema in the spark session.

1.0.8 ------------------------------------------------------------------------

Released 2025-07-25

Enhancements & New Features

 * Added DCO (Developer Certificate of Origin) check workflow for pull requests.
 * Added support for SSL client certificate authentication via parameter: SSLTrustStoreProvider.
 * Provided an option to push telemetry logs (using the flag `ForceEnableTelemetry=1`).
 * Added putFiles methods in DBFSVolumeClient for async multi-file upload.
 * Added validation on UID param to ensure it is either not set or set to 'token'.
 * Added CloudFetch download speed logging at INFO level.
 * Added vendor error codes to SQLExceptions raised for incorrect UID, host or token.
 * Column name support for JDBC ResultSet operations is now case-insensitive.
 * Updated arrow to 17.0.0 to resolve CVE-2024-52338.
 * Updated commons-lang3 to 3.18.0 to resolve CVE-2025-48924.
 * Enhanced SSL certificate path validation error messages to provide actionable troubleshooting steps.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.8.

 * Fixed Bouncy Castle registration conflicts by using local provider instance.
 * Fixed Azure U2M authentication issue.
 * Fixed unchecked exception thrown in delete session.
 * Fixed ParameterMetaData.getParameterCount() to align with JDBC standards.

1.0.7 ------------------------------------------------------------------------

Released 2025-05-26

Enhancements & New Features

 * Added support for DoD (.mil) domains.
 * Enabled fetching of metadata for SELECT queries using PreparedStatement prior to setting parameters or executing the query.
 * Added support for SSL client certificate authentication via keystore configuration parameters.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.7.

 * Updated JDBC URL regex to accept valid connection strings that were incorrectly rejected.
 * Updated decimal conversion logic to fix numeric values missing decimal precision.

1.0.6 ------------------------------------------------------------------------

Released 2025-05-29

Enhancements & New Features

 * Support for fetching tables and views across all catalogs using SHOW TABLES FROM/IN ALL CATALOGS.
 * Support for Token Exchange in OAuth flows.
 * Support for polling of statementStatus and sqlState for async SQL execution.
 * Support for REAL, NUMERIC, CHAR, and BIGINT JDBC types in `PreparedStatement.setObject`.
 * Support for INTERVAL data type.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.6.

 * Added explicit null check for Arrow value vector when the value is not set and Arrow null checking is disabled.

1.0.5 ------------------------------------------------------------------------

Released 2025-04-28

Enhancements & New Features

 * Support for token cache in OAuth U2M Flow using `EnableTokenCache` and `TokenCachePassPhrase`.
 * Support for additional SSL functionality including `UseSystemTruststore` and `AllowSelfSignedCerts`.
 * Added support for `getImportedKeys` and `getCrossReferences` in SQL Exec API mode.
 * Modified E2E tests to validate driver behavior under multi-threaded access patterns.
 * Improved error handling through telemetry by throwing custom exceptions.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.5.

 * Fixed bug where batch prepared statements could lead to backward-incompatible error scenarios.
 * Corrected setting of decimal types in prepared statement executions.
 * Resolved NullPointerException (NPE) that occurred during ResultSet and Connection operations in multithreaded environment.

1.0.4 ------------------------------------------------------------------------

Released 2025-04-14

Enhancements & New Features

 * Support for connection parameter SocketTimeout.
 * Handle server returned Thrift version as part of open session response gracefully.
 * Added OWASP security check in the repository.
 * Updated SDK to the latest version (0.44.0).
 * Add descriptive messages in thrift error scenario.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.4.

 * BigDecimal is now set correctly to NULL if null value is provided.
 * Fixed issue with JDBC URL not being parsed correctly when compute path is provided via properties.
 * Addressed CVE vulnerabilities (CVE-2024-47535, CVE-2025-25193, CVE-2023-33953).
 * Fix bug in preparedStatement decimal parameter in thrift flow.

1.0.3 ------------------------------------------------------------------------

Released 2025-04-08

Enhancements & New Features

 * Introduces a centralized timeout check and automatic cancellation for statements.
 * Allows specifying a default size for STRING columns via `defaultStringColumnLength`.
 * Implements a custom retry strategy to handle long-running tasks and connection attempts.
 * Added support for Azure Managed Identity based authentication.
 * Adds existence checks for volumes, objects, and prefixes.
 * Allows adjusting the number of rows retrieved per fetch via `RowsFetchedPerBlock` parameter.
 * Allows overriding the default OAuth redirect port using `OAuth2RedirectUrlPort`.
 * Support for custom headers in the JDBC URL via `http.header.<key>=<value>`.
 * Removes the hard-coded default poll interval configuration in favor of a user-defined parameter.
 * Adjusts the handling of NULL and non-NULL boolean values.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.3.

 * Ensures the driver respects the configured limit on the number of rows returned.
 * Improves retry behaviour to cover all operations, relying solely on the total retry time specified.
 * Returns an exception instead of -1 when a column is not found.

1.0.2 ------------------------------------------------------------------------

Released 2025-03-19

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.2.

 * Fixed columnType conversion for Variant and Timestamp_NTZ types.
 * Fix minor issue for string dealing with whitespaces.

1.0.1 ------------------------------------------------------------------------

Released 2025-03-11

Workflow Changes
The following changes may disrupt established workflows for the connector.

 * Changes to JDBC URL parameters to ensure compatibility with the latest Databricks driver:
   1. Removed catalog in favour of ConnCatalog
   2. Removed schema in favour of ConnSchema
   3. Renamed OAuthDiscoveryURL to OIDCDiscoveryEndpoint
   4. Renamed OAuth2TokenEndpoint to OAuth2ConnAuthTokenEndpoint
   5. Renamed OAuth2AuthorizationEndPoint to OAuth2ConnAuthAuthorizeEndpoint
   6. Renamed OAuthDiscoveryMode to EnableOIDCDiscovery
   7. Renamed OAuthRefreshToken to Auth_RefreshToken

Enhancements & New Features

 * Support for complex data types, including MAP, ARRAY, and STRUCT.
 * Support for TIMESTAMP_NTZ and VARIANT data types.
 * Extended support for prepared statement when using thrift DBSQL/all-purpose clusters.
 * Improved backward compatibility with the latest Databricks driver.
 * Improved driver performance for large queries by optimizing chunk handling.
 * Configurable HTTP connection pool size for better resource management.
 * Support for Azure Active Directory (AAD) Service Principal in M2M OAuth.
 * Implemented java.sql.Driver#getPropertyInfo to fetch driver properties.
 * Set Thrift mode as the default for the driver.
 * Improved driver telemetry (opt-in feature) for better monitoring and debugging.
 * Enhanced test infrastructure to improve accuracy and reliability.
 * Added SQL state support in SEA mode.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 1.0.1.

 * Ensured TIMESTAMP columns are returned in local time.
 * Resolved inconsistencies in schema and catalog retrieval from the Connection class.
 * Fixed minor issues with metadata fetching in Thrift mode.
 * Addressed incorrect handling of access tokens provided via client info.
 * Corrected the driver version reported by DatabaseMetaData.
 * Fixed case-sensitive behaviour while fetching client info.

0.9.9 ------------------------------------------------------------------------

Released 2025-01-03

Enhancements & New Features

 * Telemetry support in OSS JDBC.
 * Support for fetching connection ID and closing connections by connection ID.
 * Stream support implementation in the UC Volume DBFS Client.
 * Hybrid result support added to the driver (for both metadata and executed queries).
 * Support for complex data types.
 * Apache Async HTTP Client 5.3 added for parallel query result downloads.
 * Enhanced end-to-end testing for M2M and DBFS UCVolume operations.
 * Removed the version check SQL call when connection is established.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 0.9.9.

 * Fixed statement ID extraction from Thrift GUID.
 * Made volume operations flag backward-compatible with the existing Databricks driver.
 * Improved backward compatibility of ResultSetMetadata with the legacy driver.
 * Fix schema in connection string.

0.9.8 ------------------------------------------------------------------------

Released 2024-12-13

Enhancements & New Features

 * Run queries in async mode in the thrift client.
 * Added GET and DELETE operations for the DBFS client, enabling full UC Volume operations.
 * Do not send repeated DBSQL version queries.
 * Skip SEA compatibility check if null or empty DBSQL version is returned by the workspace.
 * Skips SEA check when DBSQL version string is blank space.
 * Updated SDK version to resolve CVEs.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 0.9.8.

 * Eliminated the statement execution thread pool.
 * Fixed UC volume GET operation.
 * Fixed async execution in SEA mode.
 * Fixed and updated the SDK version to resolve CVEs.

0.9.7 ------------------------------------------------------------------------

Released 2024-11-20

Enhancements & New Features

 * Added GCP OAuth support: Use Google ID with a custom JWT or Google Credentials.
 * SQL state added in thrift flow.
 * Add readable statement-Id for thrift.
 * Added Client to perform UC Volume operations without needing DB compute.
 * Add compression for SEA flow.
 * Updated support for large queries in thrift flow.
 * Throw exceptions in case unsupported old DBSQL versions are used.
 * Deploy reduced POM during release.
 * Improve executor service management.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 0.9.7.

 * Certificate revocation properties only apply when provided.
 * Create a new HTTP client for each connection.
 * Accept customer userAgent without errors.

0.9.6 ------------------------------------------------------------------------

Released 2024-10-24

Enhancements & New Features

 * Added compression in the Thrift protocol flow.
 * Added support for asynchronous query execution.
 * Implemented `executeBatch` for batch operations.
 * Added a method to extract disposition from result set metadata.
 * Optimised memory allocation for type converters.
 * Enhanced logging for better traceability.
 * Improved performance in the Thrift protocol flow.
 * Upgraded `commons-io` to address security vulnerability.
 * Ensured thread safety in `DatabricksPooledConnection`.
 * Set UBER jar as the default jar for distribution.
 * Refined result chunk management for better efficiency.
 * Enhanced integration tests for broader coverage.
 * Increased unit test coverage threshold to 85%.
 * Improved interaction with Thrift-server client.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 0.9.6.

 * Fixed compatibility issue with other drivers in the driver manager.

0.9.5 ------------------------------------------------------------------------

Released 2024-09-25

Enhancements & New Features

 * Support proxy ignore list.
 * OSS Readiness improvements.
 * Improve Logging.
 * Add SSL Truststore URL params to allow configuring custom SSL truststore.
 * Accept Pass-through access token as part of JDBC connector parameter.
 * `getTables` Thrift call to align with JDBC standards.
 * Improved metadata functions.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 0.9.5.

 * Fixed memory leaks and made chunk download thread-safe.
 * Fixed issues with prepared statements in Thrift and set default timestamps.
 * Fixed issues with empty table types, null pointer in `IS_GENERATEDCOLUMN`, and ordinal position.
 * Increased retry attempts for chunk downloads to enhance resilience.
 * Fixed exceptions being thrown for statement timeouts and cancel futures.
 * Improved UC Volume code.
 * Remove cyclic dependencies in package.

0.9.4 ------------------------------------------------------------------------

Released 2024-09-13

Enhancements & New Features

 * Fallback mechanism for smoother token refresh flow.
 * Retry logic to improve chunk download reliability.
 * Improved logging for timeouts and statement execution for better issue tracking.
 * Timestamp logging in UTC to avoid skew caused by local timezones.
 * Passthrough token handling with backward compatibility for the existing driver.
 * Continued improvements towards OSS readiness.
 * `getTables` Thrift call to align with JDBC standards.
 * Improved accuracy of column metadata.
 * Passthrough token handling for backward compatibility.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 0.9.4.

 * Memory leaks and made chunk download thread-safe.
 * Issues with prepared statements in Thrift and set default timestamps.
 * Increased retry attempts for chunk downloads to enhance resilience.
 * Exceptions are now thrown for statement timeouts and cancel futures.

0.9.3 ------------------------------------------------------------------------

Released 2024-09-01

Enhancements & New Features

 * OSS readiness changes.
 * M2M JWT support.
 * Credential provider OAuthRefresh.
 * Commands to run benchmarking tests.
 * Compiling logic for benchmarking workflows.
 * Fixed metadata and TableType issues.

0.9.2 ------------------------------------------------------------------------

Released 2024-08-24

Enhancements & New Features

 * Fixed precision and scale for certain dataTypes.

Resolved Issues
The following issues have been resolved in Databricks JDBC Driver 0.9.2.

 * Minor bug for UC Volume in Thrift mode.
 * SLF4j support for default SDK mode.
 * Deprecated username handling.
 * Catalog and schema not set by default.

0.9.1 ------------------------------------------------------------------------

Released 2024-08-08

 * Support for Input Stream in UC Volume Operations.
 * Metadata fixes.
 * Redacted passwords from logging.

0.9.0 ------------------------------------------------------------------------

Released 2024-07-24

Enhancements & New Features

 * Release OSS JDBC driver for Public Preview.

0.9.0-beta -------------------------------------------------------------------

Released 2024-07-22

Enhancements & New Features

 * Initial beta release of Databricks JDBC OSS Driver for Public Preview.

0.7.0 ------------------------------------------------------------------------

Released 2024-07-09

Enhancements & New Features

 * Stable release before Public Preview.

0.1.0 ------------------------------------------------------------------------

Released 2024-06-02

Enhancements & New Features

 * All-purpose cluster support and logging support.

0.0.1 ------------------------------------------------------------------------

Released 2024-02-29

Enhancements & New Features

 * First stable release with support for SQL warehouses.

==============================================================================
