databricks/databricks-jdbc v3.4.1
databricks/databricks-jdbc
Captured source
source ↗v3.4.1
Repository: databricks/databricks-jdbc
Tag: v3.4.1
Published: 2026-05-26T06:07:42Z
Prerelease: no
Release notes:
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/getCrossReferencewith non-existent
catalog, schema, or table: Now returns empty ResultSet instead of throwing SQLException.**
getImportedKeysUPDATE_RULE/DELETE_RULE: Now returns3(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 asDATEinstead 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 (
GEOMETRYandGEOGRAPHY) 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-javafrom 0.69.0 to 0.106.0. The driver's ownAgentDetectorinjection inUserAgentManager.setUserAgentis removed because SDK 0.106 now natively emits theagent/User-Agent token via its built-inUserAgent.agentProvider(); keeping both layered produced a duplicate token on every SDK-routed request. The bootstrapbuildUserAgentForConnectorServicepath retains its ownAgentDetectorcall because it bypassesUserAgent.asString(). getColumnTypeName()for DECIMAL columns now preserves precision/scale suffix (e.g.,"DECIMAL(10,2)") consistently across both Thrift and SEA backends.EnableGeoSpatialSupportno longer requiresEnableComplexDatatypeSupport=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 code22000) and a proper SQLSTATE22000(Data Exception) on the thrownSQLException, instead of the genericRESULT_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-corefrom 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-h2from 5.3.1 to 5.5.2 to address CVE-2025-8671 (HTTP/2 stream-reset DoS inhttpcore5-h2). Fixes #1436. - Bump shaded
netty-buffer/netty-commonfrom 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-configuration2from 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-javafromorg.lz4:lz4-java:1.8.1toat.yawk.lz4:lz4-java:1.10.1to address CVE-2025-66566 (information leak via uncleared output buffers in the safe/unsafe Java decompressors).org.lz4:lz4-java:1.8.1is a relocation-only POM that resolves toat.yawk.lz4:lz4-java:1.8.1,…
Excerpt shown — open the source for the full document.
Notability
notability 2.0/10Routine JDBC driver update