Enhancements & New Features
Please note that the connector has updated the default client ID and
secret credentials in this release. Users connecting with refresh
tokens via OAuthMechanism=1 that use the driver default client ID
and secret must re-create their refresh token to authenticate.
DSNs that overwrite the default client ID and secret do not require
any changes to connect.
Updated third-party libraries
The connector now uses the following third-party libraries:
- Expat 2.8.1 (previously 2.8.0)
- OpenSSL 3.5.7 (previously 3.5.7)
- Zlib 1.3.2 (previously 1.3.1)
[GAUSS-1921] Support URL credentials in Workload Identity Federation
The connector now supports Url-sourced credentials in external account
authentication. To use this authentication flow, provide a url
configuration file to the driver KeyFile or KeyFilePath property
when the value of OAuthMechanism is 4. For more details about this
authentication flow, please refer to the Install guide for details.
[GAUSS-2136] Support External Account Authorized User authentication
The driver now supports Authorized User External Account authentication.
To use this authentication flow, provide an external_account_authorized_user
keyfile to the driver in the KeyFile property when the value of
OAuthMechanism is 4.
[GAUSS-2171] Fix custom Service Account Token uris
Resolved an issue where Private Service Endpoints were blocked from
connecting with custom service account token uris.
[GAUSS-2175] Fix auth code errors in Interactive User auth
Resolved an issue where authorizing the driver through Interactive User
Login in the DSN could error on auth code.
[GAUSS-2178] Support PKCE in OAuth2 requests
The connector now uses PKCE in OAuth2 auth exchange and token requests
to secure the driver from MITM vulnerabilities.
[GAUSS-2203] Fix PrivateServiceConnectURIs in OAuth2 Sign-in
Resolved an issue where PSC settings saved in the DSN would fail to
propagate to the Sign In workflow for Interactive User Auth.
[GAUSS-2210] Support Picoseconds precision in timestamps types
The connector now supports timestamps with picoseconds precision. The
functionality is accessed when EnableTimestampPicos is set to 1. The
default for this property is 0.
[GAUSS-2227] Service Account Impersonation in Workload Identity Federation
Resolved an issue where service account impersonation urls provided in
credentials file could get ignored in Workload Identity Federation
authentication flow.
Known Issues
The following are known issues that you may encounter due to limitations in
the data source, the connector, or an application.
The connector does not order the result sets for the following catalog
functions:
SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys,
SQLProcedureColumns, SQLProcedures, SQLTables
This is a limitation in the ODBC driver discovered in July 2024.
The connector does not support parameterized types for Resultset and
Parameter metadata.
This is a limitation of the Google BigQuery server.
The connector does not support parameters in the exception block.
This is a limitation of the Google BigQuery server discovered on Mar 2021.
On macOS or Linux platforms, when the connector converts SQL_DOUBLE data to
SQL_C_CHAR or SQL_C_WCHAR, data which is small or large enough to require
representation in scientific notation may prepend a 0 to the exponent.
This is a limitation of Google BigQuery. For a list of BigQuery data types
that the connector maps to the SQL_DOUBLE ODBC type, see the Installation
and Configuration Guide.
When casting data, you must specify the data type according to Google
BigQuery standards.
When casting data to a specific data type, you must use the corresponding
data type name shown in the "Casting" section of the Query Reference:
https://cloud.google.com/bigquery/sql-reference/functions-and-operators#cas
ting
For example, to cast the "salary" column to the INTEGER type, you must
specify INT64 instead of INTEGER:
SELECT position, CAST(salary AS INT64) from Employee
When using the Standard SQL dialect, the connector's ODBC escape
functionality is subject to the following limitations:
Standard SQL does not support the seed in the RAND([seed]) scalar
function. As a result, the connector maps RAND() and RAND(6) to RAND().
For the following scalar functions, BigQuery only returns values in UTC,
but ODBC expects the values in local time:
- CURDATE()
- CURRENT_DATE()
- CURRENT_TIME[(TIME_PRECISION)]
- CURRENT_TIMESTAMP[(TIME_PRECISION)]
- CURTIME()
- NOW()
Time precision values are not supported for the
CURRENT_TIME[(TIME_PRECISION)] and CURRENT_TIMESTAMP[(TIME_PRECISION)]
scalar functions.
TIME data types are not supported for the following scalar functions:
- EXTRACT(interval FROM datetime)
- TIMESTAMPADD(interval,integer_exp,timestamp_exp
- TIMESTAMPDIFF(interval,timestamp_exp1,timestamp_exp2)
For TIMESTAMPADD and TIMESTAMPDIFF, only the TIMESTAMP and DATE data
types are supported.
When calling the TIMESTAMPADD() scalar function to work with DAY, WEEK,
MONTH, QUARTER, or YEAR intervals, the connector escapes the function and
calls DATE_ADD() instead. DATE_ADD() only supports DATE types, so time
information is lost if the function is called on TIMESTAMP data.
When calling the TIMESTAMPDIFF() scalar function to work with DAY, MONTH,
QUARTER, or YEAR intervals, the connector escapes the function and calls
DATE_DIFF() instead. DATE_DIFF() only supports DATE types, so time
information is lost if the function is called on TIMESTAMP data.
For the BIT_LENGTH scalar function, only the STRING and BYTES data types
are supported. This behavior aligns with the SQL-92 specification, but
not the ODBC specification.
When using the Legacy SQL dialect, the connector's ODBC escape
functionality is subject to the following limitations:
For the following scalar functions, BigQuery only returns values in UTC,
but ODBC expects the values in local time:
- CURDATE()
- CURRENT_DATE()
- CURRENT_TIME[(TIME_PRECISION)]
- CURRENT_TIMESTAMP[(TIME_PRECISION)]
- CURTIME()
Time precision values are not supported for the
CURRENT_TIME[(TIME_PRECISION)] and CURRENT_TIMESTAMP[(TIME_PRECISION)]
scalar functions.
For the following scalar functions, TIME data types are not supported.
Only the TIMESTAMP and DATE data types are supported.
- TIMESTAMPADD(interval,integer_exp,timestamp_exp
- TIMESTAMPDIFF(interval,timestamp_exp1,timestamp_exp2)