59#ifndef ARROW_FLAG_DICTIONARY_ORDERED
61#ifndef ARROW_C_DATA_INTERFACE
62#define ARROW_C_DATA_INTERFACE
64#define ARROW_FLAG_DICTIONARY_ORDERED 1
65#define ARROW_FLAG_NULLABLE 2
66#define ARROW_FLAG_MAP_KEYS_SORTED 4
75 struct ArrowSchema** children;
76 struct ArrowSchema* dictionary;
79 void (*release)(
struct ArrowSchema*);
92 struct ArrowArray** children;
93 struct ArrowArray* dictionary;
96 void (*release)(
struct ArrowArray*);
103#ifndef ARROW_C_STREAM_INTERFACE
104#define ARROW_C_STREAM_INTERFACE
106struct ArrowArrayStream {
113 int (*get_schema)(
struct ArrowArrayStream*,
struct ArrowSchema* out);
121 int (*get_next)(
struct ArrowArrayStream*,
struct ArrowArray* out);
132 const char* (*get_last_error)(
struct ArrowArrayStream*);
136 void (*release)(
struct ArrowArrayStream*);
154#if !defined(ADBC_EXPORT)
156#if defined(ADBC_EXPORTING)
157#define ADBC_EXPORT __declspec(dllexport)
159#define ADBC_EXPORT __declspec(dllimport)
179#define ADBC_STATUS_OK 0
184#define ADBC_STATUS_UNKNOWN 1
189#define ADBC_STATUS_NOT_IMPLEMENTED 2
194#define ADBC_STATUS_NOT_FOUND 3
199#define ADBC_STATUS_ALREADY_EXISTS 4
206#define ADBC_STATUS_INVALID_ARGUMENT 5
215#define ADBC_STATUS_INVALID_STATE 6
223#define ADBC_STATUS_INVALID_DATA 7
231#define ADBC_STATUS_INTEGRITY 8
236#define ADBC_STATUS_INTERNAL 9
243#define ADBC_STATUS_IO 10
248#define ADBC_STATUS_CANCELLED 11
253#define ADBC_STATUS_TIMEOUT 12
258#define ADBC_STATUS_UNAUTHENTICATED 13
263#define ADBC_STATUS_UNAUTHORIZED 14
271#define ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA INT32_MIN
324#define ADBC_ERROR_INIT \
325 (AdbcError{nullptr, \
326 ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA, \
335#define ADBC_ERROR_INIT \
336 ((struct AdbcError){ \
337 NULL, ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA, {0, 0, 0, 0, 0}, NULL, NULL, NULL})
347#define ADBC_ERROR_1_0_0_SIZE (offsetof(struct AdbcError, private_data))
356#define ADBC_ERROR_1_1_0_SIZE (sizeof(struct AdbcError))
416#define ADBC_VERSION_1_0_0 1000000
424#define ADBC_VERSION_1_1_0 1001000
429#define ADBC_OPTION_VALUE_ENABLED "true"
434#define ADBC_OPTION_VALUE_DISABLED "false"
444#define ADBC_OPTION_URI "uri"
454#define ADBC_OPTION_USERNAME "username"
464#define ADBC_OPTION_PASSWORD "password"
470#define ADBC_INFO_VENDOR_NAME 0
475#define ADBC_INFO_VENDOR_VERSION 1
481#define ADBC_INFO_VENDOR_ARROW_VERSION 2
486#define ADBC_INFO_VENDOR_SQL 3
491#define ADBC_INFO_VENDOR_SUBSTRAIT 4
497#define ADBC_INFO_VENDOR_SUBSTRAIT_MIN_VERSION 5
503#define ADBC_INFO_VENDOR_SUBSTRAIT_MAX_VERSION 6
508#define ADBC_INFO_DRIVER_NAME 100
513#define ADBC_INFO_DRIVER_VERSION 101
518#define ADBC_INFO_DRIVER_ARROW_VERSION 102
528#define ADBC_INFO_DRIVER_ADBC_VERSION 103
533#define ADBC_OBJECT_DEPTH_ALL 0
538#define ADBC_OBJECT_DEPTH_CATALOGS 1
543#define ADBC_OBJECT_DEPTH_DB_SCHEMAS 2
548#define ADBC_OBJECT_DEPTH_TABLES 3
553#define ADBC_OBJECT_DEPTH_COLUMNS ADBC_OBJECT_DEPTH_ALL
560#define ADBC_STATISTIC_AVERAGE_BYTE_WIDTH_KEY 0
567#define ADBC_STATISTIC_AVERAGE_BYTE_WIDTH_NAME "adbc.statistic.byte_width"
570#define ADBC_STATISTIC_DISTINCT_COUNT_KEY 1
575#define ADBC_STATISTIC_DISTINCT_COUNT_NAME "adbc.statistic.distinct_count"
578#define ADBC_STATISTIC_MAX_BYTE_WIDTH_KEY 2
585#define ADBC_STATISTIC_MAX_BYTE_WIDTH_NAME "adbc.statistic.max_byte_width"
588#define ADBC_STATISTIC_MAX_VALUE_KEY 3
591#define ADBC_STATISTIC_MAX_VALUE_NAME "adbc.statistic.max_value"
594#define ADBC_STATISTIC_MIN_VALUE_KEY 4
597#define ADBC_STATISTIC_MIN_VALUE_NAME "adbc.statistic.min_value"
600#define ADBC_STATISTIC_NULL_COUNT_KEY 5
605#define ADBC_STATISTIC_NULL_COUNT_NAME "adbc.statistic.null_count"
608#define ADBC_STATISTIC_ROW_COUNT_KEY 6
613#define ADBC_STATISTIC_ROW_COUNT_NAME "adbc.statistic.row_count"
622#define ADBC_CONNECTION_OPTION_AUTOCOMMIT "adbc.connection.autocommit"
630#define ADBC_CONNECTION_OPTION_READ_ONLY "adbc.connection.readonly"
639#define ADBC_CONNECTION_OPTION_CURRENT_CATALOG "adbc.connection.catalog"
648#define ADBC_CONNECTION_OPTION_CURRENT_DB_SCHEMA "adbc.connection.db_schema"
665#define ADBC_STATEMENT_OPTION_INCREMENTAL "adbc.statement.exec.incremental"
680#define ADBC_STATEMENT_OPTION_PROGRESS "adbc.statement.exec.progress"
693#define ADBC_STATEMENT_OPTION_MAX_PROGRESS "adbc.statement.exec.max_progress"
706#define ADBC_CONNECTION_OPTION_ISOLATION_LEVEL \
707 "adbc.connection.transaction.isolation_level"
712#define ADBC_OPTION_ISOLATION_LEVEL_DEFAULT \
713 "adbc.connection.transaction.isolation.default"
719#define ADBC_OPTION_ISOLATION_LEVEL_READ_UNCOMMITTED \
720 "adbc.connection.transaction.isolation.read_uncommitted"
735#define ADBC_OPTION_ISOLATION_LEVEL_READ_COMMITTED \
736 "adbc.connection.transaction.isolation.read_committed"
745#define ADBC_OPTION_ISOLATION_LEVEL_REPEATABLE_READ \
746 "adbc.connection.transaction.isolation.repeatable_read"
754#define ADBC_OPTION_ISOLATION_LEVEL_SNAPSHOT \
755 "adbc.connection.transaction.isolation.snapshot"
763#define ADBC_OPTION_ISOLATION_LEVEL_SERIALIZABLE \
764 "adbc.connection.transaction.isolation.serializable"
776#define ADBC_OPTION_ISOLATION_LEVEL_LINEARIZABLE \
777 "adbc.connection.transaction.isolation.linearizable"
799#define ADBC_INGEST_OPTION_TARGET_TABLE "adbc.ingest.target_table"
804#define ADBC_INGEST_OPTION_MODE "adbc.ingest.mode"
807#define ADBC_INGEST_OPTION_MODE_CREATE "adbc.ingest.mode.create"
812#define ADBC_INGEST_OPTION_MODE_APPEND "adbc.ingest.mode.append"
817#define ADBC_INGEST_OPTION_MODE_REPLACE "adbc.ingest.mode.replace"
823#define ADBC_INGEST_OPTION_MODE_CREATE_APPEND "adbc.ingest.mode.create_append"
828#define ADBC_INGEST_OPTION_TARGET_CATALOG "adbc.ingest.target_catalog"
833#define ADBC_INGEST_OPTION_TARGET_DB_SCHEMA "adbc.ingest.target_db_schema"
844#define ADBC_INGEST_OPTION_TEMPORARY "adbc.ingest.temporary"
1012 struct ArrowArrayStream*,
struct AdbcError*);
1014 const char*,
const char*,
const char**,
1015 const char*,
struct ArrowArrayStream*,
1018 const char*,
const char*,
1019 struct ArrowSchema*,
struct AdbcError*);
1021 struct ArrowArrayStream*,
struct AdbcError*);
1028 size_t,
struct ArrowArrayStream*,
1034 struct ArrowSchema*,
struct AdbcError*);
1043 struct ArrowSchema*,
struct AdbcError*);
1077 int (*ErrorGetDetailCount)(
const struct AdbcError* error);
1079 const struct AdbcError* (*ErrorFromArrayStream)(
struct ArrowArrayStream* stream,
1091 const uint8_t*, size_t,
struct AdbcError*);
1107 const char*,
const char*, char,
1108 struct ArrowArrayStream*,
struct AdbcError*);
1110 struct ArrowArrayStream*,
1113 const uint8_t*, size_t,
struct AdbcError*);
1131 const uint8_t*, size_t,
struct AdbcError*);
1146#define ADBC_DRIVER_1_0_0_SIZE (offsetof(struct AdbcDriver, ErrorGetDetailCount))
1154#define ADBC_DRIVER_1_1_0_SIZE (sizeof(struct AdbcDriver))
1209 char* value,
size_t* length,
1249 uint8_t* value,
size_t* length,
1273 double* value,
struct AdbcError* error);
1296 int64_t* value,
struct AdbcError* error);
1311 const char* value,
struct AdbcError* error);
1325 const uint8_t* value,
size_t length,
1352 int64_t value,
struct AdbcError* error);
1398 const char* value,
struct AdbcError* error);
1412 const char* key,
const uint8_t* value,
1413 size_t length,
struct AdbcError* error);
1429 const char* key, int64_t value,
1446 const char* key,
double value,
1552 const uint32_t* info_codes,
size_t info_codes_length,
1553 struct ArrowArrayStream* out,
1662 const char* catalog,
const char* db_schema,
1663 const char* table_name,
const char** table_type,
1664 const char* column_name,
1665 struct ArrowArrayStream* out,
1698 char* value,
size_t* length,
1738 const char* key, uint8_t* value,
1739 size_t* length,
struct AdbcError* error);
1762 const char* key, int64_t* value,
1786 const char* key,
double* value,
1851 const char* catalog,
const char* db_schema,
1852 const char* table_name,
char approximate,
1853 struct ArrowArrayStream* out,
1871 struct ArrowArrayStream* out,
1884 const char* catalog,
const char* db_schema,
1885 const char* table_name,
1886 struct ArrowSchema* schema,
1904 struct ArrowArrayStream* out,
1937 const uint8_t* serialized_partition,
1938 size_t serialized_length,
1939 struct ArrowArrayStream* out,
2013 struct ArrowArrayStream* out,
2014 int64_t* rows_affected,
struct AdbcError* error);
2034 struct ArrowSchema* schema,
2063 const char* query,
struct AdbcError* error);
2086 const uint8_t* plan,
size_t length,
2103 struct ArrowArray* values,
struct ArrowSchema* schema,
2116 struct ArrowArrayStream* stream,
2181 char* value,
size_t* length,
2221 const char* key, uint8_t* value,
2222 size_t* length,
struct AdbcError* error);
2245 int64_t* value,
struct AdbcError* error);
2268 const char* key,
double* value,
2288 struct ArrowSchema* schema,
2300 const char* value,
struct AdbcError* error);
2314 const char* key,
const uint8_t* value,
2315 size_t length,
struct AdbcError* error);
2328 int64_t value,
struct AdbcError* error);
2341 const char* key,
double value,
2361 struct ArrowSchema* schema,
2363 int64_t* rows_affected,
AdbcStatusCode AdbcConnectionReadPartition(struct AdbcConnection *connection, const uint8_t *serialized_partition, size_t serialized_length, struct ArrowArrayStream *out, struct AdbcError *error)
Construct a statement for a partition of a query. The results can then be read independently.
AdbcStatusCode AdbcConnectionCommit(struct AdbcConnection *connection, struct AdbcError *error)
Commit any pending transactions. Only used if autocommit is disabled.
AdbcStatusCode AdbcConnectionRollback(struct AdbcConnection *connection, struct AdbcError *error)
Roll back any pending transactions. Only used if autocommit is disabled.
void * private_data
Opaque implementation-defined state. This field is NULLPTR iff the connection is unintialized/freed.
Definition adbc.h:886
struct AdbcDriver * private_driver
The associated driver (used by the driver manager to help track state).
Definition adbc.h:889
AdbcStatusCode AdbcConnectionSetOption(struct AdbcConnection *connection, const char *key, const char *value, struct AdbcError *error)
Set a char* option.
AdbcStatusCode AdbcConnectionCancel(struct AdbcConnection *connection, struct AdbcError *error)
Cancel the in-progress operation on a connection.
AdbcStatusCode AdbcConnectionNew(struct AdbcConnection *connection, struct AdbcError *error)
Allocate a new (but uninitialized) connection.
AdbcStatusCode AdbcConnectionSetOptionInt(struct AdbcConnection *connection, const char *key, int64_t value, struct AdbcError *error)
Set an integer option.
AdbcStatusCode AdbcConnectionSetOptionBytes(struct AdbcConnection *connection, const char *key, const uint8_t *value, size_t length, struct AdbcError *error)
Set a bytestring option on a connection.
AdbcStatusCode AdbcConnectionRelease(struct AdbcConnection *connection, struct AdbcError *error)
Destroy this connection.
AdbcStatusCode AdbcConnectionInit(struct AdbcConnection *connection, struct AdbcDatabase *database, struct AdbcError *error)
Finish setting options and initialize the connection.
AdbcStatusCode AdbcConnectionSetOptionDouble(struct AdbcConnection *connection, const char *key, double value, struct AdbcError *error)
Set a double option.
An active database connection.
Definition adbc.h:883
void * private_data
Opaque implementation-defined state. This field is NULLPTR iff the connection is unintialized/freed.
Definition adbc.h:863
struct AdbcDriver * private_driver
The associated driver (used by the driver manager to help track state).
Definition adbc.h:866
AdbcStatusCode AdbcDatabaseSetOptionDouble(struct AdbcDatabase *database, const char *key, double value, struct AdbcError *error)
Set a double option on a database.
AdbcStatusCode AdbcDatabaseGetOptionBytes(struct AdbcDatabase *database, const char *key, uint8_t *value, size_t *length, struct AdbcError *error)
Get a bytestring option of the database.
AdbcStatusCode AdbcDatabaseGetOptionInt(struct AdbcDatabase *database, const char *key, int64_t *value, struct AdbcError *error)
Get an integer option of the database.
AdbcStatusCode AdbcDatabaseNew(struct AdbcDatabase *database, struct AdbcError *error)
Allocate a new (but uninitialized) database.
AdbcStatusCode AdbcDatabaseRelease(struct AdbcDatabase *database, struct AdbcError *error)
Destroy this database. No connections may exist.
AdbcStatusCode AdbcDatabaseInit(struct AdbcDatabase *database, struct AdbcError *error)
Finish setting options and initialize the database.
AdbcStatusCode AdbcDatabaseGetOptionDouble(struct AdbcDatabase *database, const char *key, double *value, struct AdbcError *error)
Get a double option of the database.
AdbcStatusCode AdbcDatabaseSetOption(struct AdbcDatabase *database, const char *key, const char *value, struct AdbcError *error)
Set a char* option.
AdbcStatusCode AdbcDatabaseGetOption(struct AdbcDatabase *database, const char *key, char *value, size_t *length, struct AdbcError *error)
Get a string option of the database.
AdbcStatusCode AdbcDatabaseSetOptionInt(struct AdbcDatabase *database, const char *key, int64_t value, struct AdbcError *error)
Set an integer option on a database.
AdbcStatusCode AdbcDatabaseSetOptionBytes(struct AdbcDatabase *database, const char *key, const uint8_t *value, size_t length, struct AdbcError *error)
Set a bytestring option on a database.
An instance of a database.
Definition adbc.h:860
AdbcStatusCode(* release)(struct AdbcDriver *driver, struct AdbcError *error)
Release the driver and perform any cleanup.
Definition adbc.h:1002
void * private_manager
Opaque driver manager-defined state. This field is NULL if the driver is unintialized/freed (but it n...
Definition adbc.h:996
void * private_data
Opaque driver-defined state. This field is NULL if the driver is unintialized/freed (but it need not ...
Definition adbc.h:992
AdbcStatusCode(* AdbcDriverInitFunc)(int version, void *driver, struct AdbcError *error)
Common entry point for drivers via the driver manager (which uses dlopen(3)/LoadLibrary)....
Definition adbc.h:2399
An instance of an initialized database driver.
Definition adbc.h:988
int32_t vendor_code
A vendor-specific error code, if applicable.
Definition adbc.h:288
void * private_data
Opaque implementation-defined state.
Definition adbc.h:308
const char * key
The metadata key.
Definition adbc.h:367
void(* release)(struct AdbcError *error)
Release the contained error.
Definition adbc.h:299
char * message
The error message.
Definition adbc.h:285
struct AdbcDriver * private_driver
The associated driver (used by the driver manager to help track state).
Definition adbc.h:317
char sqlstate[5]
A SQLSTATE error code, if provided, as defined by the SQL:2003 standard. If not set,...
Definition adbc.h:293
size_t value_length
The length of the metadata value.
Definition adbc.h:371
const uint8_t * value
The binary metadata value.
Definition adbc.h:369
const struct AdbcError * AdbcErrorFromArrayStream(struct ArrowArrayStream *stream, AdbcStatusCode *status)
Get an ADBC error from an ArrowArrayStream created by a driver.
uint8_t AdbcStatusCode
Error codes for operations that may fail.
Definition adbc.h:176
int AdbcErrorGetDetailCount(const struct AdbcError *error)
Get the number of metadata values available in an error.
struct AdbcErrorDetail AdbcErrorGetDetail(const struct AdbcError *error, int index)
Get a metadata value in an error by index.
A detailed error message for an operation.
Definition adbc.h:283
Extra key-value metadata for an error.
Definition adbc.h:365
const size_t * partition_lengths
The length of each corresponding entry in partitions.
Definition adbc.h:959
void * private_data
Opaque implementation-defined state. This field is NULLPTR iff the connection is unintialized/freed.
Definition adbc.h:963
void(* release)(struct AdbcPartitions *partitions)
Release the contained partitions.
Definition adbc.h:969
size_t num_partitions
The number of partitions.
Definition adbc.h:951
const uint8_t ** partitions
The partitions of the result set, where each entry (up to num_partitions entries) is an opaque identi...
Definition adbc.h:956
AdbcStatusCode AdbcStatementExecutePartitions(struct AdbcStatement *statement, struct ArrowSchema *schema, struct AdbcPartitions *partitions, int64_t *rows_affected, struct AdbcError *error)
Execute a statement and get the results as a partitioned result set.
The partitions of a distributed/partitioned result set.
Definition adbc.h:949
AdbcStatusCode AdbcStatementSetSqlQuery(struct AdbcStatement *statement, const char *query, struct AdbcError *error)
Set the SQL query to execute.
AdbcStatusCode AdbcStatementSetSubstraitPlan(struct AdbcStatement *statement, const uint8_t *plan, size_t length, struct AdbcError *error)
Set the Substrait plan to execute.
void * private_data
Opaque implementation-defined state. This field is NULLPTR iff the connection is unintialized/freed.
Definition adbc.h:924
struct AdbcDriver * private_driver
The associated driver (used by the driver manager to help track state).
Definition adbc.h:928
AdbcStatusCode AdbcStatementExecuteQuery(struct AdbcStatement *statement, struct ArrowArrayStream *out, int64_t *rows_affected, struct AdbcError *error)
Execute a statement and get the results.
AdbcStatusCode AdbcStatementCancel(struct AdbcStatement *statement, struct AdbcError *error)
Cancel execution of an in-progress query.
AdbcStatusCode AdbcStatementGetParameterSchema(struct AdbcStatement *statement, struct ArrowSchema *schema, struct AdbcError *error)
Get the schema for bound parameters.
AdbcStatusCode AdbcStatementSetOptionInt(struct AdbcStatement *statement, const char *key, int64_t value, struct AdbcError *error)
Set an integer option on a statement.
AdbcStatusCode AdbcStatementExecuteSchema(struct AdbcStatement *statement, struct ArrowSchema *schema, struct AdbcError *error)
Get the schema of the result set of a query without executing it.
AdbcStatusCode AdbcStatementRelease(struct AdbcStatement *statement, struct AdbcError *error)
Destroy a statement.
AdbcStatusCode AdbcStatementSetOption(struct AdbcStatement *statement, const char *key, const char *value, struct AdbcError *error)
Set a string option on a statement.
AdbcStatusCode AdbcStatementPrepare(struct AdbcStatement *statement, struct AdbcError *error)
Turn this statement into a prepared statement to be executed multiple times.
AdbcStatusCode AdbcStatementGetOptionDouble(struct AdbcStatement *statement, const char *key, double *value, struct AdbcError *error)
Get a double option of the statement.
AdbcStatusCode AdbcStatementSetOptionBytes(struct AdbcStatement *statement, const char *key, const uint8_t *value, size_t length, struct AdbcError *error)
Set a bytestring option on a statement.
AdbcStatusCode AdbcStatementBindStream(struct AdbcStatement *statement, struct ArrowArrayStream *stream, struct AdbcError *error)
Bind Arrow data. This can be used for bulk inserts or prepared statements.
AdbcStatusCode AdbcStatementBind(struct AdbcStatement *statement, struct ArrowArray *values, struct ArrowSchema *schema, struct AdbcError *error)
Bind Arrow data. This can be used for bulk inserts or prepared statements.
AdbcStatusCode AdbcStatementGetOption(struct AdbcStatement *statement, const char *key, char *value, size_t *length, struct AdbcError *error)
Get a string option of the statement.
AdbcStatusCode AdbcStatementGetOptionInt(struct AdbcStatement *statement, const char *key, int64_t *value, struct AdbcError *error)
Get an integer option of the statement.
AdbcStatusCode AdbcStatementNew(struct AdbcConnection *connection, struct AdbcStatement *statement, struct AdbcError *error)
Create a new statement for a given connection.
AdbcStatusCode AdbcStatementGetOptionBytes(struct AdbcStatement *statement, const char *key, uint8_t *value, size_t *length, struct AdbcError *error)
Get a bytestring option of the statement.
AdbcStatusCode AdbcStatementSetOptionDouble(struct AdbcStatement *statement, const char *key, double value, struct AdbcError *error)
Set a double option on a statement.
A container for all state needed to execute a database query, such as the query itself,...
Definition adbc.h:921