============================================================================== Databricks ODBC Driver Release Notes ============================================================================== The release notes provide details of enhancements, features, and known issues in the Databricks ODBC Driver 0.5.0. The driver provides SQL access to Databricks SQL warehouses over the ODBC 3.8 API. It supports the following platforms: * Windows 10 and 11; Windows Server 2016, 2019, 2022, and 2025 (64-bit and 32-bit) * macOS 13.3 (Ventura) and later (universal2: Apple silicon and Intel) * Linux distributions with glibc 2.28 or newer, on x86_64, ARM64, and 32-bit x86, including: - Red Hat Enterprise Linux, AlmaLinux, and Rocky Linux 8 and later - Amazon Linux 2023 - Debian 10 and later; Ubuntu 20.04 and later - SUSE Linux Enterprise Server 15 0.5.0 ======================================================================== Released 2026-09-30 Added * Statement-level asynchronous execution through SQL_ATTR_ASYNC_ENABLE, with portable SQLExecute/SQLExecDirect polling and Windows Driver Manager SQLCompleteAsync interoperability. Linux unixODBC and macOS iODBC clients use original-function polling. * Connection-level SQL_ATTR_ASYNC_ENABLE, propagated to existing statements and inherited by statements allocated later. * EnableTelemetry connection property is now honoured and routed to the kernel's telemetry configuration (along with the driver system-configuration forwarding) rather than warned as unsupported. It is optional: when omitted, telemetry enablement is left to the kernel's own default/gating. * Commercial Azure Entra ID service-principal M2M authentication via OIDCDiscoveryEndpoint or Azure_workspace_resource_id. For OAuth client credentials, a nonempty value for either property selects this flow; unsupported discovery-endpoint shapes return HY024 instead of being ignored. * SQLColumns / SQLGetTypeInfo now report the SRID for GEOMETRY and GEOGRAPHY columns in the TYPE_NAME (e.g. GEOMETRY(4326)). * The Linux driver is now built with debug information and carries a GNU build ID, and each release publishes a matching libdatabricksodbc64.so.debug symbol file. A crash in the shipped (stripped) driver can now be resolved to function names and source lines — previously such a backtrace showed only ?? () frames. The driver package itself is unchanged in content and slightly smaller; the generated machine code is byte-for-byte identical. * macOS releases now publish a universal2 libdatabricksodbc.dylib.dSYM matched by UUID to the stripped, signed dylib, so crashes from either Apple silicon or Intel can be resolved to native C++ function names and source lines without adding symbols to the .pkg. * Windows releases now publish matching databricksodbc64.pdb and databricksodbc32.pdb symbol files. Their CodeView identities are verified against the optimized DLLs entering each MSI, while the PDBs remain separate from the customer installers. * Published Linux, macOS, and Windows symbol files now include source and function records for the statically linked Databricks SQL Kernel as well as the native C++ driver, enabling source-level diagnosis of crashes inside the Rust kernel. Updated * The bundled NOTICE now covers every native dependency, distinguishes the dynamically linked unixODBC library from embedded code, and points to the complete generated Rust dependency attribution report. Fixed * Synchronous SQLFetch and SQLGetData no longer acquire the asynchronous execution-state mutex for every call, restoring result-fetch performance. * GEOMETRY and GEOGRAPHY query results now use a consistent EWKT string representation across inline and CloudFetch responses, including nested and null values. * SQLColumns with a bare % or * catalog now consistently returns an empty result, including when the server uses native metadata routing. * SQL_ATTR_QUERY_TIMEOUT now uses the kernel execution deadline. It covers the initial request, polling, and terminal-state mapping, but not result fetching; zero selects unlimited execution. * Chunked SQLGetData retrieval now returns complete large binary values when converting them to SQL_C_CHAR, without corrupting data at chunk boundaries. * SQLGetConnectAttr(SQL_ATTR_TRANSLATE_LIB) now returns a correctly typed empty string when no translation library is configured. * DML statements, including CTE-prefixed writes, now expose affected rows through SQLRowCount without returning protocol row-count metadata as a fetchable result set; DDL commands likewise no longer expose an empty cursor or retain stale result metadata. * SQLGetInfo(SQL_TXN_CAPABLE) now reports SQL_TC_DML when real transaction control is enabled with IgnoreTransactions=0; it remains SQL_TC_NONE when transaction APIs are ignored. * SQLConnect / SQLDriverConnect now report missing required connection properties with 08001 and leave the connection disconnected. * SQLSetDescField on a record beyond the current SQL_DESC_COUNT now auto-expands the descriptor (per the ODBC spec) instead of returning HY009. * A malformed EnableTelemetry value (e.g. the typo ture) is no longer silently treated as an opt-out that overrides the kernel's telemetry default; it now leaves the default untouched and emits a warning, consistent with every other boolean connection property. Version History ============================================================== 0.4.0 ======================================================================== Released 2026-09-06 Added * OAuth 2.0 authentication: user-to-machine browser flow (Auth_Flow=2), machine-to-machine client credentials (Auth_Flow=1), JWT private-key client assertion (UseJWTAssertion=1), and identity federation (IdentityFederationClientId). * Mutual TLS (client certificate) authentication via TwoWaySSL, ClientCert, and ClientPrivateKey. * QueryTags connection property to attach session-level tags to every query for cost attribution and tracking. * ConnectionTestTimeout connection property: actively probe the server with a lightweight SELECT 1 so a server-side-dead session is reported dead by SQLGetConnectAttr(SQL_ATTR_CONNECTION_DEAD). * UserAgentEntry connection property to append a BI tool's identity to the outgoing User-Agent. * Data-at-execution parameter arrays (SQL_DATA_AT_EXEC with SQL_ATTR_PARAMSET_SIZE), enabling pyodbc fast_executemany with string parameters. * Linux ARM64 (aarch64) and 32-bit x86 (i686) .deb and .rpm packages, in addition to 64-bit x86. * Signed and notarized macOS universal2 (Apple silicon + Intel) .pkg installer. * Windows x64 and x86 MSI installers. * Windows graphical DSN configuration dialog (ConfigDSN/ConfigDSNW). Updated * Raised the Linux glibc floor to 2.28 (built inside manylinux_2_28), covering RHEL/AlmaLinux/Rocky Linux 8+, Amazon Linux 2023, Debian 10+, Ubuntu 20.04+, and SLES 15 across x86_64, ARM64, and 32-bit x86. * Proxy and TLS DSN key names now use the reference driver's spellings (TrustedCerts, UseProxy, ProxyHost, ProxyPort, ProxyUID, ProxyPWD, ProxyAuthType, ProxyIgnoreList), so a DSN authored for the reference driver no longer silently drops its proxy or pinned CA. * Linux DSN connections now read http.header.* and SSP_* custom keys directly from odbc.ini. * SQL_ATTR_MAX_ROWS is now settable and enforces the row-count cap (was read-only). * BIGINT and DECIMAL values can now be fetched as SQL_C_FLOAT/SQL_C_DOUBLE with a documented lossy conversion instead of failing with 07006. * Malformed boolean connection-property values are rejected with a warning rather than silently treated as false. * Embedded the IANA time-zone database so named-zone TIMESTAMP values resolve correctly, and made value formatting on the bound-column path faster for FLOAT/DOUBLE, TIMESTAMP, and nested (JSON) types. * Restricted the Linux driver's exported symbols to the ODBC entry-point surface. * Every installer (.deb, .rpm, macOS .pkg, Windows MSI) now ships the complete LICENSE, NOTICE, and third-party license inventories. Fixed * SQL_ATTR_QUERY_TIMEOUT now returns HYT00 at the query deadline without blocking on the (potentially slow) cancel RPC. * SQLCancel is now signal-only and dispatched asynchronously; cancellation and teardown of a blocked fetch/execute are bounded and performed on the owning thread, and a cancel that interrupts a blocked CloudFetch download reports HY008. * SQLDisconnect no longer destroys live statement wrappers, fixing a use-after-free under concurrent operations. * Background (cancel/reaper) threads are drained before the driver unloads, preventing crashes after dlclose/FreeLibrary. * SQLGetData returns SQL_NO_DATA on a repeated call after a column is exhausted, fixing an out-of-bounds read; wide (SQL_C_WCHAR) buffer sizing and truncation-warning reporting were hardened. * SQLColumns/SQLProcedures with a NULL catalog now return rows (scoped to the current catalog). * SQLForeignKeys matches the parent (primary-key-side) table name case-insensitively, so an upper-cased parent name no longer returns zero rows. * SQL_SPECIAL_CHARACTERS is reported as empty rather than _. * Linux DSN connections no longer fail with 08003 when keys are read from odbc.ini. * Fixed a hang on macOS when draining diagnostics after a failed connect. * Fixed three undefined-behavior defects found by the AddressSanitizer / UndefinedBehaviorSanitizer CI leg. * On ARM64, the rustls TLS backend now reads the operating system's trust store. 0.3.0 ======================================================================== Released 2026-08-12 Added * Descriptor functions: SQLGetDescField, SQLSetDescField, SQLGetDescRec, SQLSetDescRec, and SQLCopyDesc. * SQLBrowseConnect for iterative connection-string building, and SQLGetFunctions to report which ODBC functions the driver supports. * OAuth authentication (user-to-machine browser flow and machine-to-machine client credentials). * SSL/TLS configuration (SSL, Port, trusted certificates) and HTTP proxy support (ProxyHost, ProxyPort, ProxyUID, ProxyPWD). * Custom HTTP headers via the http.header.* passthrough and server-side session properties via the SSP_* passthrough. * SQLProcedures and SQLProcedureColumns catalog functions. * Per-statement data-at-execution (SQL_NEED_DATA) on SQLExecDirect, and parameter arrays via SQL_ATTR_PARAMSET_SIZE. * macOS universal2 .pkg installer (iODBC). Updated * Migrated the driver backend from ADBC to the Databricks SQL Kernel C ABI, the shared Rust engine behind the Databricks Python, Go, and Node drivers. * SQL_DRIVER_VER now reports the actual project version instead of a hardcoded value. * SQLRowCount reports the real affected-row count for INSERT/UPDATE/DELETE. * SQL_ATTR_TXN_ISOLATION reports and enforces SERIALIZABLE. * SQLGetData honors the requested C type on every call, and SQLBindParameter applies target-type coercion. * SQL_ATTR_METADATA_ID is honored for identifier matching in the catalog functions. * SQL_ATTR_QUERY_TIMEOUT is enforced (returns HYT00 and cancels the in-flight query). * Connection-string parsing is case-insensitive and recognizes the reference driver's key names (DefaultStringColumnLength, BinaryColumnLength, UseUnicodeSqlCharacterTypes, and others). * OAuth token caching via EnableTokenCache and TokenCachePassPhrase. * INTERVAL and nested/complex types (ARRAY, MAP, STRUCT) render as text via SQL_C_CHAR, and supplementary (non-BMP) Unicode characters transcode correctly. * Result-fetch and value-formatting performance improvements (block fetch; reduced allocations in the SQL_C_CHAR conversion path). * Plaintext HTTP connections are supported via SSL=0. Fixed * Fixed a crash converting DECIMAL values to SQL_C_NUMERIC. * SQL_ATTR_CURRENT_CATALOG is decoded from the full wide-character buffer (was truncated to the first byte). * A NULL catalog argument to the catalog functions scopes to the current catalog rather than all catalogs, and an empty-string argument returns no rows. * Corrected result-metadata precision, scale, column sizes, and type mappings across SQL types, and TIME columns report a real column size instead of 0. * SQLForeignKeys reports SQL_NO_ACTION for the update/delete referential rules. * SQLGetStmtAttr rejects inapplicable cursor attributes with HY092. * macOS DSN connections read their keys from the driver-manager configuration. 0.1.0 ======================================================================== Released 2026-03-04 Added * Initial release of the Databricks ODBC driver, built on the Apache Arrow ODBC framework. * Connection lifecycle (SQLConnect, SQLDisconnect, SQLSetConnectAttr), statement execution (SQLPrepare, SQLExecute, SQLExecDirect), and result fetching (SQLFetch, SQLBindCol, SQLGetData). * Parameter binding (SQLBindParameter) and result-set metadata (SQLNumResultCols, SQLDescribeCol). * ODBC diagnostics (SQLGetDiagRec, SQLGetDiagField) in ANSI and Unicode. * Initial catalog functions (SQLTables, SQLColumns, SQLGetTypeInfo, SQLPrimaryKeys, SQLForeignKeys). * Linux .deb package. ==============================================================================