duckdb

This module implements high-level API for DuckDB in Nim, providing convenient functions for opening databases, executing queries, and retrieving results.

Note: This is a work in progress and currently only supports some basic operations

Types

DuckDBConnection = duckdb_connection
Represents a connection to a DuckDB database.
DuckDBConnectionError = object of CatchableError
DuckDBInstance = duckdb_database
Represents a DuckDB database instance.
DuckDBQueryError = object of CatchableError
DuckDBResult = tuple[columns: seq[string], ## A sequence of column names in the result set.
                     rows: seq[Row]]
Represents the result of a DuckDB query.
DuckDBValue = object
  case kind*: DuckDBType
  of DUCKDB_TYPE_BOOLEAN:
    booleanValue*: bool
  of DUCKDB_TYPE_TINYINT:
    tinyIntValue*: int8
  of DUCKDB_TYPE_SMALLINT:
    smallIntValue*: int16
  of DUCKDB_TYPE_INTEGER:
    integerValue*: int32
  of DUCKDB_TYPE_BIGINT:
    bigIntValue*: int64
  of DUCKDB_TYPE_UTINYINT:
    uTinyIntValue*: uint8
  of DUCKDB_TYPE_USMALLINT:
    uSmallIntValue*: uint16
  of DUCKDB_TYPE_UINTEGER:
    uIntegerValue*: uint32
  of DUCKDB_TYPE_UBIGINT:
    uBigIntValue*: uint64
  of DUCKDB_TYPE_FLOAT:
    floatValue*: float32
  of DUCKDB_TYPE_DOUBLE:
    doubleValue*: float64
  of DUCKDB_TYPE_TIMESTAMP, DUCKDB_TYPE_DATE, DUCKDB_TYPE_TIME:
    dateValue*: string
  of DUCKDB_TYPE_INTERVAL:
    intervalValue*: string
  of DUCKDB_TYPE_HUGEINT:
    hugeIntValue*: BigInt
  of DUCKDB_TYPE_UHUGEINT:
    uHugeIntValue*: BigInt
  of DUCKDB_TYPE_VARCHAR, DUCKDB_TYPE_BLOB:
    stringValue*: string
  of DUCKDB_TYPE_DECIMAL:
    decimalValue*: string
  of DUCKDB_TYPE_ENUM:
    enumValue*: string
  of DUCKDB_TYPE_LIST, DUCKDB_TYPE_STRUCT, DUCKDB_TYPE_MAP:
    listValue*: seq[DuckDBValue]
  of DUCKDB_TYPE_ARRAY:
    arrayValue*: seq[DuckDBValue]
  of DUCKDB_TYPE_UUID:
    uuidValue*: string
  of DUCKDB_TYPE_UNION:
    unionValue*: seq[DuckDBValue]
  of DUCKDB_TYPE_BIT:
    bitValue*: seq[bool]
  of DUCKDB_TYPE_TIME_TZ, DUCKDB_TYPE_TIMESTAMP_TZ:
    timeValue*: string
  else:
    nil
Represents a value in a DuckDB row.
Row = seq[DuckDBValue]
Represents a single row of data returned from a query.

Consts

DuckDBError = -1
Indicates an error occurred during an operation.
DuckDBSuccess = 0
Indicates a successful operation.

Procs

proc `$`(value: DuckDBValue): string {....raises: [], tags: [], forbids: [].}
Convert a DuckDBValue to a string representation.
proc close(db: var DuckDBConnection) {....raises: [], tags: [], forbids: [].}
Close a database
proc connect(db: DuckDBInstance): DuckDBConnection {.
    ...raises: [DuckDBConnectionError], tags: [], forbids: [].}
Connect to the DuckDB database instance.
proc disconnect(conn: var DuckDBConnection) {....raises: [], tags: [], forbids: [].}
Disconnect from the DuckDB connection.
proc exec(conn: DuckDBConnection; sql: SqlQuery) {....raises: [DuckDBQueryError],
    tags: [], forbids: [].}
Execute a SQL query on the DuckDB connection.
proc getAllRows(conn: DuckDBConnection; sql: SqlQuery): DuckDBResult {.
    ...raises: [DuckDBQueryError], tags: [], forbids: [].}
Execute a SQL query and return all rows as a sequence of Row objects.
proc getDuckDBValue(res: ptr duckdb_result; j, i: idx_t): DuckDBValue {.
    ...raises: [DuckDBQueryError], tags: [], forbids: [].}
Get a DuckDBValue from the result set.
proc open(path: string): DuckDBInstance {....raises: [DuckDBConnectionError],
    tags: [], forbids: [].}
Open a database at the specified path.
proc toString(value: DuckDBValue): string {....raises: [], tags: [], forbids: [].}
Convert a DuckDBValue to a string representation.
proc tryExec(conn: DuckDBConnection; sql: SqlQuery): bool {....raises: [],
    tags: [], forbids: [].}
Try to execute a SQL query and return true if successful, false otherwise.

Exports

duckdb_get_date, duckdb_init_get_extra_info, duckdb_aggregate_function_set_extra_info, duckdb_state, duckdb_destroy_selection_vector, duckdb_bind_boolean, duckdb_bind_uint16, duckdb_query_progress_type, duckdb_scalar_function_set_function, duckdb_table_function, duckdb_profiling_info_get_child, duckdb_append_timestamp, duckdb_table_description_create_ext, duckdb_init_get_column_index, duckdb_profiling_info, duckdb_hugeint, duckdb_get_hugeint, duckdb_to_time, duckdb_bind_float, duckdb_append_int16, duckdb_cast_function_set_implicit_cast_cost, duckdb_cast_function_set_error, duckdb_disconnect, duckdb_replacement_callback_t, duckdb_create_timestamp_s, duckdb_init_set_error, duckdb_create_selection_vector, duckdb_scalar_function_set_error, duckdb_library_version, duckdb_create_uint64, duckdb_replacement_scan_add_parameter, duckdb_bind_time, duckdb_aggregate_function_set_destructor, duckdb_validity_set_row_invalid, duckdb_get_uint8, duckdb_register_aggregate_function_set, duckdb_get_uuid, duckdb_from_time_tz, duckdb_column_name, duckdb_value_uhugeint, duckdb_row_count, duckdb_open_ext, duckdb_create_uint16, duckdb_scalar_function_add_parameter, duckdb_scalar_function_set_bind_data, duckdb_destroy_value, duckdb_get_timestamp_s, duckdb_table_description_create, duckdb_column_type, duckdb_config, duckdb_decimal, duckdb_aggregate_combine_t, duckdb_value_time, duckdb_bind_uint8, duckdb_create_union_value, duckdb_destroy_table_function, duckdb_destroy_aggregate_function, duckdb_execution_is_finished, duckdb_aggregate_state_size, duckdb_init_set_init_data, duckdb_get_or_create_from_cache, duckdb_create_hugeint, duckdb_pending_error, duckdb_is_finite_timestamp_ns, duckdb_string_t_data, duckdb_uhugeint_to_double, duckdb_register_aggregate_function, duckdb_get_int16, duckdb_table_function_supports_projection_pushdown, duckdb_destroy_extracted, duckdb_logical_type, duckdb_bind_blob, duckdb_table_function_set_bind, duckdb_result_error, duckdb_scalar_function_set_extra_info, duckdb_value_varchar_internal, duckdb_create_instance_cache, duckdb_interrupt, duckdb_string_is_inlined, duckdb_to_timestamp, duckdb_value_to_string, duckdb_append_uhugeint, duckdb_register_scalar_function_set, duckdb_from_date, duckdb_arrow_stream, duckdb_bind_int8, duckdb_profiling_info_get_child_count, duckdb_appender_column_count, duckdb_value, duckdb_scalar_function_bind_t, duckdb_scalar_function_get_bind_data, duckdb_scalar_function_get_extra_info, duckdb_destroy_aggregate_function_set, duckdb_appender_create, duckdb_table_function_set_local_init, duckdb_pending_state, duckdb_append_interval, duckdb_bind_timestamp_tz, duckdb_value_uint16, duckdb_destroy_result, duckdb_append_default, duckdb_arrow_row_count, duckdb_extracted_statements, duckdb_double_to_hugeint, duckdb_param_logical_type, duckdb_query_arrow, duckdb_value_float, duckdb_append_varchar, duckdb_append_double, duckdb_add_scalar_function_to_set, duckdb_clear_bindings, duckdb_appender_end_row, duckdb_get_uint32, duckdb_create_varchar, duckdb_get_bool, duckdb_create_uint32, duckdb_bind_hugeint, duckdb_get_float, duckdb_string_t, duckdb_append_default_to_chunk, duckdb_validity_set_row_valid, duckdb_execute_tasks_state, duckdb_bind_varchar_length, duckdb_append_uint32, duckdb_bind_uhugeint, duckdb_table_function_set_init, duckdb_cast_function_set_row_error, duckdb_scalar_function_set_bind, duckdb_profiling_info_get_value, duckdb_prepare, duckdb_create_interval, duckdb_parameter_name, duckdb_function_info, duckdb_register_cast_function, duckdb_bind_timestamp, duckdb_get_time_tz, duckdb_table_function_set_function, duckdb_append_value, duckdb_value_int64, duckdb_create_timestamp, duckdb_value_date, duckdb_append_date, duckdb_create_decimal, duckdb_config_count, duckdb_add_aggregate_function_to_set, duckdb_string, duckdb_bind_null, duckdb_arrow_schema, duckdb_cast_mode, duckdb_validity_set_row_validity, duckdb_aggregate_function_set_functions, duckdb_append_uint16, duckdb_aggregate_update_t, duckdb_result_chunk_count, duckdb_aggregate_finalize_t, duckdb_create_uhugeint, duckdb_query_arrow_array, duckdb_function_get_init_data, duckdb_error_type, duckdb_create_aggregate_function_set, duckdb_aggregate_function_add_parameter, duckdb_query_arrow_error, duckdb_append_uint64, duckdb_from_timestamp, duckdb_value_int32, duckdb_bind_decimal, duckdb_create_table_function, duckdb_time_tz, duckdb_get_varint, duckdb_replacement_scan_info, duckdb_create_scalar_function, duckdb_create_varchar_length, duckdb_get_int32, duckdb_destroy_cast_function, duckdb_appender_begin_row, duckdb_bind_get_parameter, duckdb_pending_execute_check_state, duckdb_interval, duckdb_create_cast_function, duckdb_create_timestamp_tz, duckdb_prepare_error, duckdb_scalar_function_set_special_handling, duckdb_data_chunk, duckdb_destroy_scalar_function_set, duckdb_init_info, duckdb_appender_column_type, duckdb_bind_info, duckdb_cast_function_t, duckdb_value_interval, duckdb_connection, duckdb_append_null, duckdb_is_finite_timestamp_ms, duckdb_bind_value, duckdb_malloc, duckdb_appender_flush, duckdb_arrow_array, duckdb_appender_destroy, duckdb_get_table_names, duckdb_arrow, duckdb_create_enum_value, duckdb_hugeint_to_double, duckdb_table_description, duckdb_bind_interval, duckdb_function_get_extra_info, duckdb_table_description_error, duckdb_appender, duckdb_query_arrow_schema, duckdb_bind_int32, duckdb_column_logical_type, duckdb_varint, duckdb_double_to_uhugeint, duckdb_init_set_max_threads, duckdb_date_struct, duckdb_aggregate_function_set, duckdb_append_float, duckdb_prepared_statement, duckdb_destroy_task_state, duckdb_is_finite_timestamp_s, duckdb_get_int8, duckdb_append_hugeint, duckdb_value_decimal, duckdb_get_uhugeint, duckdb_pending_execution_is_finished, duckdb_is_finite_date, duckdb_cast_function_set_target_type, duckdb_finish_execution, duckdb_value_string, duckdb_bind_set_bind_data, duckdb_timestamp_ns, duckdb_vector, duckdb_create_task_state, duckdb_connection_get_client_context, duckdb_append_blob, duckdb_stream_fetch_chunk, duckdb_create_bool, duckdb_bind_double, duckdb_value_uint64, duckdb_create_null_value, duckdb_bind_varchar, duckdb_arrow_scan, duckdb_get_enum_value, duckdb_create_map_value, duckdb_timestamp_ms, duckdb_to_date, duckdb_result, duckdb_result_error_type, duckdb_uhugeint, duckdb_arrow_array_scan, duckdb_vector_size, DuckDBType, duckdb_cast_function_get_cast_mode, duckdb_extract_statements_error, duckdb_get_map_value, duckdb_value_double, duckdb_value_hugeint, duckdb_replacement_scan_set_function_name, duckdb_delete_callback_t, duckdb_register_table_function, duckdb_create_timestamp_ms, duckdb_result_arrow_array, duckdb_create_int8, duckdb_timestamp, duckdb_create_time, duckdb_free, duckdb_destroy_scalar_function, duckdb_scalar_function_set_name, duckdb_arrow_rows_changed, duckdb_date, duckdb_cast_function, duckdb_prepared_statement_type, duckdb_create_int32, duckdb_value_int16, duckdb_task_state_is_finished, duckdb_prepared_arrow_schema, duckdb_destroy_arrow, duckdb_execute_prepared_arrow, duckdb_scalar_function_bind_set_error, duckdb_open, duckdb_bind_get_extra_info, duckdb_aggregate_function_set_return_type, duckdb_get_varchar, duckdb_bit, duckdb_bind_set_error, duckdb_create_array_value, duckdb_get_map_key, duckdb_cast_function_set_function, duckdb_get_time, duckdb_statement_type, duckdb_string_t_length, duckdb_init_get_bind_data, duckdb_create_int16, duckdb_aggregate_init_t, duckdb_value_blob, duckdb_scalar_function_set_varargs, duckdb_get_int64, duckdb_append_int32, duckdb_column_count, duckdb_get_profiling_info, duckdb_scalar_function_get_client_context, duckdb_extract_statements, duckdb_get_decimal, duckdb_function_get_bind_data, duckdb_appender_clear_columns, duckdb_result_get_chunk, duckdb_create_struct_value, duckdb_appender_close, duckdb_aggregate_function_get_extra_info, duckdb_from_time, duckdb_pending_result, duckdb_is_finite_timestamp, duckdb_create_scalar_function_set, duckdb_validity_row_is_valid, duckdb_append_data_chunk, duckdb_bind_int16, duckdb_destroy_client_context, duckdb_result_return_type, duckdb_column_has_default, duckdb_pending_prepared, sel_t, duckdb_appender_create_ext, duckdb_execute_n_tasks_state, duckdb_value_uint32, duckdb_aggregate_function_set_name, duckdb_table_description_get_column_name, duckdb_pending_execute_task, duckdb_replacement_scan_set_error, duckdb_destroy_instance_cache, duckdb_nullmask_data, duckdb_database, duckdb_function_set_error, duckdb_create_varint, duckdb_destroy_arrow_stream, duckdb_create_aggregate_function, duckdb_value_is_null, duckdb_value_varchar, duckdb_create_time_tz, duckdb_append_bool, duckdb_get_bit, duckdb_destroy_config, duckdb_selection_vector_get_data_ptr, duckdb_get_config_flag, duckdb_result_is_streaming, duckdb_instance_cache, duckdb_bind_parameter_index, duckdb_query_progress, duckdb_cast_function_set_extra_info, duckdb_get_timestamp, duckdb_close, duckdb_create_double, duckdb_query, duckdb_create_date, duckdb_get_list_size, duckdb_selection_vector, duckdb_register_scalar_function, duckdb_double_to_decimal, duckdb_create_blob, duckdb_appender_add_column, duckdb_destroy_pending, duckdb_aggregate_function, duckdb_execute_prepared_streaming, duckdb_create_timestamp_ns, duckdb_scalar_function_set_return_type, duckdb_column_data, duckdb_time_tz_struct, duckdb_get_map_size, duckdb_rows_changed, duckdb_param_type, duckdb_result_statement_type, duckdb_arrow_column_count, duckdb_type, duckdb_client_context_get_connection_id, duckdb_scalar_function, duckdb_client_context, duckdb_scalar_function_t, duckdb_get_interval, duckdb_set_config, duckdb_aggregate_destroy_t, duckdb_get_timestamp_ms, duckdb_timestamp_struct, duckdb_get_timestamp_ns, duckdb_append_int8, duckdb_bind_date, duckdb_create_int64, duckdb_get_list_child, duckdb_nparams, duckdb_value_string_internal, duckdb_time_struct, duckdb_get_uint16, duckdb_prepare_extracted_statement, duckdb_aggregate_function_set_special_handling, duckdb_append_int64, duckdb_fetch_chunk, duckdb_bind_get_named_parameter, duckdb_execute_tasks, duckdb_value_boolean, duckdb_timestamp_s, duckdb_create_list_value, duckdb_get_value_type, duckdb_create_uint8, duckdb_get_uint64, duckdb_init_get_column_count, duckdb_blob, duckdb_add_replacement_scan, duckdb_bind_int64, duckdb_append_varchar_length, duckdb_function_get_local_init_data, duckdb_bind_uint64, duckdb_append_uint8, duckdb_bind_add_result_column, duckdb_value_timestamp, duckdb_get_blob, duckdb_cast_function_set_source_type, duckdb_value_uint8, duckdb_get_struct_child, duckdb_table_function_add_named_parameter, duckdb_create_time_tz_value, duckdb_create_bit, duckdb_value_int8, duckdb_table_function_set_extra_info, duckdb_aggregate_function_set_error, duckdb_bind_set_cardinality, duckdb_table_function_set_name, duckdb_is_null_value, duckdb_appender_error, duckdb_get_timestamp_tz, duckdb_table_description_destroy, duckdb_task_state, duckdb_append_time, duckdb_bind_get_parameter_count, duckdb_profiling_info_get_metrics, duckdb_get_double, duckdb_bind_uint32, duckdb_execute_pending, duckdb_scalar_function_set, duckdb_execute_prepared, duckdb_pending_prepared_streaming, duckdb_create_float, duckdb_scalar_function_set_volatile, duckdb_cast_function_get_extra_info, duckdb_decimal_to_double, duckdb_create_config, duckdb_connect, idx_t, duckdb_table_function_add_parameter, duckdb_result_type, duckdb_destroy_prepare, duckdb_create_uuid, duckdb_time