This page contains the reference for DuckDB's C API.
Deprecated The reference contains several deprecation notices. These concern methods whose long-term availability is not guaranteed as they may be removed in the future. That said, DuckDB's developers plan to carry out deprecations slowly as several of the deprecated methods do not yet have a fully functional alternative. Therefore, they will not removed before the alternative is available, and even then, there will be a grace period of a few minor versions before removing them. The reason that the methods are already deprecated in v1.0 is to denote that they are not part of the v1.0 stable API, which contains methods that are available long-term.
API Reference Overview
Open/Connect
duckdb_state duckdb_open(const char *path, duckdb_database *out_database);
duckdb_state duckdb_open_ext(const char *path, duckdb_database *out_database, duckdb_config config, char **out_error);
void duckdb_close(duckdb_database *database);
duckdb_state duckdb_connect(duckdb_database database, duckdb_connection *out_connection);
void duckdb_interrupt(duckdb_connection connection);
duckdb_query_progress_type duckdb_query_progress(duckdb_connection connection);
void duckdb_disconnect(duckdb_connection *connection);
const char *duckdb_library_version();
Configuration
duckdb_state duckdb_create_config(duckdb_config *out_config);
size_t duckdb_config_count();
duckdb_state duckdb_get_config_flag(size_t index, const char **out_name, const char **out_description);
duckdb_state duckdb_set_config(duckdb_config config, const char *name, const char *option);
void duckdb_destroy_config(duckdb_config *config);
Query Execution
duckdb_state duckdb_query(duckdb_connection connection, const char *query, duckdb_result *out_result);
void duckdb_destroy_result(duckdb_result *result);
const char *duckdb_column_name(duckdb_result *result, idx_t col);
duckdb_type duckdb_column_type(duckdb_result *result, idx_t col);
duckdb_statement_type duckdb_result_statement_type(duckdb_result result);
duckdb_logical_type duckdb_column_logical_type(duckdb_result *result, idx_t col);
idx_t duckdb_column_count(duckdb_result *result);
idx_t duckdb_row_count(duckdb_result *result);
idx_t duckdb_rows_changed(duckdb_result *result);
void *duckdb_column_data(duckdb_result *result, idx_t col);
bool *duckdb_nullmask_data(duckdb_result *result, idx_t col);
const char *duckdb_result_error(duckdb_result *result);
Result Functions
duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_index);
bool duckdb_result_is_streaming(duckdb_result result);
idx_t duckdb_result_chunk_count(duckdb_result result);
duckdb_result_type duckdb_result_return_type(duckdb_result result);
Safe Fetch Functions
bool duckdb_value_boolean(duckdb_result *result, idx_t col, idx_t row);
int8_t duckdb_value_int8(duckdb_result *result, idx_t col, idx_t row);
int16_t duckdb_value_int16(duckdb_result *result, idx_t col, idx_t row);
int32_t duckdb_value_int32(duckdb_result *result, idx_t col, idx_t row);
int64_t duckdb_value_int64(duckdb_result *result, idx_t col, idx_t row);
duckdb_hugeint duckdb_value_hugeint(duckdb_result *result, idx_t col, idx_t row);
duckdb_uhugeint duckdb_value_uhugeint(duckdb_result *result, idx_t col, idx_t row);
duckdb_decimal duckdb_value_decimal(duckdb_result *result, idx_t col, idx_t row);
uint8_t duckdb_value_uint8(duckdb_result *result, idx_t col, idx_t row);
uint16_t duckdb_value_uint16(duckdb_result *result, idx_t col, idx_t row);
uint32_t duckdb_value_uint32(duckdb_result *result, idx_t col, idx_t row);
uint64_t duckdb_value_uint64(duckdb_result *result, idx_t col, idx_t row);
float duckdb_value_float(duckdb_result *result, idx_t col, idx_t row);
double duckdb_value_double(duckdb_result *result, idx_t col, idx_t row);
duckdb_date duckdb_value_date(duckdb_result *result, idx_t col, idx_t row);
duckdb_time duckdb_value_time(duckdb_result *result, idx_t col, idx_t row);
duckdb_timestamp duckdb_value_timestamp(duckdb_result *result, idx_t col, idx_t row);
duckdb_interval duckdb_value_interval(duckdb_result *result, idx_t col, idx_t row);
char *duckdb_value_varchar(duckdb_result *result, idx_t col, idx_t row);
duckdb_string duckdb_value_string(duckdb_result *result, idx_t col, idx_t row);
char *duckdb_value_varchar_internal(duckdb_result *result, idx_t col, idx_t row);
duckdb_string duckdb_value_string_internal(duckdb_result *result, idx_t col, idx_t row);
duckdb_blob duckdb_value_blob(duckdb_result *result, idx_t col, idx_t row);
bool duckdb_value_is_null(duckdb_result *result, idx_t col, idx_t row);
Helpers
void *duckdb_malloc(size_t size);
void duckdb_free(void *ptr);
idx_t duckdb_vector_size();
bool duckdb_string_is_inlined(duckdb_string_t string);
Date/Time/Timestamp Helpers
duckdb_date_struct duckdb_from_date(duckdb_date date);
duckdb_date duckdb_to_date(duckdb_date_struct date);
bool duckdb_is_finite_date(duckdb_date date);
duckdb_time_struct duckdb_from_time(duckdb_time time);
duckdb_time_tz duckdb_create_time_tz(int64_t micros, int32_t offset);
duckdb_time_tz_struct duckdb_from_time_tz(duckdb_time_tz micros);
duckdb_time duckdb_to_time(duckdb_time_struct time);
duckdb_timestamp_struct duckdb_from_timestamp(duckdb_timestamp ts);
duckdb_timestamp duckdb_to_timestamp(duckdb_timestamp_struct ts);
bool duckdb_is_finite_timestamp(duckdb_timestamp ts);
Hugeint Helpers
double duckdb_hugeint_to_double(duckdb_hugeint val);
duckdb_hugeint duckdb_double_to_hugeint(double val);
Unsigned Hugeint Helpers
double duckdb_uhugeint_to_double(duckdb_uhugeint val);
duckdb_uhugeint duckdb_double_to_uhugeint(double val);
Decimal Helpers
duckdb_decimal duckdb_double_to_decimal(double val, uint8_t width, uint8_t scale);
double duckdb_decimal_to_double(duckdb_decimal val);
Prepared Statements
duckdb_state duckdb_prepare(duckdb_connection connection, const char *query, duckdb_prepared_statement *out_prepared_statement);
void duckdb_destroy_prepare(duckdb_prepared_statement *prepared_statement);
const char *duckdb_prepare_error(duckdb_prepared_statement prepared_statement);
idx_t duckdb_nparams(duckdb_prepared_statement prepared_statement);
const char *duckdb_parameter_name(duckdb_prepared_statement prepared_statement, idx_t index);
duckdb_type duckdb_param_type(duckdb_prepared_statement prepared_statement, idx_t param_idx);
duckdb_state duckdb_clear_bindings(duckdb_prepared_statement prepared_statement);
duckdb_statement_type duckdb_prepared_statement_type(duckdb_prepared_statement statement);
Bind Values to Prepared Statements
duckdb_state duckdb_bind_value(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_value val);
duckdb_state duckdb_bind_parameter_index(duckdb_prepared_statement prepared_statement, idx_t *param_idx_out, const char *name);
duckdb_state duckdb_bind_boolean(duckdb_prepared_statement prepared_statement, idx_t param_idx, bool val);
duckdb_state duckdb_bind_int8(duckdb_prepared_statement prepared_statement, idx_t param_idx, int8_t val);
duckdb_state duckdb_bind_int16(duckdb_prepared_statement prepared_statement, idx_t param_idx, int16_t val);
duckdb_state duckdb_bind_int32(duckdb_prepared_statement prepared_statement, idx_t param_idx, int32_t val);
duckdb_state duckdb_bind_int64(duckdb_prepared_statement prepared_statement, idx_t param_idx, int64_t val);
duckdb_state duckdb_bind_hugeint(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_hugeint val);
duckdb_state duckdb_bind_uhugeint(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_uhugeint val);
duckdb_state duckdb_bind_decimal(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_decimal val);
duckdb_state duckdb_bind_uint8(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint8_t val);
duckdb_state duckdb_bind_uint16(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint16_t val);
duckdb_state duckdb_bind_uint32(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint32_t val);
duckdb_state duckdb_bind_uint64(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint64_t val);
duckdb_state duckdb_bind_float(duckdb_prepared_statement prepared_statement, idx_t param_idx, float val);
duckdb_state duckdb_bind_double(duckdb_prepared_statement prepared_statement, idx_t param_idx, double val);
duckdb_state duckdb_bind_date(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_date val);
duckdb_state duckdb_bind_time(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_time val);
duckdb_state duckdb_bind_timestamp(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_timestamp val);
duckdb_state duckdb_bind_interval(duckdb_prepared_statement prepared_statement, idx_t param_idx, duckdb_interval val);
duckdb_state duckdb_bind_varchar(duckdb_prepared_statement prepared_statement, idx_t param_idx, const char *val);
duckdb_state duckdb_bind_varchar_length(duckdb_prepared_statement prepared_statement, idx_t param_idx, const char *val, idx_t length);
duckdb_state duckdb_bind_blob(duckdb_prepared_statement prepared_statement, idx_t param_idx, const void *data, idx_t length);
duckdb_state duckdb_bind_null(duckdb_prepared_statement prepared_statement, idx_t param_idx);
Execute Prepared Statements
duckdb_state duckdb_execute_prepared(duckdb_prepared_statement prepared_statement, duckdb_result *out_result);
duckdb_state duckdb_execute_prepared_streaming(duckdb_prepared_statement prepared_statement, duckdb_result *out_result);
Extract Statements
idx_t duckdb_extract_statements(duckdb_connection connection, const char *query, duckdb_extracted_statements *out_extracted_statements);
duckdb_state duckdb_prepare_extracted_statement(duckdb_connection connection, duckdb_extracted_statements extracted_statements, idx_t index, duckdb_prepared_statement *out_prepared_statement);
const char *duckdb_extract_statements_error(duckdb_extracted_statements extracted_statements);
void duckdb_destroy_extracted(duckdb_extracted_statements *extracted_statements);
Pending Result Interface
duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement, duckdb_pending_result *out_result);
duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement, duckdb_pending_result *out_result);
void duckdb_destroy_pending(duckdb_pending_result *pending_result);
const char *duckdb_pending_error(duckdb_pending_result pending_result);
duckdb_pending_state duckdb_pending_execute_task(duckdb_pending_result pending_result);
duckdb_pending_state duckdb_pending_execute_check_state(duckdb_pending_result pending_result);
duckdb_state duckdb_execute_pending(duckdb_pending_result pending_result, duckdb_result *out_result);
bool duckdb_pending_execution_is_finished(duckdb_pending_state pending_state);
Value Interface
void duckdb_destroy_value(duckdb_value *value);
duckdb_value duckdb_create_varchar(const char *text);
duckdb_value duckdb_create_varchar_length(const char *text, idx_t length);
duckdb_value duckdb_create_int64(int64_t val);
duckdb_value duckdb_create_struct_value(duckdb_logical_type type, duckdb_value *values);
duckdb_value duckdb_create_list_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count);
duckdb_value duckdb_create_array_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count);
char *duckdb_get_varchar(duckdb_value value);
int64_t duckdb_get_int64(duckdb_value value);
Logical Type Interface
duckdb_logical_type duckdb_create_logical_type(duckdb_type type);
char *duckdb_logical_type_get_alias(duckdb_logical_type type);
duckdb_logical_type duckdb_create_list_type(duckdb_logical_type type);
duckdb_logical_type duckdb_create_array_type(duckdb_logical_type type, idx_t array_size);
duckdb_logical_type duckdb_create_map_type(duckdb_logical_type key_type, duckdb_logical_type value_type);
duckdb_logical_type duckdb_create_union_type(duckdb_logical_type *member_types, const char **member_names, idx_t member_count);
duckdb_logical_type duckdb_create_struct_type(duckdb_logical_type *member_types, const char **member_names, idx_t member_count);
duckdb_logical_type duckdb_create_enum_type(const char **member_names, idx_t member_count);
duckdb_logical_type duckdb_create_decimal_type(uint8_t width, uint8_t scale);
duckdb_type duckdb_get_type_id(duckdb_logical_type type);
uint8_t duckdb_decimal_width(duckdb_logical_type type);
uint8_t duckdb_decimal_scale(duckdb_logical_type type);
duckdb_type duckdb_decimal_internal_type(duckdb_logical_type type);
duckdb_type duckdb_enum_internal_type(duckdb_logical_type type);
uint32_t duckdb_enum_dictionary_size(duckdb_logical_type type);
char *duckdb_enum_dictionary_value(duckdb_logical_type type, idx_t index);
duckdb_logical_type duckdb_list_type_child_type(duckdb_logical_type type);
duckdb_logical_type duckdb_array_type_child_type(duckdb_logical_type type);
idx_t duckdb_array_type_array_size(duckdb_logical_type type);
duckdb_logical_type duckdb_map_type_key_type(duckdb_logical_type type);
duckdb_logical_type duckdb_map_type_value_type(duckdb_logical_type type);
idx_t duckdb_struct_type_child_count(duckdb_logical_type type);
char *duckdb_struct_type_child_name(duckdb_logical_type type, idx_t index);
duckdb_logical_type duckdb_struct_type_child_type(duckdb_logical_type type, idx_t index);
idx_t duckdb_union_type_member_count(duckdb_logical_type type);
char *duckdb_union_type_member_name(duckdb_logical_type type, idx_t index);
duckdb_logical_type duckdb_union_type_member_type(duckdb_logical_type type, idx_t index);
void duckdb_destroy_logical_type(duckdb_logical_type *type);
Data Chunk Interface
duckdb_data_chunk duckdb_create_data_chunk(duckdb_logical_type *types, idx_t column_count);
void duckdb_destroy_data_chunk(duckdb_data_chunk *chunk);
void duckdb_data_chunk_reset(duckdb_data_chunk chunk);
idx_t duckdb_data_chunk_get_column_count(duckdb_data_chunk chunk);
duckdb_vector duckdb_data_chunk_get_vector(duckdb_data_chunk chunk, idx_t col_idx);
idx_t duckdb_data_chunk_get_size(duckdb_data_chunk chunk);
void duckdb_data_chunk_set_size(duckdb_data_chunk chunk, idx_t size);
Vector Interface
duckdb_logical_type duckdb_vector_get_column_type(duckdb_vector vector);
void *duckdb_vector_get_data(duckdb_vector vector);
uint64_t *duckdb_vector_get_validity(duckdb_vector vector);
void duckdb_vector_ensure_validity_writable(duckdb_vector vector);
void duckdb_vector_assign_string_element(duckdb_vector vector, idx_t index, const char *str);
void duckdb_vector_assign_string_element_len(duckdb_vector vector, idx_t index, const char *str, idx_t str_len);
duckdb_vector duckdb_list_vector_get_child(duckdb_vector vector);
idx_t duckdb_list_vector_get_size(duckdb_vector vector);
duckdb_state duckdb_list_vector_set_size(duckdb_vector vector, idx_t size);
duckdb_state duckdb_list_vector_reserve(duckdb_vector vector, idx_t required_capacity);
duckdb_vector duckdb_struct_vector_get_child(duckdb_vector vector, idx_t index);
duckdb_vector duckdb_array_vector_get_child(duckdb_vector vector);
Validity Mask Functions
bool duckdb_validity_row_is_valid(uint64_t *validity, idx_t row);
void duckdb_validity_set_row_validity(uint64_t *validity, idx_t row, bool valid);
void duckdb_validity_set_row_invalid(uint64_t *validity, idx_t row);
void duckdb_validity_set_row_valid(uint64_t *validity, idx_t row);
Table Functions
duckdb_table_function duckdb_create_table_function();
void duckdb_destroy_table_function(duckdb_table_function *table_function);
void duckdb_table_function_set_name(duckdb_table_function table_function, const char *name);
void duckdb_table_function_add_parameter(duckdb_table_function table_function, duckdb_logical_type type);
void duckdb_table_function_add_named_parameter(duckdb_table_function table_function, const char *name, duckdb_logical_type type);
void duckdb_table_function_set_extra_info(duckdb_table_function table_function, void *extra_info, duckdb_delete_callback_t destroy);
void duckdb_table_function_set_bind(duckdb_table_function table_function, duckdb_table_function_bind_t bind);
void duckdb_table_function_set_init(duckdb_table_function table_function, duckdb_table_function_init_t init);
void duckdb_table_function_set_local_init(duckdb_table_function table_function, duckdb_table_function_init_t init);
void duckdb_table_function_set_function(duckdb_table_function table_function, duckdb_table_function_t function);
void duckdb_table_function_supports_projection_pushdown(duckdb_table_function table_function, bool pushdown);
duckdb_state duckdb_register_table_function(duckdb_connection con, duckdb_table_function function);
Table Function Bind
void *duckdb_bind_get_extra_info(duckdb_bind_info info);
void duckdb_bind_add_result_column(duckdb_bind_info info, const char *name, duckdb_logical_type type);
idx_t duckdb_bind_get_parameter_count(duckdb_bind_info info);
duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index);
duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name);
void duckdb_bind_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy);
void duckdb_bind_set_cardinality(duckdb_bind_info info, idx_t cardinality, bool is_exact);
void duckdb_bind_set_error(duckdb_bind_info info, const char *error);
Table Function Init
void *duckdb_init_get_extra_info(duckdb_init_info info);
void *duckdb_init_get_bind_data(duckdb_init_info info);
void duckdb_init_set_init_data(duckdb_init_info info, void *init_data, duckdb_delete_callback_t destroy);
idx_t duckdb_init_get_column_count(duckdb_init_info info);
idx_t duckdb_init_get_column_index(duckdb_init_info info, idx_t column_index);
void duckdb_init_set_max_threads(duckdb_init_info info, idx_t max_threads);
void duckdb_init_set_error(duckdb_init_info info, const char *error);
Table Function
void *duckdb_function_get_extra_info(duckdb_function_info info);
void *duckdb_function_get_bind_data(duckdb_function_info info);
void *duckdb_function_get_init_data(duckdb_function_info info);
void *duckdb_function_get_local_init_data(duckdb_function_info info);
void duckdb_function_set_error(duckdb_function_info info, const char *error);
Replacement Scans
void duckdb_add_replacement_scan(duckdb_database db, duckdb_replacement_callback_t replacement, void *extra_data, duckdb_delete_callback_t delete_callback);
void duckdb_replacement_scan_set_function_name(duckdb_replacement_scan_info info, const char *function_name);
void duckdb_replacement_scan_add_parameter(duckdb_replacement_scan_info info, duckdb_value parameter);
void duckdb_replacement_scan_set_error(duckdb_replacement_scan_info info, const char *error);
Appender
duckdb_state duckdb_appender_create(duckdb_connection connection, const char *schema, const char *table, duckdb_appender *out_appender);
idx_t duckdb_appender_column_count(duckdb_appender appender);
duckdb_logical_type duckdb_appender_column_type(duckdb_appender appender, idx_t col_idx);
const char *duckdb_appender_error(duckdb_appender appender);
duckdb_state duckdb_appender_flush(duckdb_appender appender);
duckdb_state duckdb_appender_close(duckdb_appender appender);
duckdb_state duckdb_appender_destroy(duckdb_appender *appender);
duckdb_state duckdb_appender_begin_row(duckdb_appender appender);
duckdb_state duckdb_appender_end_row(duckdb_appender appender);
duckdb_state duckdb_append_bool(duckdb_appender appender, bool value);
duckdb_state duckdb_append_int8(duckdb_appender appender, int8_t value);
duckdb_state duckdb_append_int16(duckdb_appender appender, int16_t value);
duckdb_state duckdb_append_int32(duckdb_appender appender, int32_t value);
duckdb_state duckdb_append_int64(duckdb_appender appender, int64_t value);
duckdb_state duckdb_append_hugeint(duckdb_appender appender, duckdb_hugeint value);
duckdb_state duckdb_append_uint8(duckdb_appender appender, uint8_t value);
duckdb_state duckdb_append_uint16(duckdb_appender appender, uint16_t value);
duckdb_state duckdb_append_uint32(duckdb_appender appender, uint32_t value);
duckdb_state duckdb_append_uint64(duckdb_appender appender, uint64_t value);
duckdb_state duckdb_append_uhugeint(duckdb_appender appender, duckdb_uhugeint value);
duckdb_state duckdb_append_float(duckdb_appender appender, float value);
duckdb_state duckdb_append_double(duckdb_appender appender, double value);
duckdb_state duckdb_append_date(duckdb_appender appender, duckdb_date value);
duckdb_state duckdb_append_time(duckdb_appender appender, duckdb_time value);
duckdb_state duckdb_append_timestamp(duckdb_appender appender, duckdb_timestamp value);
duckdb_state duckdb_append_interval(duckdb_appender appender, duckdb_interval value);
duckdb_state duckdb_append_varchar(duckdb_appender appender, const char *val);
duckdb_state duckdb_append_varchar_length(duckdb_appender appender, const char *val, idx_t length);
duckdb_state duckdb_append_blob(duckdb_appender appender, const void *data, idx_t length);
duckdb_state duckdb_append_null(duckdb_appender appender);
duckdb_state duckdb_append_data_chunk(duckdb_appender appender, duckdb_data_chunk chunk);
Arrow Interface
duckdb_state duckdb_query_arrow(duckdb_connection connection, const char *query, duckdb_arrow *out_result);
duckdb_state duckdb_query_arrow_schema(duckdb_arrow result, duckdb_arrow_schema *out_schema);
duckdb_state duckdb_prepared_arrow_schema(duckdb_prepared_statement prepared, duckdb_arrow_schema *out_schema);
void duckdb_result_arrow_array(duckdb_result result, duckdb_data_chunk chunk, duckdb_arrow_array *out_array);
duckdb_state duckdb_query_arrow_array(duckdb_arrow result, duckdb_arrow_array *out_array);
idx_t duckdb_arrow_column_count(duckdb_arrow result);
idx_t duckdb_arrow_row_count(duckdb_arrow result);
idx_t duckdb_arrow_rows_changed(duckdb_arrow result);
const char *duckdb_query_arrow_error(duckdb_arrow result);
void duckdb_destroy_arrow(duckdb_arrow *result);
void duckdb_destroy_arrow_stream(duckdb_arrow_stream *stream_p);
duckdb_state duckdb_execute_prepared_arrow(duckdb_prepared_statement prepared_statement, duckdb_arrow *out_result);
duckdb_state duckdb_arrow_scan(duckdb_connection connection, const char *table_name, duckdb_arrow_stream arrow);
duckdb_state duckdb_arrow_array_scan(duckdb_connection connection, const char *table_name, duckdb_arrow_schema arrow_schema, duckdb_arrow_array arrow_array, duckdb_arrow_stream *out_stream);
Threading Information
void duckdb_execute_tasks(duckdb_database database, idx_t max_tasks);
duckdb_task_state duckdb_create_task_state(duckdb_database database);
void duckdb_execute_tasks_state(duckdb_task_state state);
idx_t duckdb_execute_n_tasks_state(duckdb_task_state state, idx_t max_tasks);
void duckdb_finish_execution(duckdb_task_state state);
bool duckdb_task_state_is_finished(duckdb_task_state state);
void duckdb_destroy_task_state(duckdb_task_state state);
bool duckdb_execution_is_finished(duckdb_connection con);
Streaming Result Interface
duckdb_data_chunk duckdb_stream_fetch_chunk(duckdb_result result);
duckdb_data_chunk duckdb_fetch_chunk(duckdb_result result);
Detailed API Reference
duckdb_open
Creates a new database or opens an existing database file stored at the given path. If no path is given a new in-memory database is created instead. The instantiated database should be closed with 'duckdb_close'.
Syntax
duckdb_state duckdb_open(
const char *path,
duckdb_database *out_database
);
Parameters
path
Path to the database file on disk, or nullptr
or :memory:
to open an in-memory database.
out_database
The result database object.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_open_ext
Extended version of duckdb_open. Creates a new database or opens an existing database file stored at the given path. The instantiated database should be closed with 'duckdb_close'.
Syntax
duckdb_state duckdb_open_ext(
const char *path,
duckdb_database *out_database,
duckdb_config config,
char **out_error
);
Parameters
path
Path to the database file on disk, or nullptr
or :memory:
to open an in-memory database.
out_database
The result database object.
config
(Optional) configuration used to start up the database system.
out_error
If set and the function returns DuckDBError, this will contain the reason why the start-up failed.
Note that the error must be freed using duckdb_free
.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_close
Closes the specified database and de-allocates all memory allocated for that database.
This should be called after you are done with any database allocated through duckdb_open
or duckdb_open_ext
.
Note that failing to call duckdb_close
(in case of e.g., a program crash) will not cause data corruption.
Still, it is recommended to always correctly close a database object after you are done with it.
Syntax
void duckdb_close(
duckdb_database *database
);
Parameters
database
The database object to shut down.
duckdb_connect
Opens a connection to a database. Connections are required to query the database, and store transactional state associated with the connection. The instantiated connection should be closed using 'duckdb_disconnect'.
Syntax
duckdb_state duckdb_connect(
duckdb_database database,
duckdb_connection *out_connection
);
Parameters
database
The database file to connect to.
out_connection
The result connection object.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_interrupt
Interrupt running query
Syntax
void duckdb_interrupt(
duckdb_connection connection
);
Parameters
connection
The connection to interrupt
duckdb_query_progress
Get progress of the running query
Syntax
duckdb_query_progress_type duckdb_query_progress(
duckdb_connection connection
);
Parameters
connection
The working connection
returns
-1 if no progress or a percentage of the progress
duckdb_disconnect
Closes the specified connection and de-allocates all memory allocated for that connection.
Syntax
void duckdb_disconnect(
duckdb_connection *connection
);
Parameters
connection
The connection to close.
duckdb_library_version
Returns the version of the linked DuckDB, with a version postfix for dev versions
Usually used for developing C extensions that must return this for a compatibility check.
Syntax
const char *duckdb_library_version(
);
duckdb_create_config
Initializes an empty configuration object that can be used to provide start-up options for the DuckDB instance
through duckdb_open_ext
.
The duckdb_config must be destroyed using 'duckdb_destroy_config'
This will always succeed unless there is a malloc failure.
Syntax
duckdb_state duckdb_create_config(
duckdb_config *out_config
);
Parameters
out_config
The result configuration object.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_config_count
This returns the total amount of configuration options available for usage with duckdb_get_config_flag
.
This should not be called in a loop as it internally loops over all the options.
Syntax
size_t duckdb_config_count(
);
Parameters
returns
The amount of config options available.
duckdb_get_config_flag
Obtains a human-readable name and description of a specific configuration option. This can be used to e.g.
display configuration options. This will succeed unless index
is out of range (i.e., >= duckdb_config_count
).
The result name or description MUST NOT be freed.
Syntax
duckdb_state duckdb_get_config_flag(
size_t index,
const char **out_name,
const char **out_description
);
Parameters
index
The index of the configuration option (between 0 and duckdb_config_count
)
out_name
A name of the configuration flag.
out_description
A description of the configuration flag.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_set_config
Sets the specified option for the specified configuration. The configuration option is indicated by name.
To obtain a list of config options, see duckdb_get_config_flag
.
In the source code, configuration options are defined in config.cpp
.
This can fail if either the name is invalid, or if the value provided for the option is invalid.
Syntax
duckdb_state duckdb_set_config(
duckdb_config config,
const char *name,
const char *option
);
Parameters
duckdb_config
The configuration object to set the option on.
name
The name of the configuration flag to set.
option
The value to set the configuration flag to.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_destroy_config
Destroys the specified configuration object and de-allocates all memory allocated for the object.
Syntax
void duckdb_destroy_config(
duckdb_config *config
);
Parameters
config
The configuration object to destroy.
duckdb_query
Executes a SQL query within a connection and stores the full (materialized) result in the out_result pointer.
If the query fails to execute, DuckDBError is returned and the error message can be retrieved by calling
duckdb_result_error
.
Note that after running duckdb_query
, duckdb_destroy_result
must be called on the result object even if the
query fails, otherwise the error stored within the result will not be freed correctly.
Syntax
duckdb_state duckdb_query(
duckdb_connection connection,
const char *query,
duckdb_result *out_result
);
Parameters
connection
The connection to perform the query in.
query
The SQL query to run.
out_result
The query result.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_destroy_result
Closes the result and de-allocates all memory allocated for that connection.
Syntax
void duckdb_destroy_result(
duckdb_result *result
);
Parameters
result
The result to destroy.
duckdb_column_name
Returns the column name of the specified column. The result should not need to be freed; the column names will automatically be destroyed when the result is destroyed.
Returns NULL
if the column is out of range.
Syntax
const char *duckdb_column_name(
duckdb_result *result,
idx_t col
);
Parameters
result
The result object to fetch the column name from.
col
The column index.
returns
The column name of the specified column.
duckdb_column_type
Returns the column type of the specified column.
Returns DUCKDB_TYPE_INVALID
if the column is out of range.
Syntax
duckdb_type duckdb_column_type(
duckdb_result *result,
idx_t col
);
Parameters
result
The result object to fetch the column type from.
col
The column index.
returns
The column type of the specified column.
duckdb_result_statement_type
Returns the statement type of the statement that was executed
Syntax
duckdb_statement_type duckdb_result_statement_type(
duckdb_result result
);
Parameters
result
The result object to fetch the statement type from.
returns
duckdb_statement_type value or DUCKDB_STATEMENT_TYPE_INVALID
duckdb_column_logical_type
Returns the logical column type of the specified column.
The return type of this call should be destroyed with duckdb_destroy_logical_type
.
Returns NULL
if the column is out of range.
Syntax
duckdb_logical_type duckdb_column_logical_type(
duckdb_result *result,
idx_t col
);
Parameters
result
The result object to fetch the column type from.
col
The column index.
returns
The logical column type of the specified column.
duckdb_column_count
Returns the number of columns present in a the result object.
Syntax
idx_t duckdb_column_count(
duckdb_result *result
);
Parameters
result
The result object.
returns
The number of columns present in the result object.
duckdb_row_count
Deprecated This method is scheduled for removal in a future release.
Returns the number of rows present in the result object.
Syntax
idx_t duckdb_row_count(
duckdb_result *result
);
Parameters
result
The result object.
returns
The number of rows present in the result object.
duckdb_rows_changed
Returns the number of rows changed by the query stored in the result. This is relevant only for INSERT/UPDATE/DELETE queries. For other queries the rows_changed will be 0.
Syntax
idx_t duckdb_rows_changed(
duckdb_result *result
);
Parameters
result
The result object.
returns
The number of rows changed.
duckdb_column_data
Deprecated This method is deprecated. Prefer using
duckdb_result_get_chunk
instead.
Returns the data of a specific column of a result in columnar format.
The function returns a dense array which contains the result data. The exact type stored in the array depends on the
corresponding duckdb_type (as provided by duckdb_column_type
). For the exact type by which the data should be
accessed, see the comments in the Types section or the DUCKDB_TYPE
enum.
For example, for a column of type DUCKDB_TYPE_INTEGER
, rows can be accessed in the following manner:
int32_t *data = (int32_t *) duckdb_column_data(&result, 0);
printf("Data for row %d: %d\n", row, data[row]);
Syntax
void *duckdb_column_data(
duckdb_result *result,
idx_t col
);
Parameters
result
The result object to fetch the column data from.
col
The column index.
returns
The column data of the specified column.
duckdb_nullmask_data
Deprecated This method is deprecated. Prefer using
duckdb_result_get_chunk
instead.
Returns the nullmask of a specific column of a result in columnar format. The nullmask indicates for every row
whether or not the corresponding row is NULL
. If a row is NULL
, the values present in the array provided
by duckdb_column_data
are undefined.
int32_t *data = (int32_t *) duckdb_column_data(&result, 0);
bool *nullmask = duckdb_nullmask_data(&result, 0);
if (nullmask[row]) {
printf("Data for row %d: NULL\n", row);
} else {
printf("Data for row %d: %d\n", row, data[row]);
}
Syntax
bool *duckdb_nullmask_data(
duckdb_result *result,
idx_t col
);
Parameters
result
The result object to fetch the nullmask from.
col
The column index.
returns
The nullmask of the specified column.
duckdb_result_error
Returns the error message contained within the result. The error is only set if duckdb_query
returns DuckDBError
.
The result of this function must not be freed. It will be cleaned up when duckdb_destroy_result
is called.
Syntax
const char *duckdb_result_error(
duckdb_result *result
);
Parameters
result
The result object to fetch the error from.
returns
The error of the result.
duckdb_result_get_chunk
Deprecated This method is scheduled for removal in a future release.
Fetches a data chunk from the duckdb_result. This function should be called repeatedly until the result is exhausted.
The result must be destroyed with duckdb_destroy_data_chunk
.
This function supersedes all duckdb_value
functions, as well as the duckdb_column_data
and duckdb_nullmask_data
functions. It results in significantly better performance, and should be preferred in newer code-bases.
If this function is used, none of the other result functions can be used and vice versa (i.e., this function cannot be mixed with the legacy result functions).
Use duckdb_result_chunk_count
to figure out how many chunks there are in the result.
Syntax
duckdb_data_chunk duckdb_result_get_chunk(
duckdb_result result,
idx_t chunk_index
);
Parameters
result
The result object to fetch the data chunk from.
chunk_index
The chunk index to fetch from.
returns
The resulting data chunk. Returns NULL
if the chunk index is out of bounds.
duckdb_result_is_streaming
Deprecated This method is scheduled for removal in a future release.
Checks if the type of the internal result is StreamQueryResult.
Syntax
bool duckdb_result_is_streaming(
duckdb_result result
);
Parameters
result
The result object to check.
returns
Whether or not the result object is of the type StreamQueryResult
duckdb_result_chunk_count
Deprecated This method is scheduled for removal in a future release.
Returns the number of data chunks present in the result.
Syntax
idx_t duckdb_result_chunk_count(
duckdb_result result
);
Parameters
result
The result object
returns
Number of data chunks present in the result.
duckdb_result_return_type
Returns the return_type of the given result, or DUCKDB_RETURN_TYPE_INVALID on error
Syntax
duckdb_result_type duckdb_result_return_type(
duckdb_result result
);
Parameters
result
The result object
returns
The return_type
duckdb_value_boolean
Deprecated This method is scheduled for removal in a future release.
Syntax
bool duckdb_value_boolean(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The boolean value at the specified location, or false if the value cannot be converted.
duckdb_value_int8
Deprecated This method is scheduled for removal in a future release.
Syntax
int8_t duckdb_value_int8(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The int8_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_int16
Deprecated This method is scheduled for removal in a future release.
Syntax
int16_t duckdb_value_int16(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The int16_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_int32
Deprecated This method is scheduled for removal in a future release.
Syntax
int32_t duckdb_value_int32(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The int32_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_int64
Deprecated This method is scheduled for removal in a future release.
Syntax
int64_t duckdb_value_int64(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The int64_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_hugeint
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_hugeint duckdb_value_hugeint(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_hugeint value at the specified location, or 0 if the value cannot be converted.
duckdb_value_uhugeint
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_uhugeint duckdb_value_uhugeint(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_uhugeint value at the specified location, or 0 if the value cannot be converted.
duckdb_value_decimal
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_decimal duckdb_value_decimal(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_decimal value at the specified location, or 0 if the value cannot be converted.
duckdb_value_uint8
Deprecated This method is scheduled for removal in a future release.
Syntax
uint8_t duckdb_value_uint8(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The uint8_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_uint16
Deprecated This method is scheduled for removal in a future release.
Syntax
uint16_t duckdb_value_uint16(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The uint16_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_uint32
Deprecated This method is scheduled for removal in a future release.
Syntax
uint32_t duckdb_value_uint32(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The uint32_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_uint64
Deprecated This method is scheduled for removal in a future release.
Syntax
uint64_t duckdb_value_uint64(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The uint64_t value at the specified location, or 0 if the value cannot be converted.
duckdb_value_float
Deprecated This method is scheduled for removal in a future release.
Syntax
float duckdb_value_float(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The float value at the specified location, or 0 if the value cannot be converted.
duckdb_value_double
Deprecated This method is scheduled for removal in a future release.
Syntax
double duckdb_value_double(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The double value at the specified location, or 0 if the value cannot be converted.
duckdb_value_date
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_date duckdb_value_date(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_date value at the specified location, or 0 if the value cannot be converted.
duckdb_value_time
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_time duckdb_value_time(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_time value at the specified location, or 0 if the value cannot be converted.
duckdb_value_timestamp
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_timestamp duckdb_value_timestamp(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_timestamp value at the specified location, or 0 if the value cannot be converted.
duckdb_value_interval
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_interval duckdb_value_interval(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_interval value at the specified location, or 0 if the value cannot be converted.
duckdb_value_varchar
Syntax
char *duckdb_value_varchar(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
DEPRECATED
use duckdb_value_string instead. This function does not work correctly if the string contains null bytes.
returns
The text value at the specified location as a null-terminated string, or nullptr if the value cannot be
converted. The result must be freed with duckdb_free
.
duckdb_value_string
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_string duckdb_value_string(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The string value at the specified location. Attempts to cast the result value to string.
- No support for nested types, and for other complex types.
- The resulting field "string.data" must be freed with
duckdb_free.
duckdb_value_varchar_internal
Syntax
char *duckdb_value_varchar_internal(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
DEPRECATED
use duckdb_value_string_internal instead. This function does not work correctly if the string contains null bytes.
returns
The char* value at the specified location. ONLY works on VARCHAR columns and does not auto-cast. If the column is NOT a VARCHAR column this function will return NULL.
The result must NOT be freed.
duckdb_value_string_internal
Syntax
duckdb_string duckdb_value_string_internal(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
DEPRECATED
use duckdb_value_string_internal instead. This function does not work correctly if the string contains null bytes.
returns
The char* value at the specified location. ONLY works on VARCHAR columns and does not auto-cast. If the column is NOT a VARCHAR column this function will return NULL.
The result must NOT be freed.
duckdb_value_blob
Deprecated This method is scheduled for removal in a future release.
Syntax
duckdb_blob duckdb_value_blob(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
The duckdb_blob value at the specified location. Returns a blob with blob.data set to nullptr if the
value cannot be converted. The resulting field "blob.data" must be freed with duckdb_free.
duckdb_value_is_null
Deprecated This method is scheduled for removal in a future release.
Syntax
bool duckdb_value_is_null(
duckdb_result *result,
idx_t col,
idx_t row
);
Parameters
returns
Returns true if the value at the specified index is NULL, and false otherwise.
duckdb_malloc
Allocate size
bytes of memory using the duckdb internal malloc function. Any memory allocated in this manner
should be freed using duckdb_free
.
Syntax
void *duckdb_malloc(
size_t size
);
Parameters
size
The number of bytes to allocate.
returns
A pointer to the allocated memory region.
duckdb_free
Free a value returned from duckdb_malloc
, duckdb_value_varchar
, duckdb_value_blob
, or
duckdb_value_string
.
Syntax
void duckdb_free(
void *ptr
);
Parameters
ptr
The memory region to de-allocate.
duckdb_vector_size
The internal vector size used by DuckDB.
This is the amount of tuples that will fit into a data chunk created by duckdb_create_data_chunk
.
Syntax
idx_t duckdb_vector_size(
);
Parameters
returns
The vector size.
duckdb_string_is_inlined
Whether or not the duckdb_string_t value is inlined. This means that the data of the string does not have a separate allocation.
Syntax
bool duckdb_string_is_inlined(
duckdb_string_t string
);
duckdb_from_date
Decompose a duckdb_date
object into year, month and date (stored as duckdb_date_struct
).
Syntax
duckdb_date_struct duckdb_from_date(
duckdb_date date
);
Parameters
date
The date object, as obtained from a DUCKDB_TYPE_DATE
column.
returns
The duckdb_date_struct
with the decomposed elements.
duckdb_to_date
Re-compose a duckdb_date
from year, month and date (duckdb_date_struct
).
Syntax
duckdb_date duckdb_to_date(
duckdb_date_struct date
);
Parameters
date
The year, month and date stored in a duckdb_date_struct
.
returns
The duckdb_date
element.
duckdb_is_finite_date
Test a duckdb_date
to see if it is a finite value.
Syntax
bool duckdb_is_finite_date(
duckdb_date date
);
Parameters
date
The date object, as obtained from a DUCKDB_TYPE_DATE
column.
returns
True if the date is finite, false if it is ±infinity.
duckdb_from_time
Decompose a duckdb_time
object into hour, minute, second and microsecond (stored as duckdb_time_struct
).
Syntax
duckdb_time_struct duckdb_from_time(
duckdb_time time
);
Parameters
time
The time object, as obtained from a DUCKDB_TYPE_TIME
column.
returns
The duckdb_time_struct
with the decomposed elements.
duckdb_create_time_tz
Create a duckdb_time_tz
object from micros and a timezone offset.
Syntax
duckdb_time_tz duckdb_create_time_tz(
int64_t micros,
int32_t offset
);
Parameters
micros
The microsecond component of the time.
offset
The timezone offset component of the time.
returns
The duckdb_time_tz
element.
duckdb_from_time_tz
Decompose a TIME_TZ objects into micros and a timezone offset.
Use duckdb_from_time
to further decompose the micros into hour, minute, second and microsecond.
Syntax
duckdb_time_tz_struct duckdb_from_time_tz(
duckdb_time_tz micros
);
Parameters
micros
The time object, as obtained from a DUCKDB_TYPE_TIME_TZ
column.
out_micros
The microsecond component of the time.
out_offset
The timezone offset component of the time.
duckdb_to_time
Re-compose a duckdb_time
from hour, minute, second and microsecond (duckdb_time_struct
).
Syntax
duckdb_time duckdb_to_time(
duckdb_time_struct time
);
Parameters
time
The hour, minute, second and microsecond in a duckdb_time_struct
.
returns
The duckdb_time
element.
duckdb_from_timestamp
Decompose a duckdb_timestamp
object into a duckdb_timestamp_struct
.
Syntax
duckdb_timestamp_struct duckdb_from_timestamp(
duckdb_timestamp ts
);
Parameters
ts
The ts object, as obtained from a DUCKDB_TYPE_TIMESTAMP
column.
returns
The duckdb_timestamp_struct
with the decomposed elements.
duckdb_to_timestamp
Re-compose a duckdb_timestamp
from a duckdb_timestamp_struct.
Syntax
duckdb_timestamp duckdb_to_timestamp(
duckdb_timestamp_struct ts
);
Parameters
ts
The de-composed elements in a duckdb_timestamp_struct
.
returns
The duckdb_timestamp
element.
duckdb_is_finite_timestamp
Test a duckdb_timestamp
to see if it is a finite value.
Syntax
bool duckdb_is_finite_timestamp(
duckdb_timestamp ts
);
Parameters
ts
The timestamp object, as obtained from a DUCKDB_TYPE_TIMESTAMP
column.
returns
True if the timestamp is finite, false if it is ±infinity.
duckdb_hugeint_to_double
Converts a duckdb_hugeint object (as obtained from a DUCKDB_TYPE_HUGEINT
column) into a double.
Syntax
double duckdb_hugeint_to_double(
duckdb_hugeint val
);
Parameters
val
The hugeint value.
returns
The converted double
element.
duckdb_double_to_hugeint
Converts a double value to a duckdb_hugeint object.
If the conversion fails because the double value is too big the result will be 0.
Syntax
duckdb_hugeint duckdb_double_to_hugeint(
double val
);
Parameters
val
The double value.
returns
The converted duckdb_hugeint
element.
duckdb_uhugeint_to_double
Converts a duckdb_uhugeint object (as obtained from a DUCKDB_TYPE_UHUGEINT
column) into a double.
Syntax
double duckdb_uhugeint_to_double(
duckdb_uhugeint val
);
Parameters
val
The uhugeint value.
returns
The converted double
element.
duckdb_double_to_uhugeint
Converts a double value to a duckdb_uhugeint object.
If the conversion fails because the double value is too big the result will be 0.
Syntax
duckdb_uhugeint duckdb_double_to_uhugeint(
double val
);
Parameters
val
The double value.
returns
The converted duckdb_uhugeint
element.
duckdb_double_to_decimal
Converts a double value to a duckdb_decimal object.
If the conversion fails because the double value is too big, or the width/scale are invalid the result will be 0.
Syntax
duckdb_decimal duckdb_double_to_decimal(
double val,
uint8_t width,
uint8_t scale
);
Parameters
val
The double value.
returns
The converted duckdb_decimal
element.
duckdb_decimal_to_double
Converts a duckdb_decimal object (as obtained from a DUCKDB_TYPE_DECIMAL
column) into a double.
Syntax
double duckdb_decimal_to_double(
duckdb_decimal val
);
Parameters
val
The decimal value.
returns
The converted double
element.
duckdb_prepare
Create a prepared statement object from a query.
Note that after calling duckdb_prepare
, the prepared statement should always be destroyed using
duckdb_destroy_prepare
, even if the prepare fails.
If the prepare fails, duckdb_prepare_error
can be called to obtain the reason why the prepare failed.
Syntax
duckdb_state duckdb_prepare(
duckdb_connection connection,
const char *query,
duckdb_prepared_statement *out_prepared_statement
);
Parameters
connection
The connection object
query
The SQL query to prepare
out_prepared_statement
The resulting prepared statement object
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_destroy_prepare
Closes the prepared statement and de-allocates all memory allocated for the statement.
Syntax
void duckdb_destroy_prepare(
duckdb_prepared_statement *prepared_statement
);
Parameters
prepared_statement
The prepared statement to destroy.
duckdb_prepare_error
Returns the error message associated with the given prepared statement.
If the prepared statement has no error message, this returns nullptr
instead.
The error message should not be freed. It will be de-allocated when duckdb_destroy_prepare
is called.
Syntax
const char *duckdb_prepare_error(
duckdb_prepared_statement prepared_statement
);
Parameters
prepared_statement
The prepared statement to obtain the error from.
returns
The error message, or nullptr
if there is none.
duckdb_nparams
Returns the number of parameters that can be provided to the given prepared statement.
Returns 0 if the query was not successfully prepared.
Syntax
idx_t duckdb_nparams(
duckdb_prepared_statement prepared_statement
);
Parameters
prepared_statement
The prepared statement to obtain the number of parameters for.
duckdb_parameter_name
Returns the name used to identify the parameter
The returned string should be freed using duckdb_free
.
Returns NULL if the index is out of range for the provided prepared statement.
Syntax
const char *duckdb_parameter_name(
duckdb_prepared_statement prepared_statement,
idx_t index
);
Parameters
prepared_statement
The prepared statement for which to get the parameter name from.
duckdb_param_type
Returns the parameter type for the parameter at the given index.
Returns DUCKDB_TYPE_INVALID
if the parameter index is out of range or the statement was not successfully prepared.
Syntax
duckdb_type duckdb_param_type(
duckdb_prepared_statement prepared_statement,
idx_t param_idx
);
Parameters
prepared_statement
The prepared statement.
param_idx
The parameter index.
returns
The parameter type
duckdb_clear_bindings
Clear the params bind to the prepared statement.
Syntax
duckdb_state duckdb_clear_bindings(
duckdb_prepared_statement prepared_statement
);
duckdb_prepared_statement_type
Returns the statement type of the statement to be executed
Syntax
duckdb_statement_type duckdb_prepared_statement_type(
duckdb_prepared_statement statement
);
Parameters
statement
The prepared statement.
returns
duckdb_statement_type value or DUCKDB_STATEMENT_TYPE_INVALID
duckdb_bind_value
Binds a value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_value(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_value val
);
duckdb_bind_parameter_index
Retrieve the index of the parameter for the prepared statement, identified by name
Syntax
duckdb_state duckdb_bind_parameter_index(
duckdb_prepared_statement prepared_statement,
idx_t *param_idx_out,
const char *name
);
duckdb_bind_boolean
Binds a bool value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_boolean(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
bool val
);
duckdb_bind_int8
Binds an int8_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_int8(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
int8_t val
);
duckdb_bind_int16
Binds an int16_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_int16(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
int16_t val
);
duckdb_bind_int32
Binds an int32_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_int32(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
int32_t val
);
duckdb_bind_int64
Binds an int64_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_int64(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
int64_t val
);
duckdb_bind_hugeint
Binds a duckdb_hugeint value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_hugeint(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_hugeint val
);
duckdb_bind_uhugeint
Binds an duckdb_uhugeint value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_uhugeint(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_uhugeint val
);
duckdb_bind_decimal
Binds a duckdb_decimal value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_decimal(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_decimal val
);
duckdb_bind_uint8
Binds an uint8_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_uint8(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
uint8_t val
);
duckdb_bind_uint16
Binds an uint16_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_uint16(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
uint16_t val
);
duckdb_bind_uint32
Binds an uint32_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_uint32(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
uint32_t val
);
duckdb_bind_uint64
Binds an uint64_t value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_uint64(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
uint64_t val
);
duckdb_bind_float
Binds a float value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_float(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
float val
);
duckdb_bind_double
Binds a double value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_double(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
double val
);
duckdb_bind_date
Binds a duckdb_date value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_date(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_date val
);
duckdb_bind_time
Binds a duckdb_time value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_time(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_time val
);
duckdb_bind_timestamp
Binds a duckdb_timestamp value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_timestamp(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_timestamp val
);
duckdb_bind_interval
Binds a duckdb_interval value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_interval(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
duckdb_interval val
);
duckdb_bind_varchar
Binds a null-terminated varchar value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_varchar(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
const char *val
);
duckdb_bind_varchar_length
Binds a varchar value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_varchar_length(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
const char *val,
idx_t length
);
duckdb_bind_blob
Binds a blob value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_blob(
duckdb_prepared_statement prepared_statement,
idx_t param_idx,
const void *data,
idx_t length
);
duckdb_bind_null
Binds a NULL value to the prepared statement at the specified index.
Syntax
duckdb_state duckdb_bind_null(
duckdb_prepared_statement prepared_statement,
idx_t param_idx
);
duckdb_execute_prepared
Executes the prepared statement with the given bound parameters, and returns a materialized query result.
This method can be called multiple times for each prepared statement, and the parameters can be modified between calls to this function.
Note that the result must be freed with duckdb_destroy_result
.
Syntax
duckdb_state duckdb_execute_prepared(
duckdb_prepared_statement prepared_statement,
duckdb_result *out_result
);
Parameters
prepared_statement
The prepared statement to execute.
out_result
The query result.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_execute_prepared_streaming
Deprecated This method is scheduled for removal in a future release.
Executes the prepared statement with the given bound parameters, and returns an optionally-streaming query result.
To determine if the resulting query was in fact streamed, use duckdb_result_is_streaming
This method can be called multiple times for each prepared statement, and the parameters can be modified between calls to this function.
Note that the result must be freed with duckdb_destroy_result
.
Syntax
duckdb_state duckdb_execute_prepared_streaming(
duckdb_prepared_statement prepared_statement,
duckdb_result *out_result
);
Parameters
prepared_statement
The prepared statement to execute.
out_result
The query result.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_extract_statements
Extract all statements from a query.
Note that after calling duckdb_extract_statements
, the extracted statements should always be destroyed using
duckdb_destroy_extracted
, even if no statements were extracted.
If the extract fails, duckdb_extract_statements_error
can be called to obtain the reason why the extract failed.
Syntax
idx_t duckdb_extract_statements(
duckdb_connection connection,
const char *query,
duckdb_extracted_statements *out_extracted_statements
);
Parameters
connection
The connection object
query
The SQL query to extract
out_extracted_statements
The resulting extracted statements object
returns
The number of extracted statements or 0 on failure.
duckdb_prepare_extracted_statement
Prepare an extracted statement.
Note that after calling duckdb_prepare_extracted_statement
, the prepared statement should always be destroyed using
duckdb_destroy_prepare
, even if the prepare fails.
If the prepare fails, duckdb_prepare_error
can be called to obtain the reason why the prepare failed.
Syntax
duckdb_state duckdb_prepare_extracted_statement(
duckdb_connection connection,
duckdb_extracted_statements extracted_statements,
idx_t index,
duckdb_prepared_statement *out_prepared_statement
);
Parameters
connection
The connection object
extracted_statements
The extracted statements object
index
The index of the extracted statement to prepare
out_prepared_statement
The resulting prepared statement object
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_extract_statements_error
Returns the error message contained within the extracted statements.
The result of this function must not be freed. It will be cleaned up when duckdb_destroy_extracted
is called.
Syntax
const char *duckdb_extract_statements_error(
duckdb_extracted_statements extracted_statements
);
Parameters
result
The extracted statements to fetch the error from.
returns
The error of the extracted statements.
duckdb_destroy_extracted
De-allocates all memory allocated for the extracted statements.
Syntax
void duckdb_destroy_extracted(
duckdb_extracted_statements *extracted_statements
);
Parameters
extracted_statements
The extracted statements to destroy.
duckdb_pending_prepared
Executes the prepared statement with the given bound parameters, and returns a pending result. The pending result represents an intermediate structure for a query that is not yet fully executed. The pending result can be used to incrementally execute a query, returning control to the client between tasks.
Note that after calling duckdb_pending_prepared
, the pending result should always be destroyed using
duckdb_destroy_pending
, even if this function returns DuckDBError.
Syntax
duckdb_state duckdb_pending_prepared(
duckdb_prepared_statement prepared_statement,
duckdb_pending_result *out_result
);
Parameters
prepared_statement
The prepared statement to execute.
out_result
The pending query result.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_pending_prepared_streaming
Deprecated This method is scheduled for removal in a future release.
Executes the prepared statement with the given bound parameters, and returns a pending result. This pending result will create a streaming duckdb_result when executed. The pending result represents an intermediate structure for a query that is not yet fully executed.
Note that after calling duckdb_pending_prepared_streaming
, the pending result should always be destroyed using
duckdb_destroy_pending
, even if this function returns DuckDBError.
Syntax
duckdb_state duckdb_pending_prepared_streaming(
duckdb_prepared_statement prepared_statement,
duckdb_pending_result *out_result
);
Parameters
prepared_statement
The prepared statement to execute.
out_result
The pending query result.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_destroy_pending
Closes the pending result and de-allocates all memory allocated for the result.
Syntax
void duckdb_destroy_pending(
duckdb_pending_result *pending_result
);
Parameters
pending_result
The pending result to destroy.
duckdb_pending_error
Returns the error message contained within the pending result.
The result of this function must not be freed. It will be cleaned up when duckdb_destroy_pending
is called.
Syntax
const char *duckdb_pending_error(
duckdb_pending_result pending_result
);
Parameters
result
The pending result to fetch the error from.
returns
The error of the pending result.
duckdb_pending_execute_task
Executes a single task within the query, returning whether or not the query is ready.
If this returns DUCKDB_PENDING_RESULT_READY, the duckdb_execute_pending function can be called to obtain the result. If this returns DUCKDB_PENDING_RESULT_NOT_READY, the duckdb_pending_execute_task function should be called again. If this returns DUCKDB_PENDING_ERROR, an error occurred during execution.
The error message can be obtained by calling duckdb_pending_error on the pending_result.
Syntax
duckdb_pending_state duckdb_pending_execute_task(
duckdb_pending_result pending_result
);
Parameters
pending_result
The pending result to execute a task within.
returns
The state of the pending result after the execution.
duckdb_pending_execute_check_state
If this returns DUCKDB_PENDING_RESULT_READY, the duckdb_execute_pending function can be called to obtain the result. If this returns DUCKDB_PENDING_RESULT_NOT_READY, the duckdb_pending_execute_check_state function should be called again. If this returns DUCKDB_PENDING_ERROR, an error occurred during execution.
The error message can be obtained by calling duckdb_pending_error on the pending_result.
Syntax
duckdb_pending_state duckdb_pending_execute_check_state(
duckdb_pending_result pending_result
);
Parameters
pending_result
The pending result.
returns
The state of the pending result.
duckdb_execute_pending
Fully execute a pending query result, returning the final query result.
If duckdb_pending_execute_task has been called until DUCKDB_PENDING_RESULT_READY was returned, this will return fast. Otherwise, all remaining tasks must be executed first.
Note that the result must be freed with duckdb_destroy_result
.
Syntax
duckdb_state duckdb_execute_pending(
duckdb_pending_result pending_result,
duckdb_result *out_result
);
Parameters
pending_result
The pending result to execute.
out_result
The result object.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_pending_execution_is_finished
Returns whether a duckdb_pending_state is finished executing. For example if pending_state
is
DUCKDB_PENDING_RESULT_READY, this function will return true.
Syntax
bool duckdb_pending_execution_is_finished(
duckdb_pending_state pending_state
);
Parameters
pending_state
The pending state on which to decide whether to finish execution.
returns
Boolean indicating pending execution should be considered finished.
duckdb_destroy_value
Destroys the value and de-allocates all memory allocated for that type.
Syntax
void duckdb_destroy_value(
duckdb_value *value
);
Parameters
value
The value to destroy.
duckdb_create_varchar
Creates a value from a null-terminated string
Syntax
duckdb_value duckdb_create_varchar(
const char *text
);
Parameters
value
The null-terminated string
returns
The value. This must be destroyed with duckdb_destroy_value
.
duckdb_create_varchar_length
Creates a value from a string
Syntax
duckdb_value duckdb_create_varchar_length(
const char *text,
idx_t length
);
Parameters
value
The text
length
The length of the text
returns
The value. This must be destroyed with duckdb_destroy_value
.
duckdb_create_int64
Creates a value from an int64
Syntax
duckdb_value duckdb_create_int64(
int64_t val
);
Parameters
value
The bigint value
returns
The value. This must be destroyed with duckdb_destroy_value
.
duckdb_create_struct_value
Creates a struct value from a type and an array of values
Syntax
duckdb_value duckdb_create_struct_value(
duckdb_logical_type type,
duckdb_value *values
);
Parameters
type
The type of the struct
values
The values for the struct fields
returns
The value. This must be destroyed with duckdb_destroy_value
.
duckdb_create_list_value
Creates a list value from a type and an array of values of length value_count
Syntax
duckdb_value duckdb_create_list_value(
duckdb_logical_type type,
duckdb_value *values,
idx_t value_count
);
Parameters
type
The type of the list
values
The values for the list
value_count
The number of values in the list
returns
The value. This must be destroyed with duckdb_destroy_value
.
duckdb_create_array_value
Creates a array value from a type and an array of values of length value_count
Syntax
duckdb_value duckdb_create_array_value(
duckdb_logical_type type,
duckdb_value *values,
idx_t value_count
);
Parameters
type
The type of the array
values
The values for the array
value_count
The number of values in the array
returns
The value. This must be destroyed with duckdb_destroy_value
.
duckdb_get_varchar
Obtains a string representation of the given value.
The result must be destroyed with duckdb_free
.
Syntax
char *duckdb_get_varchar(
duckdb_value value
);
Parameters
value
The value
returns
The string value. This must be destroyed with duckdb_free
.
duckdb_get_int64
Obtains an int64 of the given value.
Syntax
int64_t duckdb_get_int64(
duckdb_value value
);
Parameters
value
The value
returns
The int64 value, or 0 if no conversion is possible
duckdb_create_logical_type
Creates a duckdb_logical_type
from a standard primitive type.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
This should not be used with DUCKDB_TYPE_DECIMAL
.
Syntax
duckdb_logical_type duckdb_create_logical_type(
duckdb_type type
);
Parameters
type
The primitive type to create.
returns
The logical type.
duckdb_logical_type_get_alias
Returns the alias of a duckdb_logical_type, if one is set, else NULL
.
The result must be destroyed with duckdb_free
.
Syntax
char *duckdb_logical_type_get_alias(
duckdb_logical_type type
);
Parameters
type
The logical type to return the alias of
returns
The alias or NULL
duckdb_create_list_type
Creates a list type from its child type.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_create_list_type(
duckdb_logical_type type
);
Parameters
type
The child type of list type to create.
returns
The logical type.
duckdb_create_array_type
Creates a array type from its child type.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_create_array_type(
duckdb_logical_type type,
idx_t array_size
);
Parameters
type
The child type of array type to create.
array_size
The number of elements in the array.
returns
The logical type.
duckdb_create_map_type
Creates a map type from its key type and value type.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_create_map_type(
duckdb_logical_type key_type,
duckdb_logical_type value_type
);
Parameters
type
The key type and value type of map type to create.
returns
The logical type.
duckdb_create_union_type
Creates a UNION type from the passed types array.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_create_union_type(
duckdb_logical_type *member_types,
const char **member_names,
idx_t member_count
);
Parameters
types
The array of types that the union should consist of.
type_amount
The size of the types array.
returns
The logical type.
duckdb_create_struct_type
Creates a STRUCT type from the passed member name and type arrays.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_create_struct_type(
duckdb_logical_type *member_types,
const char **member_names,
idx_t member_count
);
Parameters
member_types
The array of types that the struct should consist of.
member_names
The array of names that the struct should consist of.
member_count
The number of members that were specified for both arrays.
returns
The logical type.
duckdb_create_enum_type
Creates an ENUM type from the passed member name array.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_create_enum_type(
const char **member_names,
idx_t member_count
);
Parameters
enum_name
The name of the enum.
member_names
The array of names that the enum should consist of.
member_count
The number of elements that were specified in the array.
returns
The logical type.
duckdb_create_decimal_type
Creates a duckdb_logical_type
of type decimal with the specified width and scale.
The resulting type should be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_create_decimal_type(
uint8_t width,
uint8_t scale
);
Parameters
width
The width of the decimal type
scale
The scale of the decimal type
returns
The logical type.
duckdb_get_type_id
Retrieves the enum type class of a duckdb_logical_type
.
Syntax
duckdb_type duckdb_get_type_id(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The type id
duckdb_decimal_width
Retrieves the width of a decimal type.
Syntax
uint8_t duckdb_decimal_width(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The width of the decimal type
duckdb_decimal_scale
Retrieves the scale of a decimal type.
Syntax
uint8_t duckdb_decimal_scale(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The scale of the decimal type
duckdb_decimal_internal_type
Retrieves the internal storage type of a decimal type.
Syntax
duckdb_type duckdb_decimal_internal_type(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The internal type of the decimal type
duckdb_enum_internal_type
Retrieves the internal storage type of an enum type.
Syntax
duckdb_type duckdb_enum_internal_type(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The internal type of the enum type
duckdb_enum_dictionary_size
Retrieves the dictionary size of the enum type.
Syntax
uint32_t duckdb_enum_dictionary_size(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The dictionary size of the enum type
duckdb_enum_dictionary_value
Retrieves the dictionary value at the specified position from the enum.
The result must be freed with duckdb_free
.
Syntax
char *duckdb_enum_dictionary_value(
duckdb_logical_type type,
idx_t index
);
Parameters
type
The logical type object
index
The index in the dictionary
returns
The string value of the enum type. Must be freed with duckdb_free
.
duckdb_list_type_child_type
Retrieves the child type of the given list type.
The result must be freed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_list_type_child_type(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The child type of the list type. Must be destroyed with duckdb_destroy_logical_type
.
duckdb_array_type_child_type
Retrieves the child type of the given array type.
The result must be freed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_array_type_child_type(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The child type of the array type. Must be destroyed with duckdb_destroy_logical_type
.
duckdb_array_type_array_size
Retrieves the array size of the given array type.
Syntax
idx_t duckdb_array_type_array_size(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The fixed number of elements the values of this array type can store.
duckdb_map_type_key_type
Retrieves the key type of the given map type.
The result must be freed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_map_type_key_type(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The key type of the map type. Must be destroyed with duckdb_destroy_logical_type
.
duckdb_map_type_value_type
Retrieves the value type of the given map type.
The result must be freed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_map_type_value_type(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The value type of the map type. Must be destroyed with duckdb_destroy_logical_type
.
duckdb_struct_type_child_count
Returns the number of children of a struct type.
Syntax
idx_t duckdb_struct_type_child_count(
duckdb_logical_type type
);
Parameters
type
The logical type object
returns
The number of children of a struct type.
duckdb_struct_type_child_name
Retrieves the name of the struct child.
The result must be freed with duckdb_free
.
Syntax
char *duckdb_struct_type_child_name(
duckdb_logical_type type,
idx_t index
);
Parameters
type
The logical type object
index
The child index
returns
The name of the struct type. Must be freed with duckdb_free
.
duckdb_struct_type_child_type
Retrieves the child type of the given struct type at the specified index.
The result must be freed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_struct_type_child_type(
duckdb_logical_type type,
idx_t index
);
Parameters
type
The logical type object
index
The child index
returns
The child type of the struct type. Must be destroyed with duckdb_destroy_logical_type
.
duckdb_union_type_member_count
Returns the number of members that the union type has.
Syntax
idx_t duckdb_union_type_member_count(
duckdb_logical_type type
);
Parameters
type
The logical type (union) object
returns
The number of members of a union type.
duckdb_union_type_member_name
Retrieves the name of the union member.
The result must be freed with duckdb_free
.
Syntax
char *duckdb_union_type_member_name(
duckdb_logical_type type,
idx_t index
);
Parameters
type
The logical type object
index
The child index
returns
The name of the union member. Must be freed with duckdb_free
.
duckdb_union_type_member_type
Retrieves the child type of the given union member at the specified index.
The result must be freed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_union_type_member_type(
duckdb_logical_type type,
idx_t index
);
Parameters
type
The logical type object
index
The child index
returns
The child type of the union member. Must be destroyed with duckdb_destroy_logical_type
.
duckdb_destroy_logical_type
Destroys the logical type and de-allocates all memory allocated for that type.
Syntax
void duckdb_destroy_logical_type(
duckdb_logical_type *type
);
Parameters
type
The logical type to destroy.
duckdb_create_data_chunk
Creates an empty DataChunk with the specified set of types.
Note that the result must be destroyed with duckdb_destroy_data_chunk
.
Syntax
duckdb_data_chunk duckdb_create_data_chunk(
duckdb_logical_type *types,
idx_t column_count
);
Parameters
types
An array of types of the data chunk.
column_count
The number of columns.
returns
The data chunk.
duckdb_destroy_data_chunk
Destroys the data chunk and de-allocates all memory allocated for that chunk.
Syntax
void duckdb_destroy_data_chunk(
duckdb_data_chunk *chunk
);
Parameters
chunk
The data chunk to destroy.
duckdb_data_chunk_reset
Resets a data chunk, clearing the validity masks and setting the cardinality of the data chunk to 0.
Syntax
void duckdb_data_chunk_reset(
duckdb_data_chunk chunk
);
Parameters
chunk
The data chunk to reset.
duckdb_data_chunk_get_column_count
Retrieves the number of columns in a data chunk.
Syntax
idx_t duckdb_data_chunk_get_column_count(
duckdb_data_chunk chunk
);
Parameters
chunk
The data chunk to get the data from
returns
The number of columns in the data chunk
duckdb_data_chunk_get_vector
Retrieves the vector at the specified column index in the data chunk.
The pointer to the vector is valid for as long as the chunk is alive. It does NOT need to be destroyed.
Syntax
duckdb_vector duckdb_data_chunk_get_vector(
duckdb_data_chunk chunk,
idx_t col_idx
);
Parameters
chunk
The data chunk to get the data from
returns
The vector
duckdb_data_chunk_get_size
Retrieves the current number of tuples in a data chunk.
Syntax
idx_t duckdb_data_chunk_get_size(
duckdb_data_chunk chunk
);
Parameters
chunk
The data chunk to get the data from
returns
The number of tuples in the data chunk
duckdb_data_chunk_set_size
Sets the current number of tuples in a data chunk.
Syntax
void duckdb_data_chunk_set_size(
duckdb_data_chunk chunk,
idx_t size
);
Parameters
chunk
The data chunk to set the size in
size
The number of tuples in the data chunk
duckdb_vector_get_column_type
Retrieves the column type of the specified vector.
The result must be destroyed with duckdb_destroy_logical_type
.
Syntax
duckdb_logical_type duckdb_vector_get_column_type(
duckdb_vector vector
);
Parameters
vector
The vector get the data from
returns
The type of the vector
duckdb_vector_get_data
Retrieves the data pointer of the vector.
The data pointer can be used to read or write values from the vector. How to read or write values depends on the type of the vector.
Syntax
void *duckdb_vector_get_data(
duckdb_vector vector
);
Parameters
vector
The vector to get the data from
returns
The data pointer
duckdb_vector_get_validity
Retrieves the validity mask pointer of the specified vector.
If all values are valid, this function MIGHT return NULL!
The validity mask is a bitset that signifies null-ness within the data chunk. It is a series of uint64_t values, where each uint64_t value contains validity for 64 tuples. The bit is set to 1 if the value is valid (i.e., not NULL) or 0 if the value is invalid (i.e., NULL).
Validity of a specific value can be obtained like this:
idx_t entry_idx = row_idx / 64;
idx_t idx_in_entry = row_idx % 64;
bool is_valid = validity_mask[entry_idx] & (1 << idx_in_entry);
Alternatively, the (slower) duckdb_validity_row_is_valid function can be used.
Syntax
uint64_t *duckdb_vector_get_validity(
duckdb_vector vector
);
Parameters
vector
The vector to get the data from
returns
The pointer to the validity mask, or NULL if no validity mask is present
duckdb_vector_ensure_validity_writable
Ensures the validity mask is writable by allocating it.
After this function is called, duckdb_vector_get_validity
will ALWAYS return non-NULL.
This allows null values to be written to the vector, regardless of whether a validity mask was present before.
Syntax
void duckdb_vector_ensure_validity_writable(
duckdb_vector vector
);
Parameters
vector
The vector to alter
duckdb_vector_assign_string_element
Assigns a string element in the vector at the specified location.
Syntax
void duckdb_vector_assign_string_element(
duckdb_vector vector,
idx_t index,
const char *str
);
Parameters
vector
The vector to alter
index
The row position in the vector to assign the string to
str
The null-terminated string
duckdb_vector_assign_string_element_len
Assigns a string element in the vector at the specified location. You may also use this function to assign BLOBs.
Syntax
void duckdb_vector_assign_string_element_len(
duckdb_vector vector,
idx_t index,
const char *str,
idx_t str_len
);
Parameters
vector
The vector to alter
index
The row position in the vector to assign the string to
str
The string
str_len
The length of the string (in bytes)
duckdb_list_vector_get_child
Retrieves the child vector of a list vector.
The resulting vector is valid as long as the parent vector is valid.
Syntax
duckdb_vector duckdb_list_vector_get_child(
duckdb_vector vector
);
Parameters
vector
The vector
returns
The child vector
duckdb_list_vector_get_size
Returns the size of the child vector of the list.
Syntax
idx_t duckdb_list_vector_get_size(
duckdb_vector vector
);
Parameters
vector
The vector
returns
The size of the child list
duckdb_list_vector_set_size
Sets the total size of the underlying child-vector of a list vector.
Syntax
duckdb_state duckdb_list_vector_set_size(
duckdb_vector vector,
idx_t size
);
Parameters
vector
The list vector.
size
The size of the child list.
returns
The duckdb state. Returns DuckDBError if the vector is nullptr.
duckdb_list_vector_reserve
Sets the total capacity of the underlying child-vector of a list.
Syntax
duckdb_state duckdb_list_vector_reserve(
duckdb_vector vector,
idx_t required_capacity
);
Parameters
vector
The list vector.
required_capacity
the total capacity to reserve.
return
The duckdb state. Returns DuckDBError if the vector is nullptr.
duckdb_struct_vector_get_child
Retrieves the child vector of a struct vector.
The resulting vector is valid as long as the parent vector is valid.
Syntax
duckdb_vector duckdb_struct_vector_get_child(
duckdb_vector vector,
idx_t index
);
Parameters
vector
The vector
index
The child index
returns
The child vector
duckdb_array_vector_get_child
Retrieves the child vector of a array vector.
The resulting vector is valid as long as the parent vector is valid. The resulting vector has the size of the parent vector multiplied by the array size.
Syntax
duckdb_vector duckdb_array_vector_get_child(
duckdb_vector vector
);
Parameters
vector
The vector
returns
The child vector
duckdb_validity_row_is_valid
Returns whether or not a row is valid (i.e., not NULL) in the given validity mask.
Syntax
bool duckdb_validity_row_is_valid(
uint64_t *validity,
idx_t row
);
Parameters
validity
The validity mask, as obtained through duckdb_vector_get_validity
row
The row index
returns
true if the row is valid, false otherwise
duckdb_validity_set_row_validity
In a validity mask, sets a specific row to either valid or invalid.
Note that duckdb_vector_ensure_validity_writable
should be called before calling duckdb_vector_get_validity
,
to ensure that there is a validity mask to write to.
Syntax
void duckdb_validity_set_row_validity(
uint64_t *validity,
idx_t row,
bool valid
);
Parameters
validity
The validity mask, as obtained through duckdb_vector_get_validity
.
row
The row index
valid
Whether or not to set the row to valid, or invalid
duckdb_validity_set_row_invalid
In a validity mask, sets a specific row to invalid.
Equivalent to duckdb_validity_set_row_validity
with valid set to false.
Syntax
void duckdb_validity_set_row_invalid(
uint64_t *validity,
idx_t row
);
Parameters
validity
The validity mask
row
The row index
duckdb_validity_set_row_valid
In a validity mask, sets a specific row to valid.
Equivalent to duckdb_validity_set_row_validity
with valid set to true.
Syntax
void duckdb_validity_set_row_valid(
uint64_t *validity,
idx_t row
);
Parameters
validity
The validity mask
row
The row index
duckdb_create_table_function
Creates a new empty table function.
The return value should be destroyed with duckdb_destroy_table_function
.
Syntax
duckdb_table_function duckdb_create_table_function(
);
Parameters
returns
The table function object.
duckdb_destroy_table_function
Destroys the given table function object.
Syntax
void duckdb_destroy_table_function(
duckdb_table_function *table_function
);
Parameters
table_function
The table function to destroy
duckdb_table_function_set_name
Sets the name of the given table function.
Syntax
void duckdb_table_function_set_name(
duckdb_table_function table_function,
const char *name
);
Parameters
table_function
The table function
name
The name of the table function
duckdb_table_function_add_parameter
Adds a parameter to the table function.
Syntax
void duckdb_table_function_add_parameter(
duckdb_table_function table_function,
duckdb_logical_type type
);
Parameters
table_function
The table function
type
The type of the parameter to add.
duckdb_table_function_add_named_parameter
Adds a named parameter to the table function.
Syntax
void duckdb_table_function_add_named_parameter(
duckdb_table_function table_function,
const char *name,
duckdb_logical_type type
);
Parameters
table_function
The table function
name
The name of the parameter
type
The type of the parameter to add.
duckdb_table_function_set_extra_info
Assigns extra information to the table function that can be fetched during binding, etc.
Syntax
void duckdb_table_function_set_extra_info(
duckdb_table_function table_function,
void *extra_info,
duckdb_delete_callback_t destroy
);
Parameters
table_function
The table function
extra_info
The extra information
destroy
The callback that will be called to destroy the bind data (if any)
duckdb_table_function_set_bind
Sets the bind function of the table function.
Syntax
void duckdb_table_function_set_bind(
duckdb_table_function table_function,
duckdb_table_function_bind_t bind
);
Parameters
table_function
The table function
bind
The bind function
duckdb_table_function_set_init
Sets the init function of the table function.
Syntax
void duckdb_table_function_set_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
Parameters
table_function
The table function
init
The init function
duckdb_table_function_set_local_init
Sets the thread-local init function of the table function.
Syntax
void duckdb_table_function_set_local_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
Parameters
table_function
The table function
init
The init function
duckdb_table_function_set_function
Sets the main function of the table function.
Syntax
void duckdb_table_function_set_function(
duckdb_table_function table_function,
duckdb_table_function_t function
);
Parameters
table_function
The table function
function
The function
duckdb_table_function_supports_projection_pushdown
Sets whether or not the given table function supports projection pushdown.
If this is set to true, the system will provide a list of all required columns in the init
stage through
the duckdb_init_get_column_count
and duckdb_init_get_column_index
functions.
If this is set to false (the default), the system will expect all columns to be projected.
Syntax
void duckdb_table_function_supports_projection_pushdown(
duckdb_table_function table_function,
bool pushdown
);
Parameters
table_function
The table function
pushdown
True if the table function supports projection pushdown, false otherwise.
duckdb_register_table_function
Register the table function object within the given connection.
The function requires at least a name, a bind function, an init function and a main function.
If the function is incomplete or a function with this name already exists DuckDBError is returned.
Syntax
duckdb_state duckdb_register_table_function(
duckdb_connection con,
duckdb_table_function function
);
Parameters
con
The connection to register it in.
function
The function pointer
returns
Whether or not the registration was successful.
duckdb_bind_get_extra_info
Retrieves the extra info of the function as set in duckdb_table_function_set_extra_info
.
Syntax
void *duckdb_bind_get_extra_info(
duckdb_bind_info info
);
Parameters
info
The info object
returns
The extra info
duckdb_bind_add_result_column
Adds a result column to the output of the table function.
Syntax
void duckdb_bind_add_result_column(
duckdb_bind_info info,
const char *name,
duckdb_logical_type type
);
Parameters
info
The info object
name
The name of the column
type
The logical type of the column
duckdb_bind_get_parameter_count
Retrieves the number of regular (non-named) parameters to the function.
Syntax
idx_t duckdb_bind_get_parameter_count(
duckdb_bind_info info
);
Parameters
info
The info object
returns
The number of parameters
duckdb_bind_get_parameter
Retrieves the parameter at the given index.
The result must be destroyed with duckdb_destroy_value
.
Syntax
duckdb_value duckdb_bind_get_parameter(
duckdb_bind_info info,
idx_t index
);
Parameters
info
The info object
index
The index of the parameter to get
returns
The value of the parameter. Must be destroyed with duckdb_destroy_value
.
duckdb_bind_get_named_parameter
Retrieves a named parameter with the given name.
The result must be destroyed with duckdb_destroy_value
.
Syntax
duckdb_value duckdb_bind_get_named_parameter(
duckdb_bind_info info,
const char *name
);
Parameters
info
The info object
name
The name of the parameter
returns
The value of the parameter. Must be destroyed with duckdb_destroy_value
.
duckdb_bind_set_bind_data
Sets the user-provided bind data in the bind object. This object can be retrieved again during execution.
Syntax
void duckdb_bind_set_bind_data(
duckdb_bind_info info,
void *bind_data,
duckdb_delete_callback_t destroy
);
Parameters
info
The info object
extra_data
The bind data object.
destroy
The callback that will be called to destroy the bind data (if any)
duckdb_bind_set_cardinality
Sets the cardinality estimate for the table function, used for optimization.
Syntax
void duckdb_bind_set_cardinality(
duckdb_bind_info info,
idx_t cardinality,
bool is_exact
);
Parameters
info
The bind data object.
is_exact
Whether or not the cardinality estimate is exact, or an approximation
duckdb_bind_set_error
Report that an error has occurred while calling bind.
Syntax
void duckdb_bind_set_error(
duckdb_bind_info info,
const char *error
);
Parameters
info
The info object
error
The error message
duckdb_init_get_extra_info
Retrieves the extra info of the function as set in duckdb_table_function_set_extra_info
.
Syntax
void *duckdb_init_get_extra_info(
duckdb_init_info info
);
Parameters
info
The info object
returns
The extra info
duckdb_init_get_bind_data
Gets the bind data set by duckdb_bind_set_bind_data
during the bind.
Note that the bind data should be considered as read-only. For tracking state, use the init data instead.
Syntax
void *duckdb_init_get_bind_data(
duckdb_init_info info
);
Parameters
info
The info object
returns
The bind data object
duckdb_init_set_init_data
Sets the user-provided init data in the init object. This object can be retrieved again during execution.
Syntax
void duckdb_init_set_init_data(
duckdb_init_info info,
void *init_data,
duckdb_delete_callback_t destroy
);
Parameters
info
The info object
extra_data
The init data object.
destroy
The callback that will be called to destroy the init data (if any)
duckdb_init_get_column_count
Returns the number of projected columns.
This function must be used if projection pushdown is enabled to figure out which columns to emit.
Syntax
idx_t duckdb_init_get_column_count(
duckdb_init_info info
);
Parameters
info
The info object
returns
The number of projected columns.
duckdb_init_get_column_index
Returns the column index of the projected column at the specified position.
This function must be used if projection pushdown is enabled to figure out which columns to emit.
Syntax
idx_t duckdb_init_get_column_index(
duckdb_init_info info,
idx_t column_index
);
Parameters
info
The info object
column_index
The index at which to get the projected column index, from 0..duckdb_init_get_column_count(info)
returns
The column index of the projected column.
duckdb_init_set_max_threads
Sets how many threads can process this table function in parallel (default: 1)
Syntax
void duckdb_init_set_max_threads(
duckdb_init_info info,
idx_t max_threads
);
Parameters
info
The info object
max_threads
The maximum amount of threads that can process this table function
duckdb_init_set_error
Report that an error has occurred while calling init.
Syntax
void duckdb_init_set_error(
duckdb_init_info info,
const char *error
);
Parameters
info
The info object
error
The error message
duckdb_function_get_extra_info
Retrieves the extra info of the function as set in duckdb_table_function_set_extra_info
.
Syntax
void *duckdb_function_get_extra_info(
duckdb_function_info info
);
Parameters
info
The info object
returns
The extra info
duckdb_function_get_bind_data
Gets the bind data set by duckdb_bind_set_bind_data
during the bind.
Note that the bind data should be considered as read-only. For tracking state, use the init data instead.
Syntax
void *duckdb_function_get_bind_data(
duckdb_function_info info
);
Parameters
info
The info object
returns
The bind data object
duckdb_function_get_init_data
Gets the init data set by duckdb_init_set_init_data
during the init.
Syntax
void *duckdb_function_get_init_data(
duckdb_function_info info
);
Parameters
info
The info object
returns
The init data object
duckdb_function_get_local_init_data
Gets the thread-local init data set by duckdb_init_set_init_data
during the local_init.
Syntax
void *duckdb_function_get_local_init_data(
duckdb_function_info info
);
Parameters
info
The info object
returns
The init data object
duckdb_function_set_error
Report that an error has occurred while executing the function.
Syntax
void duckdb_function_set_error(
duckdb_function_info info,
const char *error
);
Parameters
info
The info object
error
The error message
duckdb_add_replacement_scan
Add a replacement scan definition to the specified database.
Syntax
void duckdb_add_replacement_scan(
duckdb_database db,
duckdb_replacement_callback_t replacement,
void *extra_data,
duckdb_delete_callback_t delete_callback
);
Parameters
db
The database object to add the replacement scan to
replacement
The replacement scan callback
extra_data
Extra data that is passed back into the specified callback
delete_callback
The delete callback to call on the extra data, if any
duckdb_replacement_scan_set_function_name
Sets the replacement function name. If this function is called in the replacement callback, the replacement scan is performed. If it is not called, the replacement callback is not performed.
Syntax
void duckdb_replacement_scan_set_function_name(
duckdb_replacement_scan_info info,
const char *function_name
);
Parameters
info
The info object
function_name
The function name to substitute.
duckdb_replacement_scan_add_parameter
Adds a parameter to the replacement scan function.
Syntax
void duckdb_replacement_scan_add_parameter(
duckdb_replacement_scan_info info,
duckdb_value parameter
);
Parameters
info
The info object
parameter
The parameter to add.
duckdb_replacement_scan_set_error
Report that an error has occurred while executing the replacement scan.
Syntax
void duckdb_replacement_scan_set_error(
duckdb_replacement_scan_info info,
const char *error
);
Parameters
info
The info object
error
The error message
duckdb_appender_create
Creates an appender object.
Note that the object must be destroyed with duckdb_appender_destroy
.
Syntax
duckdb_state duckdb_appender_create(
duckdb_connection connection,
const char *schema,
const char *table,
duckdb_appender *out_appender
);
Parameters
connection
The connection context to create the appender in.
schema
The schema of the table to append to, or nullptr
for the default schema.
table
The table name to append to.
out_appender
The resulting appender object.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_appender_column_count
Returns the number of columns in the table that belongs to the appender.
- appender The appender to get the column count from.
Syntax
idx_t duckdb_appender_column_count(
duckdb_appender appender
);
Parameters
returns
The number of columns in the table.
duckdb_appender_column_type
Returns the type of the column at the specified index.
Note: The resulting type should be destroyed with duckdb_destroy_logical_type
.
- appender The appender to get the column type from.
- col_idx The index of the column to get the type of.
Syntax
duckdb_logical_type duckdb_appender_column_type(
duckdb_appender appender,
idx_t col_idx
);
Parameters
returns
The duckdb_logical_type of the column.
duckdb_appender_error
Returns the error message associated with the given appender.
If the appender has no error message, this returns nullptr
instead.
The error message should not be freed. It will be de-allocated when duckdb_appender_destroy
is called.
Syntax
const char *duckdb_appender_error(
duckdb_appender appender
);
Parameters
appender
The appender to get the error from.
returns
The error message, or nullptr
if there is none.
duckdb_appender_flush
Flush the appender to the table, forcing the cache of the appender to be cleared. If flushing the data triggers a constraint violation or any other error, then all data is invalidated, and this function returns DuckDBError. It is not possible to append more values. Call duckdb_appender_error to obtain the error message followed by duckdb_appender_destroy to destroy the invalidated appender.
Syntax
duckdb_state duckdb_appender_flush(
duckdb_appender appender
);
Parameters
appender
The appender to flush.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_appender_close
Closes the appender by flushing all intermediate states and closing it for further appends. If flushing the data triggers a constraint violation or any other error, then all data is invalidated, and this function returns DuckDBError. Call duckdb_appender_error to obtain the error message followed by duckdb_appender_destroy to destroy the invalidated appender.
Syntax
duckdb_state duckdb_appender_close(
duckdb_appender appender
);
Parameters
appender
The appender to flush and close.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_appender_destroy
Closes the appender by flushing all intermediate states to the table and destroying it. By destroying it, this function de-allocates all memory associated with the appender. If flushing the data triggers a constraint violation, then all data is invalidated, and this function returns DuckDBError. Due to the destruction of the appender, it is no longer possible to obtain the specific error message with duckdb_appender_error. Therefore, call duckdb_appender_close before destroying the appender, if you need insights into the specific error.
Syntax
duckdb_state duckdb_appender_destroy(
duckdb_appender *appender
);
Parameters
appender
The appender to flush, close and destroy.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_appender_begin_row
A nop function, provided for backwards compatibility reasons. Does nothing. Only duckdb_appender_end_row
is required.
Syntax
duckdb_state duckdb_appender_begin_row(
duckdb_appender appender
);
duckdb_appender_end_row
Finish the current row of appends. After end_row is called, the next row can be appended.
Syntax
duckdb_state duckdb_appender_end_row(
duckdb_appender appender
);
Parameters
appender
The appender.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_append_bool
Append a bool value to the appender.
Syntax
duckdb_state duckdb_append_bool(
duckdb_appender appender,
bool value
);
duckdb_append_int8
Append an int8_t value to the appender.
Syntax
duckdb_state duckdb_append_int8(
duckdb_appender appender,
int8_t value
);
duckdb_append_int16
Append an int16_t value to the appender.
Syntax
duckdb_state duckdb_append_int16(
duckdb_appender appender,
int16_t value
);
duckdb_append_int32
Append an int32_t value to the appender.
Syntax
duckdb_state duckdb_append_int32(
duckdb_appender appender,
int32_t value
);
duckdb_append_int64
Append an int64_t value to the appender.
Syntax
duckdb_state duckdb_append_int64(
duckdb_appender appender,
int64_t value
);
duckdb_append_hugeint
Append a duckdb_hugeint value to the appender.
Syntax
duckdb_state duckdb_append_hugeint(
duckdb_appender appender,
duckdb_hugeint value
);
duckdb_append_uint8
Append a uint8_t value to the appender.
Syntax
duckdb_state duckdb_append_uint8(
duckdb_appender appender,
uint8_t value
);
duckdb_append_uint16
Append a uint16_t value to the appender.
Syntax
duckdb_state duckdb_append_uint16(
duckdb_appender appender,
uint16_t value
);
duckdb_append_uint32
Append a uint32_t value to the appender.
Syntax
duckdb_state duckdb_append_uint32(
duckdb_appender appender,
uint32_t value
);
duckdb_append_uint64
Append a uint64_t value to the appender.
Syntax
duckdb_state duckdb_append_uint64(
duckdb_appender appender,
uint64_t value
);
duckdb_append_uhugeint
Append a duckdb_uhugeint value to the appender.
Syntax
duckdb_state duckdb_append_uhugeint(
duckdb_appender appender,
duckdb_uhugeint value
);
duckdb_append_float
Append a float value to the appender.
Syntax
duckdb_state duckdb_append_float(
duckdb_appender appender,
float value
);
duckdb_append_double
Append a double value to the appender.
Syntax
duckdb_state duckdb_append_double(
duckdb_appender appender,
double value
);
duckdb_append_date
Append a duckdb_date value to the appender.
Syntax
duckdb_state duckdb_append_date(
duckdb_appender appender,
duckdb_date value
);
duckdb_append_time
Append a duckdb_time value to the appender.
Syntax
duckdb_state duckdb_append_time(
duckdb_appender appender,
duckdb_time value
);
duckdb_append_timestamp
Append a duckdb_timestamp value to the appender.
Syntax
duckdb_state duckdb_append_timestamp(
duckdb_appender appender,
duckdb_timestamp value
);
duckdb_append_interval
Append a duckdb_interval value to the appender.
Syntax
duckdb_state duckdb_append_interval(
duckdb_appender appender,
duckdb_interval value
);
duckdb_append_varchar
Append a varchar value to the appender.
Syntax
duckdb_state duckdb_append_varchar(
duckdb_appender appender,
const char *val
);
duckdb_append_varchar_length
Append a varchar value to the appender.
Syntax
duckdb_state duckdb_append_varchar_length(
duckdb_appender appender,
const char *val,
idx_t length
);
duckdb_append_blob
Append a blob value to the appender.
Syntax
duckdb_state duckdb_append_blob(
duckdb_appender appender,
const void *data,
idx_t length
);
duckdb_append_null
Append a NULL value to the appender (of any type).
Syntax
duckdb_state duckdb_append_null(
duckdb_appender appender
);
duckdb_append_data_chunk
Appends a pre-filled data chunk to the specified appender.
The types of the data chunk must exactly match the types of the table, no casting is performed. If the types do not match or the appender is in an invalid state, DuckDBError is returned. If the append is successful, DuckDBSuccess is returned.
Syntax
duckdb_state duckdb_append_data_chunk(
duckdb_appender appender,
duckdb_data_chunk chunk
);
Parameters
appender
The appender to append to.
chunk
The data chunk to append.
returns
The return state.
duckdb_query_arrow
Deprecated This method is scheduled for removal in a future release.
Executes a SQL query within a connection and stores the full (materialized) result in an arrow structure.
If the query fails to execute, DuckDBError is returned and the error message can be retrieved by calling
duckdb_query_arrow_error
.
Note that after running duckdb_query_arrow
, duckdb_destroy_arrow
must be called on the result object even if the
query fails, otherwise the error stored within the result will not be freed correctly.
Syntax
duckdb_state duckdb_query_arrow(
duckdb_connection connection,
const char *query,
duckdb_arrow *out_result
);
Parameters
connection
The connection to perform the query in.
query
The SQL query to run.
out_result
The query result.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_query_arrow_schema
Deprecated This method is scheduled for removal in a future release.
Fetch the internal arrow schema from the arrow result. Remember to call release on the respective ArrowSchema object.
Syntax
duckdb_state duckdb_query_arrow_schema(
duckdb_arrow result,
duckdb_arrow_schema *out_schema
);
Parameters
result
The result to fetch the schema from.
out_schema
The output schema.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_prepared_arrow_schema
Deprecated This method is scheduled for removal in a future release.
Fetch the internal arrow schema from the prepared statement. Remember to call release on the respective ArrowSchema object.
Syntax
duckdb_state duckdb_prepared_arrow_schema(
duckdb_prepared_statement prepared,
duckdb_arrow_schema *out_schema
);
Parameters
result
The prepared statement to fetch the schema from.
out_schema
The output schema.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_result_arrow_array
Deprecated This method is scheduled for removal in a future release.
Convert a data chunk into an arrow struct array. Remember to call release on the respective ArrowArray object.
Syntax
void duckdb_result_arrow_array(
duckdb_result result,
duckdb_data_chunk chunk,
duckdb_arrow_array *out_array
);
Parameters
result
The result object the data chunk have been fetched from.
chunk
The data chunk to convert.
out_array
The output array.
duckdb_query_arrow_array
Deprecated This method is scheduled for removal in a future release.
Fetch an internal arrow struct array from the arrow result. Remember to call release on the respective ArrowArray object.
This function can be called multiple time to get next chunks, which will free the previous out_array. So consume the out_array before calling this function again.
Syntax
duckdb_state duckdb_query_arrow_array(
duckdb_arrow result,
duckdb_arrow_array *out_array
);
Parameters
result
The result to fetch the array from.
out_array
The output array.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_arrow_column_count
Deprecated This method is scheduled for removal in a future release.
Returns the number of columns present in the arrow result object.
Syntax
idx_t duckdb_arrow_column_count(
duckdb_arrow result
);
Parameters
result
The result object.
returns
The number of columns present in the result object.
duckdb_arrow_row_count
Deprecated This method is scheduled for removal in a future release.
Returns the number of rows present in the arrow result object.
Syntax
idx_t duckdb_arrow_row_count(
duckdb_arrow result
);
Parameters
result
The result object.
returns
The number of rows present in the result object.
duckdb_arrow_rows_changed
Deprecated This method is scheduled for removal in a future release.
Returns the number of rows changed by the query stored in the arrow result. This is relevant only for INSERT/UPDATE/DELETE queries. For other queries the rows_changed will be 0.
Syntax
idx_t duckdb_arrow_rows_changed(
duckdb_arrow result
);
Parameters
result
The result object.
returns
The number of rows changed.
duckdb_query_arrow_error
Deprecated This method is scheduled for removal in a future release.
Returns the error message contained within the result. The error is only set if duckdb_query_arrow
returns
DuckDBError
.
The error message should not be freed. It will be de-allocated when duckdb_destroy_arrow
is called.
Syntax
const char *duckdb_query_arrow_error(
duckdb_arrow result
);
Parameters
result
The result object to fetch the error from.
returns
The error of the result.
duckdb_destroy_arrow
Deprecated This method is scheduled for removal in a future release.
Closes the result and de-allocates all memory allocated for the arrow result.
Syntax
void duckdb_destroy_arrow(
duckdb_arrow *result
);
Parameters
result
The result to destroy.
duckdb_destroy_arrow_stream
Deprecated This method is scheduled for removal in a future release.
Releases the arrow array stream and de-allocates its memory.
Syntax
void duckdb_destroy_arrow_stream(
duckdb_arrow_stream *stream_p
);
Parameters
stream
The arrow array stream to destroy.
duckdb_execute_prepared_arrow
Deprecated This method is scheduled for removal in a future release.
Executes the prepared statement with the given bound parameters, and returns an arrow query result.
Note that after running duckdb_execute_prepared_arrow
, duckdb_destroy_arrow
must be called on the result object.
Syntax
duckdb_state duckdb_execute_prepared_arrow(
duckdb_prepared_statement prepared_statement,
duckdb_arrow *out_result
);
Parameters
prepared_statement
The prepared statement to execute.
out_result
The query result.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_arrow_scan
Deprecated This method is scheduled for removal in a future release.
Scans the Arrow stream and creates a view with the given name.
Syntax
duckdb_state duckdb_arrow_scan(
duckdb_connection connection,
const char *table_name,
duckdb_arrow_stream arrow
);
Parameters
connection
The connection on which to execute the scan.
table_name
Name of the temporary view to create.
arrow
Arrow stream wrapper.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_arrow_array_scan
Deprecated This method is scheduled for removal in a future release.
Scans the Arrow array and creates a view with the given name.
Note that after running duckdb_arrow_array_scan
, duckdb_destroy_arrow_stream
must be called on the out stream.
Syntax
duckdb_state duckdb_arrow_array_scan(
duckdb_connection connection,
const char *table_name,
duckdb_arrow_schema arrow_schema,
duckdb_arrow_array arrow_array,
duckdb_arrow_stream *out_stream
);
Parameters
connection
The connection on which to execute the scan.
table_name
Name of the temporary view to create.
arrow_schema
Arrow schema wrapper.
arrow_array
Arrow array wrapper.
out_stream
Output array stream that wraps around the passed schema, for releasing/deleting once done.
returns
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_execute_tasks
Execute DuckDB tasks on this thread.
Will return after max_tasks
have been executed, or if there are no more tasks present.
Syntax
void duckdb_execute_tasks(
duckdb_database database,
idx_t max_tasks
);
Parameters
database
The database object to execute tasks for
max_tasks
The maximum amount of tasks to execute
duckdb_create_task_state
Creates a task state that can be used with duckdb_execute_tasks_state to execute tasks until
duckdb_finish_execution
is called on the state.
duckdb_destroy_state
must be called on the result.
Syntax
duckdb_task_state duckdb_create_task_state(
duckdb_database database
);
Parameters
database
The database object to create the task state for
returns
The task state that can be used with duckdb_execute_tasks_state.
duckdb_execute_tasks_state
Execute DuckDB tasks on this thread.
The thread will keep on executing tasks forever, until duckdb_finish_execution is called on the state. Multiple threads can share the same duckdb_task_state.
Syntax
void duckdb_execute_tasks_state(
duckdb_task_state state
);
Parameters
state
The task state of the executor
duckdb_execute_n_tasks_state
Execute DuckDB tasks on this thread.
The thread will keep on executing tasks until either duckdb_finish_execution is called on the state, max_tasks tasks have been executed or there are no more tasks to be executed.
Multiple threads can share the same duckdb_task_state.
Syntax
idx_t duckdb_execute_n_tasks_state(
duckdb_task_state state,
idx_t max_tasks
);
Parameters
state
The task state of the executor
max_tasks
The maximum amount of tasks to execute
returns
The amount of tasks that have actually been executed
duckdb_finish_execution
Finish execution on a specific task.
Syntax
void duckdb_finish_execution(
duckdb_task_state state
);
Parameters
state
The task state to finish execution
duckdb_task_state_is_finished
Check if the provided duckdb_task_state has finished execution
Syntax
bool duckdb_task_state_is_finished(
duckdb_task_state state
);
Parameters
state
The task state to inspect
returns
Whether or not duckdb_finish_execution has been called on the task state
duckdb_destroy_task_state
Destroys the task state returned from duckdb_create_task_state.
Note that this should not be called while there is an active duckdb_execute_tasks_state running on the task state.
Syntax
void duckdb_destroy_task_state(
duckdb_task_state state
);
Parameters
state
The task state to clean up
duckdb_execution_is_finished
Returns true if the execution of the current query is finished.
Syntax
bool duckdb_execution_is_finished(
duckdb_connection con
);
Parameters
con
The connection on which to check
duckdb_stream_fetch_chunk
Deprecated This method is scheduled for removal in a future release.
Fetches a data chunk from the (streaming) duckdb_result. This function should be called repeatedly until the result is exhausted.
The result must be destroyed with duckdb_destroy_data_chunk
.
This function can only be used on duckdb_results created with 'duckdb_pending_prepared_streaming'
If this function is used, none of the other result functions can be used and vice versa (i.e., this function cannot be mixed with the legacy result functions or the materialized result functions).
It is not known beforehand how many chunks will be returned by this result.
Syntax
duckdb_data_chunk duckdb_stream_fetch_chunk(
duckdb_result result
);
Parameters
result
The result object to fetch the data chunk from.
returns
The resulting data chunk. Returns NULL
if the result has an error.
duckdb_fetch_chunk
Fetches a data chunk from a duckdb_result. This function should be called repeatedly until the result is exhausted.
The result must be destroyed with duckdb_destroy_data_chunk
.
It is not known beforehand how many chunks will be returned by this result.
Syntax
duckdb_data_chunk duckdb_fetch_chunk(
duckdb_result result
);
Parameters
result
The result object to fetch the data chunk from.
returns
The resulting data chunk. Returns NULL
if the result has an error.