Glossary

Arrow Flight SQL

A wire protocol for data systems that uses Apache Arrow. See the Flight SQL specification.

client API

The API that an application uses to interact with a database. May abstract over the underlying wire protocol and other details. A client API is generally standardized so that many applications and databases can interoperate through it: examples include ADBC (defined by the ADBC specification), JDBC, and ODBC.

client library

A library an application uses to access databases from a particular language. In ADBC, a client library exposes the ADBC client API and includes a driver manager for loading and using drivers. Its API is designed to feel idiomatic in the host language (for example, DBAPI in Python, database/sql in Go, or DBI in R). The terms client library and driver manager are often used interchangeably, though strictly the driver manager is the driver-loading component within the client library.

connection

In the ADBC API, the connection object/struct represents a single connection to a database. Multiple connections may be created from one database.

connection profile

In ADBC, a named, reusable configuration that pairs a driver with a set of options, stored in a TOML file. A client library can load a profile by name at connection time, so credentials and settings do not have to be specified in application code.

database

In the ADBC API, the database object/struct holds state that is shared across connections.

In general usage, a database is the system that an ADBC driver connects to. This documentation uses the term broadly to refer not only to databases proper but also to query engines, data warehouses, data lakehouses, cloud data platforms, and the like.

driver

Loosely speaking, a library that implements a client API using a wire protocol. For example, the ADBC PostgreSQL driver exposes the ADBC client API and interacts with a PostgreSQL database via the PostgreSQL wire protocol. The JDBC PostgreSQL driver uses the same wire protocol, but exposes the JDBC client API instead.

ADBC drivers can be implemented as libraries in different languages including C++, C#, Go, and Rust. A driver can be imported directly into an application that’s implemented in the same language, or it can be compiled into a shared library (a .so file for Linux, a .dylib file for macOS, or a .dll file for Windows) and dynamically loaded into an application in any supported language using a driver manager.

driver manager

A component that dynamically loads drivers and forwards an application’s calls to them. In ADBC, the driver manager is the part of a client library that loads ADBC drivers. It can load any driver built as a shared library, making it possible to use a driver written in one language from an application written in another, and simplifies using multiple drivers in a single application. The terms driver manager and client library are often used interchangeably.

driver manifest

In ADBC, a file (in TOML format) describing a driver, with a structure defined by the ADBC specification. A driver manager can load a driver from its manifest, which simplifies the process for users.

entrypoint

In ADBC, the name of a function exported by a driver that the driver manager calls when a driver is loaded to perform any initialization required by the driver. The name follows a convention which is outlined in AdbcDriverInitFunc but another name may be used.

statement

In the ADBC API, the statement object/struct holds state for executing a single query. The query itself, bind parameters, result sets, and so on are all tied to the statement. Multiple statements may be created from one connection (though not all drivers will support this).

Substrait

Substrait describes itself as a “cross-language serialization for relational algebra”. It operates in a similar space as SQL, but is lower-level. You’re unlikely to write a Substrait query by hand, but may use tools that opt to generate Substrait instead of SQL for more predictable semantics.

wire protocol

The actual way a driver connects to a database, issues commands, gets results, and so forth. Also called a database client-server protocol. For example, Arrow Flight SQL, the PostgreSQL wire protocol, or Tabular Data Stream (Microsoft SQL Server). Generally, an application does not implement or use this directly, but instead uses something higher-level, like an ADBC, JDBC, or ODBC driver.