ODBC Driver release notes for 2026¶
This article contains the release notes for the ODBC Driver, including the following when applicable:
- Behavior changes
- New features
- Customer-facing bug fixes
Snowflake uses semantic versioning for ODBC Driver updates.
See ODBC Driver for documentation.
Version 4.0.0-rc4 (Sep 17, 2026)¶
Fourth public preview release of the ODBC Driver built on the Universal Core. This is a new version line, distributed as a release candidate and downloaded separately from the 3.x driver. See Snowflake ODBC Driver built on the Universal Core for installation instructions, the curated list of behavior differences, and migration guidance.
Changes¶
- Changed catalog functions so a NULL
CatalogNameis no longer replaced with the current database by default. SetUseCurrentCatalog=true(or enableCLIENT_METADATA_REQUEST_USE_CONNECTION_CTX) to restore that substitution. Unconstrained NULL-catalog searches issue account-wideSHOWstatements. - Changed
SQLDriverConnectto post a local01S00warning for connection-string keywords it does not recognize (native error 17, “N invalid keys are found in the connection string:<KEY>”); a keyword is recognized when thesf_coreparameter registry resolves it or it names an ODBC structural keyword (DSN,DRIVER,FILEDSN,SAVEFILE). The connection still opens and the keyword is still forwarded to the server. - Removed the
Tracing(0-6)field from the Windows ODBC DSN setup dialog; driver logging usessf.odbc.ini(LogLevel,LogPath) instead. LegacyTRACINGvalues in a DSN or connection string are ignored. - Changed client-local rejection of a non-credential connection parameter to report SQLSTATE
HY000instead of the warning-class01S00; affected cases are an invalidPORT, an unparseable connection string, and any invalid or missing non-credential parameter.01S00is defined by the ODBC specification as aSQL_SUCCESS_WITH_INFOwarning meaning the connection opened anyway, so returning it onSQL_ERRORled applications that branch on the SQLSTATE class to treat a failed connection as a warning. ODBC 3.x returned28000(native error20032) for these cases. - Changed a missing key-pair credential (
PRIVATE_KEY/PRIVATE_KEY_FILE) and a missing bearer token (TOKEN/TOKEN_FILE_PATH) to report SQLSTATE28000instead of01S00, matching ODBC 3.x and the SQLSTATE already reported when either parameter is named on its own. - Changed rejection of a Workload Identity Federation parameter (
WORKLOAD_IDENTITY_PROVIDER,WORKLOAD_IDENTITY_ENTRA_RESOURCE,WORKLOAD_IDENTITY_IMPERSONATION_PATH,WORKLOAD_IDENTITY_AWS_USE_OUTBOUND_TOKEN) to report SQLSTATE28000rather than a general error, so a missing or invalid one is reported as the authentication failure it is. ODBC 3.x reported28000for a missingWORKLOAD_IDENTITY_PROVIDER. - Changed the diagnostic message on a failed login to lead with the server’s own text:
SQLGetDiagRecnow readsFailed to login: Login error: <server text>, code: <code>on its first line, where the server sentence previously appeared only inside the error trace. SQLSTATE and native error code are unchanged. - Improved log output to mask OAuth client IDs and AWS access-key IDs.
New features and updates¶
- Added a
PUT_GET_MAX_ATTEMPTSconnection parameter for the shared PUT/GET attempt limit, and accepted the 3.xPUT_MAXRETRIES/GET_MAXRETRIESspellings as aliases that warn (01000) on use. - Added the ODBC
UseCurrentCatalogconnection parameter (default false), matching the 3.x DSN key. When true, a NULLCatalogNameonSQLTables,SQLColumns,SQLPrimaryKeys,SQLForeignKeys,SQLProcedures, andSQLProcedureColumnsis the current database. - Added TRACE-level entry and exit logs for all public ODBC functions.
Customer-facing bug fixes¶
- Fixed
SQLGetTypeInfoto return type information matching the application’s configured ODBC version. - Fixed
SQL_C_DEFAULTon catalogSMALLINTandINTEGERcolumns soSQLGetTypeInfoandSQLColumnsreturn binary integers instead of failing with SQLSTATE22003. - Fixed INTERVAL DAY-TIME result fetch for subtypes whose Arrow scale is not TIME precision (
MINUTE TO SECOND,SECOND, and truncatedDAY TO SECONDfractions). - Fixed
SQLColumnssizes forGEOGRAPHYandGEOMETRYto follow the session VARCHAR maximum.
Version 3.21.0 (Sep 10, 2026)¶
New features and updates¶
- Added the
wif_hostconnection parameter to override the STS/IAM endpoint used for AWS and GCP Workload Identity Federation. This is independent of theWORKLOAD_IDENTITY_AUDIENCEparameter removed in this release. - Added CRL cache cleanup so expired CRLs no longer accumulate in long-lived processes. New environment variables control cache validity and cleanup:
SF_CRL_CACHE_CLEANUP_INTERVAL(default 3600 seconds; set to 0 to disable)SF_CRL_CACHE_VALIDITY_TIME(default 86400 seconds)SF_CRL_ON_DISK_CACHE_REMOVAL_DELAY(default 604800 seconds)
- Migrated Azure storage from azure-storage-cpplite to Azure SDK for C++ (azure-storage-blobs 12.18.0).
- Updated curl to v8.21.0.
- Upgraded libsnowflakeclient to version 2.10.0.
Changes¶
- Restored SigV4
GetCallerIdentityas the default AWS Workload Identity Federation attestation method. The STSGetWebIdentityToken(JWT) flow introduced in version 3.18.0 is no longer used. Version 3.21.0 doesn’t provide a connection parameter to keep the JWT flow. If your IdP trust policy requiresGetWebIdentityToken, stay on version 3.20.x until a later driver release exposes an opt-in. - Removed the
WORKLOAD_IDENTITY_AUDIENCEconnection parameter added in version 3.20.0. The configurable attestation audience was withdrawn; it isn’t replaced bywif_host. The driver now always uses the default audiencesnowflakecomputing.com. If you still setWORKLOAD_IDENTITY_AUDIENCE, the driver ignores it and logs a warning for an unexpected connection key.
Bug fixes¶
- Fixed credentials appearing in diagnostic trace output.
- Fixed the HTTP retry path so the request buffer is reset correctly.
- Fixed a delay in the AWS identity detector.
- Tightened string copy bounds checking after the Azure SDK migration to prevent a buffer overflow.
Version 4.0.0-rc3 (Sep 10, 2026)¶
Third public preview release of the ODBC Driver built on the Universal Core. This is a new version line, distributed as a release candidate and downloaded separately from the 3.x driver. See Snowflake ODBC Driver built on the Universal Core for installation instructions, the curated list of behavior differences, and migration guidance.
Changes¶
- Changed
SQLColumnsBUFFER_LENGTHforDATE/TIMEfromCOLUMN_SIZE(10/18forTIME(9)) to6(sizeof(SQL_DATE_STRUCT)/sizeof(SQL_TIME_STRUCT)); query-resultSQLColAttributeoctet length forDATE/TIMEremains6. - Changed
SQLBrowseConnectso an incomplete connection string returnsSQL_NEED_DATAand keeps the handle available for further browse calls, matching the 3.x iterative protocol under iODBC. - Changed OAuth Authorization Code connections to default
CLIENT_STORE_TEMPORARY_CREDENTIALtotruewhen the caller has not set it, matching ODBC 3.x token caching. - Changed
SQLForeignKeyswithSQL_ATTR_METADATA_ID=TRUEto returnSQL_ERROR(HY009) for aNULLcatalog, schema, or table pointer on either side. - Changed
SQL_C_BINARYfetch ofFLOAT/DOUBLE/REALto return the native 8-byte IEEE 754 value instead of a 19-byteSQL_NUMERIC_STRUCT. - Changed
SQL_BITparameter binding so integer andSQL_C_NUMERICsources accept only0and1(other magnitudes return22003). - Changed
SQL_C_CHAR/SQL_C_WCHARbinding of"Infinity","-Infinity", and"NaN"toSQL_FLOAT/SQL_REAL/SQL_DOUBLEto forward the non-finite value instead of returning22018. - Changed
SQL_C_CHAR/SQL_C_WCHARhex literals bound toSQL_BINARYso an odd-length hex string drops the leftover nibble and succeeds. - Changed
SQLBindParameterwith Snowflake vendorTIMESTAMPtype codes (2000/2001/2002) to store those codes on the IPD soSQLDescribeParamreturns them as bound. - Changed
SQLSetStmtAttr(SQL_ROWSET_SIZE, 0)to returnSQL_ERROR(HY024) instead of storing0or coercing to1. - Changed PUT result
source_compression/target_compressiontokens to lowercase (for example,gzip), matching ODBC 3.x. - Changed gzip-compressed PUT uploads to omit the original filename from the gzip
FNAMEheader, matching ODBC 3.x. - Changed PUT and GET to transfer several files at once, bounded by the statement
PARALLELvalue; result rows keep their original file order. - Changed an unreadable or empty
TOKEN_FILE_PATHto report SQLSTATE28000instead of01S00. - Improved GET to warn when a downloaded batch contains multiple files that resolve to the same local filename.
- Improved external-browser callback handling to cap HTTP header size on the localhost listener.
New features and updates¶
- Added
INTERVAL YEAR TO MONTHandINTERVAL DAY TO SECONDresult support:SQL_C_CHAR/SQL_C_WCHARfetch returns the canonical ANSI literal ([-]Y-MM,[-]D HH:MM:SS[.f]), same-familySQL_C_INTERVAL_*targets receive the parsed interval struct, and scalar numeric targets receive total months or total whole seconds (reporting01S07when sub-second precision is dropped). - Added native AKS Workload Identity support for Azure: when the Azure Workload Identity webhook injects
AZURE_CLIENT_ID,AZURE_TENANT_ID, andAZURE_FEDERATED_TOKEN_FILEinto a pod and the projected token file exists on disk,WORKLOAD_IDENTITY_PROVIDER=AZUREexchanges that federated token for an Entra ID access token directly.WORKLOAD_IDENTITY_IMPERSONATION_PATHis not supported in this environment. - Added a
WORKLOAD_IDENTITY_AWS_USE_OUTBOUND_TOKENconnection parameter for AWS Workload Identity Federation. When set totrue, attestation uses outbound STSGetWebIdentityTokeninstead of the default pre-signedGetCallerIdentitytoken; the connection parameter takes precedence overSNOWFLAKE_ENABLE_AWS_WIF_OUTBOUND_TOKEN. - Added
INCLUDE_RETRY_REASON(defaulttrue) so retried query requests sendretryReason(the HTTP status that triggered the retry, or0for transport failures) alongsideretryCount.
Customer-facing bug fixes¶
- Fixed
SQLGetDiagFieldreturn codes for three edge cases: a record field requested withRecNumber=0now returnsSQL_ERRORinstead ofSQL_NO_DATA, a header field requested with a positiveRecNumbernow returnsSQL_SUCCESSinstead ofSQL_NO_DATA, and a negativeBufferLengthfor a string field now returnsSQL_ERROR. - Fixed array/batch parameter binding to retry the execute with inline JSON when the
SYSTEM$BINDstage is disabled, instead of failing the statement. - Fixed the file-based token cache changing the mode of a cache file that is not
0600and then using it anyway; such a file is now reported and left unused. - Fixed connections failing when
CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCYfalls outside the accepted range; the value is now clamped before login. - Fixed a
Driver=-only connect with no other connection-string attributes to load the defaultconnections.tomlprofile. - Fixed session-parameter reads used by
SQLGetConnectAttrand decimal-as-int conversion to honor typed values returned by the server (for example,AUTOCOMMITafterALTER SESSION). - Fixed queries returning a
FILEcolumn failing withUnsupported column type. - Fixed queries returning a
MAPcolumn failing withUnsupported column type.
Version 3.20.0 (Sep 3, 2026)¶
Security fixes¶
- Improved validation of the
ACCOUNT,SERVER, andPORTconnection parameters before they are used to construct request URLs, so that none of the interpolated values can alter the resulting URL. Values that contain characters other than letters, digits,_,-, and.are rejected, as are port numbers outside the range 1–65535.
New features¶
- Added the
WORKLOAD_IDENTITY_AUDIENCEconnection parameter to override the audience used when requesting a Workload Identity Federation attestation token. When omitted, the driver uses the default audiencesnowflakecomputing.com.
Version 4.0.0-rc2 (Sep 1, 2026)¶
Second public preview release of the ODBC Driver built on the Universal Core. This is a new version line, distributed as a release candidate and downloaded separately from the 3.x driver. See Snowflake ODBC Driver built on the Universal Core for installation instructions, the curated list of behavior differences, and migration guidance.
New features and updates¶
- Implemented
SQLFreeConnect(ODBC 2.x) as a thin wrapper aroundSQLFreeHandle(SQL_HANDLE_DBC, ...)for direct-link and ODBC 2.x applications that bypass the Driver Manager. - Implemented
SQLFreeEnv(ODBC 2.x) as a thin wrapper aroundSQLFreeHandle(SQL_HANDLE_ENV, ...)for direct-link and ODBC 2.x applications that bypass the Driver Manager. - Changed
SQLCancelto cancel through the core operation handle instead of issuing a separate server-side cancel call, so a cancelled statement is aborted server-side by the executing path itself.SQLCancelreturns as soon as the cancel is signaled rather than waiting for the abort request to be processed; the statement’s own call still reportsHY008and does not return until the abort has been issued.
Customer-facing bug fixes¶
- Fixed
SQLColumnsBUFFER_LENGTHforNUMBER/DECIMALto return precision + 2 (ODBC transfer octet length); query-resultSQLColAttributeoctet/display forNUMBERremains 136. - Fixed
SQLColumnsCOLUMN_SIZEandBUFFER_LENGTHforVARIANT/OBJECT/ARRAYto followVARCHAR_AND_BINARY_MAX_SIZE_IN_RESULTinstead of the 128 MB length fromSHOW COLUMNS. - Fixed
SQLColumnsCOLUMN_SIZEandBUFFER_LENGTHfor unrecognized Snowflake types such asGEOGRAPHY/GEOMETRYto report the varchar metrics implied by theirSQL_VARCHARDATA_TYPEinstead ofNULL. - Fixed
SQLProcedureColumnsTYPE_NAMEfor unsupported types such asGEOGRAPHY/GEOMETRYto report the Snowflake type name whileDATA_TYPEremainsSQL_VARCHAR. - Fixed
SQLColumnsandSQLProcedureColumnsCHAR_OCTET_LENGTHfor unsupported types such asGEOGRAPHY/GEOMETRYto report a byte length instead ofNULL, matching theSQL_VARCHARthey report asDATA_TYPE. - Fixed
SQLGetTypeInfostring result columns (TYPE_NAME,LITERAL_PREFIX/SUFFIX,CREATE_PARAMS,LOCAL_TYPE_NAME) to reportSQL_WVARCHARas the IRD concise type, matchingSQLTables/SQLColumns. - Fixed
SQLGetTypeInfoINTERVAL_PRECISIONto reportSQL_SMALLINTas the IRD concise type, matching the ODBC spec and the reference driver;NUM_PREC_RADIXremainsSQL_INTEGER.
Version 4.0.0-rc1 (Aug 19, 2026)¶
Initial public preview release of the ODBC Driver built on the Universal Core. This is a new version line, distributed as a release candidate and downloaded separately from the 3.x driver. See Snowflake ODBC Driver built on the Universal Core for installation instructions, the curated list of behavior differences, and migration guidance.
New features and updates¶
- Rebuilt the driver on the Universal Core, a shared Rust library that implements networking, authentication, result-set fetching, and stage transfers for every Snowflake driver. The ODBC wrapper contains no protocol logic of its own.
- Published the driver and Universal Core source in the Snowflake drivers repository on GitHub.
- Replaced
simba.snowflake.iniwithsf.odbc.inifor process-wide logging and driver configuration. - Added
connections.tomlprofile support for setting connection parameters outside the DSN or connection string.
Changes¶
- Installing this version replaces the 3.x driver on the same machine. Validate it on a dedicated host, VM, or container.
- Certificate revocation checking uses CRLs rather than OCSP, and is off by default. OCSP-specific connection parameters are not accepted. See Configuration differences.
- This release contains breaking behavior changes relative to the 3.x driver. The most significant are summarized in Behavior differences, and the complete catalog is published as
BehaviorDifferences.yaml.
Version 3.19.0 (Jul 23, 2026)¶
Customer-facing bug fixes¶
- Fixed OCSP cache corruption that could occur under an inter-process race condition.
- Improved validation of account, region, host, protocol, and port connection attributes used in request URLs.
- Fixed a resource handling issue that could affect DNS resolution when address lookup fails.
Other updates and internal changes¶
- Upgraded SimbaSDK to version 10.3.8.
- Upgraded libsnowflakeclient to version 2.9.2.
- Upgraded OpenSSL to version 3.5.7.
Version 3.18.0 (Jun 17, 2026)¶
New features¶
- Added support for the
BINARY_OUTPUT_FORMATsession parameter to control whether binary values are returned inBASE64orHEXformat. - Added the
QUERY_TAGconnection parameter to set a default query tag for the connection. Values longer than 2000 characters are truncated. - Added the
SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATIONenvironment variable as the namespaced replacement forSKIP_TOKEN_FILE_PERMISSIONS_VERIFICATIONwhen reading JSON token files. The unprefixed variable still works but is now logged as deprecated. - Changed AWS Workload Identity Federation attestation from a base64-encoded signed STS
GetCallerIdentityrequest to a JWT obtained from STSGetWebIdentityToken.
Customer-facing bug fixes¶
- Fixed path handling in GET downloads by validating server-provided destination file names before writing locally. Unsafe names (path separators,
./.., NUL bytes, and on Windows\/:) are now rejected instead of being used as download targets. - Fixed an infinite JWT renewal loop during login when
renew_timeoutelapses repeatedly (for example, behind a bad proxy or slow network). Renewal is now bound by the configured login retry count and overall login timeout.
Other updates and internal changes¶
- Upgraded libsnowflakeclient to version 2.9.1.
- Upgraded curl to version 8.20.0.
- Upgraded OpenSSL to version 3.0.21.
- Upgraded AWS SDK for C++ to version 1.11.806.
- Updated
client_environmenttelemetry to include libc family and version (LIBC_FAMILYandLIBC_VERSION) on Linux, detecting glibc or musl.
Version 3.17.0 (Apr 28, 2026)¶
New features¶
- Added support for the
CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCYsession parameter to control how often the driver refreshes the session token whenCLIENT_SESSION_KEEP_ALIVEis enabled. - Added platform detection during the login flow, along with the
disablePlatformDetectionandplatformDetectionTimeoutMsconnection parameters to control the behavior. - Added the
LOG_QUERY_TEXTandLOG_QUERY_PARAMETERSconnection parameters to opt in to logging of query text and bind parameter values for diagnostic purposes. - Added support for configuring the maximum CRL download size when CRL checking is enabled.
- Added debug logging of HTTP request and response headers to help diagnose connectivity issues.
Customer-facing bug fixes¶
- Fixed the OCSP mode not being propagated to the HTTP calls used by the OAuth authentication flows.
- Fixed a crash when an empty
MULTI_STMTDML response left the result set without a usable execute-stage result. - Fixed a segmentation fault during the OCSP check when the certificate or its issuer was
NULL. - Fixed the query context not being updated when a query failed.
Other updates and internal changes¶
- Upgraded libsnowflakeclient to version 2.8.0.
- Upgraded curl to version 8.19.0.
- Upgraded OpenSSL to version 3.0.20.
- Updated the
client_environmenttelemetry signals to include the certificate revocation check mode and the libc family and version (glibc or musl) on Linux. - Updated SPCS service identifier token (
SPCS_TOKEN) injection to be enabled only when theSNOWFLAKE_RUNNING_INSIDE_SPCSenvironment variable is set, to trim whitespace from the token, and to read the token only from the default location. Thetoken_file_pathparameter is no longer used to override the SPCS token path. - Removed unnecessary log messages emitted during version validity checks.
Version 3.16.0 (Mar 11, 2026)¶
New features and updates¶
- Upgraded SimbaSDK to version 10.3.7.
- Upgraded libsnowflakeclient to version 2.7.1.
- Upgraded OpenSSL to version 3.0.19.
- Updated
client_environmenttelemetry signals to provide more information about the environment.
Bug fixes¶
- Fixed the incorrect return size for
SQL_NUMERICwhenSQL_DECIMALtoSQL_C_BINARYconversion takes place. - Fixed
SQLProceduresnot returning all procedures. - Fixed the OAuth Client Credentials flow not routing IdP token requests through the configured HTTP proxy.
- Fixed the incorrect return of
SQL_SUCCESSinstead ofSQL_SUCCESS_WITH_INFOwhen the buffer for the converted string is too small.
Version 3.15.0 (Feb 9, 2026)¶
New features and updates¶
-
Deprecated support for CentOS 7, Red Hat Enterprise Linux (RHEL) 7, and Ubuntu 18.04. The minimum supported operating systems are now Red Hat Enterprise Linux (RHEL) 8, Rocky Linux 8, CentOS 8, and Ubuntu 20.04.
-
Added the
WORKLOAD_IDENTITY_IMPERSONATION_PATHconnection parameter to support GCP and AWS Workload Identity Federation (WIF) impersonation. -
Added the
singleAuthenticationPromptconnection parameter to control the authentication flow. -
Added the following operating system details from the
/etc/os-releasefile as telemetry during the login request:NAMEPRETTY_NAMEIDBUILD_IDIMAGE_IDIMAGE_VERSIONVERSIONVERSION_ID
-
Updated curl to version 8.16.0.
-
Updated OpenSSL to version 3.0.18.
-
Set
LOCAL_APPLICATIONas the default value forclient_idandclient_secretin the OAuth authorization code flow.
Bug fixes¶
- Fixed the expired file lock on Linux for secure storage.
- Removed the username requirement for WIF authentication.
Version 3.14.0 (Jan 12, 2026)¶
New features and updates¶
-
Added support for Red Hat Enterprise Linux (RHEL) 9 for x86 and ARM64 architectures.
-
Introduced a shared library for extended telemetry to identify and prepare a testing platform for native Rust extensions.
-
Introduced warning log messages when HTTP is used for OAuth authorization and token endpoints.
-
Added support for injecting the SPCS service identifier token (
SPCS_TOKEN) into login requests when present in SPCS containers.- Introduced the
token_file_pathparameter in the TOML configuration to specify the path to the file containing the token. - Introduced the
SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATIONparameter. If set totrue, the file permission check is omitted.
- Introduced the
-
Introduced a specific error when exceeding the parameter limit in a query.
-
Improved logging.
-
Added support for specifying the Azure client ID.
-
Enabled handling of the 307 and 308 HTTP redirect codes.
Bug fixes¶
- Fixed duplicate error message codes.
- Fixed the default session scope for OAuth authentication.
- Fixed the default CRL cache path creation on Windows.
- Fixed session token leakage in the logs.