==============================================================================
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.

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