ADBC API Standard#
This document summarizes the general featureset.
Databases#
Databases hold state shared by multiple connections. Generally, this means common configuration and caches. For in-memory databases, it provides a place to hold ownership of the in-memory database.
C/C++:
AdbcDatabase
Go:
Driver
Java:
org.apache.arrow.adbc.core.AdbcDatabase
Connections#
A connection is a single, logical connection to a database.
C/C++:
AdbcConnection
Go:
Connection
Java:
org.apache.arrow.adbc.core.AdbcConnection
Autocommit#
By default, connections are expected to operate in autocommit mode; that is, queries take effect immediately upon execution. This can be disabled in favor of manual commit/rollback calls, but not all implementations will support this.
Go:
OptionKeyAutoCommit
Java:
org.apache.arrow.adbc.core.AdbcConnection#setAutoCommit(boolean)
Statements#
Statements hold state related to query execution. They represent both one-off queries and prepared statements. They can be reused, though doing so will invalidate prior result sets from that statement. (See Concurrency and Thread Safety.)
C/C++:
AdbcStatement
Go:
Statement
Java:
org.apache.arrow.adbc.core.AdbcStatement
Bulk Ingestion#
ADBC provides explicit facilities to ingest batches of Arrow data into a database table. For databases which support it, this can avoid overheads from the typical bind-insert loop. Also, this (mostly) frees the user from knowing the right SQL syntax for their database.
C/C++:
ADBC_INGEST_OPTION_TARGET_TABLE
and related options.Go:
OptionKeyIngestTargetTable
Java:
org.apache.arrow.adbc.core.AdbcConnection#bulkIngest(String, org.apache.arrow.adbc.core.BulkIngestMode)
Partitioned Result Sets#
ADBC lets a driver explicitly expose partitioned and/or distributed result sets to clients. (This is similar to functionality in Flight RPC/Flight SQL.) Clients may take advantage of this to distribute computations on a result set across multiple threads, processes, or machines.
Go:
Statement.ExecutePartitions
Java:
org.apache.arrow.adbc.core.AdbcStatement#executePartitioned()