This enables the client to work with multiple ADBC drivers in the same fashion. When a new client AdbcConnection is created, the driver is just passed in as part of the constructor, like:
new Adbc.Client.AdbcConnection() { new DriverA(), ... } new Adbc.Client.AdbcConnection() { new DriverB(), ... }
Since ADO.NET is row-oriented, and ADBC is column-oriented, the row index is tracked through the Read()
call. When the end of the current record batch is reached, the Client library calls the ReadNextRecordBatchAsync
method on the QueryResult until no more record batches can be obtained.
This can be thought of as:
The ADO.NET Client is designed so that properties in the connection string map to the properties that are sent to the ADBC driver in the code:
AdbcDriver.Open(adbcConnectionParameters);
The connection string is parsed using the DbConnectionStringBuilder
class and the key/value pairs are then added to the properties for the ADBC driver.
For example, when using the Snowflake ADBC Go Driver, the connection string will look similar to:
adbc.snowflake.sql.account={account};adbc.snowflake.sql.warehouse={warehouse};username={user};password={password}
if using the default user name and password authentication, but look like
adbc.snowflake.sql.account={account};adbc.snowflake.sql.warehouse={warehouse};username={user};password={password};adbc.snowflake.sql.auth_type=snowflake_jwt;adbc.snowflake.sql.client_option.jwt_private_key={private_key_file}
when using JWT authentication with an unencrypted key file.
Other ADBC drivers will have different connection parameters, so be sure to check the documentation for each driver.
Because the ADO.NET client is designed to work with multiple drivers, callers will need to specify the driver properties that are set for particular values. This can be done either as properties on the objects directly, or can be parsed from the connection string. These properties are:
s
or ms
, For example, AdbcConnectionTimeout=(adbc.snowflake.sql.client_option.client_timeout,30,s)
would set the connection timeout to 30 seconds.AdbcConnectionTimeout
and sets the AdbcCommandTimeoutProperty
and CommandTimeout
values on the AdbcCommand
object.JsonString
(the default) or Strict
(treat the struct as a native type). If using JsonString, the return ArrowType will be StringType and the result a string value. If using Strict, the return ArrowType will be StructType and the result a Dictionary<string, object?>.UseSqlDecimal
or OverflowDecimalAsString
where values like Decimal256 are treated as strings.