From 4450113ffe480efbcc972e9c901a7f1e48b49be2 Mon Sep 17 00:00:00 2001 From: Jothi Prakash Date: Mon, 25 May 2026 13:54:41 +0530 Subject: [PATCH 1/2] Updated the version --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- CHANGELOG.md | 84 +++++++++++++++++++ NEXT_CHANGELOG.md | 74 ---------------- README.md | 2 +- assembly-thin/pom.xml | 4 +- assembly-uber/pom.xml | 4 +- jdbc-core/pom.xml | 2 +- pom.xml | 4 +- .../jdbc/common/util/DriverUtil.java | 2 +- .../impl/DatabricksDatabaseMetaDataTest.java | 4 +- ...tabricksDriverFeatureFlagsContextTest.java | 2 +- .../jdbc/common/util/DriverUtilTest.java | 6 +- test-assembly-thin/pom.xml | 4 +- test-assembly-uber/pom.xml | 4 +- 14 files changed, 104 insertions(+), 94 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7854ec0e0c..83d7271d5d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ If available, share redacted client side logs - OS: [e.g. Windows] - Java version [e.g. Java 21] - Java vendor [e.g. OpenJDK] - - Driver Version [e.g. 3.1.1] + - Driver Version [e.g. 3.4.1] - BI Tool (if used) [e.g. DBeaver] - BI Tool version (if applicable) [e.g. 24.3.5] diff --git a/CHANGELOG.md b/CHANGELOG.md index 21b2cc0d5c..5d4356482b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,89 @@ # Version Changelog +## [v3.4.1] - 2026-05-25 + +### 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 `GetStatementStatus` (SEA) or `GetOperationStatus` (Thrift) 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/` 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. As a result, `getExecutionResult()` after result consumption returns the cached ResultSet instead of making a server RPC. + +### Fixed +- Bump shaded `jackson-core` from 2.18.6 to 2.18.7 to address [SNYK-JAVA-COMFASTERXMLJACKSONCORE-15907551](https://security.snyk.io/vuln/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](https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHEHTTPCOMPONENTSCORE5-15857052) (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](https://nvd.nist.gov/vuln/detail/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](https://nvd.nist.gov/vuln/detail/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](https://github.com/advisories/GHSA-p93r-85wp-75v3) (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. + +--- + ## [v3.3.3] - 2026-04-29 ### Fixed diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index ea019e959d..d27a25e263 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -2,85 +2,11 @@ ## [Unreleased] -### 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 `GetStatementStatus` (SEA) or `GetOperationStatus` (Thrift) 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/` 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. As a result, `getExecutionResult()` after result consumption returns the cached ResultSet instead of making a server RPC. ### Fixed -- Bump shaded `jackson-core` from 2.18.6 to 2.18.7 to address [SNYK-JAVA-COMFASTERXMLJACKSONCORE-15907551](https://security.snyk.io/vuln/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](https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHEHTTPCOMPONENTSCORE5-15857052) (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](https://nvd.nist.gov/vuln/detail/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](https://nvd.nist.gov/vuln/detail/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](https://github.com/advisories/GHSA-p93r-85wp-75v3) (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. --- *Note: When making changes, please add your change under the appropriate section diff --git a/README.md b/README.md index 6e9ffbfcf2..d98bf8ed41 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Add the following dependency to your `pom.xml`: com.databricks databricks-jdbc - 3.3.3 + 3.4.1 ``` diff --git a/assembly-thin/pom.xml b/assembly-thin/pom.xml index e7b563273b..bd17c3bf84 100644 --- a/assembly-thin/pom.xml +++ b/assembly-thin/pom.xml @@ -7,7 +7,7 @@ com.databricks databricks-jdbc-parent - 3.3.3 + 3.4.1 databricks-jdbc-thin @@ -51,7 +51,7 @@ com.databricks databricks-jdbc-core - 3.3.3 + 3.4.1 diff --git a/assembly-uber/pom.xml b/assembly-uber/pom.xml index 67e14d828f..405fad7c5e 100644 --- a/assembly-uber/pom.xml +++ b/assembly-uber/pom.xml @@ -7,7 +7,7 @@ com.databricks databricks-jdbc-parent - 3.3.3 + 3.4.1 databricks-jdbc @@ -51,7 +51,7 @@ com.databricks databricks-jdbc-core - 3.3.3 + 3.4.1 diff --git a/jdbc-core/pom.xml b/jdbc-core/pom.xml index a0e91998a9..f7314fc84b 100644 --- a/jdbc-core/pom.xml +++ b/jdbc-core/pom.xml @@ -6,7 +6,7 @@ com.databricks databricks-jdbc-parent - 3.3.3 + 3.4.1 databricks-jdbc-core diff --git a/pom.xml b/pom.xml index 16334f4a49..16ae87520e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.databricks databricks-jdbc-parent - 3.3.3 + 3.4.1 pom Databricks JDBC Parent Parent POM for Databricks JDBC Driver. @@ -64,7 +64,7 @@ 2.9.1 - 3.3.3 + 3.4.1 18.3.0 3.18.0 2.15.0 diff --git a/src/main/java/com/databricks/jdbc/common/util/DriverUtil.java b/src/main/java/com/databricks/jdbc/common/util/DriverUtil.java index 3622b0ea1f..edf830a2bf 100644 --- a/src/main/java/com/databricks/jdbc/common/util/DriverUtil.java +++ b/src/main/java/com/databricks/jdbc/common/util/DriverUtil.java @@ -20,7 +20,7 @@ public class DriverUtil { private static final JdbcLogger LOGGER = JdbcLoggerFactory.getLogger(DriverUtil.class); - private static final String DRIVER_VERSION = "3.3.3"; + private static final String DRIVER_VERSION = "3.4.1"; private static final String DRIVER_NAME = "oss-jdbc"; private static final String JDBC_VERSION = "4.3"; diff --git a/src/test/java/com/databricks/jdbc/api/impl/DatabricksDatabaseMetaDataTest.java b/src/test/java/com/databricks/jdbc/api/impl/DatabricksDatabaseMetaDataTest.java index 08c3a5eaf6..b7c03bb856 100644 --- a/src/test/java/com/databricks/jdbc/api/impl/DatabricksDatabaseMetaDataTest.java +++ b/src/test/java/com/databricks/jdbc/api/impl/DatabricksDatabaseMetaDataTest.java @@ -840,7 +840,7 @@ public void testGetDriverName() throws SQLException { @Test public void testGetDriverVersion() throws SQLException { String result = metaData.getDriverVersion(); - assertEquals("3.3.3", result); + assertEquals("3.4.1", result); } @Test @@ -852,7 +852,7 @@ public void testGetDriverMajorVersion() { @Test public void testGetDriverMinorVersion() { int result = metaData.getDriverMinorVersion(); - assertEquals(3, result); + assertEquals(4, result); } @Test diff --git a/src/test/java/com/databricks/jdbc/common/safe/DatabricksDriverFeatureFlagsContextTest.java b/src/test/java/com/databricks/jdbc/common/safe/DatabricksDriverFeatureFlagsContextTest.java index a58cb472df..189bb81ae0 100644 --- a/src/test/java/com/databricks/jdbc/common/safe/DatabricksDriverFeatureFlagsContextTest.java +++ b/src/test/java/com/databricks/jdbc/common/safe/DatabricksDriverFeatureFlagsContextTest.java @@ -37,7 +37,7 @@ class DatabricksDriverFeatureFlagsContextTest { @Mock private ObjectMapper objectMapperMock; private static final String FEATURE_FLAG_NAME = "featureFlagName"; private static final String FEATURE_FLAGS_ENDPOINT = - "https://test-host/api/2.0/connector-service/feature-flags/OSS_JDBC/3.3.3"; + "https://test-host/api/2.0/connector-service/feature-flags/OSS_JDBC/3.4.1"; private DatabricksDriverFeatureFlagsContext context; diff --git a/src/test/java/com/databricks/jdbc/common/util/DriverUtilTest.java b/src/test/java/com/databricks/jdbc/common/util/DriverUtilTest.java index ea6b0e4a06..fa7da84f25 100644 --- a/src/test/java/com/databricks/jdbc/common/util/DriverUtilTest.java +++ b/src/test/java/com/databricks/jdbc/common/util/DriverUtilTest.java @@ -14,14 +14,14 @@ public class DriverUtilTest { public void testGetDriverVersion() { String version = DriverUtil.getDriverVersion(); assertNotNull(version); - assertEquals("3.3.3", version); + assertEquals("3.4.1", version); } @Test public void testGetDriverVersionWithoutOSSSuffix() { String version = DriverUtil.getDriverVersionWithoutOSSSuffix(); assertNotNull(version); - assertEquals("3.3.3", version); + assertEquals("3.4.1", version); } @Test @@ -40,7 +40,7 @@ public void testGetDriverMajorVersion() { @Test public void testGetDriverMinorVersion() { int minorVersion = DriverUtil.getDriverMinorVersion(); - assertEquals(3, minorVersion); + assertEquals(4, minorVersion); } @Test diff --git a/test-assembly-thin/pom.xml b/test-assembly-thin/pom.xml index d405d716a3..f40311052a 100644 --- a/test-assembly-thin/pom.xml +++ b/test-assembly-thin/pom.xml @@ -7,7 +7,7 @@ com.databricks databricks-jdbc-parent - 3.3.3 + 3.4.1 test-databricks-jdbc-thin @@ -24,7 +24,7 @@ com.databricks databricks-jdbc-thin - 3.3.3 + 3.4.1 org.junit.jupiter diff --git a/test-assembly-uber/pom.xml b/test-assembly-uber/pom.xml index 7b523504b1..bc84f892a7 100644 --- a/test-assembly-uber/pom.xml +++ b/test-assembly-uber/pom.xml @@ -7,7 +7,7 @@ com.databricks databricks-jdbc-parent - 3.3.3 + 3.4.1 test-databricks-jdbc-uber @@ -24,7 +24,7 @@ com.databricks databricks-jdbc - 3.3.3 + 3.4.1 org.junit.jupiter From c112ac311335b89c038a2131ef338884b7dc1375 Mon Sep 17 00:00:00 2001 From: Jothi Prakash Date: Mon, 25 May 2026 21:00:15 +0530 Subject: [PATCH 2/2] Some nit changelofs --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d4356482b..cd50608a27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,7 +53,7 @@ upgrading. These changes do not affect metadata on All-Purpose Clusters. 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 `GetStatementStatus` (SEA) or `GetOperationStatus` (Thrift) 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). +- 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`. @@ -64,7 +64,7 @@ upgrading. These changes do not affect metadata on All-Purpose Clusters. - `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. As a result, `getExecutionResult()` after result consumption returns the cached ResultSet instead of making a server RPC. +- 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](https://security.snyk.io/vuln/SNYK-JAVA-COMFASTERXMLJACKSONCORE-15907551) (DoS via oversized JSON documents bypassing size limits). Fixes #1436.