duckdb-ffi 1.5.3.0 → 1.5.6.0
raw patch · 7 files changed
+10461/−6264 lines, 7 filessetup-changedPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Database.DuckDB.FFI: c_duckdb_geometry_type_get_crs :: DuckDBLogicalType -> IO CString
+ Database.DuckDB.FFI: pattern DuckDBStatementTypeCopyDatabase :: DuckDBStatementType
+ Database.DuckDB.FFI: pattern DuckDBStatementTypeMergeInto :: DuckDBStatementType
+ Database.DuckDB.FFI: pattern DuckDBStatementTypeUpdateExtensions :: DuckDBStatementType
+ Database.DuckDB.FFI: pattern DuckDBTypeGeometry :: DuckDBType
+ Database.DuckDB.FFI: pattern DuckDBTypeVariant :: DuckDBType
Files
- CHANGELOG.md +13/−0
- Setup.hs +4/−4
- cbits/duckdb.h +10334/−6253
- duckdb-ffi.cabal +2/−2
- src/Database/DuckDB/FFI/LogicalTypes.hs +25/−3
- src/Database/DuckDB/FFI/Types.hs +20/−2
- test/LogicalTypesTest.hs +63/−0
CHANGELOG.md view
@@ -1,5 +1,18 @@ # Changelog +## 1.5.6.0++- Use the official DuckDB 1.5.6 header and native download. Keep native support+ for DuckDB >= 1.5.3 and < 1.6.+- Add the COPY_DATABASE, UPDATE_EXTENSIONS, and MERGE_INTO statement tags.+- Document that invalid DECIMAL metadata can terminate native DuckDB 1.5.3.+ Test the nonfatal constructor behavior only on native 1.5.4 and later.+- Add the GEOMETRY and VARIANT type tags and the geometry CRS accessor. The+ returned CRS string is owned by the caller and must be freed with `duckdb_free`.+- Document that `duckdb_create_logical_type` returns an incomplete VARIANT+ descriptor. Obtain a complete descriptor from a query result before inspecting+ its children.+ ## 1.5.3.0 - Export invokers for Arrow schema/array release and all four stream callbacks.
Setup.hs view
@@ -72,18 +72,18 @@ The Haskell package version can differ from the native library version. -} nativeVersion :: String-nativeVersion = "1.5.3"+nativeVersion = "1.5.6" -- | Select an official archive and its release checksum. nativeArchive :: IO (String, String, FilePath) nativeArchive = case (os, arch) of- ("linux", "x86_64") -> pure ("linux-amd64", "0a926eba5bce0abc0010f4b9109133e4440cb74e97bd10fd2d0fc2a721621b05", "libduckdb.so")- ("linux", "aarch64") -> pure ("linux-arm64", "162806d591c0431d031d9bdf43dbecc5f00755da01a2064df68f9a69a6f50a10", "libduckdb.so")+ ("linux", "x86_64") -> pure ("linux-amd64", "b845005f5132a7d8180057c35e14a7626632258782f871a90861b19c1c03841b", "libduckdb.so")+ ("linux", "aarch64") -> pure ("linux-arm64", "b72ed9f05003f5e9d2015f7ceada6416b377d9dd33169cdde3c9e33897856eee", "libduckdb.so") ("darwin", "x86_64") -> mac ("darwin", "aarch64") -> mac _ -> fail "Automatic DuckDB installation supports glibc Linux and macOS. Supply DuckDB >= 1.5.3 and < 1.6 with -fsystemlib and --extra-lib-dirs." where- mac = pure ("osx-universal", "386f8e8b3b4bc8d128762327121e22065ce45f2ee55ef1b1f412ce11e0e6c51f", "libduckdb.dylib")+ mac = pure ("osx-universal", "e0bc007d9b0094c0970ac1847a8601d10aad07cbd2910ce586ec810f77b638d6", "libduckdb.dylib") -- | Download into a temporary directory. Publish the verified library atomically. installNativeLibrary :: ConfigFlags -> IO FilePath
cbits/duckdb.h view
@@ -2,6259 +2,10340 @@ // // DuckDB //-// duckdb.h-//-//-//===----------------------------------------------------------------------===//-//-// !!!!!!!-// WARNING: this file is autogenerated by scripts/generate_c_api.py, manual changes will be overwritten-// !!!!!!!--#pragma once--#ifndef DUCKDB_C_API-#ifdef _WIN32-#ifdef DUCKDB_STATIC_BUILD-#define DUCKDB_C_API-#else-#if defined(DUCKDB_BUILD_LIBRARY) && !defined(DUCKDB_BUILD_LOADABLE_EXTENSION)-#define DUCKDB_C_API __declspec(dllexport)-#else-#define DUCKDB_C_API __declspec(dllimport)-#endif-#endif-#else-#define DUCKDB_C_API-#endif-#endif--//! duplicate of duckdb/main/winapi.hpp-#ifndef DUCKDB_EXTENSION_API-#ifdef _WIN32-#ifdef DUCKDB_STATIC_BUILD-#define DUCKDB_EXTENSION_API-#else-#define DUCKDB_EXTENSION_API __declspec(dllexport)-#endif-#else-#define DUCKDB_EXTENSION_API __attribute__((visibility("default")))-#endif-#endif--#include <stdbool.h>-#include <stdint.h>-#include <stddef.h>--#ifdef __cplusplus-extern "C" {-#endif--//===--------------------------------------------------------------------===//-// Enums-//===--------------------------------------------------------------------===//--//! WARNING: The numbers of these enums should not be changed, as changing the numbers breaks ABI compatibility.-//! Always add enums at the END of the enum--//! An enum over DuckDB's internal types.-typedef enum DUCKDB_TYPE {- DUCKDB_TYPE_INVALID = 0,- // bool- DUCKDB_TYPE_BOOLEAN = 1,- // int8_t- DUCKDB_TYPE_TINYINT = 2,- // int16_t- DUCKDB_TYPE_SMALLINT = 3,- // int32_t- DUCKDB_TYPE_INTEGER = 4,- // int64_t- DUCKDB_TYPE_BIGINT = 5,- // uint8_t- DUCKDB_TYPE_UTINYINT = 6,- // uint16_t- DUCKDB_TYPE_USMALLINT = 7,- // uint32_t- DUCKDB_TYPE_UINTEGER = 8,- // uint64_t- DUCKDB_TYPE_UBIGINT = 9,- // float- DUCKDB_TYPE_FLOAT = 10,- // double- DUCKDB_TYPE_DOUBLE = 11,- // duckdb_timestamp (microseconds)- DUCKDB_TYPE_TIMESTAMP = 12,- // duckdb_date- DUCKDB_TYPE_DATE = 13,- // duckdb_time- DUCKDB_TYPE_TIME = 14,- // duckdb_interval- DUCKDB_TYPE_INTERVAL = 15,- // duckdb_hugeint- DUCKDB_TYPE_HUGEINT = 16,- // duckdb_uhugeint- DUCKDB_TYPE_UHUGEINT = 32,- // const char*- DUCKDB_TYPE_VARCHAR = 17,- // duckdb_blob- DUCKDB_TYPE_BLOB = 18,- // duckdb_decimal- DUCKDB_TYPE_DECIMAL = 19,- // duckdb_timestamp_s (seconds)- DUCKDB_TYPE_TIMESTAMP_S = 20,- // duckdb_timestamp_ms (milliseconds)- DUCKDB_TYPE_TIMESTAMP_MS = 21,- // duckdb_timestamp_ns (nanoseconds)- DUCKDB_TYPE_TIMESTAMP_NS = 22,- // enum type, only useful as logical type- DUCKDB_TYPE_ENUM = 23,- // list type, only useful as logical type- DUCKDB_TYPE_LIST = 24,- // struct type, only useful as logical type- DUCKDB_TYPE_STRUCT = 25,- // map type, only useful as logical type- DUCKDB_TYPE_MAP = 26,- // duckdb_array, only useful as logical type- DUCKDB_TYPE_ARRAY = 33,- // duckdb_hugeint- DUCKDB_TYPE_UUID = 27,- // union type, only useful as logical type- DUCKDB_TYPE_UNION = 28,- // duckdb_bit- DUCKDB_TYPE_BIT = 29,- // duckdb_time_tz- DUCKDB_TYPE_TIME_TZ = 30,- // duckdb_timestamp (microseconds)- DUCKDB_TYPE_TIMESTAMP_TZ = 31,- // enum type, only useful as logical type- DUCKDB_TYPE_ANY = 34,- // duckdb_bignum- DUCKDB_TYPE_BIGNUM = 35,- // enum type, only useful as logical type- DUCKDB_TYPE_SQLNULL = 36,- // enum type, only useful as logical type- DUCKDB_TYPE_STRING_LITERAL = 37,- // enum type, only useful as logical type- DUCKDB_TYPE_INTEGER_LITERAL = 38,- // duckdb_time_ns (nanoseconds)- DUCKDB_TYPE_TIME_NS = 39,-} duckdb_type;--//! An enum over the returned state of different functions.-typedef enum duckdb_state { DuckDBSuccess = 0, DuckDBError = 1 } duckdb_state;--//! An enum over the pending state of a pending query result.-typedef enum duckdb_pending_state {- DUCKDB_PENDING_RESULT_READY = 0,- DUCKDB_PENDING_RESULT_NOT_READY = 1,- DUCKDB_PENDING_ERROR = 2,- DUCKDB_PENDING_NO_TASKS_AVAILABLE = 3-} duckdb_pending_state;--//! An enum over DuckDB's different result types.-typedef enum duckdb_result_type {- DUCKDB_RESULT_TYPE_INVALID = 0,- DUCKDB_RESULT_TYPE_CHANGED_ROWS = 1,- DUCKDB_RESULT_TYPE_NOTHING = 2,- DUCKDB_RESULT_TYPE_QUERY_RESULT = 3,-} duckdb_result_type;--//! An enum over DuckDB's different statement types.-typedef enum duckdb_statement_type {- DUCKDB_STATEMENT_TYPE_INVALID = 0,- DUCKDB_STATEMENT_TYPE_SELECT = 1,- DUCKDB_STATEMENT_TYPE_INSERT = 2,- DUCKDB_STATEMENT_TYPE_UPDATE = 3,- DUCKDB_STATEMENT_TYPE_EXPLAIN = 4,- DUCKDB_STATEMENT_TYPE_DELETE = 5,- DUCKDB_STATEMENT_TYPE_PREPARE = 6,- DUCKDB_STATEMENT_TYPE_CREATE = 7,- DUCKDB_STATEMENT_TYPE_EXECUTE = 8,- DUCKDB_STATEMENT_TYPE_ALTER = 9,- DUCKDB_STATEMENT_TYPE_TRANSACTION = 10,- DUCKDB_STATEMENT_TYPE_COPY = 11,- DUCKDB_STATEMENT_TYPE_ANALYZE = 12,- DUCKDB_STATEMENT_TYPE_VARIABLE_SET = 13,- DUCKDB_STATEMENT_TYPE_CREATE_FUNC = 14,- DUCKDB_STATEMENT_TYPE_DROP = 15,- DUCKDB_STATEMENT_TYPE_EXPORT = 16,- DUCKDB_STATEMENT_TYPE_PRAGMA = 17,- DUCKDB_STATEMENT_TYPE_VACUUM = 18,- DUCKDB_STATEMENT_TYPE_CALL = 19,- DUCKDB_STATEMENT_TYPE_SET = 20,- DUCKDB_STATEMENT_TYPE_LOAD = 21,- DUCKDB_STATEMENT_TYPE_RELATION = 22,- DUCKDB_STATEMENT_TYPE_EXTENSION = 23,- DUCKDB_STATEMENT_TYPE_LOGICAL_PLAN = 24,- DUCKDB_STATEMENT_TYPE_ATTACH = 25,- DUCKDB_STATEMENT_TYPE_DETACH = 26,- DUCKDB_STATEMENT_TYPE_MULTI = 27,-} duckdb_statement_type;--//! An enum over DuckDB's different error types.-typedef enum duckdb_error_type {- DUCKDB_ERROR_INVALID = 0,- DUCKDB_ERROR_OUT_OF_RANGE = 1,- DUCKDB_ERROR_CONVERSION = 2,- DUCKDB_ERROR_UNKNOWN_TYPE = 3,- DUCKDB_ERROR_DECIMAL = 4,- DUCKDB_ERROR_MISMATCH_TYPE = 5,- DUCKDB_ERROR_DIVIDE_BY_ZERO = 6,- DUCKDB_ERROR_OBJECT_SIZE = 7,- DUCKDB_ERROR_INVALID_TYPE = 8,- DUCKDB_ERROR_SERIALIZATION = 9,- DUCKDB_ERROR_TRANSACTION = 10,- DUCKDB_ERROR_NOT_IMPLEMENTED = 11,- DUCKDB_ERROR_EXPRESSION = 12,- DUCKDB_ERROR_CATALOG = 13,- DUCKDB_ERROR_PARSER = 14,- DUCKDB_ERROR_PLANNER = 15,- DUCKDB_ERROR_SCHEDULER = 16,- DUCKDB_ERROR_EXECUTOR = 17,- DUCKDB_ERROR_CONSTRAINT = 18,- DUCKDB_ERROR_INDEX = 19,- DUCKDB_ERROR_STAT = 20,- DUCKDB_ERROR_CONNECTION = 21,- DUCKDB_ERROR_SYNTAX = 22,- DUCKDB_ERROR_SETTINGS = 23,- DUCKDB_ERROR_BINDER = 24,- DUCKDB_ERROR_NETWORK = 25,- DUCKDB_ERROR_OPTIMIZER = 26,- DUCKDB_ERROR_NULL_POINTER = 27,- DUCKDB_ERROR_IO = 28,- DUCKDB_ERROR_INTERRUPT = 29,- DUCKDB_ERROR_FATAL = 30,- DUCKDB_ERROR_INTERNAL = 31,- DUCKDB_ERROR_INVALID_INPUT = 32,- DUCKDB_ERROR_OUT_OF_MEMORY = 33,- DUCKDB_ERROR_PERMISSION = 34,- DUCKDB_ERROR_PARAMETER_NOT_RESOLVED = 35,- DUCKDB_ERROR_PARAMETER_NOT_ALLOWED = 36,- DUCKDB_ERROR_DEPENDENCY = 37,- DUCKDB_ERROR_HTTP = 38,- DUCKDB_ERROR_MISSING_EXTENSION = 39,- DUCKDB_ERROR_AUTOLOAD = 40,- DUCKDB_ERROR_SEQUENCE = 41,- DUCKDB_INVALID_CONFIGURATION = 42-} duckdb_error_type;--//! An enum over DuckDB's different cast modes.-typedef enum duckdb_cast_mode { DUCKDB_CAST_NORMAL = 0, DUCKDB_CAST_TRY = 1 } duckdb_cast_mode;--typedef enum duckdb_file_flag {- DUCKDB_FILE_FLAG_INVALID = 0,- // Open the file with "read" capabilities.- DUCKDB_FILE_FLAG_READ = 1,- // Open the file with "write" capabilities.- DUCKDB_FILE_FLAG_WRITE = 2,- // Create a new file, or open if it already exists.- DUCKDB_FILE_FLAG_CREATE = 3,- // Create a new file, or fail if it already exists.- DUCKDB_FILE_FLAG_CREATE_NEW = 4,- // Open the file in "append" mode.- DUCKDB_FILE_FLAG_APPEND = 5,-} duckdb_file_flag;--//! An enum over DuckDB's configuration option scopes.-//! This enum can be used to specify the default scope when creating a custom configuration option,-//! but it is also be used to determine the scope in which a configuration option is set when it is-//! changed or retrieved.-typedef enum duckdb_config_option_scope {- DUCKDB_CONFIG_OPTION_SCOPE_INVALID = 0,- // The option is set for the duration of the current transaction only.- // !! CURRENTLY NOT IMPLEMENTED !!- DUCKDB_CONFIG_OPTION_SCOPE_LOCAL = 1,- // The option is set for the current session/connection only.- DUCKDB_CONFIG_OPTION_SCOPE_SESSION = 2,- // Set the option globally for all sessions/connections.- DUCKDB_CONFIG_OPTION_SCOPE_GLOBAL = 3,-} duckdb_config_option_scope;--//! An enum over DuckDB's catalog entry types.-typedef enum duckdb_catalog_entry_type {- DUCKDB_CATALOG_ENTRY_TYPE_INVALID = 0,- DUCKDB_CATALOG_ENTRY_TYPE_TABLE = 1,- DUCKDB_CATALOG_ENTRY_TYPE_SCHEMA = 2,- DUCKDB_CATALOG_ENTRY_TYPE_VIEW = 3,- DUCKDB_CATALOG_ENTRY_TYPE_INDEX = 4,- DUCKDB_CATALOG_ENTRY_TYPE_PREPARED_STATEMENT = 5,- DUCKDB_CATALOG_ENTRY_TYPE_SEQUENCE = 6,- DUCKDB_CATALOG_ENTRY_TYPE_COLLATION = 7,- DUCKDB_CATALOG_ENTRY_TYPE_TYPE = 8,- DUCKDB_CATALOG_ENTRY_TYPE_DATABASE = 9,-} duckdb_catalog_entry_type;--//===--------------------------------------------------------------------===//-// General type definitions-//===--------------------------------------------------------------------===//--//! DuckDB's index type.-typedef uint64_t idx_t;--//! Type definition for the data pointers of selection vectors.-typedef uint32_t sel_t;--//! The callback to destroy data, e.g.,-//! bind data (if any), init data (if any), extra data for replacement scans (if any), etc.-typedef void (*duckdb_delete_callback_t)(void *data);--//! The callback to copy data, e.g., bind data (if any).-typedef void *(*duckdb_copy_callback_t)(void *data);--//! Used for threading, contains a task state.-//! Must be destroyed with `duckdb_destroy_task_state`.-typedef void *duckdb_task_state;--//===--------------------------------------------------------------------===//-// Types (no explicit freeing)-//===--------------------------------------------------------------------===//--//! DATE is stored as days since 1970-01-01.-//! Use the `duckdb_from_date` and `duckdb_to_date` functions to extract individual information.-typedef struct {- int32_t days;-} duckdb_date;--typedef struct {- int32_t year;- int8_t month;- int8_t day;-} duckdb_date_struct;--//! TIME is stored as microseconds since 00:00:00.-//! Use the `duckdb_from_time` and `duckdb_to_time` functions to extract individual information.-typedef struct {- int64_t micros;-} duckdb_time;--typedef struct {- int8_t hour;- int8_t min;- int8_t sec;- int32_t micros;-} duckdb_time_struct;--//! TIME_NS is stored as nanoseconds since 00:00:00.-typedef struct {- int64_t nanos;-} duckdb_time_ns;--//! TIME_TZ is stored as 40 bits for the int64_t microseconds, and 24 bits for the int32_t offset.-//! Use the `duckdb_from_time_tz` function to extract individual information.-typedef struct {- uint64_t bits;-} duckdb_time_tz;--typedef struct {- duckdb_time_struct time;- int32_t offset;-} duckdb_time_tz_struct;--//! TIMESTAMP is stored as microseconds since 1970-01-01.-//! Use the `duckdb_from_timestamp` and `duckdb_to_timestamp` functions to extract individual information.-typedef struct {- int64_t micros;-} duckdb_timestamp;--typedef struct {- duckdb_date_struct date;- duckdb_time_struct time;-} duckdb_timestamp_struct;--//! TIMESTAMP_S is stored as seconds since 1970-01-01.-typedef struct {- int64_t seconds;-} duckdb_timestamp_s;--//! TIMESTAMP_MS is stored as milliseconds since 1970-01-01.-typedef struct {- int64_t millis;-} duckdb_timestamp_ms;--//! TIMESTAMP_NS is stored as nanoseconds since 1970-01-01.-typedef struct {- int64_t nanos;-} duckdb_timestamp_ns;--//! INTERVAL is stored in months, days, and micros.-typedef struct {- int32_t months;- int32_t days;- int64_t micros;-} duckdb_interval;--//! HUGEINT is composed of a lower and upper component.-//! Its value is upper * 2^64 + lower.-//! For simplified usage, use `duckdb_hugeint_to_double` and `duckdb_double_to_hugeint`.-typedef struct {- uint64_t lower;- int64_t upper;-} duckdb_hugeint;--//! UHUGEINT is composed of a lower and upper component.-//! Its value is upper * 2^64 + lower.-//! For simplified usage, use `duckdb_uhugeint_to_double` and `duckdb_double_to_uhugeint`.-typedef struct {- uint64_t lower;- uint64_t upper;-} duckdb_uhugeint;--//! DECIMAL is composed of a width and a scale.-//! Their value is stored in a HUGEINT.-typedef struct {- uint8_t width;- uint8_t scale;- duckdb_hugeint value;-} duckdb_decimal;--//! A type holding information about the query execution progress.-typedef struct {- double percentage;- uint64_t rows_processed;- uint64_t total_rows_to_process;-} duckdb_query_progress_type;--//! The internal representation of a VARCHAR (string_t). If the VARCHAR does not-//! exceed 12 characters, then we inline it. Otherwise, we inline a four-byte prefix for faster-//! string comparisons and store a pointer to the remaining characters. This is a non--//! owning structure, i.e., it does not have to be freed.-typedef struct {- union {- struct {- uint32_t length;- char prefix[4];- char *ptr;- } pointer;- struct {- uint32_t length;- char inlined[12];- } inlined;- } value;-} duckdb_string_t;--//! DuckDB's LISTs are composed of a 'parent' vector holding metadata of each list,-//! and a child vector holding the entries of the lists.-//! The `duckdb_list_entry` struct contains the internal representation of a LIST metadata entry.-//! A metadata entry contains the length of the list, and its offset in the child vector.-typedef struct {- uint64_t offset;- uint64_t length;-} duckdb_list_entry;--//! A column consists of a pointer to its internal data. Don't operate on this type directly.-//! Instead, use functions such as `duckdb_column_data`, `duckdb_nullmask_data`,-//! `duckdb_column_type`, and `duckdb_column_name`.-typedef struct {- // Deprecated, use `duckdb_column_data`.- void *deprecated_data;- // Deprecated, use `duckdb_nullmask_data`.- bool *deprecated_nullmask;- // Deprecated, use `duckdb_column_type`.- duckdb_type deprecated_type;- // Deprecated, use `duckdb_column_name`.- char *deprecated_name;- void *internal_data;-} duckdb_column;--//! 1. A standalone vector that must be destroyed, or-//! 2. A vector to a column in a data chunk that lives as long as the data chunk lives.-typedef struct _duckdb_vector {- void *internal_ptr;-} * duckdb_vector;--//! A selection vector is a vector of indices, which usually refer to values in a vector.-//! Can be used to slice vectors, changing their length and the order of their entries.-//! Standalone selection vectors must be destroyed.-typedef struct _duckdb_selection_vector {- void *internal_ptr;-} * duckdb_selection_vector;--//===--------------------------------------------------------------------===//-// Types (explicit freeing/destroying)-//===--------------------------------------------------------------------===//--//! Strings are composed of a `char` pointer and a size.-//! You must free `string.data` with `duckdb_free`.-typedef struct {- char *data;- idx_t size;-} duckdb_string;--//! BLOBs are composed of a byte pointer and a size.-//! You must free `blob.data` with `duckdb_free`.-typedef struct {- void *data;- idx_t size;-} duckdb_blob;--//! BITs are composed of a byte pointer and a size.-//! BIT byte data has 0 to 7 bits of padding.-//! The first byte contains the number of padding bits.-//! The padding bits of the second byte are set to 1, starting from the MSB.-//! You must free `data` with `duckdb_free`.-typedef struct {- uint8_t *data;- idx_t size;-} duckdb_bit;--//! BIGNUMs are composed of a byte pointer, a size, and an `is_negative` bool.-//! The absolute value of the number is stored in `data` in little endian format.-//! You must free `data` with `duckdb_free`.-typedef struct {- uint8_t *data;- idx_t size;- bool is_negative;-} duckdb_bignum;--//! A query result consists of a pointer to its internal data.-//! Must be freed with 'duckdb_destroy_result'.-typedef struct {- // Deprecated, use `duckdb_column_count`.- idx_t deprecated_column_count;- // Deprecated, use `duckdb_row_count`.- idx_t deprecated_row_count;- // Deprecated, use `duckdb_rows_changed`.- idx_t deprecated_rows_changed;- // Deprecated, use `duckdb_column_*`-family of functions.- duckdb_column *deprecated_columns;- // Deprecated, use `duckdb_result_error`.- char *deprecated_error_message;- void *internal_data;-} duckdb_result;--//! A database instance cache object. Must be destroyed with `duckdb_destroy_instance_cache`.-typedef struct _duckdb_instance_cache {- void *internal_ptr;-} * duckdb_instance_cache;--//! A database object. Must be closed with `duckdb_close`.-typedef struct _duckdb_database {- void *internal_ptr;-} * duckdb_database;--//! A connection to a duckdb database. Must be closed with `duckdb_disconnect`.-typedef struct _duckdb_connection {- void *internal_ptr;-} * duckdb_connection;--//! A client context of a duckdb connection. Must be destroyed with `duckdb_destroy_context`.-typedef struct _duckdb_client_context {- void *internal_ptr;-} * duckdb_client_context;--//! A prepared statement is a parameterized query that allows you to bind parameters to it.-//! Must be destroyed with `duckdb_destroy_prepare`.-typedef struct _duckdb_prepared_statement {- void *internal_ptr;-} * duckdb_prepared_statement;--//! Extracted statements. Must be destroyed with `duckdb_destroy_extracted`.-typedef struct _duckdb_extracted_statements {- void *internal_ptr;-} * duckdb_extracted_statements;--//! The pending result represents an intermediate structure for a query that is not yet fully executed.-//! Must be destroyed with `duckdb_destroy_pending`.-typedef struct _duckdb_pending_result {- void *internal_ptr;-} * duckdb_pending_result;--//! The appender enables fast data loading into DuckDB.-//! Must be destroyed with `duckdb_appender_destroy`.-typedef struct _duckdb_appender {- void *internal_ptr;-} * duckdb_appender;--//! The table description allows querying information about the table.-//! Must be destroyed with `duckdb_table_description_destroy`.-typedef struct _duckdb_table_description {- void *internal_ptr;-} * duckdb_table_description;--//! The configuration can be used to provide start-up options for a database.-//! Must be destroyed with `duckdb_destroy_config`.-typedef struct _duckdb_config {- void *internal_ptr;-} * duckdb_config;--//! A custom configuration option instance. Used to register custom options that can be set on a duckdb_config.-//! or by the user in SQL using `SET <option_name> = <value>`.-typedef struct _duckdb_config_option {- void *internal_ptr;-} * duckdb_config_option;--//! A logical type.-//! Must be destroyed with `duckdb_destroy_logical_type`.-typedef struct _duckdb_logical_type {- void *internal_ptr;-} * duckdb_logical_type;--//! Holds extra information to register a custom logical type.-//! Reserved for future use.-typedef struct _duckdb_create_type_info {- void *internal_ptr;-} * duckdb_create_type_info;--//! Contains a data chunk of a duckdb_result.-//! Must be destroyed with `duckdb_destroy_data_chunk`.-typedef struct _duckdb_data_chunk {- void *internal_ptr;-} * duckdb_data_chunk;--//! A value of a logical type.-//! Must be destroyed with `duckdb_destroy_value`.-typedef struct _duckdb_value {- void *internal_ptr;-} * duckdb_value;--//! Holds a recursive tree containing profiling metrics.-//! The tree matches the query plan, and has a top-level node.-typedef struct _duckdb_profiling_info {- void *internal_ptr;-} * duckdb_profiling_info;--//! Holds error data.-//! Must be destroyed with `duckdb_destroy_error_data`.-typedef struct _duckdb_error_data {- void *internal_ptr;-} * duckdb_error_data;--//! Holds a bound expression.-//! Must be destroyed with `duckdb_destroy_expression`.-typedef struct _duckdb_expression {- void *internal_ptr;-} * duckdb_expression;--//===--------------------------------------------------------------------===//-// C API extension information-//===--------------------------------------------------------------------===//--//! Holds the state of the C API extension initialization process.-typedef struct _duckdb_extension_info {- void *internal_ptr;-} * duckdb_extension_info;--//===--------------------------------------------------------------------===//-// Function types-//===--------------------------------------------------------------------===//--//! Additional function info.-//! When setting this info, it is necessary to pass a destroy-callback function.-typedef struct _duckdb_function_info {- void *internal_ptr;-} * duckdb_function_info;--//! The bind info of a function.-//! When setting this info, it is necessary to pass a destroy-callback function.-typedef struct _duckdb_bind_info {- void *internal_ptr;-} * duckdb_bind_info;--//! Additional function initialization info.-//! When setting this info, it is necessary to pass a destroy-callback function.-typedef struct _duckdb_init_info {- void *internal_ptr;-} * duckdb_init_info;--//===--------------------------------------------------------------------===//-// Scalar function types-//===--------------------------------------------------------------------===//--//! A scalar function. Must be destroyed with `duckdb_destroy_scalar_function`.-typedef struct _duckdb_scalar_function {- void *internal_ptr;-} * duckdb_scalar_function;--//! A scalar function set. Must be destroyed with `duckdb_destroy_scalar_function_set`.-typedef struct _duckdb_scalar_function_set {- void *internal_ptr;-} * duckdb_scalar_function_set;--//! The bind function callback of the scalar function.-typedef void (*duckdb_scalar_function_bind_t)(duckdb_bind_info info);--//! The thread-local initialization function of the scalar function.-typedef void (*duckdb_scalar_function_init_t)(duckdb_init_info info);--//! The function to execute the scalar function on an input chunk.-typedef void (*duckdb_scalar_function_t)(duckdb_function_info info, duckdb_data_chunk input, duckdb_vector output);--//===--------------------------------------------------------------------===//-// Aggregate function types-//===--------------------------------------------------------------------===//--//! An aggregate function. Must be destroyed with `duckdb_destroy_aggregate_function`.-typedef struct _duckdb_aggregate_function {- void *internal_ptr;-} * duckdb_aggregate_function;--//! A aggregate function set. Must be destroyed with `duckdb_destroy_aggregate_function_set`.-typedef struct _duckdb_aggregate_function_set {- void *internal_ptr;-} * duckdb_aggregate_function_set;--//! The state of an aggregate function.-typedef struct _duckdb_aggregate_state {- void *internal_ptr;-} * duckdb_aggregate_state;--//! A function to return the aggregate state's size.-typedef idx_t (*duckdb_aggregate_state_size)(duckdb_function_info info);--//! A function to initialize an aggregate state.-typedef void (*duckdb_aggregate_init_t)(duckdb_function_info info, duckdb_aggregate_state state);--//! An optional function to destroy an aggregate state.-typedef void (*duckdb_aggregate_destroy_t)(duckdb_aggregate_state *states, idx_t count);--//! A function to update a set of aggregate states with new values.-typedef void (*duckdb_aggregate_update_t)(duckdb_function_info info, duckdb_data_chunk input,- duckdb_aggregate_state *states);--//! A function to combine aggregate states.-typedef void (*duckdb_aggregate_combine_t)(duckdb_function_info info, duckdb_aggregate_state *source,- duckdb_aggregate_state *target, idx_t count);--//! A function to finalize aggregate states into a result vector.-typedef void (*duckdb_aggregate_finalize_t)(duckdb_function_info info, duckdb_aggregate_state *source,- duckdb_vector result, idx_t count, idx_t offset);--//===--------------------------------------------------------------------===//-// Table function types-//===--------------------------------------------------------------------===//--//! A table function. Must be destroyed with `duckdb_destroy_table_function`.-typedef struct _duckdb_table_function {- void *internal_ptr;-} * duckdb_table_function;--//! The bind function of the table function.-typedef void (*duckdb_table_function_bind_t)(duckdb_bind_info info);--//! The possibly thread-local initialization function of the table function.-typedef void (*duckdb_table_function_init_t)(duckdb_init_info info);--//! The function to generate an output chunk during table function execution.-typedef void (*duckdb_table_function_t)(duckdb_function_info info, duckdb_data_chunk output);--//===--------------------------------------------------------------------===//-// Copy function types-//===--------------------------------------------------------------------===//--//! A COPY function. Must be destroyed with `duckdb_destroy_copy_function`.-typedef struct _duckdb_copy_function {- void *internal_ptr;-} * duckdb_copy_function;--//! Info for the bind function of a COPY function.-typedef struct _duckdb_copy_function_bind_info {- void *internal_ptr;-} * duckdb_copy_function_bind_info;--//! Info for the global initialization function of a COPY function.-typedef struct _duckdb_copy_function_global_init_info {- void *internal_ptr;-} * duckdb_copy_function_global_init_info;--//! Info for the sink function of a COPY function.-typedef struct _duckdb_copy_function_sink_info {- void *internal_ptr;-} * duckdb_copy_function_sink_info;--//! Info for the finalize function of a COPY function.-typedef struct _duckdb_copy_function_finalize_info {- void *internal_ptr;-} * duckdb_copy_function_finalize_info;--//! The bind function to use when binding a COPY ... TO function.-typedef void (*duckdb_copy_function_bind_t)(duckdb_copy_function_bind_info info);--//! The initialization function to use when initializing a COPY ... TO function.-typedef void (*duckdb_copy_function_global_init_t)(duckdb_copy_function_global_init_info info);--//! The function to sink an input chunk into during execution of a COPY ... TO function.-typedef void (*duckdb_copy_function_sink_t)(duckdb_copy_function_sink_info info, duckdb_data_chunk input);--//! The function to finalize the COPY ... TO function execution.-typedef void (*duckdb_copy_function_finalize_t)(duckdb_copy_function_finalize_info info);--//===--------------------------------------------------------------------===//-// Cast types-//===--------------------------------------------------------------------===//--//! A cast function. Must be destroyed with `duckdb_destroy_cast_function`.-typedef struct _duckdb_cast_function {- void *internal_ptr;-} * duckdb_cast_function;--//! The function to cast from an input vector to an output vector.-typedef bool (*duckdb_cast_function_t)(duckdb_function_info info, idx_t count, duckdb_vector input,- duckdb_vector output);--//===--------------------------------------------------------------------===//-// Replacement scan types-//===--------------------------------------------------------------------===//--//! Additional replacement scan info. When setting this info, it is necessary to pass a destroy-callback function.-typedef struct _duckdb_replacement_scan_info {- void *internal_ptr;-} * duckdb_replacement_scan_info;--//! A replacement scan function.-typedef void (*duckdb_replacement_callback_t)(duckdb_replacement_scan_info info, const char *table_name, void *data);--//===--------------------------------------------------------------------===//-// Arrow-related types-//===--------------------------------------------------------------------===//--//! Forward declare Arrow structs-//! It is important to notice that these structs are not defined by DuckDB but are actually Arrow external objects.-//! They're defined by the C Data Interface Arrow spec: https://arrow.apache.org/docs/format/CDataInterface.html--struct ArrowArray;--struct ArrowSchema;--//! Holds an arrow query result. Must be destroyed with `duckdb_destroy_arrow`.-typedef struct _duckdb_arrow {- void *internal_ptr;-} * duckdb_arrow;--//! Holds an arrow array stream. Must be destroyed with `duckdb_destroy_arrow_stream`.-typedef struct _duckdb_arrow_stream {- void *internal_ptr;-} * duckdb_arrow_stream;--//! Holds an arrow schema. Remember to release the respective ArrowSchema object.-typedef struct _duckdb_arrow_schema {- void *internal_ptr;-} * duckdb_arrow_schema;--//! Holds an arrow converted schema (i.e., duckdb::ArrowTableSchema).-//! In practice, this object holds the information necessary to do proper conversion between Arrow Types and DuckDB-//! Types. Check duckdb/function/table/arrow/arrow_duck_schema.hpp for more details! Must be destroyed with-//! `duckdb_destroy_arrow_converted_schema`-typedef struct _duckdb_arrow_converted_schema {- void *internal_ptr;-} * duckdb_arrow_converted_schema;--//! Holds an arrow array. Remember to release the respective ArrowSchema object.-typedef struct _duckdb_arrow_array {- void *internal_ptr;-} * duckdb_arrow_array;--//! The arrow options used when transforming the DuckDB schema and datachunks into Arrow schema and arrays.-//! Used in `duckdb_to_arrow_schema` and `duckdb_data_chunk_to_arrow`-typedef struct _duckdb_arrow_options {- void *internal_ptr;-} * duckdb_arrow_options;--//===--------------------------------------------------------------------===//-// Virtual File System Access-//===--------------------------------------------------------------------===//--typedef struct _duckdb_file_open_options {- void *internal_ptr;-} * duckdb_file_open_options;--typedef struct _duckdb_file_system {- void *internal_ptr;-} * duckdb_file_system;--typedef struct _duckdb_file_handle {- void *internal_ptr;-} * duckdb_file_handle;--//===--------------------------------------------------------------------===//-// Catalog Interface-//===--------------------------------------------------------------------===//--//! A handle to a database catalog.-//! Must be destroyed with `duckdb_destroy_catalog`.-typedef struct _duckdb_catalog {- void *internal_ptr;-} * duckdb_catalog;--//! A handle to a catalog entry (e.g., table, view, index, etc.).-//! Must be destroyed with `duckdb_destroy_catalog_entry`.-typedef struct _duckdb_catalog_entry {- void *internal_ptr;-} * duckdb_catalog_entry;--//===--------------------------------------------------------------------===//-// Logging Types-//===--------------------------------------------------------------------===//--//! Holds a log storage object.-typedef struct _duckdb_log_storage {- void *internal_ptr;-} * duckdb_log_storage;--//! This function is missing the logging context, which will be added later.-typedef void (*duckdb_logger_write_log_entry_t)(void *extra_data, duckdb_timestamp *timestamp, const char *level,- const char *log_type, const char *log_message);--//===--------------------------------------------------------------------===//-// DuckDB extension access-//===--------------------------------------------------------------------===//--//! Passed to C API extension as a parameter to the entrypoint.-struct duckdb_extension_access {- //! Indicate that an error has occurred.- void (*set_error)(duckdb_extension_info info, const char *error);- //! Fetch the database on which to register the extension.- duckdb_database *(*get_database)(duckdb_extension_info info);- //! Fetch the API struct pointer.- const void *(*get_api)(duckdb_extension_info info, const char *version);-};--#ifndef DUCKDB_API_EXCLUDE_FUNCTIONS--//===--------------------------------------------------------------------===//-// Functions-//===--------------------------------------------------------------------===//--//-----------------------------------------------------------------------------------------------------------------------// Open Connect-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to operate on the instance cache, databases, connections, as well as some metadata functions.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new database instance cache.-The instance cache is necessary if a client/program (re)opens multiple databases to the same file within the same-process. Must be destroyed with 'duckdb_destroy_instance_cache'.--* @return The database instance cache.-*/-DUCKDB_C_API duckdb_instance_cache duckdb_create_instance_cache();--/*!-Creates a new database instance in the instance cache, or retrieves an existing database instance.-Must be closed with 'duckdb_close'.--* @param instance_cache The instance cache in which to create the database, or from which to take the database.-* @param path Path to the database file on disk. Both `nullptr` and `:memory:` open or retrieve an in-memory database.-* @param out_database The resulting cached database.-* @param config (Optional) configuration used to create the database.-* @param out_error If set and the function returns `DuckDBError`, this contains the error message.-Note that the error message must be freed using `duckdb_free`.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_get_or_create_from_cache(duckdb_instance_cache instance_cache, const char *path,- duckdb_database *out_database, duckdb_config config,- char **out_error);--/*!-Destroys an existing database instance cache and de-allocates its memory.--* @param instance_cache The instance cache to destroy.-*/-DUCKDB_C_API void duckdb_destroy_instance_cache(duckdb_instance_cache *instance_cache);--/*!-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 database must be closed with 'duckdb_close'.--* @param path Path to the database file on disk. Both `nullptr` and `:memory:` open an in-memory database.-* @param out_database The result database object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_open(const char *path, duckdb_database *out_database);--/*!-Extended version of duckdb_open. Creates a new database or opens an existing database file stored at the given path.-The database must be closed with 'duckdb_close'.--* @param path Path to the database file on disk. Both `nullptr` and `:memory:` open an in-memory database.-* @param out_database The result database object.-* @param config (Optional) configuration used to start up the database.-* @param out_error If set and the function returns `DuckDBError`, this contains the error message.-Note that the error message must be freed using `duckdb_free`.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_open_ext(const char *path, duckdb_database *out_database, duckdb_config config,- char **out_error);--/*!-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.--* @param database The database object to shut down.-*/-DUCKDB_C_API void duckdb_close(duckdb_database *database);--/*!-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'.--* @param database The database file to connect to.-* @param out_connection The result connection object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_connect(duckdb_database database, duckdb_connection *out_connection);--/*!-Interrupt running query--* @param connection The connection to interrupt-*/-DUCKDB_C_API void duckdb_interrupt(duckdb_connection connection);--/*!-Get the progress of the running query.--* @param connection The connection running the query.-* @return The query progress type containing progress information.-*/-DUCKDB_C_API duckdb_query_progress_type duckdb_query_progress(duckdb_connection connection);--/*!-Closes the specified connection and de-allocates all memory allocated for that connection.--* @param connection The connection to close.-*/-DUCKDB_C_API void duckdb_disconnect(duckdb_connection *connection);--/*!-Retrieves the client context of the connection.--* @param connection The connection.-* @param out_context The client context of the connection. Must be destroyed with `duckdb_destroy_client_context`.-*/-DUCKDB_C_API void duckdb_connection_get_client_context(duckdb_connection connection,- duckdb_client_context *out_context);--/*!-Retrieves the arrow options of the connection.--* @param connection The connection.-*/-DUCKDB_C_API void duckdb_connection_get_arrow_options(duckdb_connection connection,- duckdb_arrow_options *out_arrow_options);--/*!-Returns the connection id of the client context.--* @param context The client context.-* @return The connection id of the client context.-*/-DUCKDB_C_API idx_t duckdb_client_context_get_connection_id(duckdb_client_context context);--/*!-Destroys the client context and deallocates its memory.--* @param context The client context to destroy.-*/-DUCKDB_C_API void duckdb_destroy_client_context(duckdb_client_context *context);--/*!-Destroys the arrow options and deallocates its memory.--* @param arrow_options The arrow options to destroy.-*/-DUCKDB_C_API void duckdb_destroy_arrow_options(duckdb_arrow_options *arrow_options);--/*!-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.-*/-DUCKDB_C_API const char *duckdb_library_version();--/*!-Get the list of (fully qualified) table names of the query.--* @param connection The connection for which to get the table names.-* @param query The query for which to get the table names.-* @param qualified Returns fully qualified table names (catalog.schema.table), if set to true, else only the (not-escaped) table names.-* @return A duckdb_value of type VARCHAR[] containing the (fully qualified) table names of the query. Must be destroyed-with duckdb_destroy_value.-*/-DUCKDB_C_API duckdb_value duckdb_get_table_names(duckdb_connection connection, const char *query, bool qualified);--//-----------------------------------------------------------------------------------------------------------------------// Configuration-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to interact with a `duckdb_config`, which is the configuration parameter for opening a database.-//------------------------------------------------------------------------------------------------------------------------/*!-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.--Note that `duckdb_destroy_config` should always be called on the resulting config, even if the function returns-`DuckDBError`.--* @param out_config The result configuration object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_create_config(duckdb_config *out_config);--/*!-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.--* @return The amount of config options available.-*/-DUCKDB_C_API size_t duckdb_config_count();--/*!-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.--* @param index The index of the configuration option (between 0 and `duckdb_config_count`)-* @param out_name A name of the configuration flag.-* @param out_description A description of the configuration flag.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_get_config_flag(size_t index, const char **out_name, const char **out_description);--/*!-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.--* @param config The configuration object to set the option on.-* @param name The name of the configuration flag to set.-* @param option The value to set the configuration flag to.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_set_config(duckdb_config config, const char *name, const char *option);--/*!-Destroys the specified configuration object and de-allocates all memory allocated for the object.--* @param config The configuration object to destroy.-*/-DUCKDB_C_API void duckdb_destroy_config(duckdb_config *config);--//-----------------------------------------------------------------------------------------------------------------------// Error Data-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to operate on `duckdb_error_data`, which contains, for example, the error type and message. Please use this-// interface for all new C API functions, as it supersedes previous error handling approaches.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates duckdb_error_data.-Must be destroyed with `duckdb_destroy_error_data`.--* @param type The error type.-* @param message The error message.-* @return The error data.-*/-DUCKDB_C_API duckdb_error_data duckdb_create_error_data(duckdb_error_type type, const char *message);--/*!-Destroys the error data and deallocates its memory.--* @param error_data The error data to destroy.-*/-DUCKDB_C_API void duckdb_destroy_error_data(duckdb_error_data *error_data);--/*!-Returns the duckdb_error_type of the error data.--* @param error_data The error data.-* @return The error type.-*/-DUCKDB_C_API duckdb_error_type duckdb_error_data_error_type(duckdb_error_data error_data);--/*!-Returns the error message of the error data. Must not be freed.--* @param error_data The error data.-* @return The error message.-*/-DUCKDB_C_API const char *duckdb_error_data_message(duckdb_error_data error_data);--/*!-Returns whether the error data contains an error or not.--* @param error_data The error data.-* @return True, if the error data contains an exception, else false.-*/-DUCKDB_C_API bool duckdb_error_data_has_error(duckdb_error_data error_data);--//-----------------------------------------------------------------------------------------------------------------------// Query Execution-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to obtain a `duckdb_result` and to retrieve metadata from it.-//------------------------------------------------------------------------------------------------------------------------/*!-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.--* @param connection The connection to perform the query in.-* @param query The SQL query to run.-* @param out_result The query result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_query(duckdb_connection connection, const char *query, duckdb_result *out_result);--/*!-Closes the result and de-allocates all memory allocated for that result.--* @param result The result to destroy.-*/-DUCKDB_C_API void duckdb_destroy_result(duckdb_result *result);--/*!-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.--* @param result The result object to fetch the column name from.-* @param col The column index.-* @return The column name of the specified column.-*/-DUCKDB_C_API const char *duckdb_column_name(duckdb_result *result, idx_t col);--/*!-Returns the column type of the specified column.--Returns `DUCKDB_TYPE_INVALID` if the column is out of range.--* @param result The result object to fetch the column type from.-* @param col The column index.-* @return The column type of the specified column.-*/-DUCKDB_C_API duckdb_type duckdb_column_type(duckdb_result *result, idx_t col);--/*!-Returns the statement type of the statement that was executed--* @param result The result object to fetch the statement type from.-* @return duckdb_statement_type value or DUCKDB_STATEMENT_TYPE_INVALID-*/-DUCKDB_C_API duckdb_statement_type duckdb_result_statement_type(duckdb_result result);--/*!-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.--* @param result The result object to fetch the column type from.-* @param col The column index.-* @return The logical column type of the specified column.-*/-DUCKDB_C_API duckdb_logical_type duckdb_column_logical_type(duckdb_result *result, idx_t col);--/*!-Returns the arrow options associated with the given result. These options are definitions of how the arrow arrays/schema-should be produced.-* @param result The result object to fetch arrow options from.-* @return The arrow options associated with the given result. This must be destroyed with-`duckdb_destroy_arrow_options`.-*/-DUCKDB_C_API duckdb_arrow_options duckdb_result_get_arrow_options(duckdb_result *result);--/*!-Returns the number of columns present in a the result object.--* @param result The result object.-* @return The number of columns present in the result object.-*/-DUCKDB_C_API idx_t duckdb_column_count(duckdb_result *result);--#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Returns the number of rows present in the result object.--* @param result The result object.-* @return The number of rows present in the result object.-*/-DUCKDB_C_API idx_t duckdb_row_count(duckdb_result *result);--#endif--/*!-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.--* @param result The result object.-* @return The number of rows changed.-*/-DUCKDB_C_API idx_t duckdb_rows_changed(duckdb_result *result);--#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**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](types) or the `DUCKDB_TYPE` enum.--For example, for a column of type `DUCKDB_TYPE_INTEGER`, rows can be accessed in the following manner:-```c-int32_t *data = (int32_t *) duckdb_column_data(&result, 0);-printf("Data for row %d: %d\n", row, data[row]);-```--* @param result The result object to fetch the column data from.-* @param col The column index.-* @return The column data of the specified column.-*/-DUCKDB_C_API void *duckdb_column_data(duckdb_result *result, idx_t col);--/*!-**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.--```c-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]);-}-```--* @param result The result object to fetch the nullmask from.-* @param col The column index.-* @return The nullmask of the specified column.-*/-DUCKDB_C_API bool *duckdb_nullmask_data(duckdb_result *result, idx_t col);--#endif--/*!-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.--* @param result The result object to fetch the error from.-* @return The error of the result.-*/-DUCKDB_C_API const char *duckdb_result_error(duckdb_result *result);--/*!-Returns the result error type contained within the result. The error is only set if `duckdb_query` returns-`DuckDBError`.--* @param result The result object to fetch the error from.-* @return The error type of the result.-*/-DUCKDB_C_API duckdb_error_type duckdb_result_error_type(duckdb_result *result);--#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: 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.--* @param result The result object to fetch the data chunk from.-* @param chunk_index The chunk index to fetch from.-* @return The resulting data chunk. Returns `NULL` if the chunk index is out of bounds.-*/-DUCKDB_C_API duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_index);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Checks if the type of the internal result is StreamQueryResult.--* @param result The result object to check.-* @return Whether or not the result object is of the type StreamQueryResult-*/-DUCKDB_C_API bool duckdb_result_is_streaming(duckdb_result result);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Returns the number of data chunks present in the result.--* @param result The result object-* @return Number of data chunks present in the result.-*/-DUCKDB_C_API idx_t duckdb_result_chunk_count(duckdb_result result);--#endif--/*!-Returns the return_type of the given result, or DUCKDB_RETURN_TYPE_INVALID on error--* @param result The result object-* @return The return_type-*/-DUCKDB_C_API duckdb_result_type duckdb_result_return_type(duckdb_result result);--//-----------------------------------------------------------------------------------------------------------------------// Safe Fetch Functions-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Deprecated functions to interact with a `duckdb_result`.-//-// DEPRECATION NOTICE:-// This function group is deprecated and scheduled for removal.-//-// USE INSTEAD:-// To access the values in a result, use `duckdb_fetch_chunk` repeatedly. For each chunk, use the `duckdb_data_chunk`-// interface to access any columns and their values.-//------------------------------------------------------------------------------------------------------------------------#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The boolean value at the specified location, or false if the value cannot be converted.-*/-DUCKDB_C_API bool duckdb_value_boolean(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The int8_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API int8_t duckdb_value_int8(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The int16_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API int16_t duckdb_value_int16(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The int32_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API int32_t duckdb_value_int32(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The int64_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API int64_t duckdb_value_int64(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The duckdb_hugeint value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API duckdb_hugeint duckdb_value_hugeint(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The duckdb_uhugeint value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API duckdb_uhugeint duckdb_value_uhugeint(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The duckdb_decimal value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API duckdb_decimal duckdb_value_decimal(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The uint8_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API uint8_t duckdb_value_uint8(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The uint16_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API uint16_t duckdb_value_uint16(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The uint32_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API uint32_t duckdb_value_uint32(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The uint64_t value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API uint64_t duckdb_value_uint64(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The float value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API float duckdb_value_float(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The double value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API double duckdb_value_double(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The duckdb_date value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API duckdb_date duckdb_value_date(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The duckdb_time value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API duckdb_time duckdb_value_time(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The duckdb_timestamp value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API duckdb_timestamp duckdb_value_timestamp(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The duckdb_interval value at the specified location, or 0 if the value cannot be converted.-*/-DUCKDB_C_API duckdb_interval duckdb_value_interval(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return 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_C_API char *duckdb_value_varchar(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return The string value at the specified location. Attempts to cast the result value to string.-*/-DUCKDB_C_API duckdb_string duckdb_value_string(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return 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_C_API char *duckdb_value_varchar_internal(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return 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_C_API duckdb_string duckdb_value_string_internal(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return 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_C_API duckdb_blob duckdb_value_blob(duckdb_result *result, idx_t col, idx_t row);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--* @return Returns true if the value at the specified index is NULL, and false otherwise.-*/-DUCKDB_C_API bool duckdb_value_is_null(duckdb_result *result, idx_t col, idx_t row);--#endif--//-----------------------------------------------------------------------------------------------------------------------// Helpers-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Generic and `duckdb_string_t` helper functions.-//------------------------------------------------------------------------------------------------------------------------/*!-Allocate `size` bytes of memory using the duckdb internal malloc function. Any memory allocated in this manner-should be freed using `duckdb_free`.--* @param size The number of bytes to allocate.-* @return A pointer to the allocated memory region.-*/-DUCKDB_C_API void *duckdb_malloc(size_t size);--/*!-Free a value returned from `duckdb_malloc`, `duckdb_value_varchar`, `duckdb_value_blob`, or-`duckdb_value_string`.--* @param ptr The memory region to de-allocate.-*/-DUCKDB_C_API void duckdb_free(void *ptr);--/*!-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`.--* @return The vector size.-*/-DUCKDB_C_API idx_t duckdb_vector_size();--/*!-Whether or not the duckdb_string_t value is inlined.-This means that the data of the string does not have a separate allocation.--*/-DUCKDB_C_API bool duckdb_string_is_inlined(duckdb_string_t string);--/*!-Get the string length of a string_t--* @param string The string to get the length of.-* @return The length.-*/-DUCKDB_C_API uint32_t duckdb_string_t_length(duckdb_string_t string);--/*!-Get a pointer to the string data of a string_t--* @param string The string to get the pointer to.-* @return The pointer.-*/-DUCKDB_C_API const char *duckdb_string_t_data(duckdb_string_t *string);--/*!-Checks if a string is valid UTF-8.--* @param str The string to check-* @param len The length of the string (in bytes)-* @return nullptr if the string is valid UTF-8. Otherwise, a duckdb_error_data containing error information. Must be-destroyed with `duckdb_destroy_error_data`.-*/-DUCKDB_C_API duckdb_error_data duckdb_valid_utf8_check(const char *str, idx_t len);--//-----------------------------------------------------------------------------------------------------------------------// Date Time Timestamp Helpers-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to convert from and to `duckdb_[date, time, time_tz, timestamp]`.-// `duckdb_is_finite_timestamp[_s, _ms, _ns]` helper functions.-//------------------------------------------------------------------------------------------------------------------------/*!-Decompose a `duckdb_date` object into year, month and date (stored as `duckdb_date_struct`).--* @param date The date object, as obtained from a `DUCKDB_TYPE_DATE` column.-* @return The `duckdb_date_struct` with the decomposed elements.-*/-DUCKDB_C_API duckdb_date_struct duckdb_from_date(duckdb_date date);--/*!-Re-compose a `duckdb_date` from year, month and date (`duckdb_date_struct`).--* @param date The year, month and date stored in a `duckdb_date_struct`.-* @return The `duckdb_date` element.-*/-DUCKDB_C_API duckdb_date duckdb_to_date(duckdb_date_struct date);--/*!-Test a `duckdb_date` to see if it is a finite value.--* @param date The date object, as obtained from a `DUCKDB_TYPE_DATE` column.-* @return True if the date is finite, false if it is ±infinity.-*/-DUCKDB_C_API bool duckdb_is_finite_date(duckdb_date date);--/*!-Decompose a `duckdb_time` object into hour, minute, second and microsecond (stored as `duckdb_time_struct`).--* @param time The time object, as obtained from a `DUCKDB_TYPE_TIME` column.-* @return The `duckdb_time_struct` with the decomposed elements.-*/-DUCKDB_C_API duckdb_time_struct duckdb_from_time(duckdb_time time);--/*!-Create a `duckdb_time_tz` object from micros and a timezone offset.--* @param micros The microsecond component of the time.-* @param offset The timezone offset component of the time.-* @return The `duckdb_time_tz` element.-*/-DUCKDB_C_API duckdb_time_tz duckdb_create_time_tz(int64_t micros, int32_t offset);--/*!-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.--* @param micros The time object, as obtained from a `DUCKDB_TYPE_TIME_TZ` column.-*/-DUCKDB_C_API duckdb_time_tz_struct duckdb_from_time_tz(duckdb_time_tz micros);--/*!-Re-compose a `duckdb_time` from hour, minute, second and microsecond (`duckdb_time_struct`).--* @param time The hour, minute, second and microsecond in a `duckdb_time_struct`.-* @return The `duckdb_time` element.-*/-DUCKDB_C_API duckdb_time duckdb_to_time(duckdb_time_struct time);--/*!-Decompose a `duckdb_timestamp` object into a `duckdb_timestamp_struct`.--* @param ts The ts object, as obtained from a `DUCKDB_TYPE_TIMESTAMP` column.-* @return The `duckdb_timestamp_struct` with the decomposed elements.-*/-DUCKDB_C_API duckdb_timestamp_struct duckdb_from_timestamp(duckdb_timestamp ts);--/*!-Re-compose a `duckdb_timestamp` from a duckdb_timestamp_struct.--* @param ts The de-composed elements in a `duckdb_timestamp_struct`.-* @return The `duckdb_timestamp` element.-*/-DUCKDB_C_API duckdb_timestamp duckdb_to_timestamp(duckdb_timestamp_struct ts);--/*!-Test a `duckdb_timestamp` to see if it is a finite value.--* @param ts The duckdb_timestamp object, as obtained from a `DUCKDB_TYPE_TIMESTAMP` column.-* @return True if the timestamp is finite, false if it is ±infinity.-*/-DUCKDB_C_API bool duckdb_is_finite_timestamp(duckdb_timestamp ts);--/*!-Test a `duckdb_timestamp_s` to see if it is a finite value.--* @param ts The duckdb_timestamp_s object, as obtained from a `DUCKDB_TYPE_TIMESTAMP_S` column.-* @return True if the timestamp is finite, false if it is ±infinity.-*/-DUCKDB_C_API bool duckdb_is_finite_timestamp_s(duckdb_timestamp_s ts);--/*!-Test a `duckdb_timestamp_ms` to see if it is a finite value.--* @param ts The duckdb_timestamp_ms object, as obtained from a `DUCKDB_TYPE_TIMESTAMP_MS` column.-* @return True if the timestamp is finite, false if it is ±infinity.-*/-DUCKDB_C_API bool duckdb_is_finite_timestamp_ms(duckdb_timestamp_ms ts);--/*!-Test a `duckdb_timestamp_ns` to see if it is a finite value.--* @param ts The duckdb_timestamp_ns object, as obtained from a `DUCKDB_TYPE_TIMESTAMP_NS` column.-* @return True if the timestamp is finite, false if it is ±infinity.-*/-DUCKDB_C_API bool duckdb_is_finite_timestamp_ns(duckdb_timestamp_ns ts);--//-----------------------------------------------------------------------------------------------------------------------// Hugeint and Uhugeint Helpers-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to convert from and to `duckdb_[hugeint, uhugeint]`.-//------------------------------------------------------------------------------------------------------------------------/*!-Converts a duckdb_hugeint object (as obtained from a `DUCKDB_TYPE_HUGEINT` column) into a double.--* @param val The hugeint value.-* @return The converted `double` element.-*/-DUCKDB_C_API double duckdb_hugeint_to_double(duckdb_hugeint val);--/*!-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.--* @param val The double value.-* @return The converted `duckdb_hugeint` element.-*/-DUCKDB_C_API duckdb_hugeint duckdb_double_to_hugeint(double val);--/*!-Converts a duckdb_uhugeint object (as obtained from a `DUCKDB_TYPE_UHUGEINT` column) into a double.--* @param val The uhugeint value.-* @return The converted `double` element.-*/-DUCKDB_C_API double duckdb_uhugeint_to_double(duckdb_uhugeint val);--/*!-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.--* @param val The double value.-* @return The converted `duckdb_uhugeint` element.-*/-DUCKDB_C_API duckdb_uhugeint duckdb_double_to_uhugeint(double val);--//-----------------------------------------------------------------------------------------------------------------------// Decimal Helpers-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to convert from and to `duckdb_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.--* @param val The double value.-* @return The converted `duckdb_decimal` element.-*/-DUCKDB_C_API duckdb_decimal duckdb_double_to_decimal(double val, uint8_t width, uint8_t scale);--/*!-Converts a duckdb_decimal object (as obtained from a `DUCKDB_TYPE_DECIMAL` column) into a double.--* @param val The decimal value.-* @return The converted `double` element.-*/-DUCKDB_C_API double duckdb_decimal_to_double(duckdb_decimal val);--//-----------------------------------------------------------------------------------------------------------------------// Prepared Statements-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// A prepared statement is a parameterized query, and you can bind parameters to it. Prepared statements are commonly-// used to easily supply parameters to functions and avoid SQL injection attacks. They also speed up queries that are-// executed repeatedly with different parameters. That is because the query is only parsed, bound, optimized and planned-// once during the prepare stage, rather than once per execution, if it is possible to resolve all parameter types.-//-// For example:-// SELECT * FROM tbl WHERE id = ?-// Or a query with multiple parameters:-// SELECT * FROM tbl WHERE id = $1 OR name = $2-//------------------------------------------------------------------------------------------------------------------------/*!-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.--* @param connection The connection object-* @param query The SQL query to prepare-* @param out_prepared_statement The resulting prepared statement object-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_prepare(duckdb_connection connection, const char *query,- duckdb_prepared_statement *out_prepared_statement);--/*!-Closes the prepared statement and de-allocates all memory allocated for the statement.--* @param prepared_statement The prepared statement to destroy.-*/-DUCKDB_C_API void duckdb_destroy_prepare(duckdb_prepared_statement *prepared_statement);--/*!-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.--* @param prepared_statement The prepared statement to obtain the error from.-* @return The error message, or `nullptr` if there is none.-*/-DUCKDB_C_API const char *duckdb_prepare_error(duckdb_prepared_statement prepared_statement);--/*!-Returns the number of parameters that can be provided to the given prepared statement.--Returns 0 if the query was not successfully prepared.--* @param prepared_statement The prepared statement to obtain the number of parameters for.-*/-DUCKDB_C_API idx_t duckdb_nparams(duckdb_prepared_statement prepared_statement);--/*!-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.--* @param prepared_statement The prepared statement for which to get the parameter name from.-*/-DUCKDB_C_API const char *duckdb_parameter_name(duckdb_prepared_statement prepared_statement, idx_t index);--/*!-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.--* @param prepared_statement The prepared statement.-* @param param_idx The parameter index.-* @return The parameter type-*/-DUCKDB_C_API duckdb_type duckdb_param_type(duckdb_prepared_statement prepared_statement, idx_t param_idx);--/*!-Returns the logical type for the parameter at the given index.--Returns `nullptr` if the parameter index is out of range or the statement was not successfully prepared.--The return type of this call should be destroyed with `duckdb_destroy_logical_type`.--* @param prepared_statement The prepared statement.-* @param param_idx The parameter index.-* @return The logical type of the parameter-*/-DUCKDB_C_API duckdb_logical_type duckdb_param_logical_type(duckdb_prepared_statement prepared_statement,- idx_t param_idx);--/*!-Clear the params bind to the prepared statement.-*/-DUCKDB_C_API duckdb_state duckdb_clear_bindings(duckdb_prepared_statement prepared_statement);--/*!-Returns the statement type of the statement to be executed--* @param statement The prepared statement.-* @return duckdb_statement_type value or DUCKDB_STATEMENT_TYPE_INVALID-*/-DUCKDB_C_API duckdb_statement_type duckdb_prepared_statement_type(duckdb_prepared_statement statement);--/*!-Returns the number of columns present in a the result of the prepared statement. If any of the column types are invalid,-the result will be 1.--* @param prepared_statement The prepared statement.-* @return The number of columns present in the result of the prepared statement.-*/-DUCKDB_C_API idx_t duckdb_prepared_statement_column_count(duckdb_prepared_statement prepared_statement);--/*!-Returns the name of the specified column of the result of the prepared_statement.-The returned string should be freed using `duckdb_free`.--Returns `nullptr` if the column is out of range.--* @param prepared_statement The prepared statement.-* @param col_idx The column index.-* @return The column name of the specified column.-*/-DUCKDB_C_API const char *duckdb_prepared_statement_column_name(duckdb_prepared_statement prepared_statement,- idx_t col_idx);--/*!-Returns the column type of the specified column of the result of the prepared_statement.--Returns `DUCKDB_TYPE_INVALID` if the column is out of range.-The return type of this call should be destroyed with `duckdb_destroy_logical_type`.--* @param prepared_statement The prepared statement to fetch the column type from.-* @param col_idx The column index.-* @return The logical type of the specified column.-*/-DUCKDB_C_API duckdb_logical_type-duckdb_prepared_statement_column_logical_type(duckdb_prepared_statement prepared_statement, idx_t col_idx);--/*!-Returns the column type of the specified column of the result of the prepared_statement.--Returns `DUCKDB_TYPE_INVALID` if the column is out of range.--* @param prepared_statement The prepared statement to fetch the column type from.-* @param col_idx The column index.-* @return The type of the specified column.-*/-DUCKDB_C_API duckdb_type duckdb_prepared_statement_column_type(duckdb_prepared_statement prepared_statement,- idx_t col_idx);--//-----------------------------------------------------------------------------------------------------------------------// Bind Values to Prepared Statements-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to bind values to prepared statements. Try to use `duckdb_bind_value` and the `duckdb_create_...` interface-// for all types.-//------------------------------------------------------------------------------------------------------------------------/*!-Binds a value to the prepared statement at the specified index.--Supersedes all type-specific bind functions (e.g., `duckdb_bind_varchar`, `duckdb_bind_int64`, etc.).-*/-DUCKDB_C_API duckdb_state duckdb_bind_value(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_value val);--/*!-Retrieve the index of the parameter for the prepared statement, identified by name-*/-DUCKDB_C_API duckdb_state duckdb_bind_parameter_index(duckdb_prepared_statement prepared_statement,- idx_t *param_idx_out, const char *name);--/*!-Binds a bool value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_boolean(duckdb_prepared_statement prepared_statement, idx_t param_idx, bool val);--/*!-Binds an int8_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_int8(duckdb_prepared_statement prepared_statement, idx_t param_idx, int8_t val);--/*!-Binds an int16_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_int16(duckdb_prepared_statement prepared_statement, idx_t param_idx, int16_t val);--/*!-Binds an int32_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_int32(duckdb_prepared_statement prepared_statement, idx_t param_idx, int32_t val);--/*!-Binds an int64_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_int64(duckdb_prepared_statement prepared_statement, idx_t param_idx, int64_t val);--/*!-Binds a duckdb_hugeint value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_hugeint(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_hugeint val);--/*!-Binds a duckdb_uhugeint value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_uhugeint(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_uhugeint val);--/*!-Binds a duckdb_decimal value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_decimal(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_decimal val);--/*!-Binds a uint8_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_uint8(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint8_t val);--/*!-Binds a uint16_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_uint16(duckdb_prepared_statement prepared_statement, idx_t param_idx,- uint16_t val);--/*!-Binds a uint32_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_uint32(duckdb_prepared_statement prepared_statement, idx_t param_idx,- uint32_t val);--/*!-Binds a uint64_t value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_uint64(duckdb_prepared_statement prepared_statement, idx_t param_idx,- uint64_t val);--/*!-Binds a float value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_float(duckdb_prepared_statement prepared_statement, idx_t param_idx, float val);--/*!-Binds a double value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_double(duckdb_prepared_statement prepared_statement, idx_t param_idx, double val);--/*!-Binds a duckdb_date value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_date(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_date val);--/*!-Binds a duckdb_time value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_time(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_time val);--/*!-Binds a duckdb_timestamp value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_timestamp(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_timestamp val);--/*!-Binds a duckdb_timestamp value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_timestamp_tz(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_timestamp val);--/*!-Binds a duckdb_interval value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_interval(duckdb_prepared_statement prepared_statement, idx_t param_idx,- duckdb_interval val);--/*!-Binds a null-terminated varchar value to the prepared statement at the specified index.--Superseded by `duckdb_bind_value`.-*/-DUCKDB_C_API duckdb_state duckdb_bind_varchar(duckdb_prepared_statement prepared_statement, idx_t param_idx,- const char *val);--/*!-Binds a varchar value to the prepared statement at the specified index.--Superseded by `duckdb_bind_value`.-*/-DUCKDB_C_API duckdb_state duckdb_bind_varchar_length(duckdb_prepared_statement prepared_statement, idx_t param_idx,- const char *val, idx_t length);--/*!-Binds a blob value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_blob(duckdb_prepared_statement prepared_statement, idx_t param_idx,- const void *data, idx_t length);--/*!-Binds a NULL value to the prepared statement at the specified index.-*/-DUCKDB_C_API duckdb_state duckdb_bind_null(duckdb_prepared_statement prepared_statement, idx_t param_idx);--//-----------------------------------------------------------------------------------------------------------------------// Execute Prepared Statements-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to execute a prepared statement.-//------------------------------------------------------------------------------------------------------------------------/*!-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`.--* @param prepared_statement The prepared statement to execute.-* @param out_result The query result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_execute_prepared(duckdb_prepared_statement prepared_statement,- duckdb_result *out_result);--#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: 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`.--* @param prepared_statement The prepared statement to execute.-* @param out_result The query result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_execute_prepared_streaming(duckdb_prepared_statement prepared_statement,- duckdb_result *out_result);--#endif--//-----------------------------------------------------------------------------------------------------------------------// Extract Statements-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// A query string can be extracted into multiple SQL statements. Each statement should be prepared and executed-// separately.-//------------------------------------------------------------------------------------------------------------------------/*!-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.--* @param connection The connection object-* @param query The SQL query to extract-* @param out_extracted_statements The resulting extracted statements object-* @return The number of extracted statements or 0 on failure.-*/-DUCKDB_C_API idx_t duckdb_extract_statements(duckdb_connection connection, const char *query,- duckdb_extracted_statements *out_extracted_statements);--/*!-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.--* @param connection The connection object-* @param extracted_statements The extracted statements object-* @param index The index of the extracted statement to prepare-* @param out_prepared_statement The resulting prepared statement object-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_prepare_extracted_statement(duckdb_connection connection,- duckdb_extracted_statements extracted_statements,- idx_t index,- duckdb_prepared_statement *out_prepared_statement);--/*!-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.--* @param extracted_statements The extracted statements to fetch the error from.-* @return The error of the extracted statements.-*/-DUCKDB_C_API const char *duckdb_extract_statements_error(duckdb_extracted_statements extracted_statements);--/*!-De-allocates all memory allocated for the extracted statements.-* @param extracted_statements The extracted statements to destroy.-*/-DUCKDB_C_API void duckdb_destroy_extracted(duckdb_extracted_statements *extracted_statements);--//-----------------------------------------------------------------------------------------------------------------------// Pending Result Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to interact with a pending result. First, prepare a pending result, and then execute it.-//------------------------------------------------------------------------------------------------------------------------/*!-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.--* @param prepared_statement The prepared statement to execute.-* @param out_result The pending query result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement,- duckdb_pending_result *out_result);--#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: 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.--* @param prepared_statement The prepared statement to execute.-* @param out_result The pending query result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement,- duckdb_pending_result *out_result);--#endif--/*!-Closes the pending result and de-allocates all memory allocated for the result.--* @param pending_result The pending result to destroy.-*/-DUCKDB_C_API void duckdb_destroy_pending(duckdb_pending_result *pending_result);--/*!-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.--* @param pending_result The pending result to fetch the error from.-* @return The error of the pending result.-*/-DUCKDB_C_API const char *duckdb_pending_error(duckdb_pending_result pending_result);--/*!-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.--* @param pending_result The pending result to execute a task within.-* @return The state of the pending result after the execution.-*/-DUCKDB_C_API duckdb_pending_state duckdb_pending_execute_task(duckdb_pending_result pending_result);--/*!-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.--* @param pending_result The pending result.-* @return The state of the pending result.-*/-DUCKDB_C_API duckdb_pending_state duckdb_pending_execute_check_state(duckdb_pending_result pending_result);--/*!-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`.--* @param pending_result The pending result to execute.-* @param out_result The result object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_execute_pending(duckdb_pending_result pending_result, duckdb_result *out_result);--/*!-Returns whether a duckdb_pending_state is finished executing. For example if `pending_state` is-DUCKDB_PENDING_RESULT_READY, this function will return true.--* @param pending_state The pending state on which to decide whether to finish execution.-* @return Boolean indicating pending execution should be considered finished.-*/-DUCKDB_C_API bool duckdb_pending_execution_is_finished(duckdb_pending_state pending_state);--//-----------------------------------------------------------------------------------------------------------------------// Value Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create a `duckdb_value` for each of DuckDB's supported data types, and to access the contents of a-// `duckdb_value`. The `duckdb_value` wrapper allows handling of primitive and arbitrarily (nested) types through the-// same interface.-//------------------------------------------------------------------------------------------------------------------------/*!-Destroys the value and de-allocates all memory allocated for that type.--* @param value The value to destroy.-*/-DUCKDB_C_API void duckdb_destroy_value(duckdb_value *value);--/*!-Creates a value from a null-terminated string. Returns nullptr if the string is not valid UTF-8 or other invalid input.--Superseded by `duckdb_create_varchar_length`.--* @param text The null-terminated string-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_varchar(const char *text);--/*!-Creates a value from a string. Returns nullptr if the string is not valid UTF-8 or other invalid input.--* @param text The text-* @param length The length of the text-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_varchar_length(const char *text, idx_t length);--/*!-Creates a value from a boolean--* @param input The boolean value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_bool(bool input);--/*!-Creates a value from an int8_t (a tinyint)--* @param input The tinyint value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_int8(int8_t input);--/*!-Creates a value from a uint8_t (a utinyint)--* @param input The utinyint value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_uint8(uint8_t input);--/*!-Creates a value from an int16_t (a smallint)--* @param input The smallint value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_int16(int16_t input);--/*!-Creates a value from a uint16_t (a usmallint)--* @param input The usmallint value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_uint16(uint16_t input);--/*!-Creates a value from an int32_t (an integer)--* @param input The integer value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_int32(int32_t input);--/*!-Creates a value from a uint32_t (a uinteger)--* @param input The uinteger value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_uint32(uint32_t input);--/*!-Creates a value from a uint64_t (a ubigint)--* @param input The ubigint value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_uint64(uint64_t input);--/*!-Creates a value from an int64--* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_int64(int64_t val);--/*!-Creates a value from a hugeint--* @param input The hugeint value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_hugeint(duckdb_hugeint input);--/*!-Creates a value from a uhugeint--* @param input The uhugeint value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_uhugeint(duckdb_uhugeint input);--/*!-Creates a BIGNUM value from a duckdb_bignum--* @param input The duckdb_bignum value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_bignum(duckdb_bignum input);--/*!-Creates a DECIMAL value from a duckdb_decimal--* @param input The duckdb_decimal value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_decimal(duckdb_decimal input);--/*!-Creates a value from a float--* @param input The float value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_float(float input);--/*!-Creates a value from a double--* @param input The double value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_double(double input);--/*!-Creates a value from a date--* @param input The date value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_date(duckdb_date input);--/*!-Creates a value from a time--* @param input The time value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_time(duckdb_time input);--/*!-Creates a value from a time_ns--* @param input The time value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_time_ns(duckdb_time_ns input);--/*!-Creates a value from a time_tz.-Not to be confused with `duckdb_create_time_tz`, which creates a duckdb_time_tz_t.--* @param value The time_tz value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_time_tz_value(duckdb_time_tz value);--/*!-Creates a TIMESTAMP value from a duckdb_timestamp--* @param input The duckdb_timestamp value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_timestamp(duckdb_timestamp input);--/*!-Creates a TIMESTAMP_TZ value from a duckdb_timestamp--* @param input The duckdb_timestamp value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_timestamp_tz(duckdb_timestamp input);--/*!-Creates a TIMESTAMP_S value from a duckdb_timestamp_s--* @param input The duckdb_timestamp_s value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_timestamp_s(duckdb_timestamp_s input);--/*!-Creates a TIMESTAMP_MS value from a duckdb_timestamp_ms--* @param input The duckdb_timestamp_ms value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_timestamp_ms(duckdb_timestamp_ms input);--/*!-Creates a TIMESTAMP_NS value from a duckdb_timestamp_ns--* @param input The duckdb_timestamp_ns value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_timestamp_ns(duckdb_timestamp_ns input);--/*!-Creates a value from an interval--* @param input The interval value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_interval(duckdb_interval input);--/*!-Creates a value from a blob--* @param data The blob data-* @param length The length of the blob data-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_blob(const uint8_t *data, idx_t length);--/*!-Creates a BIT value from a duckdb_bit--* @param input The duckdb_bit value-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_bit(duckdb_bit input);--/*!-Creates a UUID value from a uhugeint--* @param input The duckdb_uhugeint containing the UUID-* @return The value. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_uuid(duckdb_uhugeint input);--/*!-Returns the boolean value of the given value.--* @param val A duckdb_value containing a boolean-* @return A boolean, or false if the value cannot be converted-*/-DUCKDB_C_API bool duckdb_get_bool(duckdb_value val);--/*!-Returns the int8_t value of the given value.--* @param val A duckdb_value containing a tinyint-* @return A int8_t, or MinValue<int8> if the value cannot be converted-*/-DUCKDB_C_API int8_t duckdb_get_int8(duckdb_value val);--/*!-Returns the uint8_t value of the given value.--* @param val A duckdb_value containing a utinyint-* @return A uint8_t, or MinValue<uint8> if the value cannot be converted-*/-DUCKDB_C_API uint8_t duckdb_get_uint8(duckdb_value val);--/*!-Returns the int16_t value of the given value.--* @param val A duckdb_value containing a smallint-* @return A int16_t, or MinValue<int16> if the value cannot be converted-*/-DUCKDB_C_API int16_t duckdb_get_int16(duckdb_value val);--/*!-Returns the uint16_t value of the given value.--* @param val A duckdb_value containing a usmallint-* @return A uint16_t, or MinValue<uint16> if the value cannot be converted-*/-DUCKDB_C_API uint16_t duckdb_get_uint16(duckdb_value val);--/*!-Returns the int32_t value of the given value.--* @param val A duckdb_value containing an integer-* @return A int32_t, or MinValue<int32> if the value cannot be converted-*/-DUCKDB_C_API int32_t duckdb_get_int32(duckdb_value val);--/*!-Returns the uint32_t value of the given value.--* @param val A duckdb_value containing a uinteger-* @return A uint32_t, or MinValue<uint32> if the value cannot be converted-*/-DUCKDB_C_API uint32_t duckdb_get_uint32(duckdb_value val);--/*!-Returns the int64_t value of the given value.--* @param val A duckdb_value containing a bigint-* @return A int64_t, or MinValue<int64> if the value cannot be converted-*/-DUCKDB_C_API int64_t duckdb_get_int64(duckdb_value val);--/*!-Returns the uint64_t value of the given value.--* @param val A duckdb_value containing a ubigint-* @return A uint64_t, or MinValue<uint64> if the value cannot be converted-*/-DUCKDB_C_API uint64_t duckdb_get_uint64(duckdb_value val);--/*!-Returns the hugeint value of the given value.--* @param val A duckdb_value containing a hugeint-* @return A duckdb_hugeint, or MinValue<hugeint> if the value cannot be converted-*/-DUCKDB_C_API duckdb_hugeint duckdb_get_hugeint(duckdb_value val);--/*!-Returns the uhugeint value of the given value.--* @param val A duckdb_value containing a uhugeint-* @return A duckdb_uhugeint, or MinValue<uhugeint> if the value cannot be converted-*/-DUCKDB_C_API duckdb_uhugeint duckdb_get_uhugeint(duckdb_value val);--/*!-Returns the duckdb_bignum value of the given value.-The `data` field must be destroyed with `duckdb_free`.--* @param val A duckdb_value containing a BIGNUM-* @return A duckdb_bignum. The `data` field must be destroyed with `duckdb_free`.-*/-DUCKDB_C_API duckdb_bignum duckdb_get_bignum(duckdb_value val);--/*!-Returns the duckdb_decimal value of the given value.--* @param val A duckdb_value containing a DECIMAL-* @return A duckdb_decimal, or MinValue<decimal> if the value cannot be converted-*/-DUCKDB_C_API duckdb_decimal duckdb_get_decimal(duckdb_value val);--/*!-Returns the float value of the given value.--* @param val A duckdb_value containing a float-* @return A float, or NAN if the value cannot be converted-*/-DUCKDB_C_API float duckdb_get_float(duckdb_value val);--/*!-Returns the double value of the given value.--* @param val A duckdb_value containing a double-* @return A double, or NAN if the value cannot be converted-*/-DUCKDB_C_API double duckdb_get_double(duckdb_value val);--/*!-Returns the date value of the given value.--* @param val A duckdb_value containing a date-* @return A duckdb_date, or MinValue<date> if the value cannot be converted-*/-DUCKDB_C_API duckdb_date duckdb_get_date(duckdb_value val);--/*!-Returns the time value of the given value.--* @param val A duckdb_value containing a time-* @return A duckdb_time, or MinValue<time> if the value cannot be converted-*/-DUCKDB_C_API duckdb_time duckdb_get_time(duckdb_value val);--/*!-Returns the time_ns value of the given value.--* @param val A duckdb_value containing a time_ns-* @return A duckdb_time_ns, or MinValue<time_ns> if the value cannot be converted-*/-DUCKDB_C_API duckdb_time_ns duckdb_get_time_ns(duckdb_value val);--/*!-Returns the time_tz value of the given value.--* @param val A duckdb_value containing a time_tz-* @return A duckdb_time_tz, or MinValue<time_tz> if the value cannot be converted-*/-DUCKDB_C_API duckdb_time_tz duckdb_get_time_tz(duckdb_value val);--/*!-Returns the TIMESTAMP value of the given value.--* @param val A duckdb_value containing a TIMESTAMP-* @return A duckdb_timestamp, or MinValue<timestamp> if the value cannot be converted-*/-DUCKDB_C_API duckdb_timestamp duckdb_get_timestamp(duckdb_value val);--/*!-Returns the TIMESTAMP_TZ value of the given value.--* @param val A duckdb_value containing a TIMESTAMP_TZ-* @return A duckdb_timestamp, or MinValue<timestamp_tz> if the value cannot be converted-*/-DUCKDB_C_API duckdb_timestamp duckdb_get_timestamp_tz(duckdb_value val);--/*!-Returns the duckdb_timestamp_s value of the given value.--* @param val A duckdb_value containing a TIMESTAMP_S-* @return A duckdb_timestamp_s, or MinValue<timestamp_s> if the value cannot be converted-*/-DUCKDB_C_API duckdb_timestamp_s duckdb_get_timestamp_s(duckdb_value val);--/*!-Returns the duckdb_timestamp_ms value of the given value.--* @param val A duckdb_value containing a TIMESTAMP_MS-* @return A duckdb_timestamp_ms, or MinValue<timestamp_ms> if the value cannot be converted-*/-DUCKDB_C_API duckdb_timestamp_ms duckdb_get_timestamp_ms(duckdb_value val);--/*!-Returns the duckdb_timestamp_ns value of the given value.--* @param val A duckdb_value containing a TIMESTAMP_NS-* @return A duckdb_timestamp_ns, or MinValue<timestamp_ns> if the value cannot be converted-*/-DUCKDB_C_API duckdb_timestamp_ns duckdb_get_timestamp_ns(duckdb_value val);--/*!-Returns the interval value of the given value.--* @param val A duckdb_value containing a interval-* @return A duckdb_interval, or MinValue<interval> if the value cannot be converted-*/-DUCKDB_C_API duckdb_interval duckdb_get_interval(duckdb_value val);--/*!-Returns the type of the given value. The type is valid as long as the value is not destroyed.-The type itself must not be destroyed.--* @param val A duckdb_value-* @return A duckdb_logical_type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_get_value_type(duckdb_value val);--/*!-Returns the blob value of the given value.--* @param val A duckdb_value containing a blob-* @return A duckdb_blob-*/-DUCKDB_C_API duckdb_blob duckdb_get_blob(duckdb_value val);--/*!-Returns the duckdb_bit value of the given value.-The `data` field must be destroyed with `duckdb_free`.--* @param val A duckdb_value containing a BIT-* @return A duckdb_bit-*/-DUCKDB_C_API duckdb_bit duckdb_get_bit(duckdb_value val);--/*!-Returns a duckdb_uhugeint representing the UUID value of the given value.--* @param val A duckdb_value containing a UUID-* @return A duckdb_uhugeint representing the UUID value-*/-DUCKDB_C_API duckdb_uhugeint duckdb_get_uuid(duckdb_value val);--/*!-Obtains a string representation of the given value.-The result must be destroyed with `duckdb_free`.--* @param value The value-* @return The string value. This must be destroyed with `duckdb_free`.-*/-DUCKDB_C_API char *duckdb_get_varchar(duckdb_value value);--/*!-Creates a struct value from a type and an array of values. Must be destroyed with `duckdb_destroy_value`.--* @param type The type of the struct-* @param values The values for the struct fields-* @return The struct value, or nullptr, if any child type is `DUCKDB_TYPE_ANY` or `DUCKDB_TYPE_INVALID`.-*/-DUCKDB_C_API duckdb_value duckdb_create_struct_value(duckdb_logical_type type, duckdb_value *values);--/*!-Creates a list value from a child (element) type and an array of values of length `value_count`.-Must be destroyed with `duckdb_destroy_value`.--* @param type The type of the list-* @param values The values for the list-* @param value_count The number of values in the list-* @return The list value, or nullptr, if the child type is `DUCKDB_TYPE_ANY` or `DUCKDB_TYPE_INVALID`.-*/-DUCKDB_C_API duckdb_value duckdb_create_list_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count);--/*!-Creates an array value from a child (element) type and an array of values of length `value_count`.-Must be destroyed with `duckdb_destroy_value`.--* @param type The type of the array-* @param values The values for the array-* @param value_count The number of values in the array-* @return The array value, or nullptr, if the child type is `DUCKDB_TYPE_ANY` or `DUCKDB_TYPE_INVALID`.-*/-DUCKDB_C_API duckdb_value duckdb_create_array_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count);--/*!-Creates a map value from a map type and two arrays, one for the keys and one for the values, each of length-`entry_count`. Must be destroyed with `duckdb_destroy_value`.--* @param map_type The map type-* @param keys The keys of the map-* @param values The values of the map-* @param entry_count The number of entrys (key-value pairs) in the map-* @return The map value, or nullptr, if the parameters are invalid.-*/-DUCKDB_C_API duckdb_value duckdb_create_map_value(duckdb_logical_type map_type, duckdb_value *keys,- duckdb_value *values, idx_t entry_count);--/*!-Creates a union value from a union type, a tag index, and a value.-Must be destroyed with `duckdb_destroy_value`.--* @param union_type The union type-* @param tag_index The index of the tag of the union-* @param value The value of the union for that tag-* @return The union value, or nullptr, if the parameters are invalid.-*/-DUCKDB_C_API duckdb_value duckdb_create_union_value(duckdb_logical_type union_type, idx_t tag_index,- duckdb_value value);--/*!-Returns the number of elements in a MAP value.--* @param value The MAP value.-* @return The number of elements in the map.-*/-DUCKDB_C_API idx_t duckdb_get_map_size(duckdb_value value);--/*!-Returns the MAP key at index as a duckdb_value.--* @param value The MAP value.-* @param index The index of the key.-* @return The key as a duckdb_value.-*/-DUCKDB_C_API duckdb_value duckdb_get_map_key(duckdb_value value, idx_t index);--/*!-Returns the MAP value at index as a duckdb_value.--* @param value The MAP value.-* @param index The index of the value.-* @return The value as a duckdb_value.-*/-DUCKDB_C_API duckdb_value duckdb_get_map_value(duckdb_value value, idx_t index);--/*!-Returns whether the value's type is SQLNULL or not.--* @param value The value to check.-* @return True, if the value's type is SQLNULL, otherwise false.-*/-DUCKDB_C_API bool duckdb_is_null_value(duckdb_value value);--/*!-Creates a value of type SQLNULL.--* @return The duckdb_value representing SQLNULL. This must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_create_null_value();--/*!-Returns the number of elements in a LIST value.--* @param value The LIST value.-* @return The number of elements in the list.-*/-DUCKDB_C_API idx_t duckdb_get_list_size(duckdb_value value);--/*!-Returns the LIST child at index as a duckdb_value.--* @param value The LIST value.-* @param index The index of the child.-* @return The child as a duckdb_value.-*/-DUCKDB_C_API duckdb_value duckdb_get_list_child(duckdb_value value, idx_t index);--/*!-Creates an enum value from a type and a value. Must be destroyed with `duckdb_destroy_value`.--* @param type The type of the enum-* @param value The value for the enum-* @return The enum value, or nullptr.-*/-DUCKDB_C_API duckdb_value duckdb_create_enum_value(duckdb_logical_type type, uint64_t value);--/*!-Returns the enum value of the given value.--* @param value A duckdb_value containing an enum-* @return A uint64_t, or MinValue<uint64> if the value cannot be converted-*/-DUCKDB_C_API uint64_t duckdb_get_enum_value(duckdb_value value);--/*!-Returns the STRUCT child at index as a duckdb_value.--* @param value The STRUCT value.-* @param index The index of the child.-* @return The child as a duckdb_value.-*/-DUCKDB_C_API duckdb_value duckdb_get_struct_child(duckdb_value value, idx_t index);--/*!-Returns the SQL string representation of the given value.--* @param value A duckdb_value.-* @return The SQL string representation as a null-terminated string. The result must be freed with `duckdb_free`.-*/-DUCKDB_C_API char *duckdb_value_to_string(duckdb_value value);--//-----------------------------------------------------------------------------------------------------------------------// Logical Type Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create and interact with `duckdb_logical_type`.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a `duckdb_logical_type` from a primitive type.-The resulting logical type must be destroyed with `duckdb_destroy_logical_type`.--Returns an invalid logical type, if type is: `DUCKDB_TYPE_INVALID`, `DUCKDB_TYPE_DECIMAL`, `DUCKDB_TYPE_ENUM`,-`DUCKDB_TYPE_LIST`, `DUCKDB_TYPE_STRUCT`, `DUCKDB_TYPE_MAP`, `DUCKDB_TYPE_ARRAY`, or `DUCKDB_TYPE_UNION`.--* @param type The primitive type to create.-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_logical_type(duckdb_type type);--/*!-Returns the alias of a duckdb_logical_type, if set, else `nullptr`.-The result must be destroyed with `duckdb_free`.--* @param type The logical type-* @return The alias or `nullptr`-*/-DUCKDB_C_API char *duckdb_logical_type_get_alias(duckdb_logical_type type);--/*!-Sets the alias of a duckdb_logical_type.--* @param type The logical type-* @param alias The alias to set-*/-DUCKDB_C_API void duckdb_logical_type_set_alias(duckdb_logical_type type, const char *alias);--/*!-Creates a LIST type from its child type.-The return type must be destroyed with `duckdb_destroy_logical_type`.--* @param type The child type of the list-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_list_type(duckdb_logical_type type);--/*!-Creates an ARRAY type from its child type.-The return type must be destroyed with `duckdb_destroy_logical_type`.--* @param type The child type of the array.-* @param array_size The number of elements in the array.-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_array_type(duckdb_logical_type type, idx_t array_size);--/*!-Creates a MAP type from its key type and value type.-The return type must be destroyed with `duckdb_destroy_logical_type`.--* @param key_type The map's key type.-* @param value_type The map's value type.-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_map_type(duckdb_logical_type key_type, duckdb_logical_type value_type);--/*!-Creates a UNION type from the passed arrays.-The return type must be destroyed with `duckdb_destroy_logical_type`.--* @param member_types The array of union member types.-* @param member_names The union member names.-* @param member_count The number of union members.-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_union_type(duckdb_logical_type *member_types, const char **member_names,- idx_t member_count);--/*!-Creates a STRUCT type based on the member types and names.-The resulting type must be destroyed with `duckdb_destroy_logical_type`.--* @param member_types The array of types of the struct members.-* @param member_names The array of names of the struct members.-* @param member_count The number of members of the struct.-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_struct_type(duckdb_logical_type *member_types, const char **member_names,- idx_t member_count);--/*!-Creates an ENUM type from the passed member name array.-The resulting type should be destroyed with `duckdb_destroy_logical_type`.--* @param member_names The array of names that the enum should consist of.-* @param member_count The number of elements that were specified in the array.-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_enum_type(const char **member_names, idx_t member_count);--/*!-Creates a DECIMAL type with the specified width and scale.-The resulting type should be destroyed with `duckdb_destroy_logical_type`.--* @param width The width of the decimal type-* @param scale The scale of the decimal type-* @return The logical type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_create_decimal_type(uint8_t width, uint8_t scale);--/*!-Retrieves the enum `duckdb_type` of a `duckdb_logical_type`.--* @param type The logical type.-* @return The `duckdb_type` id.-*/-DUCKDB_C_API duckdb_type duckdb_get_type_id(duckdb_logical_type type);--/*!-Retrieves the width of a decimal type.--* @param type The logical type object-* @return The width of the decimal type-*/-DUCKDB_C_API uint8_t duckdb_decimal_width(duckdb_logical_type type);--/*!-Retrieves the scale of a decimal type.--* @param type The logical type object-* @return The scale of the decimal type-*/-DUCKDB_C_API uint8_t duckdb_decimal_scale(duckdb_logical_type type);--/*!-Retrieves the internal storage type of a decimal type.--* @param type The logical type object-* @return The internal type of the decimal type-*/-DUCKDB_C_API duckdb_type duckdb_decimal_internal_type(duckdb_logical_type type);--/*!-Retrieves the internal storage type of an enum type.--* @param type The logical type object-* @return The internal type of the enum type-*/-DUCKDB_C_API duckdb_type duckdb_enum_internal_type(duckdb_logical_type type);--/*!-Retrieves the dictionary size of the enum type.--* @param type The logical type object-* @return The dictionary size of the enum type-*/-DUCKDB_C_API uint32_t duckdb_enum_dictionary_size(duckdb_logical_type type);--/*!-Retrieves the dictionary value at the specified position from the enum.--The result must be freed with `duckdb_free`.--* @param type The logical type object-* @param index The index in the dictionary-* @return The string value of the enum type. Must be freed with `duckdb_free`.-*/-DUCKDB_C_API char *duckdb_enum_dictionary_value(duckdb_logical_type type, idx_t index);--/*!-Retrieves the child type of the given LIST type. Also accepts MAP types.-The result must be freed with `duckdb_destroy_logical_type`.--* @param type The logical type, either LIST or MAP.-* @return The child type of the LIST or MAP type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_list_type_child_type(duckdb_logical_type type);--/*!-Retrieves the child type of the given ARRAY type.--The result must be freed with `duckdb_destroy_logical_type`.--* @param type The logical type. Must be ARRAY.-* @return The child type of the ARRAY type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_array_type_child_type(duckdb_logical_type type);--/*!-Retrieves the array size of the given array type.--* @param type The logical type object-* @return The fixed number of elements the values of this array type can store.-*/-DUCKDB_C_API idx_t duckdb_array_type_array_size(duckdb_logical_type type);--/*!-Retrieves the key type of the given map type.--The result must be freed with `duckdb_destroy_logical_type`.--* @param type The logical type object-* @return The key type of the map type. Must be destroyed with `duckdb_destroy_logical_type`.-*/-DUCKDB_C_API duckdb_logical_type duckdb_map_type_key_type(duckdb_logical_type type);--/*!-Retrieves the value type of the given map type.--The result must be freed with `duckdb_destroy_logical_type`.--* @param type The logical type object-* @return The value type of the map type. Must be destroyed with `duckdb_destroy_logical_type`.-*/-DUCKDB_C_API duckdb_logical_type duckdb_map_type_value_type(duckdb_logical_type type);--/*!-Returns the number of children of a struct type.--* @param type The logical type object-* @return The number of children of a struct type.-*/-DUCKDB_C_API idx_t duckdb_struct_type_child_count(duckdb_logical_type type);--/*!-Retrieves the name of the struct child.--The result must be freed with `duckdb_free`.--* @param type The logical type object-* @param index The child index-* @return The name of the struct type. Must be freed with `duckdb_free`.-*/-DUCKDB_C_API char *duckdb_struct_type_child_name(duckdb_logical_type type, idx_t index);--/*!-Retrieves the child type of the given struct type at the specified index.--The result must be freed with `duckdb_destroy_logical_type`.--* @param type The logical type object-* @param index The child index-* @return The child type of the struct type. Must be destroyed with `duckdb_destroy_logical_type`.-*/-DUCKDB_C_API duckdb_logical_type duckdb_struct_type_child_type(duckdb_logical_type type, idx_t index);--/*!-Returns the number of members that the union type has.--* @param type The logical type (union) object-* @return The number of members of a union type.-*/-DUCKDB_C_API idx_t duckdb_union_type_member_count(duckdb_logical_type type);--/*!-Retrieves the name of the union member.--The result must be freed with `duckdb_free`.--* @param type The logical type object-* @param index The child index-* @return The name of the union member. Must be freed with `duckdb_free`.-*/-DUCKDB_C_API char *duckdb_union_type_member_name(duckdb_logical_type type, idx_t index);--/*!-Retrieves the child type of the given union member at the specified index.--The result must be freed with `duckdb_destroy_logical_type`.--* @param type The logical type object-* @param index The child index-* @return The child type of the union member. Must be destroyed with `duckdb_destroy_logical_type`.-*/-DUCKDB_C_API duckdb_logical_type duckdb_union_type_member_type(duckdb_logical_type type, idx_t index);--/*!-Destroys the logical type and de-allocates all memory allocated for that type.--* @param type The logical type to destroy.-*/-DUCKDB_C_API void duckdb_destroy_logical_type(duckdb_logical_type *type);--/*!-Registers a custom type within the given connection.-The type must have an alias--* @param con The connection to use-* @param type The custom type to register-* @return Whether or not the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_logical_type(duckdb_connection con, duckdb_logical_type type,- duckdb_create_type_info info);--//-----------------------------------------------------------------------------------------------------------------------// Data Chunk Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to interact with `duckdb_data_chunk`. Data chunks pass through the different operators of DuckDB's-// execution engine, when, e.g., executing a scalar function. Additionally, a query result is composed of a sequence of-// data chunks.-//-// A data chunk contains a number of vectors, which, in turn, contain data in a columnar format. For the query result,-// the vectors are the result columns, and they contain the query result for each row.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates an empty data chunk with the specified column types.-The result must be destroyed with `duckdb_destroy_data_chunk`.--* @param types An array of column types. Column types can not contain ANY and INVALID types.-* @param column_count The number of columns.-* @return The data chunk.-*/-DUCKDB_C_API duckdb_data_chunk duckdb_create_data_chunk(duckdb_logical_type *types, idx_t column_count);--/*!-Destroys the data chunk and de-allocates all memory allocated for that chunk.--* @param chunk The data chunk to destroy.-*/-DUCKDB_C_API void duckdb_destroy_data_chunk(duckdb_data_chunk *chunk);--/*!-Resets a data chunk, clearing the validity masks and setting the cardinality of the data chunk to 0.-After calling this method, you must call `duckdb_vector_get_validity` and `duckdb_vector_get_data` to obtain current-data and validity pointers--* @param chunk The data chunk to reset.-*/-DUCKDB_C_API void duckdb_data_chunk_reset(duckdb_data_chunk chunk);--/*!-Retrieves the number of columns in a data chunk.--* @param chunk The data chunk to get the data from-* @return The number of columns in the data chunk-*/-DUCKDB_C_API idx_t duckdb_data_chunk_get_column_count(duckdb_data_chunk chunk);--/*!-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.--* @param chunk The data chunk to get the data from-* @return The vector-*/-DUCKDB_C_API duckdb_vector duckdb_data_chunk_get_vector(duckdb_data_chunk chunk, idx_t col_idx);--/*!-Retrieves the current number of tuples in a data chunk.--* @param chunk The data chunk to get the data from-* @return The number of tuples in the data chunk-*/-DUCKDB_C_API idx_t duckdb_data_chunk_get_size(duckdb_data_chunk chunk);--/*!-Sets the current number of tuples in a data chunk.--* @param chunk The data chunk to set the size in-* @param size The number of tuples in the data chunk-*/-DUCKDB_C_API void duckdb_data_chunk_set_size(duckdb_data_chunk chunk, idx_t size);--//-----------------------------------------------------------------------------------------------------------------------// Vector Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to interact with `duckdb_vector`. A vector typically (but not always) lives in a data chunk and contains a-// subset of the rows of a column.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a flat vector. Must be destroyed with `duckdb_destroy_vector`.--* @param type The logical type of the vector.-* @param capacity The capacity of the vector.-* @return The vector.-*/-DUCKDB_C_API duckdb_vector duckdb_create_vector(duckdb_logical_type type, idx_t capacity);--/*!-Destroys the vector and de-allocates its memory.--* @param vector A pointer to the vector.-*/-DUCKDB_C_API void duckdb_destroy_vector(duckdb_vector *vector);--/*!-Retrieves the column type of the specified vector.--The result must be destroyed with `duckdb_destroy_logical_type`.--* @param vector The vector get the data from-* @return The type of the vector-*/-DUCKDB_C_API duckdb_logical_type duckdb_vector_get_column_type(duckdb_vector vector);--/*!-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.--* @param vector The vector to get the data from-* @return The data pointer-*/-DUCKDB_C_API void *duckdb_vector_get_data(duckdb_vector vector);--/*!-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.--* @param vector The vector to get the data from-* @return The pointer to the validity mask, or NULL if no validity mask is present-*/-DUCKDB_C_API uint64_t *duckdb_vector_get_validity(duckdb_vector vector);--/*!-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.--* @param vector The vector to alter-*/-DUCKDB_C_API void duckdb_vector_ensure_validity_writable(duckdb_vector vector);--/*!-Assigns a string element in the vector at the specified location. For VARCHAR vectors, the input is validated as UTF-8;-if invalid, a NULL value is assigned at that index.--Superseded by `duckdb_unsafe_vector_assign_string_element_len`, optionally combined with `duckdb_valid_utf8_check`.--* @param vector The vector to alter-* @param index The row position in the vector to assign the string to-* @param str The null-terminated string-*/-DUCKDB_C_API void duckdb_vector_assign_string_element(duckdb_vector vector, idx_t index, const char *str);--/*!-Assigns a string element in the vector at the specified location. For VARCHAR vectors, the input is validated as UTF-8;-if invalid, a NULL value is assigned at that index. For BLOB vectors, no validation is performed.--Superseded by `duckdb_unsafe_vector_assign_string_element_len`, optionally combined with `duckdb_valid_utf8_check`.--* @param vector The vector to alter-* @param index The row position in the vector to assign the string to-* @param str The string-* @param str_len The length of the string (in bytes)-*/-DUCKDB_C_API void duckdb_vector_assign_string_element_len(duckdb_vector vector, idx_t index, const char *str,- idx_t str_len);--/*!-Assigns a string element in the vector at the specified location without UTF-8 validation. The caller is responsible for-ensuring the input is valid UTF-8. Use `duckdb_valid_utf8_check` to validate strings before calling this function if-needed. If the input is known to be valid UTF-8, this function can be called directly for better performance, avoiding-the overhead of redundant validation.--* @param vector The vector to alter-* @param index The row position in the vector to assign the string to-* @param str The string-* @param str_len The length of the string (in bytes)-*/-DUCKDB_C_API void duckdb_unsafe_vector_assign_string_element_len(duckdb_vector vector, idx_t index, const char *str,- idx_t str_len);--/*!-Retrieves the child vector of a list vector.--The resulting vector is valid as long as the parent vector is valid.--* @param vector The vector-* @return The child vector-*/-DUCKDB_C_API duckdb_vector duckdb_list_vector_get_child(duckdb_vector vector);--/*!-Returns the size of the child vector of the list.--* @param vector The vector-* @return The size of the child list-*/-DUCKDB_C_API idx_t duckdb_list_vector_get_size(duckdb_vector vector);--/*!-Sets the size of the underlying child-vector of a list vector.-Note that this does NOT reserve the memory in the child buffer,-and that it is possible to set a size exceeding the capacity.-To set the capacity, use `duckdb_list_vector_reserve`.--* @param vector The list vector.-* @param size The size of the child list.-* @return The duckdb state. Returns DuckDBError, if the vector is nullptr.-*/-DUCKDB_C_API duckdb_state duckdb_list_vector_set_size(duckdb_vector vector, idx_t size);--/*!-Sets the capacity of the underlying child-vector of a list vector.-We increment to the next power of two, based on the required capacity.-Thus, the capacity might not match the size of the list (capacity >= size),-which is set via `duckdb_list_vector_set_size`.--* @param vector The list vector.-* @param required_capacity The child buffer capacity to reserve.-* @return The duckdb state. Returns DuckDBError, if the vector is nullptr.-*/-DUCKDB_C_API duckdb_state duckdb_list_vector_reserve(duckdb_vector vector, idx_t required_capacity);--/*!-Retrieves the child vector of a struct vector.-The resulting vector is valid as long as the parent vector is valid.--* @param vector The vector-* @param index The child index-* @return The child vector-*/-DUCKDB_C_API duckdb_vector duckdb_struct_vector_get_child(duckdb_vector vector, idx_t index);--/*!-Retrieves the child vector of an 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.--* @param vector The vector-* @return The child vector-*/-DUCKDB_C_API duckdb_vector duckdb_array_vector_get_child(duckdb_vector vector);--/*!-Slice a vector with a selection vector.-The length of the selection vector must be less than or equal to the length of the vector.-Turns the vector into a dictionary vector.--* @param vector The vector to slice.-* @param sel The selection vector.-* @param len The length of the selection vector.-*/-DUCKDB_C_API void duckdb_slice_vector(duckdb_vector vector, duckdb_selection_vector sel, idx_t len);--/*!-Copy the src vector to the dst with a selection vector that identifies which indices to copy.--* @param src The vector to copy from.-* @param dst The vector to copy to.-* @param sel The selection vector. The length of the selection vector should not be more than the length of the src-vector-* @param src_count The number of entries from selection vector to copy. Think of this as the effective length of the-selection vector starting from index 0-* @param src_offset The offset in the selection vector to copy from (important: actual number of items copied =-src_count - src_offset).-* @param dst_offset The offset in the dst vector to start copying to.-*/-DUCKDB_C_API void duckdb_vector_copy_sel(duckdb_vector src, duckdb_vector dst, duckdb_selection_vector sel,- idx_t src_count, idx_t src_offset, idx_t dst_offset);--/*!-Copies the value from `value` to `vector`.--* @param vector The receiving vector.-* @param value The value to copy into the vector.-*/-DUCKDB_C_API void duckdb_vector_reference_value(duckdb_vector vector, duckdb_value value);--/*!-Changes `to_vector` to reference `from_vector. After, the vectors share ownership of the data.--* @param to_vector The receiving vector.-* @param from_vector The vector to reference.-*/-DUCKDB_C_API void duckdb_vector_reference_vector(duckdb_vector to_vector, duckdb_vector from_vector);--//-----------------------------------------------------------------------------------------------------------------------// Validity Mask Functions-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to interact with the validity mask of a vector. The validity mask is a bitmask determining whether a row in-// a vector is `NULL`, or not.-//------------------------------------------------------------------------------------------------------------------------/*!-Returns whether or not a row is valid (i.e. not NULL) in the given validity mask.--* @param validity The validity mask, as obtained through `duckdb_vector_get_validity`-* @param row The row index-* @return true if the row is valid, false otherwise-*/-DUCKDB_C_API bool duckdb_validity_row_is_valid(uint64_t *validity, idx_t row);--/*!-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.--* @param validity The validity mask, as obtained through `duckdb_vector_get_validity`.-* @param row The row index-* @param valid Whether or not to set the row to valid, or invalid-*/-DUCKDB_C_API void duckdb_validity_set_row_validity(uint64_t *validity, idx_t row, bool valid);--/*!-In a validity mask, sets a specific row to invalid.--Equivalent to `duckdb_validity_set_row_validity` with valid set to false.--* @param validity The validity mask-* @param row The row index-*/-DUCKDB_C_API void duckdb_validity_set_row_invalid(uint64_t *validity, idx_t row);--/*!-In a validity mask, sets a specific row to valid.--Equivalent to `duckdb_validity_set_row_validity` with valid set to true.--* @param validity The validity mask-* @param row The row index-*/-DUCKDB_C_API void duckdb_validity_set_row_valid(uint64_t *validity, idx_t row);--//-----------------------------------------------------------------------------------------------------------------------// Scalar Functions-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create, execute, and register custom scalar functions. Scalar functions take one or more input-// parameters, and return a single output parameter. Consider using a table function, if your scalar function does not-// take any input parameters.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new empty scalar function.--The return value must be destroyed with `duckdb_destroy_scalar_function`.--* @return The scalar function object.-*/-DUCKDB_C_API duckdb_scalar_function duckdb_create_scalar_function();--/*!-Destroys the given scalar function object.--* @param scalar_function The scalar function to destroy-*/-DUCKDB_C_API void duckdb_destroy_scalar_function(duckdb_scalar_function *scalar_function);--/*!-Sets the name of the given scalar function.--* @param scalar_function The scalar function-* @param name The name of the scalar function-*/-DUCKDB_C_API void duckdb_scalar_function_set_name(duckdb_scalar_function scalar_function, const char *name);--/*!-Sets the parameters of the given scalar function to varargs. Does not require adding parameters with-duckdb_scalar_function_add_parameter.--* @param scalar_function The scalar function.-* @param type The type of the arguments.-* @return The parameter type. Cannot contain INVALID.-*/-DUCKDB_C_API void duckdb_scalar_function_set_varargs(duckdb_scalar_function scalar_function, duckdb_logical_type type);--/*!-Sets the scalar function's null-handling behavior to special.--* @param scalar_function The scalar function.-*/-DUCKDB_C_API void duckdb_scalar_function_set_special_handling(duckdb_scalar_function scalar_function);--/*!-Sets the Function Stability of the scalar function to VOLATILE, indicating the function should be re-run for every row.-This limits optimization that can be performed for the function.--* @param scalar_function The scalar function.-*/-DUCKDB_C_API void duckdb_scalar_function_set_volatile(duckdb_scalar_function scalar_function);--/*!-Adds a parameter to the scalar function.--* @param scalar_function The scalar function.-* @param type The parameter type. Cannot contain INVALID.-*/-DUCKDB_C_API void duckdb_scalar_function_add_parameter(duckdb_scalar_function scalar_function,- duckdb_logical_type type);--/*!-Sets the return type of the scalar function.--* @param scalar_function The scalar function-* @param type Cannot contain INVALID or ANY.-*/-DUCKDB_C_API void duckdb_scalar_function_set_return_type(duckdb_scalar_function scalar_function,- duckdb_logical_type type);--/*!-Assigns extra information to the scalar function that can be fetched during binding, etc.--* @param scalar_function The scalar function-* @param extra_info The extra information-* @param destroy The callback that will be called to destroy the extra information (if any)-*/-DUCKDB_C_API void duckdb_scalar_function_set_extra_info(duckdb_scalar_function scalar_function, void *extra_info,- duckdb_delete_callback_t destroy);--/*!-Sets the (optional) bind function of the scalar function.--* @param scalar_function The scalar function.-* @param bind The bind function.-*/-DUCKDB_C_API void duckdb_scalar_function_set_bind(duckdb_scalar_function scalar_function,- duckdb_scalar_function_bind_t bind);--/*!-Sets the user-provided bind data in the bind object of the scalar function.-The bind data object can be retrieved again during execution.-In most case, you also need to set the copy-callback of your bind data via duckdb_scalar_function_set_bind_data_copy.--* @param info The bind info of the scalar function.-* @param bind_data The bind data object.-* @param destroy The callback to destroy the bind data (if any).-*/-DUCKDB_C_API void duckdb_scalar_function_set_bind_data(duckdb_bind_info info, void *bind_data,- duckdb_delete_callback_t destroy);--/*!-Sets the copy-callback for the user-provided bind data in the bind object of the scalar function.--* @param info The bind info of the scalar function.-* @param copy The callback to copy the bind data (if any).-*/-DUCKDB_C_API void duckdb_scalar_function_set_bind_data_copy(duckdb_bind_info info, duckdb_copy_callback_t copy);--/*!-Report that an error has occurred while calling bind on a scalar function.--* @param info The bind info object.-* @param error The error message.-*/-DUCKDB_C_API void duckdb_scalar_function_bind_set_error(duckdb_bind_info info, const char *error);--/*!-Sets the main function of the scalar function.--* @param scalar_function The scalar function-* @param function The function-*/-DUCKDB_C_API void duckdb_scalar_function_set_function(duckdb_scalar_function scalar_function,- duckdb_scalar_function_t function);--/*!-Register the scalar function object within the given connection.--The function requires at least a name, a function and a return type.--If the function is incomplete or a function with this name already exists DuckDBError is returned.--* @param con The connection to register it in.-* @param scalar_function The function pointer-* @return Whether or not the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_scalar_function(duckdb_connection con,- duckdb_scalar_function scalar_function);--/*!-Retrieves the extra info of the function as set in `duckdb_scalar_function_set_extra_info`.--* @param info The info object.-* @return The extra info.-*/-DUCKDB_C_API void *duckdb_scalar_function_get_extra_info(duckdb_function_info info);--/*!-Retrieves the extra info of the function as set in the bind info.--* @param info The info object.-* @return The extra info.-*/-DUCKDB_C_API void *duckdb_scalar_function_bind_get_extra_info(duckdb_bind_info info);--/*!-Gets the scalar function's bind data set by `duckdb_scalar_function_set_bind_data`.-Note that the bind data is read-only.--* @param info The function info.-* @return The bind data object.-*/-DUCKDB_C_API void *duckdb_scalar_function_get_bind_data(duckdb_function_info info);--/*!-Retrieves the client context of the bind info of a scalar function.--* @param info The bind info object of the scalar function.-* @param out_context The client context of the bind info. Must be destroyed with `duckdb_destroy_client_context`.-*/-DUCKDB_C_API void duckdb_scalar_function_get_client_context(duckdb_bind_info info, duckdb_client_context *out_context);--/*!-Report that an error has occurred while executing the scalar function.--* @param info The info object.-* @param error The error message-*/-DUCKDB_C_API void duckdb_scalar_function_set_error(duckdb_function_info info, const char *error);--/*!-Creates a new empty scalar function set.--The return value must be destroyed with `duckdb_destroy_scalar_function_set`.--* @return The scalar function set object.-*/-DUCKDB_C_API duckdb_scalar_function_set duckdb_create_scalar_function_set(const char *name);--/*!-Destroys the given scalar function set object.--*/-DUCKDB_C_API void duckdb_destroy_scalar_function_set(duckdb_scalar_function_set *scalar_function_set);--/*!-Adds the scalar function as a new overload to the scalar function set.--Returns DuckDBError if the function could not be added, for example if the overload already exists.--* @param set The scalar function set-* @param function The function to add-*/-DUCKDB_C_API duckdb_state duckdb_add_scalar_function_to_set(duckdb_scalar_function_set set,- duckdb_scalar_function function);--/*!-Register the scalar function set within the given connection.--The set requires at least a single valid overload.--If the set is incomplete or a function with this name already exists DuckDBError is returned.--* @param con The connection to register it in.-* @param set The function set to register-* @return Whether or not the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_scalar_function_set(duckdb_connection con, duckdb_scalar_function_set set);--/*!-Returns the number of input arguments of the scalar function.--* @param info The bind info.-* @return The number of input arguments.-*/-DUCKDB_C_API idx_t duckdb_scalar_function_bind_get_argument_count(duckdb_bind_info info);--/*!-Returns the input argument at index of the scalar function.--* @param info The bind info.-* @param index The argument index.-* @return The input argument at index. Must be destroyed with `duckdb_destroy_expression`.-*/-DUCKDB_C_API duckdb_expression duckdb_scalar_function_bind_get_argument(duckdb_bind_info info, idx_t index);--/*!-Retrieves the state pointer of the function info.--* @param info The function info object.-* @return The state pointer.-*/-DUCKDB_C_API void *duckdb_scalar_function_get_state(duckdb_function_info info);--/*!-Sets the (optional) state init function of the scalar function.-This is called once for each worker thread that begins executing the function-* @param scalar_function The scalar function.-* @param init The init function.-*/-DUCKDB_C_API void duckdb_scalar_function_set_init(duckdb_scalar_function scalar_function,- duckdb_scalar_function_init_t init);--/*!-Report that an error has occurred while calling init on a scalar function.--* @param info The init info object.-* @param error The error message.-*/-DUCKDB_C_API void duckdb_scalar_function_init_set_error(duckdb_init_info info, const char *error);--/*!-Sets the state pointer in the init info of the scalar function.--* @param info The init info object.-* @param state The state pointer.-* @param destroy The callback to destroy the state (if any).-*/-DUCKDB_C_API void duckdb_scalar_function_init_set_state(duckdb_init_info info, void *state,- duckdb_delete_callback_t destroy);--/*!-Retrieves the client context of the init info of a scalar function.--* @param info The init info object of the scalar function.-* @param out_context The client context of the init info. Must be destroyed with `duckdb_destroy_client_context`.-*/-DUCKDB_C_API void duckdb_scalar_function_init_get_client_context(duckdb_init_info info,- duckdb_client_context *out_context);--/*!-Gets the scalar function's bind data set by `duckdb_scalar_function_set_bind_data`.-Note that the bind data is read-only.--* @param info The init info object.-* @return The bind data object.-*/-DUCKDB_C_API void *duckdb_scalar_function_init_get_bind_data(duckdb_init_info info);--/*!-Retrieves the extra info of the function as set in the init info.--* @param info The init info object.-* @return The extra info.-*/-DUCKDB_C_API void *duckdb_scalar_function_init_get_extra_info(duckdb_init_info info);--//-----------------------------------------------------------------------------------------------------------------------// Selection Vector Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to interact with `duckdb_selection_vector`. Selection vectors define a selection on top of a vector. Lets-// say that a filter filters out all `VARCHAR`-rows containing `hello`. Then, instead of creating a full new copy of the-// filtered-out data, it is possible to use a selection vector only selecting the rows satisfying the filter.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new selection vector of size `size`.-Must be destroyed with `duckdb_destroy_selection_vector`.--* @param size The size of the selection vector.-* @return The selection vector.-*/-DUCKDB_C_API duckdb_selection_vector duckdb_create_selection_vector(idx_t size);--/*!-Destroys the selection vector and de-allocates its memory.--* @param sel The selection vector.-*/-DUCKDB_C_API void duckdb_destroy_selection_vector(duckdb_selection_vector sel);--/*!-Access the data pointer of a selection vector.--* @param sel The selection vector.-* @return The data pointer.-*/-DUCKDB_C_API sel_t *duckdb_selection_vector_get_data_ptr(duckdb_selection_vector sel);--//-----------------------------------------------------------------------------------------------------------------------// Aggregate Functions-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create, execute, and register custom aggregate functions. Aggregate functions aggregate the values of a-// column into an output value.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new empty aggregate function.--The return value should be destroyed with `duckdb_destroy_aggregate_function`.--* @return The aggregate function object.-*/-DUCKDB_C_API duckdb_aggregate_function duckdb_create_aggregate_function();--/*!-Destroys the given aggregate function object.--*/-DUCKDB_C_API void duckdb_destroy_aggregate_function(duckdb_aggregate_function *aggregate_function);--/*!-Sets the name of the given aggregate function.--* @param aggregate_function The aggregate function-* @param name The name of the aggregate function-*/-DUCKDB_C_API void duckdb_aggregate_function_set_name(duckdb_aggregate_function aggregate_function, const char *name);--/*!-Adds a parameter to the aggregate function.--* @param aggregate_function The aggregate function.-* @param type The parameter type. Cannot contain INVALID.-*/-DUCKDB_C_API void duckdb_aggregate_function_add_parameter(duckdb_aggregate_function aggregate_function,- duckdb_logical_type type);--/*!-Sets the return type of the aggregate function.--* @param aggregate_function The aggregate function.-* @param type The return type. Cannot contain INVALID or ANY.-*/-DUCKDB_C_API void duckdb_aggregate_function_set_return_type(duckdb_aggregate_function aggregate_function,- duckdb_logical_type type);--/*!-Sets the main functions of the aggregate function.--* @param aggregate_function The aggregate function-* @param state_size state size-* @param state_init state init function-* @param update update states-* @param combine combine states-* @param finalize finalize states-*/-DUCKDB_C_API void duckdb_aggregate_function_set_functions(duckdb_aggregate_function aggregate_function,- duckdb_aggregate_state_size state_size,- duckdb_aggregate_init_t state_init,- duckdb_aggregate_update_t update,- duckdb_aggregate_combine_t combine,- duckdb_aggregate_finalize_t finalize);--/*!-Sets the state destructor callback of the aggregate function (optional)--* @param aggregate_function The aggregate function-* @param destroy state destroy callback-*/-DUCKDB_C_API void duckdb_aggregate_function_set_destructor(duckdb_aggregate_function aggregate_function,- duckdb_aggregate_destroy_t destroy);--/*!-Register the aggregate function object within the given connection.--The function requires at least a name, functions and a return type.--If the function is incomplete or a function with this name already exists DuckDBError is returned.--* @param con The connection to register it in.-* @return Whether or not the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_aggregate_function(duckdb_connection con,- duckdb_aggregate_function aggregate_function);--/*!-Sets the NULL handling of the aggregate function to SPECIAL_HANDLING.--* @param aggregate_function The aggregate function-*/-DUCKDB_C_API void duckdb_aggregate_function_set_special_handling(duckdb_aggregate_function aggregate_function);--/*!-Assigns extra information to the scalar function that can be fetched during binding, etc.--* @param aggregate_function The aggregate function-* @param extra_info The extra information-* @param destroy The callback that will be called to destroy the extra information (if any)-*/-DUCKDB_C_API void duckdb_aggregate_function_set_extra_info(duckdb_aggregate_function aggregate_function,- void *extra_info, duckdb_delete_callback_t destroy);--/*!-Retrieves the extra info of the function as set in `duckdb_aggregate_function_set_extra_info`.--* @param info The info object-* @return The extra info-*/-DUCKDB_C_API void *duckdb_aggregate_function_get_extra_info(duckdb_function_info info);--/*!-Report that an error has occurred while executing the aggregate function.--* @param info The info object-* @param error The error message-*/-DUCKDB_C_API void duckdb_aggregate_function_set_error(duckdb_function_info info, const char *error);--/*!-Creates a new empty aggregate function set.--The return value should be destroyed with `duckdb_destroy_aggregate_function_set`.--* @return The aggregate function set object.-*/-DUCKDB_C_API duckdb_aggregate_function_set duckdb_create_aggregate_function_set(const char *name);--/*!-Destroys the given aggregate function set object.--*/-DUCKDB_C_API void duckdb_destroy_aggregate_function_set(duckdb_aggregate_function_set *aggregate_function_set);--/*!-Adds the aggregate function as a new overload to the aggregate function set.--Returns DuckDBError if the function could not be added, for example if the overload already exists.--* @param set The aggregate function set-* @param function The function to add-*/-DUCKDB_C_API duckdb_state duckdb_add_aggregate_function_to_set(duckdb_aggregate_function_set set,- duckdb_aggregate_function function);--/*!-Register the aggregate function set within the given connection.--The set requires at least a single valid overload.--If the set is incomplete or a function with this name already exists DuckDBError is returned.--* @param con The connection to register it in.-* @param set The function set to register-* @return Whether or not the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_aggregate_function_set(duckdb_connection con,- duckdb_aggregate_function_set set);--//-----------------------------------------------------------------------------------------------------------------------// Table Functions-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create, execute, and register custom table functions. Table functions take one or more input parameters,-// and return one or more output parameters.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new empty table function.--The return value should be destroyed with `duckdb_destroy_table_function`.--* @return The table function object.-*/-DUCKDB_C_API duckdb_table_function duckdb_create_table_function();--/*!-Destroys the given table function object.--* @param table_function The table function to destroy-*/-DUCKDB_C_API void duckdb_destroy_table_function(duckdb_table_function *table_function);--/*!-Sets the name of the given table function.--* @param table_function The table function-* @param name The name of the table function-*/-DUCKDB_C_API void duckdb_table_function_set_name(duckdb_table_function table_function, const char *name);--/*!-Adds a parameter to the table function.--* @param table_function The table function.-* @param type The parameter type. Cannot contain INVALID.-*/-DUCKDB_C_API void duckdb_table_function_add_parameter(duckdb_table_function table_function, duckdb_logical_type type);--/*!-Adds a named parameter to the table function.--* @param table_function The table function.-* @param name The parameter name.-* @param type The parameter type. Cannot contain INVALID.-*/-DUCKDB_C_API void duckdb_table_function_add_named_parameter(duckdb_table_function table_function, const char *name,- duckdb_logical_type type);--/*!-Assigns extra information to the table function that can be fetched during binding, etc.--* @param table_function The table function-* @param extra_info The extra information-* @param destroy The callback that will be called to destroy the extra information (if any)-*/-DUCKDB_C_API void duckdb_table_function_set_extra_info(duckdb_table_function table_function, void *extra_info,- duckdb_delete_callback_t destroy);--/*!-Sets the bind function of the table function.--* @param table_function The table function-* @param bind The bind function-*/-DUCKDB_C_API void duckdb_table_function_set_bind(duckdb_table_function table_function,- duckdb_table_function_bind_t bind);--/*!-Sets the init function of the table function.--* @param table_function The table function-* @param init The init function-*/-DUCKDB_C_API void duckdb_table_function_set_init(duckdb_table_function table_function,- duckdb_table_function_init_t init);--/*!-Sets the thread-local init function of the table function.--* @param table_function The table function-* @param init The init function-*/-DUCKDB_C_API void duckdb_table_function_set_local_init(duckdb_table_function table_function,- duckdb_table_function_init_t init);--/*!-Sets the main function of the table function.--* @param table_function The table function-* @param function The function-*/-DUCKDB_C_API void duckdb_table_function_set_function(duckdb_table_function table_function,- duckdb_table_function_t function);--/*!-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.--* @param table_function The table function-* @param pushdown True if the table function supports projection pushdown, false otherwise.-*/-DUCKDB_C_API void duckdb_table_function_supports_projection_pushdown(duckdb_table_function table_function,- bool pushdown);--/*!-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.--* @param con The connection to register it in.-* @param function The function pointer-* @return Whether or not the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_table_function(duckdb_connection con, duckdb_table_function function);--//-----------------------------------------------------------------------------------------------------------------------// Table Function Bind-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to implement the bind-phase of a table function. The bind-phase happens once before the execution of the-// table function. It is useful to, e.g., set up any read-only information for the different threads during execution.-//------------------------------------------------------------------------------------------------------------------------/*!-Retrieves the extra info of the function as set in `duckdb_table_function_set_extra_info`.--* @param info The info object-* @return The extra info-*/-DUCKDB_C_API void *duckdb_bind_get_extra_info(duckdb_bind_info info);--/*!-Retrieves the client context of the bind info of a table function.--* @param info The bind info object of the table function.-* @param out_context The client context of the bind info. Must be destroyed with `duckdb_destroy_client_context`.-*/-DUCKDB_C_API void duckdb_table_function_get_client_context(duckdb_bind_info info, duckdb_client_context *out_context);--/*!-Adds a result column to the output of the table function.--* @param info The table function's bind info.-* @param name The column name.-* @param type The logical column type.-*/-DUCKDB_C_API void duckdb_bind_add_result_column(duckdb_bind_info info, const char *name, duckdb_logical_type type);--/*!-Retrieves the number of regular (non-named) parameters to the function.--* @param info The info object-* @return The number of parameters-*/-DUCKDB_C_API idx_t duckdb_bind_get_parameter_count(duckdb_bind_info info);--/*!-Retrieves the parameter at the given index.--The result must be destroyed with `duckdb_destroy_value`.--* @param info The info object-* @param index The index of the parameter to get-* @return The value of the parameter. Must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index);--/*!-Retrieves a named parameter with the given name.--The result must be destroyed with `duckdb_destroy_value`.--* @param info The info object-* @param name The name of the parameter-* @return The value of the parameter. Must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name);--/*!-Sets the user-provided bind data in the bind object of the table function.-This object can be retrieved again during execution.--* @param info The bind info of the table function.-* @param bind_data The bind data object.-* @param destroy The callback to destroy the bind data (if any).-*/-DUCKDB_C_API void duckdb_bind_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy);--/*!-Sets the cardinality estimate for the table function, used for optimization.--* @param info The bind data object.-* @param is_exact Whether or not the cardinality estimate is exact, or an approximation-*/-DUCKDB_C_API void duckdb_bind_set_cardinality(duckdb_bind_info info, idx_t cardinality, bool is_exact);--/*!-Report that an error has occurred while calling bind on a table function.--* @param info The info object-* @param error The error message-*/-DUCKDB_C_API void duckdb_bind_set_error(duckdb_bind_info info, const char *error);--//-----------------------------------------------------------------------------------------------------------------------// Table Function Init-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to implement the init-phase of a table function. The init-phase happens once for each thread and-// initializes thread-local information prior to execution.-//------------------------------------------------------------------------------------------------------------------------/*!-Retrieves the extra info of the function as set in `duckdb_table_function_set_extra_info`.--* @param info The info object-* @return The extra info-*/-DUCKDB_C_API void *duckdb_init_get_extra_info(duckdb_init_info info);--/*!-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.--* @param info The info object-* @return The bind data object-*/-DUCKDB_C_API void *duckdb_init_get_bind_data(duckdb_init_info info);--/*!-Sets the user-provided init data in the init object. This object can be retrieved again during execution.--* @param info The info object-* @param init_data The init data object.-* @param destroy The callback that will be called to destroy the init data (if any)-*/-DUCKDB_C_API void duckdb_init_set_init_data(duckdb_init_info info, void *init_data, duckdb_delete_callback_t destroy);--/*!-Returns the number of projected columns.--This function must be used if projection pushdown is enabled to figure out which columns to emit.--* @param info The info object-* @return The number of projected columns.-*/-DUCKDB_C_API idx_t duckdb_init_get_column_count(duckdb_init_info info);--/*!-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.--* @param info The info object-* @param column_index The index at which to get the projected column index, from 0..duckdb_init_get_column_count(info)-* @return The column index of the projected column.-*/-DUCKDB_C_API idx_t duckdb_init_get_column_index(duckdb_init_info info, idx_t column_index);--/*!-Sets how many threads can process this table function in parallel (default: 1)--* @param info The info object-* @param max_threads The maximum amount of threads that can process this table function-*/-DUCKDB_C_API void duckdb_init_set_max_threads(duckdb_init_info info, idx_t max_threads);--/*!-Report that an error has occurred while calling init.--* @param info The info object-* @param error The error message-*/-DUCKDB_C_API void duckdb_init_set_error(duckdb_init_info info, const char *error);--//-----------------------------------------------------------------------------------------------------------------------// Table Function-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to implement the execution callback of a table function. The execution callback (i.e., the main function)-// produces a data chunk output based on a data chunk input, and has access to both the bind and init data.-//------------------------------------------------------------------------------------------------------------------------/*!-Retrieves the extra info of the function as set in `duckdb_table_function_set_extra_info`.--* @param info The info object-* @return The extra info-*/-DUCKDB_C_API void *duckdb_function_get_extra_info(duckdb_function_info info);--/*!-Gets the table function's bind data set by `duckdb_bind_set_bind_data`.--Note that the bind data is read-only.-For tracking state, use the init data instead.--* @param info The function info object.-* @return The bind data object.-*/-DUCKDB_C_API void *duckdb_function_get_bind_data(duckdb_function_info info);--/*!-Gets the init data set by `duckdb_init_set_init_data` during the init.--* @param info The info object-* @return The init data object-*/-DUCKDB_C_API void *duckdb_function_get_init_data(duckdb_function_info info);--/*!-Gets the thread-local init data set by `duckdb_init_set_init_data` during the local_init.--* @param info The info object-* @return The init data object-*/-DUCKDB_C_API void *duckdb_function_get_local_init_data(duckdb_function_info info);--/*!-Report that an error has occurred while executing the function.--* @param info The info object-* @param error The error message-*/-DUCKDB_C_API void duckdb_function_set_error(duckdb_function_info info, const char *error);--//-----------------------------------------------------------------------------------------------------------------------// Replacement Scans-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create, execute, and register a custom replacement scan. A replacement scan is a callback replacing a-// scan of a table that does not exist in the catalog.-//------------------------------------------------------------------------------------------------------------------------/*!-Add a replacement scan definition to the specified database.--* @param db The database object to add the replacement scan to-* @param replacement The replacement scan callback-* @param extra_data Extra data that is passed back into the specified callback-* @param delete_callback The delete callback to call on the extra data, if any-*/-DUCKDB_C_API void duckdb_add_replacement_scan(duckdb_database db, duckdb_replacement_callback_t replacement,- void *extra_data, duckdb_delete_callback_t delete_callback);--/*!-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.--* @param info The info object-* @param function_name The function name to substitute.-*/-DUCKDB_C_API void duckdb_replacement_scan_set_function_name(duckdb_replacement_scan_info info,- const char *function_name);--/*!-Adds a parameter to the replacement scan function.--* @param info The info object-* @param parameter The parameter to add.-*/-DUCKDB_C_API void duckdb_replacement_scan_add_parameter(duckdb_replacement_scan_info info, duckdb_value parameter);--/*!-Report that an error has occurred while executing the replacement scan.--* @param info The info object-* @param error The error message-*/-DUCKDB_C_API void duckdb_replacement_scan_set_error(duckdb_replacement_scan_info info, const char *error);--//-----------------------------------------------------------------------------------------------------------------------// Profiling Info-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to access the post-execution profiling information of a query. Only available, if profiling is enabled.-//------------------------------------------------------------------------------------------------------------------------/*!-Returns the root node of the profiling information. Returns nullptr, if profiling is not enabled.--* @param connection A connection object.-* @return A profiling information object.-*/-DUCKDB_C_API duckdb_profiling_info duckdb_get_profiling_info(duckdb_connection connection);--/*!-Returns the value of the metric of the current profiling info node. Returns nullptr, if the metric does- not exist or is not enabled. Currently, the value holds a string, and you can retrieve the string- by calling the corresponding function: char *duckdb_get_varchar(duckdb_value value).--* @param info A profiling information object.-* @param key The name of the requested metric.-* @return The value of the metric. Must be freed with `duckdb_destroy_value`-*/-DUCKDB_C_API duckdb_value duckdb_profiling_info_get_value(duckdb_profiling_info info, const char *key);--/*!-Returns the key-value metric map of this profiling node as a MAP duckdb_value.-The individual elements are accessible via the duckdb_value MAP functions.--* @param info A profiling information object.-* @return The key-value metric map as a MAP duckdb_value.-*/-DUCKDB_C_API duckdb_value duckdb_profiling_info_get_metrics(duckdb_profiling_info info);--/*!-Returns the number of children in the current profiling info node.--* @param info A profiling information object.-* @return The number of children in the current node.-*/-DUCKDB_C_API idx_t duckdb_profiling_info_get_child_count(duckdb_profiling_info info);--/*!-Returns the child node at the specified index.--* @param info A profiling information object.-* @param index The index of the child node.-* @return The child node at the specified index.-*/-DUCKDB_C_API duckdb_profiling_info duckdb_profiling_info_get_child(duckdb_profiling_info info, idx_t index);--//-----------------------------------------------------------------------------------------------------------------------// Appender-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Appenders are the most efficient way of bulk-loading data into DuckDB. They are recommended for fast data loading as-// they perform better than prepared statements or individual `INSERT INTO` statements. Appends are possible in row-wise-// format, and by appending entire data chunks. Try to use chunk-wise appends via `duckdb_append_data_chunk` to ensure-// support for all of DuckDBs data types. Chunk-wise appends consecutively call `duckdb_append_data_chunk` until all-// chunks have been appended. Afterward, call `duckdb_appender_destroy` flush any outstanding data and to destroy the-// appender instance.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates an appender object.--Note that the object must be destroyed with `duckdb_appender_destroy`.--* @param connection The connection context to create the appender in.-* @param schema The schema of the table to append to, or `nullptr` for the default schema.-* @param table The table name to append to.-* @param out_appender The resulting appender object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_create(duckdb_connection connection, const char *schema, const char *table,- duckdb_appender *out_appender);--/*!-Creates an appender object.--Note that the object must be destroyed with `duckdb_appender_destroy`.--* @param connection The connection context to create the appender in.-* @param catalog The catalog of the table to append to, or `nullptr` for the default catalog.-* @param schema The schema of the table to append to, or `nullptr` for the default schema.-* @param table The table name to append to.-* @param out_appender The resulting appender object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_create_ext(duckdb_connection connection, const char *catalog,- const char *schema, const char *table,- duckdb_appender *out_appender);--/*!-Creates an appender object that executes the given query with any data appended to it.--Note that the object must be destroyed with `duckdb_appender_destroy`.--* @param connection The connection context to create the appender in.-* @param query The query to execute, can be an INSERT, DELETE, UPDATE or MERGE INTO statement.-* @param column_count The number of columns to append.-* @param types The types of the columns to append.-* @param table_name (optionally) the table name used to refer to the appended data, defaults to "appended_data".-* @param column_names (optionally) the list of column names, defaults to "col1", "col2", ...-* @param out_appender The resulting appender object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_create_query(duckdb_connection connection, const char *query,- idx_t column_count, duckdb_logical_type *types,- const char *table_name, const char **column_names,- duckdb_appender *out_appender);--/*!-Returns the number of columns that belong to the appender.-If there is no active column list, then this equals the table's physical columns.--* @param appender The appender to get the column count from.-* @return The number of columns in the data chunks.-*/-DUCKDB_C_API idx_t duckdb_appender_column_count(duckdb_appender appender);--/*!-Returns the type of the column at the specified index. This is either a type in the active column list, or the same type-as a column in the receiving table.--Note: The resulting type must be destroyed with `duckdb_destroy_logical_type`.--* @param appender The appender to get the column type from.-* @param col_idx The index of the column to get the type of.-* @return The `duckdb_logical_type` of the column.-*/-DUCKDB_C_API duckdb_logical_type duckdb_appender_column_type(duckdb_appender appender, idx_t col_idx);--#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.-Use duckdb_appender_error_data instead.--Returns the error message associated with the 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.--* @param appender The appender to get the error from.-* @return The error message, or `nullptr` if there is none.-*/-DUCKDB_C_API const char *duckdb_appender_error(duckdb_appender appender);--#endif--/*!-Returns the error data associated with the appender.-Must be destroyed with duckdb_destroy_error_data.--* @param appender The appender to get the error data from.-* @return The error data.-*/-DUCKDB_C_API duckdb_error_data duckdb_appender_error_data(duckdb_appender appender);--/*!-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_data to obtain the error data followed by-duckdb_appender_destroy to destroy the invalidated appender.--* @param appender The appender to flush.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_flush(duckdb_appender appender);--/*!-Clears all buffered data from the appender without flushing it to the table. This discards any data that has been-appended but not yet written. The appender can continue to be used after clearing.--* @param appender The appender to clear.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_clear(duckdb_appender appender);--/*!-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_data to obtain the error data followed by duckdb_appender_destroy to destroy the invalidated-appender.--* @param appender The appender to flush and close.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_close(duckdb_appender appender);--/*!-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.--* @param appender The appender to flush, close and destroy.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_destroy(duckdb_appender *appender);--/*!-Appends a column to the active column list of the appender. Immediately flushes all previous data.--The active column list specifies all columns that are expected when flushing the data. Any non-active columns are filled-with their default values, or NULL.--* @param appender The appender to add the column to.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_add_column(duckdb_appender appender, const char *name);--/*!-Removes all columns from the active column list of the appender, resetting the appender to treat all columns as active.-Immediately flushes all previous data.--* @param appender The appender to clear the columns from.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_clear_columns(duckdb_appender appender);--/*!-A nop function, provided for backwards compatibility reasons. Does nothing. Only `duckdb_appender_end_row` is required.-*/-DUCKDB_C_API duckdb_state duckdb_appender_begin_row(duckdb_appender appender);--/*!-Finish the current row of appends. After end_row is called, the next row can be appended.--* @param appender The appender.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_appender_end_row(duckdb_appender appender);--/*!-Append a DEFAULT value (NULL if DEFAULT not available for column) to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_default(duckdb_appender appender);--/*!-Append a DEFAULT value, at the specified row and column, (NULL if DEFAULT not available for column) to the chunk created-from the specified appender. The default value of the column must be a constant value. Non-deterministic expressions-like nextval('seq') or random() are not supported.--* @param appender The appender to get the default value from.-* @param chunk The data chunk to append the default value to.-* @param col The chunk column index to append the default value to.-* @param row The chunk row index to append the default value to.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_append_default_to_chunk(duckdb_appender appender, duckdb_data_chunk chunk, idx_t col,- idx_t row);--/*!-Append a bool value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_bool(duckdb_appender appender, bool value);--/*!-Append an int8_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_int8(duckdb_appender appender, int8_t value);--/*!-Append an int16_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_int16(duckdb_appender appender, int16_t value);--/*!-Append an int32_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_int32(duckdb_appender appender, int32_t value);--/*!-Append an int64_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_int64(duckdb_appender appender, int64_t value);--/*!-Append a duckdb_hugeint value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_hugeint(duckdb_appender appender, duckdb_hugeint value);--/*!-Append a uint8_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_uint8(duckdb_appender appender, uint8_t value);--/*!-Append a uint16_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_uint16(duckdb_appender appender, uint16_t value);--/*!-Append a uint32_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_uint32(duckdb_appender appender, uint32_t value);--/*!-Append a uint64_t value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_uint64(duckdb_appender appender, uint64_t value);--/*!-Append a duckdb_uhugeint value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_uhugeint(duckdb_appender appender, duckdb_uhugeint value);--/*!-Append a float value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_float(duckdb_appender appender, float value);--/*!-Append a double value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_double(duckdb_appender appender, double value);--/*!-Append a duckdb_date value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_date(duckdb_appender appender, duckdb_date value);--/*!-Append a duckdb_time value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_time(duckdb_appender appender, duckdb_time value);--/*!-Append a duckdb_timestamp value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_timestamp(duckdb_appender appender, duckdb_timestamp value);--/*!-Append a duckdb_interval value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_interval(duckdb_appender appender, duckdb_interval value);--/*!-Append a varchar value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_varchar(duckdb_appender appender, const char *val);--/*!-Append a varchar value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_varchar_length(duckdb_appender appender, const char *val, idx_t length);--/*!-Append a blob value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_blob(duckdb_appender appender, const void *data, idx_t length);--/*!-Append a NULL value to the appender (of any type).-*/-DUCKDB_C_API duckdb_state duckdb_append_null(duckdb_appender appender);--/*!-Append a duckdb_value to the appender.-*/-DUCKDB_C_API duckdb_state duckdb_append_value(duckdb_appender appender, duckdb_value value);--/*!-Appends a pre-filled data chunk to the specified appender.- Attempts casting, if the data chunk types do not match the active appender types.--* @param appender The appender to append to.-* @param chunk The data chunk to append.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_append_data_chunk(duckdb_appender appender, duckdb_data_chunk chunk);--//-----------------------------------------------------------------------------------------------------------------------// Table Description-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create and access a `duckdb_table_description` instance.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a table description object. Note that `duckdb_table_description_destroy` should always be called on the-resulting table_description, even if the function returns `DuckDBError`.--* @param connection The connection context.-* @param schema The schema of the table, or `nullptr` for the default schema.-* @param table The table name.-* @param out The resulting table description object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_table_description_create(duckdb_connection connection, const char *schema,- const char *table, duckdb_table_description *out);--/*!-Creates a table description object. Note that `duckdb_table_description_destroy` must be called on the resulting-table_description, even if the function returns `DuckDBError`.--* @param connection The connection context.-* @param catalog The catalog (database) name of the table, or `nullptr` for the default catalog.-* @param schema The schema of the table, or `nullptr` for the default schema.-* @param table The table name.-* @param out The resulting table description object.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_table_description_create_ext(duckdb_connection connection, const char *catalog,- const char *schema, const char *table,- duckdb_table_description *out);--/*!-Destroy the TableDescription object.--* @param table_description The table_description to destroy.-*/-DUCKDB_C_API void duckdb_table_description_destroy(duckdb_table_description *table_description);--/*!-Returns the error message associated with the given table_description.-If the table_description has no error message, this returns `nullptr` instead.-The error message should not be freed. It will be de-allocated when `duckdb_table_description_destroy` is called.--* @param table_description The table_description to get the error from.-* @return The error message, or `nullptr` if there is none.-*/-DUCKDB_C_API const char *duckdb_table_description_error(duckdb_table_description table_description);--/*!-Check if the column at 'index' index of the table has a DEFAULT expression.--* @param table_description The table_description to query.-* @param index The index of the column to query.-* @param out The out-parameter used to store the result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_column_has_default(duckdb_table_description table_description, idx_t index, bool *out);--/*!-Return the number of columns of the described table.--* @param table_description The table_description to query.-* @return The column count.-*/-DUCKDB_C_API idx_t duckdb_table_description_get_column_count(duckdb_table_description table_description);--/*!-Obtain the column name at 'index'.-The out result must be destroyed with `duckdb_free`.--* @param table_description The table_description to query.-* @param index The index of the column to query.-* @return The column name.-*/-DUCKDB_C_API char *duckdb_table_description_get_column_name(duckdb_table_description table_description, idx_t index);--/*!-Obtain the column type at 'index'.-The return value must be destroyed with `duckdb_destroy_logical_type`.--* @param table_description The table_description to query.-* @param index The index of the column to query.-* @return The column type.-*/-DUCKDB_C_API duckdb_logical_type duckdb_table_description_get_column_type(duckdb_table_description table_description,- idx_t index);--//-----------------------------------------------------------------------------------------------------------------------// Arrow Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to convert from and to Arrow.-//------------------------------------------------------------------------------------------------------------------------/*!-Transforms a DuckDB Schema into an Arrow Schema--* @param arrow_options The Arrow settings used to produce arrow.-* @param types The DuckDB logical types for each column in the schema.-* @param names The names for each column in the schema.-* @param column_count The number of columns that exist in the schema.-* @param out_schema The resulting arrow schema. Must be destroyed with `out_schema->release(out_schema)`.-* @return The error data. Must be destroyed with `duckdb_destroy_error_data`.-*/-DUCKDB_C_API duckdb_error_data duckdb_to_arrow_schema(duckdb_arrow_options arrow_options, duckdb_logical_type *types,- const char **names, idx_t column_count,- struct ArrowSchema *out_schema);--/*!-Transforms a DuckDB data chunk into an Arrow array.--* @param arrow_options The Arrow settings used to produce arrow.-* @param chunk The DuckDB data chunk to convert.-* @param out_arrow_array The output Arrow structure that will hold the converted data. Must be released with-`out_arrow_array->release(out_arrow_array)`-* @return The error data. Must be destroyed with `duckdb_destroy_error_data`.-*/-DUCKDB_C_API duckdb_error_data duckdb_data_chunk_to_arrow(duckdb_arrow_options arrow_options, duckdb_data_chunk chunk,- struct ArrowArray *out_arrow_array);--/*!-Transforms an Arrow Schema into a DuckDB Schema.--* @param connection The connection to get the transformation settings from.-* @param schema The input Arrow schema. Must be released with `schema->release(schema)`.-* @param out_types The Arrow converted schema with extra information about the arrow types. Must be destroyed with-`duckdb_destroy_arrow_converted_schema`.-* @return The error data. Must be destroyed with `duckdb_destroy_error_data`.-*/-DUCKDB_C_API duckdb_error_data duckdb_schema_from_arrow(duckdb_connection connection, struct ArrowSchema *schema,- duckdb_arrow_converted_schema *out_types);--/*!-Transforms an Arrow array into a DuckDB data chunk. The data chunk will retain ownership of the underlying Arrow data.--* @param connection The connection to get the transformation settings from.-* @param arrow_array The input Arrow array. Data ownership is passed on to DuckDB's DataChunk, the underlying object-does not need to be released and won't have ownership of the data.-* @param converted_schema The Arrow converted schema with extra information about the arrow types.-* @param out_chunk The resulting DuckDB data chunk. Must be destroyed by duckdb_destroy_data_chunk.-* @return The error data. Must be destroyed with `duckdb_destroy_error_data`.-*/-DUCKDB_C_API duckdb_error_data duckdb_data_chunk_from_arrow(duckdb_connection connection,- struct ArrowArray *arrow_array,- duckdb_arrow_converted_schema converted_schema,- duckdb_data_chunk *out_chunk);--/*!-Destroys the arrow converted schema and de-allocates all memory allocated for that arrow converted schema.--* @param arrow_converted_schema The arrow converted schema to destroy.-*/-DUCKDB_C_API void duckdb_destroy_arrow_converted_schema(duckdb_arrow_converted_schema *arrow_converted_schema);--#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: 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.--* @param connection The connection to perform the query in.-* @param query The SQL query to run.-* @param out_result The query result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_query_arrow(duckdb_connection connection, const char *query, duckdb_arrow *out_result);--/*!-**DEPRECATION NOTICE**: 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.--* @param result The result to fetch the schema from.-* @param out_schema The output schema.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_query_arrow_schema(duckdb_arrow result, duckdb_arrow_schema *out_schema);--/*!-**DEPRECATION NOTICE**: 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.--* @param prepared The prepared statement to fetch the schema from.-* @param out_schema The output schema.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_prepared_arrow_schema(duckdb_prepared_statement prepared,- duckdb_arrow_schema *out_schema);--/*!-**DEPRECATION NOTICE**: 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.--* @param result The result object the data chunk have been fetched from.-* @param chunk The data chunk to convert.-* @param out_array The output array.-*/-DUCKDB_C_API void duckdb_result_arrow_array(duckdb_result result, duckdb_data_chunk chunk,- duckdb_arrow_array *out_array);--/*!-**DEPRECATION NOTICE**: 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.--* @param result The result to fetch the array from.-* @param out_array The output array.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_query_arrow_array(duckdb_arrow result, duckdb_arrow_array *out_array);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Returns the number of columns present in the arrow result object.--* @param result The result object.-* @return The number of columns present in the result object.-*/-DUCKDB_C_API idx_t duckdb_arrow_column_count(duckdb_arrow result);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Returns the number of rows present in the arrow result object.--* @param result The result object.-* @return The number of rows present in the result object.-*/-DUCKDB_C_API idx_t duckdb_arrow_row_count(duckdb_arrow result);--/*!-**DEPRECATION NOTICE**: 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.--* @param result The result object.-* @return The number of rows changed.-*/-DUCKDB_C_API idx_t duckdb_arrow_rows_changed(duckdb_arrow result);--/*!-**DEPRECATION NOTICE**: 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.--* @param result The result object to fetch the error from.-* @return The error of the result.-*/-DUCKDB_C_API const char *duckdb_query_arrow_error(duckdb_arrow result);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Closes the result and de-allocates all memory allocated for the arrow result.--* @param result The result to destroy.-*/-DUCKDB_C_API void duckdb_destroy_arrow(duckdb_arrow *result);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Releases the arrow array stream and de-allocates its memory.--* @param stream_p The arrow array stream to destroy.-*/-DUCKDB_C_API void duckdb_destroy_arrow_stream(duckdb_arrow_stream *stream_p);--/*!-**DEPRECATION NOTICE**: 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.--* @param prepared_statement The prepared statement to execute.-* @param out_result The query result.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_execute_prepared_arrow(duckdb_prepared_statement prepared_statement,- duckdb_arrow *out_result);--/*!-**DEPRECATION NOTICE**: This method is scheduled for removal in a future release.--Scans the Arrow stream and creates a view with the given name.--* @param connection The connection on which to execute the scan.-* @param table_name Name of the temporary view to create.-* @param arrow Arrow stream wrapper.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API duckdb_state duckdb_arrow_scan(duckdb_connection connection, const char *table_name,- duckdb_arrow_stream arrow);--/*!-**DEPRECATION NOTICE**: 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.--* @param connection The connection on which to execute the scan.-* @param table_name Name of the temporary view to create.-* @param arrow_schema Arrow schema wrapper.-* @param arrow_array Arrow array wrapper.-* @param out_stream Output array stream that wraps around the passed schema, for releasing/deleting once done.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure.-*/-DUCKDB_C_API 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);--#endif--//-----------------------------------------------------------------------------------------------------------------------// Threading Information-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create and execute tasks.-//------------------------------------------------------------------------------------------------------------------------/*!-Execute DuckDB tasks on this thread.--Will return after `max_tasks` have been executed, or if there are no more tasks present.--* @param database The database object to execute tasks for-* @param max_tasks The maximum amount of tasks to execute-*/-DUCKDB_C_API void duckdb_execute_tasks(duckdb_database database, idx_t max_tasks);--/*!-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.--* @param database The database object to create the task state for-* @return The task state that can be used with duckdb_execute_tasks_state.-*/-DUCKDB_C_API duckdb_task_state duckdb_create_task_state(duckdb_database database);--/*!-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.--* @param state The task state of the executor-*/-DUCKDB_C_API void duckdb_execute_tasks_state(duckdb_task_state 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.--* @param state The task state of the executor-* @param max_tasks The maximum amount of tasks to execute-* @return The amount of tasks that have actually been executed-*/-DUCKDB_C_API idx_t duckdb_execute_n_tasks_state(duckdb_task_state state, idx_t max_tasks);--/*!-Finish execution on a specific task.--* @param state The task state to finish execution-*/-DUCKDB_C_API void duckdb_finish_execution(duckdb_task_state state);--/*!-Check if the provided duckdb_task_state has finished execution--* @param state The task state to inspect-* @return Whether or not duckdb_finish_execution has been called on the task state-*/-DUCKDB_C_API bool duckdb_task_state_is_finished(duckdb_task_state 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.--* @param state The task state to clean up-*/-DUCKDB_C_API void duckdb_destroy_task_state(duckdb_task_state state);--/*!-Returns true if the execution of the current query is finished.--* @param con The connection on which to check-*/-DUCKDB_C_API bool duckdb_execution_is_finished(duckdb_connection con);--//-----------------------------------------------------------------------------------------------------------------------// Streaming Result Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to stream a `duckdb_result`. Call `duckdb_fetch_chunk` until the result is exhausted.-//------------------------------------------------------------------------------------------------------------------------#ifndef DUCKDB_API_NO_DEPRECATED-/*!-**DEPRECATION NOTICE**: 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.--* @param result The result object to fetch the data chunk from.-* @return The resulting data chunk. Returns `NULL` if the result has an error.-*/-DUCKDB_C_API duckdb_data_chunk duckdb_stream_fetch_chunk(duckdb_result result);--#endif--/*!-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.--* @param result The result object to fetch the data chunk from.-* @return The resulting data chunk. Returns `NULL` if the result has an error.-*/-DUCKDB_C_API duckdb_data_chunk duckdb_fetch_chunk(duckdb_result result);--//-----------------------------------------------------------------------------------------------------------------------// Cast Functions-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create, execute, and register custom cast functions.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new cast function object.--* @return The cast function object.-*/-DUCKDB_C_API duckdb_cast_function duckdb_create_cast_function();--/*!-Sets the source type of the cast function.--* @param cast_function The cast function object.-* @param source_type The source type to set.-*/-DUCKDB_C_API void duckdb_cast_function_set_source_type(duckdb_cast_function cast_function,- duckdb_logical_type source_type);--/*!-Sets the target type of the cast function.--* @param cast_function The cast function object.-* @param target_type The target type to set.-*/-DUCKDB_C_API void duckdb_cast_function_set_target_type(duckdb_cast_function cast_function,- duckdb_logical_type target_type);--/*!-Sets the "cost" of implicitly casting the source type to the target type using this function.--* @param cast_function The cast function object.-* @param cost The cost to set.-*/-DUCKDB_C_API void duckdb_cast_function_set_implicit_cast_cost(duckdb_cast_function cast_function, int64_t cost);--/*!-Sets the actual cast function to use.--* @param cast_function The cast function object.-* @param function The function to set.-*/-DUCKDB_C_API void duckdb_cast_function_set_function(duckdb_cast_function cast_function,- duckdb_cast_function_t function);--/*!-Assigns extra information to the cast function that can be fetched during execution, etc.--* @param extra_info The extra information-* @param destroy The callback that will be called to destroy the extra information (if any)-*/-DUCKDB_C_API void duckdb_cast_function_set_extra_info(duckdb_cast_function cast_function, void *extra_info,- duckdb_delete_callback_t destroy);--/*!-Retrieves the extra info of the function as set in `duckdb_cast_function_set_extra_info`.--* @param info The info object.-* @return The extra info.-*/-DUCKDB_C_API void *duckdb_cast_function_get_extra_info(duckdb_function_info info);--/*!-Get the cast execution mode from the given function info.--* @param info The info object.-* @return The cast mode.-*/-DUCKDB_C_API duckdb_cast_mode duckdb_cast_function_get_cast_mode(duckdb_function_info info);--/*!-Report that an error has occurred while executing the cast function.--* @param info The info object.-* @param error The error message.-*/-DUCKDB_C_API void duckdb_cast_function_set_error(duckdb_function_info info, const char *error);--/*!-Report that an error has occurred while executing the cast function, setting the corresponding output row to NULL.--* @param info The info object.-* @param error The error message.-* @param row The index of the row within the output vector to set to NULL.-* @param output The output vector.-*/-DUCKDB_C_API void duckdb_cast_function_set_row_error(duckdb_function_info info, const char *error, idx_t row,- duckdb_vector output);--/*!-Registers a cast function within the given connection.--* @param con The connection to use.-* @param cast_function The cast function to register.-* @return Whether or not the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_cast_function(duckdb_connection con, duckdb_cast_function cast_function);--/*!-Destroys the cast function object.--* @param cast_function The cast function object.-*/-DUCKDB_C_API void duckdb_destroy_cast_function(duckdb_cast_function *cast_function);--//-----------------------------------------------------------------------------------------------------------------------// Expression Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create and access expressions. Expressions are widespread in DuckDB, especially during query planning.-// E.g., scalar function parameters are expressions, and can be inspected during the bind-phase.-//------------------------------------------------------------------------------------------------------------------------/*!-Destroys the expression and de-allocates its memory.--* @param expr A pointer to the expression.-*/-DUCKDB_C_API void duckdb_destroy_expression(duckdb_expression *expr);--/*!-Returns the return type of an expression.--* @param expr The expression.-* @return The return type. Must be destroyed with `duckdb_destroy_logical_type`.-*/-DUCKDB_C_API duckdb_logical_type duckdb_expression_return_type(duckdb_expression expr);--/*!-Returns whether the expression is foldable into a value or not.--* @param expr The expression.-* @return True, if the expression is foldable, else false.-*/-DUCKDB_C_API bool duckdb_expression_is_foldable(duckdb_expression expr);--/*!-Folds an expression creating a folded value.--* @param context The client context.-* @param expr The expression. Must be foldable.-* @param out_value The folded value, if folding was successful. Must be destroyed with `duckdb_destroy_value`.-* @return The error data. Must be destroyed with `duckdb_destroy_error_data`.-*/-DUCKDB_C_API duckdb_error_data duckdb_expression_fold(duckdb_client_context context, duckdb_expression expr,- duckdb_value *out_value);--//-----------------------------------------------------------------------------------------------------------------------// File System Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to access the file system of a connection and to interact with file handles. File handle instances to files-// allow operations such as reading, writing, and seeking in a file.-//------------------------------------------------------------------------------------------------------------------------/*!-Get a file system instance associated with the given client context.--* @param context The client context.-* @return The resulting file system instance. Must be destroyed with `duckdb_destroy_file_system`.-*/-DUCKDB_C_API duckdb_file_system duckdb_client_context_get_file_system(duckdb_client_context context);--/*!-Destroys the given file system instance.-* @param file_system The file system instance to destroy.-*/-DUCKDB_C_API void duckdb_destroy_file_system(duckdb_file_system *file_system);--/*!-Retrieves the last error that occurred on the given file system instance.--* @param file_system The file system instance.-* @return The error data.-*/-DUCKDB_C_API duckdb_error_data duckdb_file_system_error_data(duckdb_file_system file_system);--/*!-Opens a file at the given path with the specified options.--* @param file_system The file system instance.-* @param path The path to the file.-* @param options The file open options specifying how to open the file.-* @param out_file The resulting file handle instance, or `nullptr` if the open failed. Must be destroyed with-`duckdb_destroy_file_handle`.-* @return Whether the operation was successful. If not, the error data can be retrieved using-`duckdb_file_system_error_data`.-*/-DUCKDB_C_API duckdb_state duckdb_file_system_open(duckdb_file_system file_system, const char *path,- duckdb_file_open_options options, duckdb_file_handle *out_file);--/*!-Creates a new file open options instance with blank settings.--* @return The new file open options instance. Must be destroyed with `duckdb_destroy_file_open_options`.-*/-DUCKDB_C_API duckdb_file_open_options duckdb_create_file_open_options();--/*!-Sets a specific flag in the file open options.--* @param options The file open options instance.-* @param flag The flag to set (e.g., read, write).-* @param value If the flag is enabled or disabled.-* @return `DuckDBSuccess` on success or `DuckDBError` if the flag is unrecognized or unsupported by this version of-DuckDB.-*/-DUCKDB_C_API duckdb_state duckdb_file_open_options_set_flag(duckdb_file_open_options options, duckdb_file_flag flag,- bool value);--/*!-Destroys the given file open options instance.-* @param options The file open options instance to destroy.-*/-DUCKDB_C_API void duckdb_destroy_file_open_options(duckdb_file_open_options *options);--/*!-Destroys the given file handle and deallocates all associated resources.-This will also close the file if it is still open.--* @param file_handle The file handle to destroy.-*/-DUCKDB_C_API void duckdb_destroy_file_handle(duckdb_file_handle *file_handle);--/*!-Retrieves the last error that occurred on the given file handle.--* @param file_handle The file handle.-* @return The error data. Must be destroyed with `duckdb_destroy_error_data`-*/-DUCKDB_C_API duckdb_error_data duckdb_file_handle_error_data(duckdb_file_handle file_handle);--/*!-Reads data from the file into the buffer.--* @param file_handle The file handle to read from.-* @param buffer The buffer to read data into.-* @param size The number of bytes to read.-* @return The number of bytes actually read, or negative on error.-*/-DUCKDB_C_API int64_t duckdb_file_handle_read(duckdb_file_handle file_handle, void *buffer, int64_t size);--/*!-Writes data from the buffer to the file.--* @param file_handle The file handle to write to.-* @param buffer The buffer containing data to write.-* @param size The number of bytes to write.-* @return The number of bytes actually written, or negative on error.-*/-DUCKDB_C_API int64_t duckdb_file_handle_write(duckdb_file_handle file_handle, const void *buffer, int64_t size);--/*!-Tells the current position in the file.--* @param file_handle The file handle to tell the position of.-* @return The current position in the file, or negative on error.-*/-DUCKDB_C_API int64_t duckdb_file_handle_tell(duckdb_file_handle file_handle);--/*!-Gets the size of the file.--* @param file_handle The file handle to get the size of.-* @return The size of the file in bytes, or negative on error.-*/-DUCKDB_C_API int64_t duckdb_file_handle_size(duckdb_file_handle file_handle);--/*!-Seeks to a specific position in the file.--* @param file_handle The file handle to seek in.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure. If unsuccessful, the error data can be retrieved using-`duckdb_file_handle_error_data`.-*/-DUCKDB_C_API duckdb_state duckdb_file_handle_seek(duckdb_file_handle file_handle, int64_t position);--/*!-Synchronizes the file's state with the underlying storage.--* @param file_handle The file handle to synchronize.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure. If unsuccessful, the error data can be retrieved using-`duckdb_file_handle_error_data`.-*/-DUCKDB_C_API duckdb_state duckdb_file_handle_sync(duckdb_file_handle file_handle);--/*!-Closes the given file handle.--* @param file_handle The file handle to close.-* @return `DuckDBSuccess` on success or `DuckDBError` on failure. If unsuccessful, the error data can be retrieved using-`duckdb_file_handle_error_data`.-*/-DUCKDB_C_API duckdb_state duckdb_file_handle_close(duckdb_file_handle file_handle);--//-----------------------------------------------------------------------------------------------------------------------// Config Options Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to create, configure, and register custom configuration options.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a configuration option instance.--* @return The resulting configuration option instance. Must be destroyed with `duckdb_destroy_config_option`.-*/-DUCKDB_C_API duckdb_config_option duckdb_create_config_option();--/*!-Destroys the given configuration option instance.-* @param option The configuration option instance to destroy.-*/-DUCKDB_C_API void duckdb_destroy_config_option(duckdb_config_option *option);--/*!-Sets the name of the configuration option.--* @param option The configuration option instance.-* @param name The name to set.-*/-DUCKDB_C_API void duckdb_config_option_set_name(duckdb_config_option option, const char *name);--/*!-Sets the type of the configuration option.--* @param option The configuration option instance.-* @param type The type to set.-*/-DUCKDB_C_API void duckdb_config_option_set_type(duckdb_config_option option, duckdb_logical_type type);--/*!-Sets the default value of the configuration option.-If the type of this option has already been set with `duckdb_config_option_set_type`, the value is cast to the type.-Otherwise, the type is inferred from the value.--* @param option The configuration option instance.-* @param default_value The default value to set.-*/-DUCKDB_C_API void duckdb_config_option_set_default_value(duckdb_config_option option, duckdb_value default_value);--/*!-Sets the default scope of the configuration option.-If not set, this defaults to `DUCKDB_CONFIG_OPTION_SCOPE_SESSION`.--* @param option The configuration option instance.-* @param default_scope The default scope to set.-*/-DUCKDB_C_API void duckdb_config_option_set_default_scope(duckdb_config_option option,- duckdb_config_option_scope default_scope);--/*!-Sets the description of the configuration option.--* @param option The configuration option instance.-* @param description The description to set.-*/-DUCKDB_C_API void duckdb_config_option_set_description(duckdb_config_option option, const char *description);--/*!-Registers the given configuration option on the specified connection.--* @param connection The connection to register the option on.-* @param option The configuration option instance to register.-* @return A duckdb_state indicating success or failure.-*/-DUCKDB_C_API duckdb_state duckdb_register_config_option(duckdb_connection connection, duckdb_config_option option);--/*!-Retrieves the value of a configuration option by name from the given client context.--* @param context The client context.-* @param name The name of the configuration option to retrieve.-* @param out_scope Output parameter to optionally store the scope that the configuration option was retrieved from.-If this is `nullptr`, the scope is not returned.-If the requested option does not exist the scope is set to `DUCKDB_CONFIG_OPTION_SCOPE_INVALID`.-* @return The value of the configuration option. Returns `nullptr` if the option does not exist.-*/-DUCKDB_C_API duckdb_value duckdb_client_context_get_config_option(duckdb_client_context context, const char *name,- duckdb_config_option_scope *out_scope);--//-----------------------------------------------------------------------------------------------------------------------// Copy Functions-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to copy data from and to external file formats.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new empty copy function.--The return value must be destroyed with `duckdb_destroy_copy_function`.--* @return The copy function object.-*/-DUCKDB_C_API duckdb_copy_function duckdb_create_copy_function();--/*!-Sets the name of the copy function.--* @param copy_function The copy function-* @param name The name to set-*/-DUCKDB_C_API void duckdb_copy_function_set_name(duckdb_copy_function copy_function, const char *name);--/*!-Sets the extra info pointer of the copy function, which can be used to store arbitrary data.--* @param copy_function The copy function-* @param extra_info The extra info pointer-* @param destructor A destructor function to call to destroy the extra info-*/-DUCKDB_C_API void duckdb_copy_function_set_extra_info(duckdb_copy_function copy_function, void *extra_info,- duckdb_delete_callback_t destructor);--/*!-Registers the given copy function on the database connection under the specified name.--* @param connection The database connection-* @param copy_function The copy function to register-*/-DUCKDB_C_API duckdb_state duckdb_register_copy_function(duckdb_connection connection,- duckdb_copy_function copy_function);--/*!-Destroys the given copy function object.-* @param copy_function The copy function to destroy.-*/-DUCKDB_C_API void duckdb_destroy_copy_function(duckdb_copy_function *copy_function);--/*!-Sets the bind function of the copy function, to use when binding `COPY ... TO`.--* @param bind The bind function-*/-DUCKDB_C_API void duckdb_copy_function_set_bind(duckdb_copy_function copy_function, duckdb_copy_function_bind_t bind);--/*!-Report that an error occurred during the binding-phase of a `COPY ... TO` function.--* @param info The bind info provided to the bind function-* @param error The error message-*/-DUCKDB_C_API void duckdb_copy_function_bind_set_error(duckdb_copy_function_bind_info info, const char *error);--/*!-Retrieves the extra info pointer of the copy function.--* @param info The bind info provided to the bind function-* @return The extra info pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_bind_get_extra_info(duckdb_copy_function_bind_info info);--/*!-Retrieves the client context of the current connection binding the `COPY ... TO` function.--Must be destroyed with `duckdb_destroy_client_context`--* @param info The bind info provided to the bind function-* @return The client context.-*/-DUCKDB_C_API duckdb_client_context duckdb_copy_function_bind_get_client_context(duckdb_copy_function_bind_info info);--/*!-Retrieves the number of columns that will be provided to the `COPY ... TO` function.--* @param info The bind info provided to the bind function-* @return The number of columns.-*/-DUCKDB_C_API idx_t duckdb_copy_function_bind_get_column_count(duckdb_copy_function_bind_info info);--/*!-Retrieves the type of a column that will be provided to the `COPY ... TO` function.--* @param info The bind info provided to the bind function-* @param col_idx The index of the column to retrieve the type for-* @return The type of the column. Must be destroyed with `duckdb_destroy_logical_type`.-*/-DUCKDB_C_API duckdb_logical_type duckdb_copy_function_bind_get_column_type(duckdb_copy_function_bind_info info,- idx_t col_idx);--/*!-Retrieves all values for the given options provided to the `COPY ... TO` function.--* @param info The bind info provided to the bind function-* @return A STRUCT value containing all options as fields. Must be destroyed with `duckdb_destroy_value`.-*/-DUCKDB_C_API duckdb_value duckdb_copy_function_bind_get_options(duckdb_copy_function_bind_info info);--/*!-Sets the bind data of the copy function, to be provided to the init, sink and finalize functions.--* @param info The bind info provided to the bind function-* @param bind_data The bind data pointer-* @param destructor A destructor function to call to destroy the bind data-*/-DUCKDB_C_API void duckdb_copy_function_bind_set_bind_data(duckdb_copy_function_bind_info info, void *bind_data,- duckdb_delete_callback_t destructor);--/*!-Sets the initialization function of the copy function, called right before executing `COPY ... TO`.--* @param init The init function-*/-DUCKDB_C_API void duckdb_copy_function_set_global_init(duckdb_copy_function copy_function,- duckdb_copy_function_global_init_t init);--/*!-Report that an error occurred during the initialization-phase of a `COPY ... TO` function.--* @param info The init info provided to the init function-* @param error The error message-*/-DUCKDB_C_API void duckdb_copy_function_global_init_set_error(duckdb_copy_function_global_init_info info,- const char *error);--/*!-Retrieves the extra info pointer of the copy function.--* @param info The init info provided to the init function-* @return The extra info pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_global_init_get_extra_info(duckdb_copy_function_global_init_info info);--/*!-Retrieves the client context of the current connection initializing the `COPY ... TO` function.--Must be destroyed with `duckdb_destroy_client_context`--* @param info The init info provided to the init function-* @return The client context.-*/-DUCKDB_C_API duckdb_client_context-duckdb_copy_function_global_init_get_client_context(duckdb_copy_function_global_init_info info);--/*!-Retrieves the bind data provided during the binding-phase of a `COPY ... TO` function.--* @param info The init info provided to the init function-* @return The bind data pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_global_init_get_bind_data(duckdb_copy_function_global_init_info info);--/*!-Retrieves the file path provided to the `COPY ... TO` function.--Lives for the duration of the initialization callback, must not be destroyed.--* @param info The init info provided to the init function-* @return The file path.-*/-DUCKDB_C_API const char *duckdb_copy_function_global_init_get_file_path(duckdb_copy_function_global_init_info info);--/*!-Sets the global state of the copy function, to be provided to all subsequent local init, sink and finalize functions.--* @param info The init info provided to the init function-* @param global_state The global state pointer-* @param destructor A destructor function to call to destroy the global state-*/-DUCKDB_C_API void duckdb_copy_function_global_init_set_global_state(duckdb_copy_function_global_init_info info,- void *global_state,- duckdb_delete_callback_t destructor);--/*!-Sets the sink function of the copy function, called during `COPY ... TO`.--* @param function The sink function-*/-DUCKDB_C_API void duckdb_copy_function_set_sink(duckdb_copy_function copy_function,- duckdb_copy_function_sink_t function);--/*!-Report that an error occurred during the sink-phase of a `COPY ... TO` function.--* @param info The sink info provided to the sink function-* @param error The error message-*/-DUCKDB_C_API void duckdb_copy_function_sink_set_error(duckdb_copy_function_sink_info info, const char *error);--/*!-Retrieves the extra info pointer of the copy function.--* @param info The sink info provided to the sink function-* @return The extra info pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_sink_get_extra_info(duckdb_copy_function_sink_info info);--/*!-Retrieves the client context of the current connection during the sink-phase of the `COPY ... TO` function.--Must be destroyed with `duckdb_destroy_client_context`--* @param info The sink info provided to the sink function-* @return The client context.-*/-DUCKDB_C_API duckdb_client_context duckdb_copy_function_sink_get_client_context(duckdb_copy_function_sink_info info);--/*!-Retrieves the bind data provided during the binding-phase of a `COPY ... TO` function.--* @param info The sink info provided to the sink function-* @return The bind data pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_sink_get_bind_data(duckdb_copy_function_sink_info info);--/*!-Retrieves the global state provided during the init-phase of a `COPY ... TO` function.--* @param info The sink info provided to the sink function-* @return The global state pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_sink_get_global_state(duckdb_copy_function_sink_info info);--/*!-Sets the finalize function of the copy function, called at the end of `COPY ... TO`.--* @param finalize The finalize function-*/-DUCKDB_C_API void duckdb_copy_function_set_finalize(duckdb_copy_function copy_function,- duckdb_copy_function_finalize_t finalize);--/*!-Report that an error occurred during the finalize-phase of a `COPY ... TO` function--* @param info The finalize info provided to the finalize function-* @param error The error message-*/-DUCKDB_C_API void duckdb_copy_function_finalize_set_error(duckdb_copy_function_finalize_info info, const char *error);--/*!-Retrieves the extra info pointer of the copy function.--* @param info The finalize info provided to the finalize function-* @return The extra info pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_finalize_get_extra_info(duckdb_copy_function_finalize_info info);--/*!-Retrieves the client context of the current connection during the finalize-phase of the `COPY ... TO` function.--Must be destroyed with `duckdb_destroy_client_context`--* @param info The finalize info provided to the finalize function-* @return The client context.-*/-DUCKDB_C_API duckdb_client_context-duckdb_copy_function_finalize_get_client_context(duckdb_copy_function_finalize_info info);--/*!-Retrieves the bind data provided during the binding-phase of a `COPY ... TO` function.--* @param info The finalize info provided to the finalize function-* @return The bind data pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_finalize_get_bind_data(duckdb_copy_function_finalize_info info);--/*!-Retrieves the global state provided during the init-phase of a `COPY ... TO` function.--* @param info The finalize info provided to the finalize function-* @return The global state pointer.-*/-DUCKDB_C_API void *duckdb_copy_function_finalize_get_global_state(duckdb_copy_function_finalize_info info);--/*!-Sets the table function to use when executing a `COPY ... FROM (...)` statement with this copy function.--The table function must have a `duckdb_table_function_bind_t`, `duckdb_table_function_init_t` and-`duckdb_table_function_t` set.--The table function must take a single VARCHAR parameter (the file path).--Options passed to the `COPY ... FROM (...)` statement are forwarded as named parameters to the table function.--Since `COPY ... FROM` copies into an already existing table, the table function should not define its own result columns-using `duckdb_bind_add_result_column` when binding . Instead use `duckdb_table_function_bind_get_result_column_count`-and related functions in the bind callback of the table function to retrieve the schema of the target table of the `COPY-... FROM` statement.--* @param copy_function The copy function-* @param table_function The table function to use for `COPY ... FROM`-*/-DUCKDB_C_API void duckdb_copy_function_set_copy_from_function(duckdb_copy_function copy_function,- duckdb_table_function table_function);--/*!-Retrieves the number of result columns of a table function.--If the table function is used in a `COPY ... FROM` statement, this can be used to retrieve the number of columns in the-target table at the start of the bind callback.--* @param info The bind info provided to the bind function-* @return The number of result columns.-*/-DUCKDB_C_API idx_t duckdb_table_function_bind_get_result_column_count(duckdb_bind_info info);--/*!-Retrieves the name of a result column of a table function.--If the table function is used in a `COPY ... FROM` statement, this can be used to retrieve the names of the columns in-the target table at the start of the bind callback.--The result is valid for the duration of the bind callback or until the next call to `duckdb_bind_add_result_column`, so-it must not be destroyed.--* @param info The bind info provided to the bind function-* @param col_idx The index of the result column to retrieve the name for-* @return The name of the result column.-*/-DUCKDB_C_API const char *duckdb_table_function_bind_get_result_column_name(duckdb_bind_info info, idx_t col_idx);--/*!-Retrieves the type of a result column of a table function.--If the table function is used in a `COPY ... FROM` statement, this can be used to retrieve the types of the columns in-the target table at the start of the bind callback.--The result must be destroyed with `duckdb_destroy_logical_type`.--* @param info The bind info provided to the bind function-* @param col_idx The index of the result column to retrieve the type for-* @return The type of the result column.-*/-DUCKDB_C_API duckdb_logical_type duckdb_table_function_bind_get_result_column_type(duckdb_bind_info info,- idx_t col_idx);--//-----------------------------------------------------------------------------------------------------------------------// Catalog Interface-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions to interact with database catalogs and catalog entries.-// You will most likely not need this API for typical usage of DuckDB as SQL is the preferred way to interact with the-// database, but this interface can be useful for advanced extensions that need to inspect the state of the catalog from-// inside a running query.-//------------------------------------------------------------------------------------------------------------------------/*!-Retrieve a database catalog instance by name.-This function can only be called from within the context of an active transaction, e.g. during execution of a registered-function callback. Otherwise returns `nullptr`.-* @param context The client context.-* @param catalog_name The name of the catalog.-* @return The resulting catalog instance, or `nullptr` if called from outside an active transaction or if a catalog with-the specified name does not exist. Must be destroyed with `duckdb_destroy_catalog`-*/-DUCKDB_C_API duckdb_catalog duckdb_client_context_get_catalog(duckdb_client_context context, const char *catalog_name);--/*!-Retrieve the "type name" of the given catalog.-E.g. for a DuckDB database, this returns 'duckdb'.-The returned string is owned by the catalog and remains valid until the catalog is destroyed.--* @param catalog The catalog.-* @return The type name of the catalog.-*/-DUCKDB_C_API const char *duckdb_catalog_get_type_name(duckdb_catalog catalog);--/*!-Retrieve a catalog entry from the given catalog by type, schema name and entry name.-The returned catalog entry remains valid for the duration of the current transaction.--* @param catalog The catalog.-* @param context The client context.-* @param entry_type The type of the catalog entry to retrieve.-* @param schema_name The schema name of the catalog entry.-* @param entry_name The name of the catalog entry.-* @return The resulting catalog entry, or `nullptr` if no such entry exists. Must be destroyed with-`duckdb_destroy_catalog_entry`. Remains valid for the duration of the current transaction.-*/-DUCKDB_C_API duckdb_catalog_entry duckdb_catalog_get_entry(duckdb_catalog catalog, duckdb_client_context context,- duckdb_catalog_entry_type entry_type,- const char *schema_name, const char *entry_name);--/*!-Destroys the given catalog instance.--Note that this does not actually "drop" the contents of the catalog; it merely frees the C API handle.--* @param catalog The catalog instance to destroy.-*/-DUCKDB_C_API void duckdb_destroy_catalog(duckdb_catalog *catalog);--/*!-Get the type of the given catalog entry.--* @param entry The catalog entry.-* @return The type of the catalog entry.-*/-DUCKDB_C_API duckdb_catalog_entry_type duckdb_catalog_entry_get_type(duckdb_catalog_entry entry);--/*!-Get the name of the given catalog entry.--* @param entry The catalog entry.-* @return The name of the catalog entry. The returned string is owned by the catalog entry and remains valid until the-catalog entry is destroyed.-*/-DUCKDB_C_API const char *duckdb_catalog_entry_get_name(duckdb_catalog_entry entry);--/*!-Destroys the given catalog entry instance.--Note that this does not actually "drop" the catalog entry from the database catalog; it merely frees the C API handle.--* @param entry The catalog entry instance to destroy.-*/-DUCKDB_C_API void duckdb_destroy_catalog_entry(duckdb_catalog_entry *entry);--//-----------------------------------------------------------------------------------------------------------------------// Logging-//-----------------------------------------------------------------------------------------------------------------------// DESCRIPTION:-// Functions exposing the log storage, which allows the configuration of a custom logger. This API is not yet ready to-// be stabilized.-//------------------------------------------------------------------------------------------------------------------------/*!-Creates a new log storage object.--* @return A log storage object. Must be destroyed with `duckdb_destroy_log_storage`.-*/-DUCKDB_C_API duckdb_log_storage duckdb_create_log_storage();--/*!-Destroys a log storage object.--* @param log_storage The log storage object to destroy.-*/-DUCKDB_C_API void duckdb_destroy_log_storage(duckdb_log_storage *log_storage);--/*!-Sets the callback function for writing log entries.--* @param log_storage The log storage object.-* @param function The function to call.-*/-DUCKDB_C_API void duckdb_log_storage_set_write_log_entry(duckdb_log_storage log_storage,- duckdb_logger_write_log_entry_t function);--/*!-Sets the extra data of the custom log storage.--* @param log_storage The log storage object.-* @param extra_data The extra data that is passed back into the callbacks.-* @param delete_callback The delete callback to call on the extra data, if any.-*/-DUCKDB_C_API void duckdb_log_storage_set_extra_data(duckdb_log_storage log_storage, void *extra_data,- duckdb_delete_callback_t delete_callback);--/*!-Sets the name of the log storage.--* @param log_storage The log storage object.-* @param name The name of the log storage.-*/-DUCKDB_C_API void duckdb_log_storage_set_name(duckdb_log_storage log_storage, const char *name);--/*!-Registers a custom log storage for the logger.--* @param database A database object.-* @param log_storage The log storage object.-* @return Whether the registration was successful.-*/-DUCKDB_C_API duckdb_state duckdb_register_log_storage(duckdb_database database, duckdb_log_storage log_storage);--#endif+//+//===----------------------------------------------------------------------===//+//+// !!!!!!!+// WARNING: this file is autogenerated, manual changes will be overwritten+// !!!!!!!++#pragma once++#include <stdbool.h>+#include <stdint.h>+#include <stddef.h>++#ifdef __cplusplus+extern "C" {+#endif++#ifndef DUCKDB_C_API+#ifdef _WIN32+#ifdef DUCKDB_STATIC_BUILD+#define DUCKDB_C_API+#elif defined(DUCKDB_BUILD_LIBRARY) && !defined(DUCKDB_BUILD_LOADABLE_EXTENSION)+#define DUCKDB_C_API __declspec(dllexport)+#else+#define DUCKDB_C_API __declspec(dllimport)+#endif+#else+#if defined(__GNUC__) || defined(__clang__)+#define DUCKDB_C_API __attribute__((visibility("default")))+#else+#define DUCKDB_C_API+#endif+#endif+#endif++#ifndef DUCKDB_EXTENSION_API+#ifdef _WIN32+#ifdef DUCKDB_STATIC_BUILD+#define DUCKDB_EXTENSION_API+#else+#define DUCKDB_EXTENSION_API __declspec(dllexport)+#endif+#else+#if defined(__GNUC__) || defined(__clang__)+#define DUCKDB_EXTENSION_API __attribute__((visibility("default")))+#else+#define DUCKDB_EXTENSION_API+#endif+#endif+#endif++#if defined(__GNUC__) || defined(__clang__)+#define DUCKDB_DEPRECATED \+ __attribute__((deprecated("This function is deprecated and will be removed in a future version.")))+#elif defined(_MSC_VER)+#define DUCKDB_DEPRECATED __declspec(deprecated("This function is deprecated and will be removed in a future version."))+#else+#define DUCKDB_DEPRECATED+#endif++//===--------------------------------------------------------------------===//+// API version+//===--------------------------------------------------------------------===//+//! The API version this translation unit targets. Define all three to compile against an+//! older surface than the one this header describes.+#if !defined(DUCKDB_API_VERSION_MAJOR) && !defined(DUCKDB_API_VERSION_MINOR) && !defined(DUCKDB_API_VERSION_PATCH)+#define DUCKDB_API_VERSION_MAJOR 1+#define DUCKDB_API_VERSION_MINOR 5+#define DUCKDB_API_VERSION_PATCH 6+#elif !(defined(DUCKDB_API_VERSION_MAJOR) && defined(DUCKDB_API_VERSION_MINOR) && defined(DUCKDB_API_VERSION_PATCH))+#error "define all or none of the DUCKDB_API_VERSION_MAJOR / _MINOR / _PATCH macros"+#endif++//! True when the targeted version is x.y.z or newer.+#define DUCKDB_API_VERSION_AT_LEAST(x, y, z) \+ (DUCKDB_API_VERSION_MAJOR > (x) || \+ (DUCKDB_API_VERSION_MAJOR == (x) && \+ (DUCKDB_API_VERSION_MINOR > (y) || (DUCKDB_API_VERSION_MINOR == (y) && DUCKDB_API_VERSION_PATCH >= (z)))))++//! True when the targeted version is older than x.y.z.+#define DUCKDB_API_VERSION_BELOW(x, y, z) (!DUCKDB_API_VERSION_AT_LEAST((x), (y), (z)))++//===--------------------------------------------------------------------===//+// Surface switches+//===--------------------------------------------------------------------===//+//! Set to 1 to compile the deprecated surface, 0 to omit it. Defaults from the+//! older DUCKDB_API_NO_DEPRECATED macro when that is what the consumer defines.+#if !defined(DUCKDB_API_ALLOW_DEPRECATED)+#ifdef DUCKDB_API_NO_DEPRECATED+#define DUCKDB_API_ALLOW_DEPRECATED 0+#else+#define DUCKDB_API_ALLOW_DEPRECATED 1+#endif+#endif++//! Set to 1 to compile the unstable surface, 0 to omit it. Defaults from the+//! older DUCKDB_EXTENSION_API_VERSION_UNSTABLE macro when that is what the consumer defines.+#if !defined(DUCKDB_API_ALLOW_UNSTABLE)+#ifdef DUCKDB_EXTENSION_API_VERSION_UNSTABLE+#define DUCKDB_API_ALLOW_UNSTABLE 1+#else+#define DUCKDB_API_ALLOW_UNSTABLE 0+#endif+#endif++//! The unstable surface is not a promise, so it is not part of any released+//! version: its constructs may change shape or vanish. Targeting an older version+//! while opting into it would hand back today's shapes under names that version+//! never promised, so the two are mutually exclusive.+#if DUCKDB_API_ALLOW_UNSTABLE && !DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+#error "the unstable surface requires targeting the newest API version"+#endif++//===--------------------------------------------------------------------===//+// General type definitions+//===--------------------------------------------------------------------===//++//! The internal representation of a VARCHAR (string_t). If the VARCHAR does not+//! exceed 12 characters, then we inline it. Otherwise, we inline a four-byte prefix for faster+//! string comparisons and store a pointer to the remaining characters. This is a non-+//! owning structure, i.e., it does not have to be freed.+typedef struct {+ union {+ struct {+ uint32_t length;+ char prefix[4];+ char *ptr;+ } pointer;+ struct {+ uint32_t length;+ char inlined[12];+ } inlined;+ } value;+} duckdb_string_t;++//! The returned state of different functions. Legacy naming: values use DuckDB prefix without underscore.+typedef enum duckdb_state { DuckDBSuccess = 0, DuckDBError = 1 } duckdb_state;++struct ArrowSchema;+struct ArrowArray;++typedef uint64_t idx_t;++/* ============================================================================+ * MODULE: common_enums+ * ============================================================================ */++/* --- Enums for common_enums --- */++/*!+ * An enum over DuckDB's internal types.+ *+ * history:+ * - stable: v0.1.0+ */+typedef enum DUCKDB_TYPE {+ DUCKDB_TYPE_INVALID = 0,++ //! bool+ DUCKDB_TYPE_BOOLEAN = 1,++ //! int8_t+ DUCKDB_TYPE_TINYINT = 2,++ //! int16_t+ DUCKDB_TYPE_SMALLINT = 3,++ //! int32_t+ DUCKDB_TYPE_INTEGER = 4,++ //! int64_t+ DUCKDB_TYPE_BIGINT = 5,++ //! uint8_t+ DUCKDB_TYPE_UTINYINT = 6,++ //! uint16_t+ DUCKDB_TYPE_USMALLINT = 7,++ //! uint32_t+ DUCKDB_TYPE_UINTEGER = 8,++ //! uint64_t+ DUCKDB_TYPE_UBIGINT = 9,++ //! float+ DUCKDB_TYPE_FLOAT = 10,++ //! double+ DUCKDB_TYPE_DOUBLE = 11,++ //! duckdb_timestamp (microseconds)+ DUCKDB_TYPE_TIMESTAMP = 12,++ //! duckdb_date+ DUCKDB_TYPE_DATE = 13,++ //! duckdb_time+ DUCKDB_TYPE_TIME = 14,++ //! duckdb_interval+ DUCKDB_TYPE_INTERVAL = 15,++ //! duckdb_hugeint+ DUCKDB_TYPE_HUGEINT = 16,++ //! const char*+ DUCKDB_TYPE_VARCHAR = 17,++ //! duckdb_blob+ DUCKDB_TYPE_BLOB = 18,++ //! duckdb_decimal+ DUCKDB_TYPE_DECIMAL = 19,++ //! duckdb_timestamp_s (seconds)+ DUCKDB_TYPE_TIMESTAMP_S = 20,++ //! duckdb_timestamp_ms (milliseconds)+ DUCKDB_TYPE_TIMESTAMP_MS = 21,++ //! duckdb_timestamp_ns (nanoseconds)+ DUCKDB_TYPE_TIMESTAMP_NS = 22,++ //! enum type, only useful as logical type+ DUCKDB_TYPE_ENUM = 23,++ //! list type, only useful as logical type+ DUCKDB_TYPE_LIST = 24,++ //! struct type, only useful as logical type+ DUCKDB_TYPE_STRUCT = 25,++ //! map type, only useful as logical type+ DUCKDB_TYPE_MAP = 26,++ //! duckdb_hugeint+ DUCKDB_TYPE_UUID = 27,++ //! union type, only useful as logical type+ DUCKDB_TYPE_UNION = 28,++ //! duckdb_bit+ DUCKDB_TYPE_BIT = 29,++ //! duckdb_time_tz+ DUCKDB_TYPE_TIME_TZ = 30,++ //! duckdb_timestamp (microseconds)+ DUCKDB_TYPE_TIMESTAMP_TZ = 31,++ //! duckdb_uhugeint+ DUCKDB_TYPE_UHUGEINT = 32,++ //! duckdb_array, only useful as logical type+ DUCKDB_TYPE_ARRAY = 33,++ //! enum type, only useful as logical type+ DUCKDB_TYPE_ANY = 34,++ //! duckdb_bignum+ DUCKDB_TYPE_BIGNUM = 35,++ //! enum type, only useful as logical type+ DUCKDB_TYPE_SQLNULL = 36,++ //! enum type, only useful as logical type+ DUCKDB_TYPE_STRING_LITERAL = 37,++ //! enum type, only useful as logical type+ DUCKDB_TYPE_INTEGER_LITERAL = 38,++ //! duckdb_time_ns (nanoseconds)+ DUCKDB_TYPE_TIME_NS = 39,++ //! GEOMETRY type, WKB blob+ DUCKDB_TYPE_GEOMETRY = 40,++ //! VARIANT type+ DUCKDB_TYPE_VARIANT = 41,+} DUCKDB_TYPE;++/*!+ * An enum over the pending state of a pending query result.+ *+ * history:+ * - stable: v0.5.0+ */+typedef enum duckdb_pending_state {+ DUCKDB_PENDING_RESULT_READY = 0,+ DUCKDB_PENDING_RESULT_NOT_READY = 1,+ DUCKDB_PENDING_ERROR = 2,+ DUCKDB_PENDING_NO_TASKS_AVAILABLE = 3,+} duckdb_pending_state;++/*!+ * An enum over DuckDB's different result types.+ *+ * history:+ * - stable: v0.10.0+ */+typedef enum duckdb_result_type {+ DUCKDB_RESULT_TYPE_INVALID = 0,+ DUCKDB_RESULT_TYPE_CHANGED_ROWS = 1,+ DUCKDB_RESULT_TYPE_NOTHING = 2,+ DUCKDB_RESULT_TYPE_QUERY_RESULT = 3,+} duckdb_result_type;++/*!+ * An enum over DuckDB's different statement types.+ *+ * history:+ * - stable: v0.10.0+ */+typedef enum duckdb_statement_type {+ DUCKDB_STATEMENT_TYPE_INVALID = 0,+ DUCKDB_STATEMENT_TYPE_SELECT = 1,+ DUCKDB_STATEMENT_TYPE_INSERT = 2,+ DUCKDB_STATEMENT_TYPE_UPDATE = 3,+ DUCKDB_STATEMENT_TYPE_EXPLAIN = 4,+ DUCKDB_STATEMENT_TYPE_DELETE = 5,+ DUCKDB_STATEMENT_TYPE_PREPARE = 6,+ DUCKDB_STATEMENT_TYPE_CREATE = 7,+ DUCKDB_STATEMENT_TYPE_EXECUTE = 8,+ DUCKDB_STATEMENT_TYPE_ALTER = 9,+ DUCKDB_STATEMENT_TYPE_TRANSACTION = 10,+ DUCKDB_STATEMENT_TYPE_COPY = 11,+ DUCKDB_STATEMENT_TYPE_ANALYZE = 12,+ DUCKDB_STATEMENT_TYPE_VARIABLE_SET = 13,+ DUCKDB_STATEMENT_TYPE_CREATE_FUNC = 14,+ DUCKDB_STATEMENT_TYPE_DROP = 15,+ DUCKDB_STATEMENT_TYPE_EXPORT = 16,+ DUCKDB_STATEMENT_TYPE_PRAGMA = 17,+ DUCKDB_STATEMENT_TYPE_VACUUM = 18,+ DUCKDB_STATEMENT_TYPE_CALL = 19,+ DUCKDB_STATEMENT_TYPE_SET = 20,+ DUCKDB_STATEMENT_TYPE_LOAD = 21,+ DUCKDB_STATEMENT_TYPE_RELATION = 22,+ DUCKDB_STATEMENT_TYPE_EXTENSION = 23,+ DUCKDB_STATEMENT_TYPE_LOGICAL_PLAN = 24,+ DUCKDB_STATEMENT_TYPE_ATTACH = 25,+ DUCKDB_STATEMENT_TYPE_DETACH = 26,+ DUCKDB_STATEMENT_TYPE_MULTI = 27,+ DUCKDB_STATEMENT_TYPE_COPY_DATABASE = 28,+ DUCKDB_STATEMENT_TYPE_UPDATE_EXTENSIONS = 29,+ DUCKDB_STATEMENT_TYPE_MERGE_INTO = 30,+} duckdb_statement_type;++/*!+ * An enum over DuckDB's different error types.+ *+ * history:+ * - stable: v1.1.0+ */+typedef enum duckdb_error_type {+ DUCKDB_ERROR_INVALID = 0,+ DUCKDB_ERROR_OUT_OF_RANGE = 1,+ DUCKDB_ERROR_CONVERSION = 2,+ DUCKDB_ERROR_UNKNOWN_TYPE = 3,+ DUCKDB_ERROR_DECIMAL = 4,+ DUCKDB_ERROR_MISMATCH_TYPE = 5,+ DUCKDB_ERROR_DIVIDE_BY_ZERO = 6,+ DUCKDB_ERROR_OBJECT_SIZE = 7,+ DUCKDB_ERROR_INVALID_TYPE = 8,+ DUCKDB_ERROR_SERIALIZATION = 9,+ DUCKDB_ERROR_TRANSACTION = 10,+ DUCKDB_ERROR_NOT_IMPLEMENTED = 11,+ DUCKDB_ERROR_EXPRESSION = 12,+ DUCKDB_ERROR_CATALOG = 13,+ DUCKDB_ERROR_PARSER = 14,+ DUCKDB_ERROR_PLANNER = 15,+ DUCKDB_ERROR_SCHEDULER = 16,+ DUCKDB_ERROR_EXECUTOR = 17,+ DUCKDB_ERROR_CONSTRAINT = 18,+ DUCKDB_ERROR_INDEX = 19,+ DUCKDB_ERROR_STAT = 20,+ DUCKDB_ERROR_CONNECTION = 21,+ DUCKDB_ERROR_SYNTAX = 22,+ DUCKDB_ERROR_SETTINGS = 23,+ DUCKDB_ERROR_BINDER = 24,+ DUCKDB_ERROR_NETWORK = 25,+ DUCKDB_ERROR_OPTIMIZER = 26,+ DUCKDB_ERROR_NULL_POINTER = 27,+ DUCKDB_ERROR_IO = 28,+ DUCKDB_ERROR_INTERRUPT = 29,+ DUCKDB_ERROR_FATAL = 30,+ DUCKDB_ERROR_INTERNAL = 31,+ DUCKDB_ERROR_INVALID_INPUT = 32,+ DUCKDB_ERROR_OUT_OF_MEMORY = 33,+ DUCKDB_ERROR_PERMISSION = 34,+ DUCKDB_ERROR_PARAMETER_NOT_RESOLVED = 35,+ DUCKDB_ERROR_PARAMETER_NOT_ALLOWED = 36,+ DUCKDB_ERROR_DEPENDENCY = 37,+ DUCKDB_ERROR_HTTP = 38,+ DUCKDB_ERROR_MISSING_EXTENSION = 39,+ DUCKDB_ERROR_AUTOLOAD = 40,+ DUCKDB_ERROR_SEQUENCE = 41,+ DUCKDB_INVALID_CONFIGURATION = 42,+} duckdb_error_type;++/*!+ * An enum over DuckDB's different cast modes.+ *+ * history:+ * - stable: v1.1.0+ */+typedef enum duckdb_cast_mode {+ DUCKDB_CAST_NORMAL = 0,+ DUCKDB_CAST_TRY = 1,+} duckdb_cast_mode;++/*!+ * Flags for opening files.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef enum duckdb_file_flag {+ DUCKDB_FILE_FLAG_INVALID = 0,++ //! Open the file with read capabilities.+ DUCKDB_FILE_FLAG_READ = 1,++ //! Open the file with write capabilities.+ DUCKDB_FILE_FLAG_WRITE = 2,++ //! Create a new file, or open if it already exists.+ DUCKDB_FILE_FLAG_CREATE = 3,++ //! Create a new file, or fail if it already exists.+ DUCKDB_FILE_FLAG_CREATE_NEW = 4,++ //! Open the file in append mode.+ DUCKDB_FILE_FLAG_APPEND = 5,+} duckdb_file_flag;++/*!+ * An enum over DuckDB's configuration option scopes.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef enum duckdb_config_option_scope {+ DUCKDB_CONFIG_OPTION_SCOPE_INVALID = 0,++ //! The option is set for the duration of the current transaction only. CURRENTLY NOT IMPLEMENTED.+ DUCKDB_CONFIG_OPTION_SCOPE_LOCAL = 1,++ //! The option is set for the current session/connection only.+ DUCKDB_CONFIG_OPTION_SCOPE_SESSION = 2,++ //! Set the option globally for all sessions/connections.+ DUCKDB_CONFIG_OPTION_SCOPE_GLOBAL = 3,+} duckdb_config_option_scope;++/*!+ * An enum over DuckDB's catalog entry types.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef enum duckdb_catalog_entry_type {+ DUCKDB_CATALOG_ENTRY_TYPE_INVALID = 0,+ DUCKDB_CATALOG_ENTRY_TYPE_TABLE = 1,+ DUCKDB_CATALOG_ENTRY_TYPE_SCHEMA = 2,+ DUCKDB_CATALOG_ENTRY_TYPE_VIEW = 3,+ DUCKDB_CATALOG_ENTRY_TYPE_INDEX = 4,+ DUCKDB_CATALOG_ENTRY_TYPE_PREPARED_STATEMENT = 5,+ DUCKDB_CATALOG_ENTRY_TYPE_SEQUENCE = 6,+ DUCKDB_CATALOG_ENTRY_TYPE_COLLATION = 7,+ DUCKDB_CATALOG_ENTRY_TYPE_TYPE = 8,+ DUCKDB_CATALOG_ENTRY_TYPE_DATABASE = 9,+} duckdb_catalog_entry_type;++/* --- Struct forward declarations for common_enums --- */++/* --- Types for common_enums --- */++/*!+ * Alias for the DUCKDB_TYPE enum.+ *+ * history:+ * - stable: v0.1.0+ */+typedef DUCKDB_TYPE duckdb_type;++/* --- Constants for common_enums --- */++/* --- Function pointer typedefs for common_enums --- */++/* --- Functions for common_enums --- */++/* --- Struct definitions for common_enums --- */++/* ============================================================================+ * MODULE: common_types+ * ============================================================================ */++/* --- Enums for common_types --- */++/* --- Struct forward declarations for common_types --- */++typedef struct duckdb_date duckdb_date;++typedef struct duckdb_date_struct duckdb_date_struct;++typedef struct duckdb_time duckdb_time;++typedef struct duckdb_time_struct duckdb_time_struct;++typedef struct duckdb_time_ns duckdb_time_ns;++typedef struct duckdb_time_tz duckdb_time_tz;++typedef struct duckdb_time_tz_struct duckdb_time_tz_struct;++typedef struct duckdb_timestamp duckdb_timestamp;++typedef struct duckdb_timestamp_struct duckdb_timestamp_struct;++typedef struct duckdb_timestamp_s duckdb_timestamp_s;++typedef struct duckdb_timestamp_ms duckdb_timestamp_ms;++typedef struct duckdb_timestamp_ns duckdb_timestamp_ns;++typedef struct duckdb_interval duckdb_interval;++typedef struct duckdb_hugeint duckdb_hugeint;++typedef struct duckdb_uhugeint duckdb_uhugeint;++typedef struct duckdb_decimal duckdb_decimal;++typedef struct duckdb_query_progress_type duckdb_query_progress_type;++typedef struct duckdb_list_entry duckdb_list_entry;++typedef struct duckdb_column duckdb_column;++typedef struct duckdb_string duckdb_string;++typedef struct duckdb_blob duckdb_blob;++typedef struct duckdb_bit duckdb_bit;++typedef struct duckdb_bignum duckdb_bignum;++typedef struct duckdb_result duckdb_result;++/* --- Types for common_types --- */++/* --- Constants for common_types --- */++/* --- Function pointer typedefs for common_types --- */++/* --- Functions for common_types --- */++/* --- Struct definitions for common_types --- */++/*!+ * DATE is stored as days since 1970-01-01.+ *+ * history:+ * - stable: v0.1.0+ */+struct duckdb_date {+ int32_t days;+};++/*!+ * Decomposed date components.+ *+ * history:+ * - stable: v0.2.9+ */+struct duckdb_date_struct {+ int32_t year;+ int8_t month;+ int8_t day;+};++/*!+ * TIME is stored as microseconds since 00:00:00.+ *+ * history:+ * - stable: v0.1.0+ */+struct duckdb_time {+ int64_t micros;+};++/*!+ * Decomposed time components.+ *+ * history:+ * - stable: v0.2.9+ */+struct duckdb_time_struct {+ int8_t hour;+ int8_t min;+ int8_t sec;+ int32_t micros;+};++/*!+ * TIME_NS is stored as nanoseconds since 00:00:00.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ */+struct duckdb_time_ns {+ int64_t nanos;+};++/*!+ * TIME_TZ stored as 40 bits for microseconds and 24 bits for offset.+ *+ * history:+ * - stable: v0.10.0+ */+struct duckdb_time_tz {+ uint64_t bits;+};++/*!+ * Decomposed TIME_TZ components.+ *+ * history:+ * - stable: v0.10.0+ */+struct duckdb_time_tz_struct {+ duckdb_time_struct time;+ int32_t offset;+};++/*!+ * TIMESTAMP is stored as microseconds since 1970-01-01.+ *+ * history:+ * - stable: v0.1.0+ */+struct duckdb_timestamp {+ int64_t micros;+};++/*!+ * Decomposed timestamp components.+ *+ * history:+ * - stable: v0.2.9+ */+struct duckdb_timestamp_struct {+ duckdb_date_struct date;+ duckdb_time_struct time;+};++/*!+ * TIMESTAMP_S is stored as seconds since 1970-01-01.+ *+ * history:+ * - stable: v1.2.0+ */+struct duckdb_timestamp_s {+ int64_t seconds;+};++/*!+ * TIMESTAMP_MS is stored as milliseconds since 1970-01-01.+ *+ * history:+ * - stable: v1.2.0+ */+struct duckdb_timestamp_ms {+ int64_t millis;+};++/*!+ * TIMESTAMP_NS is stored as nanoseconds since 1970-01-01.+ *+ * history:+ * - stable: v1.2.0+ */+struct duckdb_timestamp_ns {+ int64_t nanos;+};++/*!+ * INTERVAL is stored in months, days, and micros.+ *+ * history:+ * - stable: v0.2.1+ */+struct duckdb_interval {+ int32_t months;+ int32_t days;+ int64_t micros;+};++/*!+ * HUGEINT is composed of a lower and upper component. Value is upper * 2^64 + lower.+ *+ * history:+ * - stable: v0.2.1+ */+struct duckdb_hugeint {+ uint64_t lower;+ int64_t upper;+};++/*!+ * UHUGEINT is composed of a lower and upper component. Value is upper * 2^64 + lower.+ *+ * history:+ * - stable: v0.10.0+ */+struct duckdb_uhugeint {+ uint64_t lower;+ uint64_t upper;+};++/*!+ * DECIMAL is composed of a width and a scale. Value is stored in a HUGEINT.+ *+ * history:+ * - stable: v0.3.3+ */+struct duckdb_decimal {+ uint8_t width;+ uint8_t scale;+ duckdb_hugeint value;+};++/*!+ * A type holding information about the query execution progress.+ *+ * history:+ * - stable: v0.10.0+ */+struct duckdb_query_progress_type {+ double percentage;+ uint64_t rows_processed;+ uint64_t total_rows_to_process;+};++/*!+ * Internal representation of a LIST metadata entry.+ *+ * history:+ * - stable: v0.7.0+ */+struct duckdb_list_entry {+ uint64_t offset;+ uint64_t length;+};++/*!+ * A column in a result. Use accessor functions rather than accessing fields directly.+ *+ * history:+ * - stable: v0.1.0+ */+struct duckdb_column {+ void *deprecated_data;+ bool *deprecated_nullmask;+ duckdb_type deprecated_type;+ char *deprecated_name;+ void *internal_data;+};++/*!+ * A DuckDB string (char* + size). Free data with duckdb_free.+ *+ * history:+ * - stable: v0.6.0+ */+struct duckdb_string {+ char *data;+ idx_t size;+};++/*!+ * A DuckDB BLOB (void* + size). Free data with duckdb_free.+ *+ * history:+ * - stable: v0.2.5+ */+struct duckdb_blob {+ void *data;+ idx_t size;+};++/*!+ * A DuckDB BIT (uint8_t* + size). Free data with duckdb_free.+ *+ * history:+ * - stable: v1.2.0+ */+struct duckdb_bit {+ uint8_t *data;+ idx_t size;+};++/*!+ * A DuckDB BIGNUM (uint8_t* + size + is_negative). The absolute value is stored in data in big endian format. Free data+ * with duckdb_free.+ *+ * history:+ * - stable: v1.2.0+ */+struct duckdb_bignum {+ uint8_t *data;+ idx_t size;+ bool is_negative;+};++/*!+ * A query result. Must be freed with duckdb_destroy_result.+ *+ * history:+ * - stable: v0.1.0+ */+struct duckdb_result {+ idx_t deprecated_column_count;+ idx_t deprecated_row_count;+ idx_t deprecated_rows_changed;+ duckdb_column *deprecated_columns;+ char *deprecated_error_message;+ void *internal_data;+};++/* ============================================================================+ * MODULE: common_handles+ * ============================================================================ */++/* --- Enums for common_handles --- */++/* --- Struct forward declarations for common_handles --- */++/* --- Types for common_handles --- */++/*!+ * A database instance cache. Must be destroyed with duckdb_destroy_instance_cache.+ *+ * history:+ * - unstable: v1.2.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_instance_cache {+ void *internal_ptr;+} * duckdb_instance_cache;++/*!+ * A database object. Must be closed with duckdb_close.+ *+ * history:+ * - stable: v0.1.0+ */+typedef struct _duckdb_database {+ void *internal_ptr;+} * duckdb_database;++/*!+ * A connection to a duckdb database. Must be closed with duckdb_disconnect.+ *+ * history:+ * - stable: v0.1.0+ */+typedef struct _duckdb_connection {+ void *internal_ptr;+} * duckdb_connection;++/*!+ * A client context of a duckdb connection. Must be destroyed with duckdb_destroy_client_context.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_client_context {+ void *internal_ptr;+} * duckdb_client_context;++/*!+ * A prepared statement. Must be destroyed with duckdb_destroy_prepare.+ *+ * history:+ * - stable: v0.1.0+ */+typedef struct _duckdb_prepared_statement {+ void *internal_ptr;+} * duckdb_prepared_statement;++/*!+ * Extracted statements. Must be destroyed with duckdb_destroy_extracted.+ *+ * history:+ * - stable: v0.7.0+ */+typedef struct _duckdb_extracted_statements {+ void *internal_ptr;+} * duckdb_extracted_statements;++/*!+ * A pending query result. Must be destroyed with duckdb_destroy_pending.+ *+ * history:+ * - stable: v0.5.0+ */+typedef struct _duckdb_pending_result {+ void *internal_ptr;+} * duckdb_pending_result;++/*!+ * The appender enables fast data loading into DuckDB. Must be destroyed with duckdb_appender_destroy.+ *+ * history:+ * - stable: v0.2.5+ */+typedef struct _duckdb_appender {+ void *internal_ptr;+} * duckdb_appender;++/*!+ * The table description allows querying information about the table. Must be destroyed with+ * duckdb_table_description_destroy.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_table_description {+ void *internal_ptr;+} * duckdb_table_description;++/*!+ * The configuration for opening a database. Must be destroyed with duckdb_destroy_config.+ *+ * history:+ * - stable: v0.2.8+ */+typedef struct _duckdb_config {+ void *internal_ptr;+} * duckdb_config;++/*!+ * A custom configuration option instance. Must be destroyed with duckdb_destroy_config_option.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_config_option {+ void *internal_ptr;+} * duckdb_config_option;++/*!+ * A logical type. Must be destroyed with duckdb_destroy_logical_type.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_logical_type {+ void *internal_ptr;+} * duckdb_logical_type;++/*!+ * Holds extra information to register a custom logical type. Reserved for future use.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_create_type_info {+ void *internal_ptr;+} * duckdb_create_type_info;++/*!+ * Contains a data chunk of a duckdb_result. Must be destroyed with duckdb_destroy_data_chunk.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_data_chunk {+ void *internal_ptr;+} * duckdb_data_chunk;++/*!+ * A value of a logical type. Must be destroyed with duckdb_destroy_value.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_value {+ void *internal_ptr;+} * duckdb_value;++/*!+ * Holds a recursive tree containing profiling metrics.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_profiling_info {+ void *internal_ptr;+} * duckdb_profiling_info;++/*!+ * Holds error data. Must be destroyed with duckdb_destroy_error_data.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_error_data {+ void *internal_ptr;+} * duckdb_error_data;++/*!+ * Holds a bound expression. Must be destroyed with duckdb_destroy_expression.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_expression {+ void *internal_ptr;+} * duckdb_expression;++/*!+ * A vector, either standalone or a column in a data chunk.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_vector {+ void *internal_ptr;+} * duckdb_vector;++/*!+ * A selection vector defining a selection on top of a vector. Must be destroyed with duckdb_destroy_selection_vector.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_selection_vector {+ void *internal_ptr;+} * duckdb_selection_vector;++/*!+ * Arrow options for transforming DuckDB schema/chunks to Arrow. Must be destroyed with duckdb_destroy_arrow_options.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_arrow_options {+ void *internal_ptr;+} * duckdb_arrow_options;++/*!+ * An arrow result set. Must be destroyed with duckdb_destroy_arrow.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.5.6+ */+typedef struct _duckdb_arrow {+ void *internal_ptr;+} * duckdb_arrow;++/*!+ * An arrow stream wrapper. Must be destroyed with duckdb_destroy_arrow_stream.+ *+ * history:+ * - stable: v0.9.0+ * - deprecated: v1.5.6+ */+typedef struct _duckdb_arrow_stream {+ void *internal_ptr;+} * duckdb_arrow_stream;++/*!+ * An arrow schema wrapper.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.5.6+ */+typedef struct _duckdb_arrow_schema {+ void *internal_ptr;+} * duckdb_arrow_schema;++/*!+ * An arrow array wrapper.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.5.6+ */+typedef struct _duckdb_arrow_array {+ void *internal_ptr;+} * duckdb_arrow_array;++/*!+ * Holds a converted Arrow schema. Must be destroyed with duckdb_destroy_arrow_converted_schema.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_arrow_converted_schema {+ void *internal_ptr;+} * duckdb_arrow_converted_schema;++/*!+ * File open options. Must be destroyed with duckdb_destroy_file_open_options.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_file_open_options {+ void *internal_ptr;+} * duckdb_file_open_options;++/*!+ * A file system instance. Must be destroyed with duckdb_destroy_file_system.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_file_system {+ void *internal_ptr;+} * duckdb_file_system;++/*!+ * A file handle. Must be destroyed with duckdb_destroy_file_handle.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_file_handle {+ void *internal_ptr;+} * duckdb_file_handle;++/*!+ * A handle to a database catalog. Must be destroyed with duckdb_destroy_catalog.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_catalog {+ void *internal_ptr;+} * duckdb_catalog;++/*!+ * A handle to a catalog entry. Must be destroyed with duckdb_destroy_catalog_entry.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_catalog_entry {+ void *internal_ptr;+} * duckdb_catalog_entry;++/*!+ * Used for threading, contains a task state. Must be destroyed with duckdb_destroy_task_state.+ *+ * history:+ * - stable: v0.5.0+ */+typedef void *duckdb_task_state;++/*!+ * A scalar function. Must be destroyed with duckdb_destroy_scalar_function.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_scalar_function {+ void *internal_ptr;+} * duckdb_scalar_function;++/*!+ * A scalar function set. Must be destroyed with duckdb_destroy_scalar_function_set.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_scalar_function_set {+ void *internal_ptr;+} * duckdb_scalar_function_set;++/*!+ * An aggregate function. Must be destroyed with duckdb_destroy_aggregate_function.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_aggregate_function {+ void *internal_ptr;+} * duckdb_aggregate_function;++/*!+ * An aggregate function set. Must be destroyed with duckdb_destroy_aggregate_function_set.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_aggregate_function_set {+ void *internal_ptr;+} * duckdb_aggregate_function_set;++/*!+ * The state of an aggregate function.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_aggregate_state {+ void *internal_ptr;+} * duckdb_aggregate_state;++/*!+ * A table function. Must be destroyed with duckdb_destroy_table_function.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_table_function {+ void *internal_ptr;+} * duckdb_table_function;++/*!+ * A cast function. Must be destroyed with duckdb_destroy_cast_function.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_cast_function {+ void *internal_ptr;+} * duckdb_cast_function;++/*!+ * A COPY function. Must be destroyed with duckdb_destroy_copy_function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_copy_function {+ void *internal_ptr;+} * duckdb_copy_function;++/*!+ * Info for the bind function of a COPY function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_copy_function_bind_info {+ void *internal_ptr;+} * duckdb_copy_function_bind_info;++/*!+ * Info for the global initialization function of a COPY function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_copy_function_global_init_info {+ void *internal_ptr;+} * duckdb_copy_function_global_init_info;++/*!+ * Info for the sink function of a COPY function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_copy_function_sink_info {+ void *internal_ptr;+} * duckdb_copy_function_sink_info;++/*!+ * Info for the finalize function of a COPY function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_copy_function_finalize_info {+ void *internal_ptr;+} * duckdb_copy_function_finalize_info;++/*!+ * Info passed to a replacement scan callback.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_replacement_scan_info {+ void *internal_ptr;+} * duckdb_replacement_scan_info;++/*!+ * A log storage instance. Must be destroyed with duckdb_destroy_log_storage.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef struct _duckdb_log_storage {+ void *internal_ptr;+} * duckdb_log_storage;++/*!+ * Additional function info.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_function_info {+ void *internal_ptr;+} * duckdb_function_info;++/*!+ * The bind info of a function.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_bind_info {+ void *internal_ptr;+} * duckdb_bind_info;++/*!+ * Additional function initialization info.+ *+ * history:+ * - stable: v0.3.3+ */+typedef struct _duckdb_init_info {+ void *internal_ptr;+} * duckdb_init_info;++/*!+ * Holds the state of the C API extension initialization process.+ *+ * history:+ * - stable: v1.1.0+ */+typedef struct _duckdb_extension_info {+ void *internal_ptr;+} * duckdb_extension_info;++/*!+ * Type definition for the data pointers of selection vectors.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ */+#ifndef DUCKDB_TYPEDEF_SEL_T+#define DUCKDB_TYPEDEF_SEL_T+typedef uint32_t sel_t;+#endif++/* --- Constants for common_handles --- */++/* --- Function pointer typedefs for common_handles --- */++/*!+ * The callback to destroy data.+ *+ * history:+ * - stable: v0.3.3+ */+typedef void (*duckdb_delete_callback_t)(void *data);++/*!+ * The callback to copy data.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ */+typedef void *(*duckdb_copy_callback_t)(void *data);++/*!+ * The bind function of a table function.+ *+ * history:+ * - stable: v0.3.3+ */+typedef void (*duckdb_table_function_bind_t)(duckdb_bind_info info);++/*!+ * The init function of a table function.+ *+ * history:+ * - stable: v0.3.3+ */+typedef void (*duckdb_table_function_init_t)(duckdb_init_info info);++/*!+ * The main function of a table function.+ *+ * history:+ * - stable: v0.3.3+ */+typedef void (*duckdb_table_function_t)(duckdb_function_info info, duckdb_data_chunk output);++/*!+ * The callback function for replacement scans.+ *+ * history:+ * - stable: v0.3.3+ */+typedef void (*duckdb_replacement_callback_t)(duckdb_replacement_scan_info info, const char *table_name, void *data);++/*!+ * The callback to write a log entry.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef void (*duckdb_logger_write_log_entry_t)(void *extra_data, duckdb_timestamp *timestamp, const char *level,+ const char *log_type, const char *log_message);++/*!+ * The sink function of a copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef void (*duckdb_copy_function_sink_t)(duckdb_copy_function_sink_info info, duckdb_data_chunk input);++/*!+ * The finalize function of a copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef void (*duckdb_copy_function_finalize_t)(duckdb_copy_function_finalize_info info);++/*!+ * A function to get the size of an aggregate state.+ *+ * history:+ * - stable: v1.1.0+ */+typedef idx_t (*duckdb_aggregate_state_size)(duckdb_function_info info);++/*!+ * A function to initialize an aggregate state.+ *+ * history:+ * - stable: v1.1.0+ */+typedef void (*duckdb_aggregate_init_t)(duckdb_function_info info, duckdb_aggregate_state state);++/*!+ * An optional function to destroy an aggregate state.+ *+ * history:+ * - stable: v1.1.0+ */+typedef void (*duckdb_aggregate_destroy_t)(duckdb_aggregate_state *states, idx_t count);++/*!+ * A function to update a set of aggregate states with new values.+ *+ * history:+ * - stable: v1.1.0+ */+typedef void (*duckdb_aggregate_update_t)(duckdb_function_info info, duckdb_data_chunk input,+ duckdb_aggregate_state *states);++/*!+ * A function to combine aggregate states.+ *+ * history:+ * - stable: v1.1.0+ */+typedef void (*duckdb_aggregate_combine_t)(duckdb_function_info info, duckdb_aggregate_state *source,+ duckdb_aggregate_state *target, idx_t count);++/*!+ * A function to finalize aggregate states into a result vector.+ *+ * history:+ * - stable: v1.1.0+ */+typedef void (*duckdb_aggregate_finalize_t)(duckdb_function_info info, duckdb_aggregate_state *source,+ duckdb_vector result, idx_t count, idx_t offset);++/*!+ * The bind function of a scalar function.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ */+typedef void (*duckdb_scalar_function_bind_t)(duckdb_bind_info info);++/*!+ * The init function of a scalar function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef void (*duckdb_scalar_function_init_t)(duckdb_init_info info);++/*!+ * The main function of a scalar function.+ *+ * history:+ * - stable: v1.1.0+ */+typedef void (*duckdb_scalar_function_t)(duckdb_function_info info, duckdb_data_chunk input, duckdb_vector output);++/*!+ * The function to cast from an input vector to an output vector.+ *+ * history:+ * - stable: v1.1.0+ */+typedef bool (*duckdb_cast_function_t)(duckdb_function_info info, idx_t count, duckdb_vector input,+ duckdb_vector output);++/*!+ * The bind function of a copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef void (*duckdb_copy_function_bind_t)(duckdb_copy_function_bind_info info);++/*!+ * The global initialization function of a copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ */+typedef void (*duckdb_copy_function_global_init_t)(duckdb_copy_function_global_init_info info);++/* --- Functions for common_handles --- */++/* --- Struct definitions for common_handles --- */++/* ============================================================================+ * MODULE: datetime_helpers+ * ============================================================================ */++/* --- Enums for datetime_helpers --- */++/* --- Struct forward declarations for datetime_helpers --- */++/* --- Types for datetime_helpers --- */++/* --- Constants for datetime_helpers --- */++/* --- Function pointer typedefs for datetime_helpers --- */++/* --- Functions for datetime_helpers --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Decompose a `duckdb_date` object into year, month and date (stored as `duckdb_date_struct`).+ *+ * history:+ * - stable: v0.2.9+ *+ * @param date The date object, as obtained from a `DUCKDB_TYPE_DATE` column.+ * @return duckdb_date_struct+ */+DUCKDB_C_API duckdb_date_struct duckdb_from_date(duckdb_date date);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Re-compose a `duckdb_date` from year, month and date (`duckdb_date_struct`).+ *+ * history:+ * - stable: v0.2.9+ *+ * @param date The year, month and date stored in a `duckdb_date_struct`.+ * @return duckdb_date+ */+DUCKDB_C_API duckdb_date duckdb_to_date(duckdb_date_struct date);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Test a `duckdb_date` to see if it is a finite value.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param date The date object, as obtained from a `DUCKDB_TYPE_DATE` column.+ * @return bool+ */+DUCKDB_C_API bool duckdb_is_finite_date(duckdb_date date);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Decompose a `duckdb_time` object into hour, minute, second and microsecond (stored as `duckdb_time_struct`).+ *+ * history:+ * - stable: v0.2.9+ *+ * @param time The time object, as obtained from a `DUCKDB_TYPE_TIME` column.+ * @return duckdb_time_struct+ */+DUCKDB_C_API duckdb_time_struct duckdb_from_time(duckdb_time time);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Create a `duckdb_time_tz` object from micros and a timezone offset.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param micros The microsecond component of the time.+ * @param offset The timezone offset component of the time.+ * @return duckdb_time_tz+ */+DUCKDB_C_API duckdb_time_tz duckdb_create_time_tz(int64_t micros, int32_t offset);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param micros The time object, as obtained from a `DUCKDB_TYPE_TIME_TZ` column.+ * @return duckdb_time_tz_struct+ */+DUCKDB_C_API duckdb_time_tz_struct duckdb_from_time_tz(duckdb_time_tz micros);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Re-compose a `duckdb_time` from hour, minute, second and microsecond (`duckdb_time_struct`).+ *+ * history:+ * - stable: v0.2.9+ *+ * @param time The hour, minute, second and microsecond in a `duckdb_time_struct`.+ * @return duckdb_time+ */+DUCKDB_C_API duckdb_time duckdb_to_time(duckdb_time_struct time);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Decompose a `duckdb_timestamp` object into a `duckdb_timestamp_struct`.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param ts The ts object, as obtained from a `DUCKDB_TYPE_TIMESTAMP` column.+ * @return duckdb_timestamp_struct+ */+DUCKDB_C_API duckdb_timestamp_struct duckdb_from_timestamp(duckdb_timestamp ts);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Re-compose a `duckdb_timestamp` from a duckdb_timestamp_struct.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param ts The de-composed elements in a `duckdb_timestamp_struct`.+ * @return duckdb_timestamp+ */+DUCKDB_C_API duckdb_timestamp duckdb_to_timestamp(duckdb_timestamp_struct ts);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Test a `duckdb_timestamp` to see if it is a finite value.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param ts The duckdb_timestamp object, as obtained from a `DUCKDB_TYPE_TIMESTAMP` column.+ * @return bool+ */+DUCKDB_C_API bool duckdb_is_finite_timestamp(duckdb_timestamp ts);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Test a `duckdb_timestamp_s` to see if it is a finite value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param ts The duckdb_timestamp_s object, as obtained from a `DUCKDB_TYPE_TIMESTAMP_S` column.+ * @return bool+ */+DUCKDB_C_API bool duckdb_is_finite_timestamp_s(duckdb_timestamp_s ts);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Test a `duckdb_timestamp_ms` to see if it is a finite value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param ts The duckdb_timestamp_ms object, as obtained from a `DUCKDB_TYPE_TIMESTAMP_MS` column.+ * @return bool+ */+DUCKDB_C_API bool duckdb_is_finite_timestamp_ms(duckdb_timestamp_ms ts);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Test a `duckdb_timestamp_ns` to see if it is a finite value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param ts The duckdb_timestamp_ns object, as obtained from a `DUCKDB_TYPE_TIMESTAMP_NS` column.+ * @return bool+ */+DUCKDB_C_API bool duckdb_is_finite_timestamp_ns(duckdb_timestamp_ns ts);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Converts a duckdb_hugeint object (as obtained from a `DUCKDB_TYPE_HUGEINT` column) into a double.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param val The hugeint value.+ * @return double+ */+DUCKDB_C_API double duckdb_hugeint_to_double(duckdb_hugeint val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param val The double value.+ * @return duckdb_hugeint+ */+DUCKDB_C_API duckdb_hugeint duckdb_double_to_hugeint(double val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Converts a duckdb_uhugeint object (as obtained from a `DUCKDB_TYPE_UHUGEINT` column) into a double.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param val The uhugeint value.+ * @return double+ */+DUCKDB_C_API double duckdb_uhugeint_to_double(duckdb_uhugeint val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param val The double value.+ * @return duckdb_uhugeint+ */+DUCKDB_C_API duckdb_uhugeint duckdb_double_to_uhugeint(double val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 6, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.6.0+ *+ * @param val The double value.+ * @param width+ * @param scale+ * @return duckdb_decimal+ */+DUCKDB_C_API duckdb_decimal duckdb_double_to_decimal(double val, uint8_t width, uint8_t scale);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Converts a duckdb_decimal object (as obtained from a `DUCKDB_TYPE_DECIMAL` column) into a double.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param val The decimal value.+ * @return double+ */+DUCKDB_C_API double duckdb_decimal_to_double(duckdb_decimal val);+#endif++/* --- Struct definitions for datetime_helpers --- */++/* ============================================================================+ * MODULE: aggregate_function+ * ============================================================================ */++/* --- Enums for aggregate_function --- */++/* --- Struct forward declarations for aggregate_function --- */++/* --- Types for aggregate_function --- */++/* --- Constants for aggregate_function --- */++/* --- Function pointer typedefs for aggregate_function --- */++/* --- Functions for aggregate_function --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a new empty aggregate function.+ *+ * The return value should be destroyed with `duckdb_destroy_aggregate_function`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @return duckdb_aggregate_function+ */+DUCKDB_C_API duckdb_aggregate_function duckdb_create_aggregate_function(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Destroys the given aggregate function object.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_aggregate_function(duckdb_aggregate_function *aggregate_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the name of the given aggregate function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function The aggregate function+ * @param name The name of the aggregate function+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_set_name(duckdb_aggregate_function aggregate_function, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Adds a parameter to the aggregate function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function The aggregate function.+ * @param type The parameter type. Cannot contain INVALID.+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_add_parameter(duckdb_aggregate_function aggregate_function,+ duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the return type of the aggregate function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function The aggregate function.+ * @param type The return type. Cannot contain INVALID or ANY.+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_set_return_type(duckdb_aggregate_function aggregate_function,+ duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the main functions of the aggregate function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function The aggregate function+ * @param state_size state size+ * @param state_init state init function+ * @param update update states+ * @param combine combine states+ * @param finalize finalize states+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_set_functions(duckdb_aggregate_function aggregate_function,+ duckdb_aggregate_state_size state_size,+ duckdb_aggregate_init_t state_init,+ duckdb_aggregate_update_t update,+ duckdb_aggregate_combine_t combine,+ duckdb_aggregate_finalize_t finalize);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the state destructor callback of the aggregate function (optional)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function The aggregate function+ * @param destroy state destroy callback+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_set_destructor(duckdb_aggregate_function aggregate_function,+ duckdb_aggregate_destroy_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Register the aggregate function object within the given connection.+ *+ * The function requires at least a name, functions and a return type.+ *+ * If the function is incomplete or a function with this name already exists DuckDBError is returned.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param con The connection to register it in.+ * @param aggregate_function+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_aggregate_function(duckdb_connection con,+ duckdb_aggregate_function aggregate_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the NULL handling of the aggregate function to SPECIAL_HANDLING.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function The aggregate function+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_set_special_handling(duckdb_aggregate_function aggregate_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Assigns extra information to the scalar function that can be fetched during binding, etc.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function The aggregate function+ * @param extra_info The extra information+ * @param destroy The callback that will be called to destroy the extra information (if any)+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_set_extra_info(duckdb_aggregate_function aggregate_function,+ void *extra_info, duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Retrieves the extra info of the function as set in `duckdb_aggregate_function_set_extra_info`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object+ * @return void*+ */+DUCKDB_C_API void *duckdb_aggregate_function_get_extra_info(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Report that an error has occurred while executing the aggregate function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_aggregate_function_set_error(duckdb_function_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a new empty aggregate function set.+ *+ * The return value should be destroyed with `duckdb_destroy_aggregate_function_set`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param name+ * @return duckdb_aggregate_function_set+ */+DUCKDB_C_API duckdb_aggregate_function_set duckdb_create_aggregate_function_set(const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Destroys the given aggregate function set object.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param aggregate_function_set+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_aggregate_function_set(duckdb_aggregate_function_set *aggregate_function_set);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Adds the aggregate function as a new overload to the aggregate function set.+ *+ * Returns DuckDBError if the function could not be added, for example if the overload already exists.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param set The aggregate function set+ * @param function The function to add+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_add_aggregate_function_to_set(duckdb_aggregate_function_set set,+ duckdb_aggregate_function function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Register the aggregate function set within the given connection.+ *+ * The set requires at least a single valid overload.+ *+ * If the set is incomplete or a function with this name already exists DuckDBError is returned.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param con The connection to register it in.+ * @param set The function set to register+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_aggregate_function_set(duckdb_connection con,+ duckdb_aggregate_function_set set);+#endif++/* --- Struct definitions for aggregate_function --- */++/* ============================================================================+ * MODULE: appender+ * ============================================================================ */++/* --- Enums for appender --- */++/* --- Struct forward declarations for appender --- */++/* --- Types for appender --- */++/* --- Constants for appender --- */++/* --- Function pointer typedefs for appender --- */++/* --- Functions for appender --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Creates an appender object.+ *+ * Note that the object must be destroyed with `duckdb_appender_destroy`.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param connection The connection context to create the appender in.+ * @param schema The schema of the table to append to, or `nullptr` for the default schema.+ * @param table The table name to append to.+ * @param out_appender The resulting appender object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_create(duckdb_connection connection, const char *schema, const char *table,+ duckdb_appender *out_appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates an appender object.+ *+ * Note that the object must be destroyed with `duckdb_appender_destroy`.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param connection The connection context to create the appender in.+ * @param catalog The catalog of the table to append to, or `nullptr` for the default catalog.+ * @param schema The schema of the table to append to, or `nullptr` for the default schema.+ * @param table The table name to append to.+ * @param out_appender The resulting appender object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_create_ext(duckdb_connection connection, const char *catalog,+ const char *schema, const char *table,+ duckdb_appender *out_appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates an appender object that executes the given query with any data appended to it.+ *+ * Note that the object must be destroyed with `duckdb_appender_destroy`.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param connection The connection context to create the appender in.+ * @param query The query to execute, can be an INSERT, DELETE, UPDATE or MERGE INTO statement.+ * @param column_count The number of columns to append.+ * @param types The types of the columns to append.+ * @param table_name (optionally) the table name used to refer to the appended data, defaults to "appended_data".+ * @param column_names (optionally) the list of column names, defaults to "col1", "col2", ...+ * @param out_appender The resulting appender object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_create_query(duckdb_connection connection, const char *query,+ idx_t column_count, duckdb_logical_type *types,+ const char *table_name, const char **column_names,+ duckdb_appender *out_appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Returns the number of columns that belong to the appender. If there is no active column list, then this equals the+ * table's physical columns.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param appender The appender to get the column count from.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_appender_column_count(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Returns the type of the column at the specified index. This is either a type in the active column list, or the same+ * type as a column in the receiving table.+ *+ * Note: The resulting type must be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param appender The appender to get the column type from.+ * @param col_idx The index of the column to get the type of.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_appender_column_type(duckdb_appender appender, idx_t col_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the error data associated with the appender. Must be destroyed with duckdb_destroy_error_data.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param appender The appender to get the error data from.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_appender_error_data(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * 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_data to obtain the error data followed by+ * duckdb_appender_destroy to destroy the invalidated appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender The appender to flush.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_flush(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Clears all buffered data from the appender without flushing it to the table. This discards any data that has been+ * appended but not yet written. The appender can continue to be used after clearing.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param appender The appender to clear.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_clear(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * 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_data to obtain the error data followed by duckdb_appender_destroy to destroy+ * the invalidated appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender The appender to flush and close.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_close(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender The appender to flush, close and destroy.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_destroy(duckdb_appender *appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Appends a column to the active column list of the appender. Immediately flushes all previous data.+ *+ * The active column list specifies all columns that are expected when flushing the data. Any non-active columns are+ * filled with their default values, or NULL.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param appender The appender to add the column to.+ * @param name+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_add_column(duckdb_appender appender, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Removes all columns from the active column list of the appender, resetting the appender to treat all columns as+ * active. Immediately flushes all previous data.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param appender The appender to clear the columns from.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_clear_columns(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * A nop function, provided for backwards compatibility reasons. Does nothing. Only `duckdb_appender_end_row` is+ * required.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_begin_row(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Finish the current row of appends. After end_row is called, the next row can be appended.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender The appender.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_appender_end_row(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Append a DEFAULT value (NULL if DEFAULT not available for column) to the appender.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param appender+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_default(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Append a DEFAULT value, at the specified row and column, (NULL if DEFAULT not available for column) to the chunk+ * created from the specified appender. The default value of the column must be a constant value. Non-deterministic+ * expressions like nextval('seq') or random() are not supported.+ *+ * history:+ * - unstable: v1.2.0+ * - stable: v1.5.6+ *+ * @param appender The appender to get the default value from.+ * @param chunk The data chunk to append the default value to.+ * @param col The chunk column index to append the default value to.+ * @param row The chunk row index to append the default value to.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_default_to_chunk(duckdb_appender appender, duckdb_data_chunk chunk, idx_t col,+ idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a bool value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_bool(duckdb_appender appender, bool value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append an int8_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_int8(duckdb_appender appender, int8_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append an int16_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_int16(duckdb_appender appender, int16_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append an int32_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_int32(duckdb_appender appender, int32_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append an int64_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_int64(duckdb_appender appender, int64_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Append a duckdb_hugeint value to the appender.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_hugeint(duckdb_appender appender, duckdb_hugeint value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a uint8_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_uint8(duckdb_appender appender, uint8_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a uint16_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_uint16(duckdb_appender appender, uint16_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a uint32_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_uint32(duckdb_appender appender, uint32_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a uint64_t value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_uint64(duckdb_appender appender, uint64_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Append a duckdb_uhugeint value to the appender.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_uhugeint(duckdb_appender appender, duckdb_uhugeint value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a float value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_float(duckdb_appender appender, float value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a double value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_double(duckdb_appender appender, double value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Append a duckdb_date value to the appender.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_date(duckdb_appender appender, duckdb_date value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Append a duckdb_time value to the appender.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_time(duckdb_appender appender, duckdb_time value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Append a duckdb_timestamp value to the appender.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_timestamp(duckdb_appender appender, duckdb_timestamp value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Append a duckdb_interval value to the appender.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_interval(duckdb_appender appender, duckdb_interval value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a varchar value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_varchar(duckdb_appender appender, const char *val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a varchar value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param val+ * @param length+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_varchar_length(duckdb_appender appender, const char *val, idx_t length);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a blob value to the appender.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @param data+ * @param length+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_blob(duckdb_appender appender, const void *data, idx_t length);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Append a NULL value to the appender (of any type).+ *+ * history:+ * - stable: v0.2.5+ *+ * @param appender+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_null(duckdb_appender appender);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Append a duckdb_value to the appender.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param appender+ * @param value+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_value(duckdb_appender appender, duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Appends a pre-filled data chunk to the specified appender. Attempts casting, if the data chunk types do not match the+ * active appender types.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param appender The appender to append to.+ * @param chunk The data chunk to append.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_append_data_chunk(duckdb_appender appender, duckdb_data_chunk chunk);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 4, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release. Use duckdb_appender_error_data+ * instead.+ *+ * Returns the error message associated with the 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.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.4.0+ *+ * @param appender The appender to get the error from.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_appender_error(duckdb_appender appender);+#endif++/* --- Struct definitions for appender --- */++/* ============================================================================+ * MODULE: arrow+ * ============================================================================ */++/* --- Enums for arrow --- */++/* --- Struct forward declarations for arrow --- */++/* --- Types for arrow --- */++/* --- Constants for arrow --- */++/* --- Function pointer typedefs for arrow --- */++/* --- Functions for arrow --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Transforms a DuckDB Schema into an Arrow Schema+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param arrow_options The Arrow settings used to produce arrow.+ * @param types The DuckDB logical types for each column in the schema.+ * @param names The names for each column in the schema.+ * @param column_count The number of columns that exist in the schema.+ * @param out_schema The resulting arrow schema. Must be destroyed with `out_schema->release(out_schema)`.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_to_arrow_schema(duckdb_arrow_options arrow_options, duckdb_logical_type *types,+ const char **names, idx_t column_count,+ struct ArrowSchema *out_schema);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Transforms a DuckDB data chunk into an Arrow array.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param arrow_options The Arrow settings used to produce arrow.+ * @param chunk The DuckDB data chunk to convert.+ * @param out_arrow_array The output Arrow structure that will hold the converted data. Must be released with+ * `out_arrow_array->release(out_arrow_array)`+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_data_chunk_to_arrow(duckdb_arrow_options arrow_options, duckdb_data_chunk chunk,+ struct ArrowArray *out_arrow_array);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Transforms an Arrow Schema into a DuckDB Schema.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param connection The connection to get the transformation settings from.+ * @param schema The input Arrow schema. Must be released with `schema->release(schema)`.+ * @param out_types The Arrow converted schema with extra information about the arrow types. Must be destroyed with+ * `duckdb_destroy_arrow_converted_schema`.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_schema_from_arrow(duckdb_connection connection, struct ArrowSchema *schema,+ duckdb_arrow_converted_schema *out_types);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Transforms an Arrow array into a DuckDB data chunk. The data chunk will retain ownership of the underlying Arrow+ * data.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param connection The connection to get the transformation settings from.+ * @param arrow_array The input Arrow array. Data ownership is passed on to DuckDB's DataChunk, the underlying object+ * does not need to be released and won't have ownership of the data.+ * @param converted_schema The Arrow converted schema with extra information about the arrow types.+ * @param out_chunk The resulting DuckDB data chunk. Must be destroyed by duckdb_destroy_data_chunk.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_data_chunk_from_arrow(duckdb_connection connection,+ struct ArrowArray *arrow_array,+ duckdb_arrow_converted_schema converted_schema,+ duckdb_data_chunk *out_chunk);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the arrow converted schema and de-allocates all memory allocated for that arrow converted schema.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param arrow_converted_schema The arrow converted schema to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_arrow_converted_schema(duckdb_arrow_converted_schema *arrow_converted_schema);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param connection The connection to perform the query in.+ * @param query The SQL query to run.+ * @param out_result The query result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_query_arrow(duckdb_connection connection, const char *query, duckdb_arrow *out_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param result The result to fetch the schema from.+ * @param out_schema The output schema.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_query_arrow_schema(duckdb_arrow result, duckdb_arrow_schema *out_schema);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.9.0+ * - deprecated: v1.0.0+ *+ * @param prepared The prepared statement to fetch the schema from.+ * @param out_schema The output schema.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_prepared_arrow_schema(duckdb_prepared_statement prepared,+ duckdb_arrow_schema *out_schema);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.10.0+ * - deprecated: v1.0.0+ *+ * @param result The result object the data chunk have been fetched from.+ * @param chunk The data chunk to convert.+ * @param out_array The output array.+ * @return void+ */+DUCKDB_C_API void duckdb_result_arrow_array(duckdb_result result, duckdb_data_chunk chunk,+ duckdb_arrow_array *out_array);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param result The result to fetch the array from.+ * @param out_array The output array.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_query_arrow_array(duckdb_arrow result, duckdb_arrow_array *out_array);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Returns the number of columns present in the arrow result object.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param result The result object.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_arrow_column_count(duckdb_arrow result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Returns the number of rows present in the arrow result object.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param result The result object.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_arrow_row_count(duckdb_arrow result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param result The result object.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_arrow_rows_changed(duckdb_arrow result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param result The result object to fetch the error from.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_query_arrow_error(duckdb_arrow result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Closes the result and de-allocates all memory allocated for the arrow result.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param result The result to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_arrow(duckdb_arrow *result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Releases the arrow array stream and de-allocates its memory.+ *+ * history:+ * - stable: v0.10.0+ * - deprecated: v1.0.0+ *+ * @param stream_p The arrow array stream to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_arrow_stream(duckdb_arrow_stream *stream_p);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.2.8+ * - deprecated: v1.0.0+ *+ * @param prepared_statement The prepared statement to execute.+ * @param out_result The query result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_execute_prepared_arrow(duckdb_prepared_statement prepared_statement,+ duckdb_arrow *out_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Scans the Arrow stream and creates a view with the given name.+ *+ * history:+ * - stable: v0.9.0+ * - deprecated: v1.0.0+ *+ * @param connection The connection on which to execute the scan.+ * @param table_name Name of the temporary view to create.+ * @param arrow Arrow stream wrapper.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_arrow_scan(duckdb_connection connection, const char *table_name,+ duckdb_arrow_stream arrow);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.9.0+ * - deprecated: v1.0.0+ *+ * @param connection The connection on which to execute the scan.+ * @param table_name Name of the temporary view to create.+ * @param arrow_schema Arrow schema wrapper.+ * @param arrow_array Arrow array wrapper.+ * @param out_stream Output array stream that wraps around the passed schema, for releasing/deleting once done.+ * @return duckdb_state+ */+DUCKDB_C_API 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);+#endif++/* --- Struct definitions for arrow --- */++/* ============================================================================+ * MODULE: cast_function+ * ============================================================================ */++/* --- Enums for cast_function --- */++/* --- Struct forward declarations for cast_function --- */++/* --- Types for cast_function --- */++/* --- Constants for cast_function --- */++/* --- Function pointer typedefs for cast_function --- */++/* --- Functions for cast_function --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a new cast function object.+ *+ * history:+ * - stable: v1.1.0+ *+ * @return duckdb_cast_function+ */+DUCKDB_C_API duckdb_cast_function duckdb_create_cast_function(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the source type of the cast function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param cast_function The cast function object.+ * @param source_type The source type to set.+ * @return void+ */+DUCKDB_C_API void duckdb_cast_function_set_source_type(duckdb_cast_function cast_function,+ duckdb_logical_type source_type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the target type of the cast function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param cast_function The cast function object.+ * @param target_type The target type to set.+ * @return void+ */+DUCKDB_C_API void duckdb_cast_function_set_target_type(duckdb_cast_function cast_function,+ duckdb_logical_type target_type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the "cost" of implicitly casting the source type to the target type using this function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param cast_function The cast function object.+ * @param cost The cost to set.+ * @return void+ */+DUCKDB_C_API void duckdb_cast_function_set_implicit_cast_cost(duckdb_cast_function cast_function, int64_t cost);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the actual cast function to use.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param cast_function The cast function object.+ * @param function The function to set.+ * @return void+ */+DUCKDB_C_API void duckdb_cast_function_set_function(duckdb_cast_function cast_function,+ duckdb_cast_function_t function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Assigns extra information to the cast function that can be fetched during execution, etc.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param cast_function+ * @param extra_info The extra information+ * @param destroy The callback that will be called to destroy the extra information (if any)+ * @return void+ */+DUCKDB_C_API void duckdb_cast_function_set_extra_info(duckdb_cast_function cast_function, void *extra_info,+ duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Retrieves the extra info of the function as set in `duckdb_cast_function_set_extra_info`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object.+ * @return void*+ */+DUCKDB_C_API void *duckdb_cast_function_get_extra_info(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Get the cast execution mode from the given function info.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object.+ * @return duckdb_cast_mode+ */+DUCKDB_C_API duckdb_cast_mode duckdb_cast_function_get_cast_mode(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Report that an error has occurred while executing the cast function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object.+ * @param error The error message.+ * @return void+ */+DUCKDB_C_API void duckdb_cast_function_set_error(duckdb_function_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Report that an error has occurred while executing the cast function, setting the corresponding output row to NULL.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object.+ * @param error The error message.+ * @param row The index of the row within the output vector to set to NULL.+ * @param output The output vector.+ * @return void+ */+DUCKDB_C_API void duckdb_cast_function_set_row_error(duckdb_function_info info, const char *error, idx_t row,+ duckdb_vector output);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Registers a cast function within the given connection.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param con The connection to use.+ * @param cast_function The cast function to register.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_cast_function(duckdb_connection con, duckdb_cast_function cast_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Destroys the cast function object.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param cast_function The cast function object.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_cast_function(duckdb_cast_function *cast_function);+#endif++/* --- Struct definitions for cast_function --- */++/* ============================================================================+ * MODULE: catalog+ * ============================================================================ */++/* --- Enums for catalog --- */++/* --- Struct forward declarations for catalog --- */++/* --- Types for catalog --- */++/* --- Constants for catalog --- */++/* --- Function pointer typedefs for catalog --- */++/* --- Functions for catalog --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieve a database catalog instance by name. This function can only be called from within the context of an active+ * transaction, e.g. during execution of a registered function callback. Otherwise returns `nullptr`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param context The client context.+ * @param catalog_name The name of the catalog.+ * @return duckdb_catalog+ */+DUCKDB_C_API duckdb_catalog duckdb_client_context_get_catalog(duckdb_client_context context, const char *catalog_name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieve the "type name" of the given catalog. E.g. for a DuckDB database, this returns 'duckdb'. The returned string+ * is owned by the catalog and remains valid until the catalog is destroyed.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param catalog The catalog.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_catalog_get_type_name(duckdb_catalog catalog);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieve a catalog entry from the given catalog by type, schema name and entry name. The returned catalog entry+ * remains valid for the duration of the current transaction.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param catalog The catalog.+ * @param context The client context.+ * @param entry_type The type of the catalog entry to retrieve.+ * @param schema_name The schema name of the catalog entry.+ * @param entry_name The name of the catalog entry.+ * @return duckdb_catalog_entry+ */+DUCKDB_C_API duckdb_catalog_entry duckdb_catalog_get_entry(duckdb_catalog catalog, duckdb_client_context context,+ duckdb_catalog_entry_type entry_type,+ const char *schema_name, const char *entry_name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the given catalog instance.+ *+ * Note that this does not actually "drop" the contents of the catalog; it merely frees the C API handle.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param catalog The catalog instance to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_catalog(duckdb_catalog *catalog);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Get the type of the given catalog entry.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param entry The catalog entry.+ * @return duckdb_catalog_entry_type+ */+DUCKDB_C_API duckdb_catalog_entry_type duckdb_catalog_entry_get_type(duckdb_catalog_entry entry);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Get the name of the given catalog entry.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param entry The catalog entry.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_catalog_entry_get_name(duckdb_catalog_entry entry);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the given catalog entry instance.+ *+ * Note that this does not actually "drop" the catalog entry from the database catalog; it merely frees the C API+ * handle.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param entry The catalog entry instance to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_catalog_entry(duckdb_catalog_entry *entry);+#endif++/* --- Struct definitions for catalog --- */++/* ============================================================================+ * MODULE: config_option+ * ============================================================================ */++/* --- Enums for config_option --- */++/* --- Struct forward declarations for config_option --- */++/* --- Types for config_option --- */++/* --- Constants for config_option --- */++/* --- Function pointer typedefs for config_option --- */++/* --- Functions for config_option --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a configuration option instance.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @return duckdb_config_option+ */+DUCKDB_C_API duckdb_config_option duckdb_create_config_option(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the given configuration option instance.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param option The configuration option instance to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_config_option(duckdb_config_option *option);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the name of the configuration option.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param option The configuration option instance.+ * @param name The name to set.+ * @return void+ */+DUCKDB_C_API void duckdb_config_option_set_name(duckdb_config_option option, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the type of the configuration option.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param option The configuration option instance.+ * @param type The type to set.+ * @return void+ */+DUCKDB_C_API void duckdb_config_option_set_type(duckdb_config_option option, duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the default value of the configuration option. If the type of this option has already been set with+ * `duckdb_config_option_set_type`, the value is cast to the type. Otherwise, the type is inferred from the value.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param option The configuration option instance.+ * @param default_value The default value to set.+ * @return void+ */+DUCKDB_C_API void duckdb_config_option_set_default_value(duckdb_config_option option, duckdb_value default_value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the default scope of the configuration option. If not set, this defaults to+ * `DUCKDB_CONFIG_OPTION_SCOPE_SESSION`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param option The configuration option instance.+ * @param default_scope The default scope to set.+ * @return void+ */+DUCKDB_C_API void duckdb_config_option_set_default_scope(duckdb_config_option option,+ duckdb_config_option_scope default_scope);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the description of the configuration option.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param option The configuration option instance.+ * @param description The description to set.+ * @return void+ */+DUCKDB_C_API void duckdb_config_option_set_description(duckdb_config_option option, const char *description);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Registers the given configuration option on the specified connection.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param connection The connection to register the option on.+ * @param option The configuration option instance to register.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_config_option(duckdb_connection connection, duckdb_config_option option);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the value of a configuration option by name from the given client context.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param context The client context.+ * @param name The name of the configuration option to retrieve.+ * @param out_scope Output parameter to optionally store the scope that the configuration option was retrieved from. If+ * this is `nullptr`, the scope is not returned. If the requested option does not exist the scope is set to+ * `DUCKDB_CONFIG_OPTION_SCOPE_INVALID`.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_client_context_get_config_option(duckdb_client_context context, const char *name,+ duckdb_config_option_scope *out_scope);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the root node of the profiling information. Returns nullptr, if profiling is not enabled.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param connection A connection object.+ * @return duckdb_profiling_info+ */+DUCKDB_C_API duckdb_profiling_info duckdb_get_profiling_info(duckdb_connection connection);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the value of the metric of the current profiling info node. Returns nullptr, if the metric does not exist or+ * is not enabled. Currently, the value holds a string, and you can retrieve the string by calling the corresponding+ * function: char *duckdb_get_varchar(duckdb_value value).+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info A profiling information object.+ * @param key The name of the requested metric.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_profiling_info_get_value(duckdb_profiling_info info, const char *key);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the key-value metric map of this profiling node as a MAP duckdb_value. The individual elements are accessible+ * via the duckdb_value MAP functions.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info A profiling information object.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_profiling_info_get_metrics(duckdb_profiling_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the number of children in the current profiling info node.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info A profiling information object.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_profiling_info_get_child_count(duckdb_profiling_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the child node at the specified index.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info A profiling information object.+ * @param index The index of the child node.+ * @return duckdb_profiling_info+ */+DUCKDB_C_API duckdb_profiling_info duckdb_profiling_info_get_child(duckdb_profiling_info info, idx_t index);+#endif++/* --- Struct definitions for config_option --- */++/* ============================================================================+ * MODULE: connection+ * ============================================================================ */++/* --- Enums for connection --- */++/* --- Struct forward declarations for connection --- */++/* --- Types for connection --- */++/* --- Constants for connection --- */++/* --- Function pointer typedefs for connection --- */++/* --- Functions for connection --- */++/*!+ * 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'.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param database The database file to connect to.+ * @param out_connection The result connection object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_connect(duckdb_database database, duckdb_connection *out_connection);++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0)+/*!+ * Interrupt running query+ *+ * history:+ * - stable: v0.9.0+ *+ * @param connection The connection to interrupt+ * @return void+ */+DUCKDB_C_API void duckdb_interrupt(duckdb_connection connection);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Get the progress of the running query.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param connection The connection running the query.+ * @return duckdb_query_progress_type+ */+DUCKDB_C_API duckdb_query_progress_type duckdb_query_progress(duckdb_connection connection);+#endif++/*!+ * Closes the specified connection and de-allocates all memory allocated for that connection.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param connection The connection to close.+ * @return void+ */+DUCKDB_C_API void duckdb_disconnect(duckdb_connection *connection);++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the connection.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param connection The connection.+ * @param out_context The client context of the connection. Must be destroyed with `duckdb_destroy_client_context`.+ * @return void+ */+DUCKDB_C_API void duckdb_connection_get_client_context(duckdb_connection connection,+ duckdb_client_context *out_context);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the arrow options of the connection.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param connection The connection.+ * @param out_arrow_options+ * @return void+ */+DUCKDB_C_API void duckdb_connection_get_arrow_options(duckdb_connection connection,+ duckdb_arrow_options *out_arrow_options);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the connection id of the client context.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param context The client context.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_client_context_get_connection_id(duckdb_client_context context);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the client context and deallocates its memory.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param context The client context to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_client_context(duckdb_client_context *context);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the arrow options and deallocates its memory.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param arrow_options The arrow options to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_arrow_options(duckdb_arrow_options *arrow_options);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Get the list of (fully qualified) table names of the query.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param connection The connection for which to get the table names.+ * @param query The query for which to get the table names.+ * @param qualified Returns fully qualified table names (catalog.schema.table), if set to true, else only the (not+ * escaped) table names.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_get_table_names(duckdb_connection connection, const char *query, bool qualified);+#endif++/* --- Struct definitions for connection --- */++/* ============================================================================+ * MODULE: copy_function+ * ============================================================================ */++/* --- Enums for copy_function --- */++/* --- Struct forward declarations for copy_function --- */++/* --- Types for copy_function --- */++/* --- Constants for copy_function --- */++/* --- Function pointer typedefs for copy_function --- */++/* --- Functions for copy_function --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a new empty copy function.+ *+ * The return value must be destroyed with `duckdb_destroy_copy_function`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @return duckdb_copy_function+ */+DUCKDB_C_API duckdb_copy_function duckdb_create_copy_function(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the name of the copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function The copy function+ * @param name The name to set+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_set_name(duckdb_copy_function copy_function, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the extra info pointer of the copy function, which can be used to store arbitrary data.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function The copy function+ * @param extra_info The extra info pointer+ * @param destructor A destructor function to call to destroy the extra info+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_set_extra_info(duckdb_copy_function copy_function, void *extra_info,+ duckdb_delete_callback_t destructor);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Registers the given copy function on the database connection under the specified name.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param connection The database connection+ * @param copy_function The copy function to register+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_copy_function(duckdb_connection connection,+ duckdb_copy_function copy_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the given copy function object.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function The copy function to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_copy_function(duckdb_copy_function *copy_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the bind function of the copy function, to use when binding `COPY ... TO`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function+ * @param bind The bind function+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_set_bind(duckdb_copy_function copy_function, duckdb_copy_function_bind_t bind);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Report that an error occurred during the binding-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_bind_set_error(duckdb_copy_function_bind_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the extra info pointer of the copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_bind_get_extra_info(duckdb_copy_function_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the current connection binding the `COPY ... TO` function.+ *+ * Must be destroyed with `duckdb_destroy_client_context`+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @return duckdb_client_context+ */+DUCKDB_C_API duckdb_client_context duckdb_copy_function_bind_get_client_context(duckdb_copy_function_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the number of columns that will be provided to the `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_copy_function_bind_get_column_count(duckdb_copy_function_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the type of a column that will be provided to the `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @param col_idx The index of the column to retrieve the type for+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_copy_function_bind_get_column_type(duckdb_copy_function_bind_info info,+ idx_t col_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves all values for the given options provided to the `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_copy_function_bind_get_options(duckdb_copy_function_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the bind data of the copy function, to be provided to the init, sink and finalize functions.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @param bind_data The bind data pointer+ * @param destructor A destructor function to call to destroy the bind data+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_bind_set_bind_data(duckdb_copy_function_bind_info info, void *bind_data,+ duckdb_delete_callback_t destructor);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the initialization function of the copy function, called right before executing `COPY ... TO`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function+ * @param init The init function+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_set_global_init(duckdb_copy_function copy_function,+ duckdb_copy_function_global_init_t init);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Report that an error occurred during the initialization-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info provided to the init function+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_global_init_set_error(duckdb_copy_function_global_init_info info,+ const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the extra info pointer of the copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info provided to the init function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_global_init_get_extra_info(duckdb_copy_function_global_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the current connection initializing the `COPY ... TO` function.+ *+ * Must be destroyed with `duckdb_destroy_client_context`+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info provided to the init function+ * @return duckdb_client_context+ */+DUCKDB_C_API duckdb_client_context+duckdb_copy_function_global_init_get_client_context(duckdb_copy_function_global_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the bind data provided during the binding-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info provided to the init function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_global_init_get_bind_data(duckdb_copy_function_global_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the file path provided to the `COPY ... TO` function.+ *+ * Lives for the duration of the initialization callback, must not be destroyed.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info provided to the init function+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_copy_function_global_init_get_file_path(duckdb_copy_function_global_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the global state of the copy function, to be provided to all subsequent local init, sink and finalize functions.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info provided to the init function+ * @param global_state The global state pointer+ * @param destructor A destructor function to call to destroy the global state+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_global_init_set_global_state(duckdb_copy_function_global_init_info info,+ void *global_state,+ duckdb_delete_callback_t destructor);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the sink function of the copy function, called during `COPY ... TO`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function+ * @param function The sink function+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_set_sink(duckdb_copy_function copy_function,+ duckdb_copy_function_sink_t function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Report that an error occurred during the sink-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The sink info provided to the sink function+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_sink_set_error(duckdb_copy_function_sink_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the extra info pointer of the copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The sink info provided to the sink function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_sink_get_extra_info(duckdb_copy_function_sink_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the current connection during the sink-phase of the `COPY ... TO` function.+ *+ * Must be destroyed with `duckdb_destroy_client_context`+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The sink info provided to the sink function+ * @return duckdb_client_context+ */+DUCKDB_C_API duckdb_client_context duckdb_copy_function_sink_get_client_context(duckdb_copy_function_sink_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the bind data provided during the binding-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The sink info provided to the sink function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_sink_get_bind_data(duckdb_copy_function_sink_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the global state provided during the init-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The sink info provided to the sink function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_sink_get_global_state(duckdb_copy_function_sink_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the finalize function of the copy function, called at the end of `COPY ... TO`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function+ * @param finalize The finalize function+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_set_finalize(duckdb_copy_function copy_function,+ duckdb_copy_function_finalize_t finalize);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Report that an error occurred during the finalize-phase of a `COPY ... TO` function+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The finalize info provided to the finalize function+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_finalize_set_error(duckdb_copy_function_finalize_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the extra info pointer of the copy function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The finalize info provided to the finalize function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_finalize_get_extra_info(duckdb_copy_function_finalize_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the current connection during the finalize-phase of the `COPY ... TO` function.+ *+ * Must be destroyed with `duckdb_destroy_client_context`+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The finalize info provided to the finalize function+ * @return duckdb_client_context+ */+DUCKDB_C_API duckdb_client_context+duckdb_copy_function_finalize_get_client_context(duckdb_copy_function_finalize_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the bind data provided during the binding-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The finalize info provided to the finalize function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_finalize_get_bind_data(duckdb_copy_function_finalize_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the global state provided during the init-phase of a `COPY ... TO` function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The finalize info provided to the finalize function+ * @return void*+ */+DUCKDB_C_API void *duckdb_copy_function_finalize_get_global_state(duckdb_copy_function_finalize_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the table function to use when executing a `COPY ... FROM (...)` statement with this copy function.+ *+ * The table function must have a `duckdb_table_function_bind_t`, `duckdb_table_function_init_t` and+ * `duckdb_table_function_t` set.+ *+ * The table function must take a single VARCHAR parameter (the file path).+ *+ * Options passed to the `COPY ... FROM (...)` statement are forwarded as named parameters to the table function.+ *+ * Since `COPY ... FROM` copies into an already existing table, the table function should not define its own result+ * columns using `duckdb_bind_add_result_column` when binding . Instead use+ * `duckdb_table_function_bind_get_result_column_count` and related functions in the bind callback of the table function+ * to retrieve the schema of the target table of the `COPY ... FROM` statement.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param copy_function The copy function+ * @param table_function The table function to use for `COPY ... FROM`+ * @return void+ */+DUCKDB_C_API void duckdb_copy_function_set_copy_from_function(duckdb_copy_function copy_function,+ duckdb_table_function table_function);+#endif++/* --- Struct definitions for copy_function --- */++/* ============================================================================+ * MODULE: data_chunk+ * ============================================================================ */++/* --- Enums for data_chunk --- */++/* --- Struct forward declarations for data_chunk --- */++/* --- Types for data_chunk --- */++/* --- Constants for data_chunk --- */++/* --- Function pointer typedefs for data_chunk --- */++/* --- Functions for data_chunk --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Creates an empty data chunk with the specified column types. The result must be destroyed with+ * `duckdb_destroy_data_chunk`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param types An array of column types. Column types can not contain ANY and INVALID types.+ * @param column_count The number of columns.+ * @return duckdb_data_chunk+ */+DUCKDB_C_API duckdb_data_chunk duckdb_create_data_chunk(duckdb_logical_type *types, idx_t column_count);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Destroys the data chunk and de-allocates all memory allocated for that chunk.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param chunk The data chunk to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_data_chunk(duckdb_data_chunk *chunk);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Resets a data chunk, clearing the validity masks and setting the cardinality of the data chunk to 0. After calling+ * this method, you must call `duckdb_vector_get_validity` and `duckdb_vector_get_data` to obtain current data and+ * validity pointers+ *+ * history:+ * - stable: v0.3.3+ *+ * @param chunk The data chunk to reset.+ * @return void+ */+DUCKDB_C_API void duckdb_data_chunk_reset(duckdb_data_chunk chunk);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the number of columns in a data chunk.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param chunk The data chunk to get the data from+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_data_chunk_get_column_count(duckdb_data_chunk chunk);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param chunk The data chunk to get the data from+ * @param col_idx+ * @return duckdb_vector+ */+DUCKDB_C_API duckdb_vector duckdb_data_chunk_get_vector(duckdb_data_chunk chunk, idx_t col_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the current number of tuples in a data chunk.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param chunk The data chunk to get the data from+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_data_chunk_get_size(duckdb_data_chunk chunk);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Sets the current number of tuples in a data chunk.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param chunk The data chunk to set the size in+ * @param size The number of tuples in the data chunk+ * @return void+ */+DUCKDB_C_API void duckdb_data_chunk_set_size(duckdb_data_chunk chunk, idx_t size);+#endif++/* --- Struct definitions for data_chunk --- */++/* ============================================================================+ * MODULE: database+ * ============================================================================ */++/* --- Enums for database --- */++/* --- Struct forward declarations for database --- */++/* --- Types for database --- */++/* --- Constants for database --- */++/* --- Function pointer typedefs for database --- */++/* --- Functions for database --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a new database instance cache. The instance cache is necessary if a client/program (re)opens multiple+ * databases to the same file within the same process. Must be destroyed with 'duckdb_destroy_instance_cache'.+ *+ * history:+ * - unstable: v1.2.0+ * - stable: v1.5.6+ *+ * @return duckdb_instance_cache+ */+DUCKDB_C_API duckdb_instance_cache duckdb_create_instance_cache(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a new database instance in the instance cache, or retrieves an existing database instance. Must be closed+ * with 'duckdb_close'.+ *+ * history:+ * - unstable: v1.2.0+ * - stable: v1.5.6+ *+ * @param instance_cache The instance cache in which to create the database, or from which to take the database.+ * @param path Path to the database file on disk. Both `nullptr` and `:memory:` open or retrieve an in-memory database.+ * @param out_database The resulting cached database.+ * @param config (Optional) configuration used to create the database.+ * @param out_error If set and the function returns `DuckDBError`, this contains the error message. Note that the error+ * message must be freed using `duckdb_free`.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_get_or_create_from_cache(duckdb_instance_cache instance_cache, const char *path,+ duckdb_database *out_database, duckdb_config config,+ char **out_error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys an existing database instance cache and de-allocates its memory.+ *+ * history:+ * - unstable: v1.2.0+ * - stable: v1.5.6+ *+ * @param instance_cache The instance cache to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_instance_cache(duckdb_instance_cache *instance_cache);+#endif++/*!+ * 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 database must be closed with 'duckdb_close'.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param path Path to the database file on disk. Both `nullptr` and `:memory:` open an in-memory database.+ * @param out_database The result database object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_open(const char *path, duckdb_database *out_database);++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8)+/*!+ * Extended version of duckdb_open. Creates a new database or opens an existing database file stored at the given path.+ * The database must be closed with 'duckdb_close'.+ *+ * history:+ * - stable: v0.2.8+ *+ * @param path Path to the database file on disk. Both `nullptr` and `:memory:` open an in-memory database.+ * @param out_database The result database object.+ * @param config (Optional) configuration used to start up the database.+ * @param out_error If set and the function returns `DuckDBError`, this contains the error message. Note that the error+ * message must be freed using `duckdb_free`.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_open_ext(const char *path, duckdb_database *out_database, duckdb_config config,+ char **out_error);+#endif++/*!+ * 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.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param database The database object to shut down.+ * @return void+ */+DUCKDB_C_API void duckdb_close(duckdb_database *database);++#if DUCKDB_API_VERSION_AT_LEAST(0, 6, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.6.0+ *+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_library_version(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8)+/*!+ * 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.+ *+ * Note that `duckdb_destroy_config` should always be called on the resulting config, even if the function returns+ * `DuckDBError`.+ *+ * history:+ * - stable: v0.2.8+ *+ * @param out_config The result configuration object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_create_config(duckdb_config *out_config);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.8+ *+ * @return size_t+ */+DUCKDB_C_API size_t duckdb_config_count(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.8+ *+ * @param index The index of the configuration option (between 0 and `duckdb_config_count`)+ * @param out_name A name of the configuration flag.+ * @param out_description A description of the configuration flag.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_get_config_flag(size_t index, const char **out_name, const char **out_description);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.8+ *+ * @param config The configuration object to set the option on.+ * @param name The name of the configuration flag to set.+ * @param option The value to set the configuration flag to.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_set_config(duckdb_config config, const char *name, const char *option);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8)+/*!+ * Destroys the specified configuration object and de-allocates all memory allocated for the object.+ *+ * history:+ * - stable: v0.2.8+ *+ * @param config The configuration object to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_config(duckdb_config *config);+#endif++/* --- Struct definitions for database --- */++/* ============================================================================+ * MODULE: expression+ * ============================================================================ */++/* --- Enums for expression --- */++/* --- Struct forward declarations for expression --- */++/* --- Types for expression --- */++/* --- Constants for expression --- */++/* --- Function pointer typedefs for expression --- */++/* --- Functions for expression --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the expression and de-allocates its memory.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param expr A pointer to the expression.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_expression(duckdb_expression *expr);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the return type of an expression.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param expr The expression.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_expression_return_type(duckdb_expression expr);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns whether the expression is foldable into a value or not.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param expr The expression.+ * @return bool+ */+DUCKDB_C_API bool duckdb_expression_is_foldable(duckdb_expression expr);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Folds an expression creating a folded value.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param context The client context.+ * @param expr The expression. Must be foldable.+ * @param out_value The folded value, if folding was successful. Must be destroyed with `duckdb_destroy_value`.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_expression_fold(duckdb_client_context context, duckdb_expression expr,+ duckdb_value *out_value);+#endif++/* --- Struct definitions for expression --- */++/* ============================================================================+ * MODULE: file_system+ * ============================================================================ */++/* --- Enums for file_system --- */++/* --- Struct forward declarations for file_system --- */++/* --- Types for file_system --- */++/* --- Constants for file_system --- */++/* --- Function pointer typedefs for file_system --- */++/* --- Functions for file_system --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Get a file system instance associated with the given client context.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param context The client context.+ * @return duckdb_file_system+ */+DUCKDB_C_API duckdb_file_system duckdb_client_context_get_file_system(duckdb_client_context context);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the given file system instance.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_system The file system instance to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_file_system(duckdb_file_system *file_system);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the last error that occurred on the given file system instance.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_system The file system instance.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_file_system_error_data(duckdb_file_system file_system);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Opens a file at the given path with the specified options.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_system The file system instance.+ * @param path The path to the file.+ * @param options The file open options specifying how to open the file.+ * @param out_file The resulting file handle instance, or `nullptr` if the open failed. Must be destroyed with+ * `duckdb_destroy_file_handle`.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_file_system_open(duckdb_file_system file_system, const char *path,+ duckdb_file_open_options options, duckdb_file_handle *out_file);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a new file open options instance with blank settings.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @return duckdb_file_open_options+ */+DUCKDB_C_API duckdb_file_open_options duckdb_create_file_open_options(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets a specific flag in the file open options.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param options The file open options instance.+ * @param flag The flag to set (e.g., read, write).+ * @param value If the flag is enabled or disabled.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_file_open_options_set_flag(duckdb_file_open_options options, duckdb_file_flag flag,+ bool value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the given file open options instance.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param options The file open options instance to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_file_open_options(duckdb_file_open_options *options);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the given file handle and deallocates all associated resources. This will also close the file if it is still+ * open.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_file_handle(duckdb_file_handle *file_handle);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the last error that occurred on the given file handle.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_file_handle_error_data(duckdb_file_handle file_handle);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Reads data from the file into the buffer.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to read from.+ * @param buffer The buffer to read data into.+ * @param size The number of bytes to read.+ * @return int64_t+ */+DUCKDB_C_API int64_t duckdb_file_handle_read(duckdb_file_handle file_handle, void *buffer, int64_t size);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Writes data from the buffer to the file.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to write to.+ * @param buffer The buffer containing data to write.+ * @param size The number of bytes to write.+ * @return int64_t+ */+DUCKDB_C_API int64_t duckdb_file_handle_write(duckdb_file_handle file_handle, const void *buffer, int64_t size);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Tells the current position in the file.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to tell the position of.+ * @return int64_t+ */+DUCKDB_C_API int64_t duckdb_file_handle_tell(duckdb_file_handle file_handle);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Gets the size of the file.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to get the size of.+ * @return int64_t+ */+DUCKDB_C_API int64_t duckdb_file_handle_size(duckdb_file_handle file_handle);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Seeks to a specific position in the file.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to seek in.+ * @param position+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_file_handle_seek(duckdb_file_handle file_handle, int64_t position);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Synchronizes the file's state with the underlying storage.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to synchronize.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_file_handle_sync(duckdb_file_handle file_handle);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Closes the given file handle.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param file_handle The file handle to close.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_file_handle_close(duckdb_file_handle file_handle);+#endif++/* --- Struct definitions for file_system --- */++/* ============================================================================+ * MODULE: log_storage+ * ============================================================================ */++/* --- Enums for log_storage --- */++/* --- Struct forward declarations for log_storage --- */++/* --- Types for log_storage --- */++/* --- Constants for log_storage --- */++/* --- Function pointer typedefs for log_storage --- */++/* --- Functions for log_storage --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a new log storage object.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @return duckdb_log_storage+ */+DUCKDB_C_API duckdb_log_storage duckdb_create_log_storage(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys a log storage object.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param log_storage The log storage object to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_log_storage(duckdb_log_storage *log_storage);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the callback function for writing log entries.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param log_storage The log storage object.+ * @param function The function to call.+ * @return void+ */+DUCKDB_C_API void duckdb_log_storage_set_write_log_entry(duckdb_log_storage log_storage,+ duckdb_logger_write_log_entry_t function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the extra data of the custom log storage.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param log_storage The log storage object.+ * @param extra_data The extra data that is passed back into the callbacks.+ * @param delete_callback+ * @return void+ */+DUCKDB_C_API void duckdb_log_storage_set_extra_data(duckdb_log_storage log_storage, void *extra_data,+ duckdb_delete_callback_t delete_callback);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the name of the log storage.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param log_storage The log storage object.+ * @param name The name of the log storage.+ * @return void+ */+DUCKDB_C_API void duckdb_log_storage_set_name(duckdb_log_storage log_storage, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Registers a custom log storage for the logger.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param database A database object.+ * @param log_storage The log storage object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_log_storage(duckdb_database database, duckdb_log_storage log_storage);+#endif++/* --- Struct definitions for log_storage --- */++/* ============================================================================+ * MODULE: logical_type+ * ============================================================================ */++/* --- Enums for logical_type --- */++/* --- Struct forward declarations for logical_type --- */++/* --- Types for logical_type --- */++/* --- Constants for logical_type --- */++/* --- Function pointer typedefs for logical_type --- */++/* --- Functions for logical_type --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Creates a `duckdb_logical_type` from a primitive type. The resulting logical type must be destroyed with+ * `duckdb_destroy_logical_type`.+ *+ * Returns an invalid logical type, if type is: `DUCKDB_TYPE_INVALID`, `DUCKDB_TYPE_DECIMAL`, `DUCKDB_TYPE_ENUM`,+ * `DUCKDB_TYPE_LIST`, `DUCKDB_TYPE_STRUCT`, `DUCKDB_TYPE_MAP`, `DUCKDB_TYPE_ARRAY`, or `DUCKDB_TYPE_UNION`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The primitive type to create.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_logical_type(duckdb_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Returns the alias of a duckdb_logical_type, if set, else `nullptr`. The result must be destroyed with `duckdb_free`.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param type The logical type+ * @return char*+ */+DUCKDB_C_API char *duckdb_logical_type_get_alias(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the alias of a duckdb_logical_type.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param type The logical type+ * @param alias The alias to set+ * @return void+ */+DUCKDB_C_API void duckdb_logical_type_set_alias(duckdb_logical_type type, const char *alias);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Creates a LIST type from its child type. The return type must be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.4.0+ *+ * @param type The child type of the list+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_list_type(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 1)+/*!+ * Creates an ARRAY type from its child type. The return type must be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.10.1+ *+ * @param type The child type of the array.+ * @param array_size The number of elements in the array.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_array_type(duckdb_logical_type type, idx_t array_size);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Creates a MAP type from its key type and value type. The return type must be destroyed with+ * `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.4.0+ *+ * @param key_type The map's key type.+ * @param value_type The map's value type.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_map_type(duckdb_logical_type key_type, duckdb_logical_type value_type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * Creates a UNION type from the passed arrays. The return type must be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param member_types The array of union member types.+ * @param member_names The union member names.+ * @param member_count The number of union members.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_union_type(duckdb_logical_type *member_types, const char **member_names,+ idx_t member_count);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0)+/*!+ * Creates a STRUCT type based on the member types and names. The resulting type must be destroyed with+ * `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.9.0+ *+ * @param member_types The array of types of the struct members.+ * @param member_names The array of names of the struct members.+ * @param member_count The number of members of the struct.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_struct_type(duckdb_logical_type *member_types, const char **member_names,+ idx_t member_count);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Creates an ENUM type from the passed member name array. The resulting type should be destroyed with+ * `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param member_names The array of names that the enum should consist of.+ * @param member_count The number of elements that were specified in the array.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_enum_type(const char **member_names, idx_t member_count);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Creates a DECIMAL type with the specified width and scale. The resulting type should be destroyed with+ * `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param width The width of the decimal type+ * @param scale The scale of the decimal type+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_create_decimal_type(uint8_t width, uint8_t scale);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the enum `duckdb_type` of a `duckdb_logical_type`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type.+ * @return duckdb_type+ */+DUCKDB_C_API duckdb_type duckdb_get_type_id(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the width of a decimal type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @return uint8_t+ */+DUCKDB_C_API uint8_t duckdb_decimal_width(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the scale of a decimal type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @return uint8_t+ */+DUCKDB_C_API uint8_t duckdb_decimal_scale(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the internal storage type of a decimal type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @return duckdb_type+ */+DUCKDB_C_API duckdb_type duckdb_decimal_internal_type(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the internal storage type of an enum type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @return duckdb_type+ */+DUCKDB_C_API duckdb_type duckdb_enum_internal_type(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the dictionary size of the enum type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @return uint32_t+ */+DUCKDB_C_API uint32_t duckdb_enum_dictionary_size(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the dictionary value at the specified position from the enum.+ *+ * The result must be freed with `duckdb_free`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @param index The index in the dictionary+ * @return char*+ */+DUCKDB_C_API char *duckdb_enum_dictionary_value(duckdb_logical_type type, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the child type of the given LIST type. Also accepts MAP types. The result must be freed with+ * `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type, either LIST or MAP.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_list_type_child_type(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 1)+/*!+ * Retrieves the child type of the given ARRAY type.+ *+ * The result must be freed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.10.1+ *+ * @param type The logical type. Must be ARRAY.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_array_type_child_type(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 1)+/*!+ * Retrieves the array size of the given array type.+ *+ * history:+ * - stable: v0.10.1+ *+ * @param type The logical type object+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_array_type_array_size(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Retrieves the key type of the given map type.+ *+ * The result must be freed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.4.0+ *+ * @param type The logical type object+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_map_type_key_type(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Retrieves the value type of the given map type.+ *+ * The result must be freed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.4.0+ *+ * @param type The logical type object+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_map_type_value_type(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Returns the number of children of a struct type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_struct_type_child_count(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the name of the struct child.+ *+ * The result must be freed with `duckdb_free`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @param index The child index+ * @return char*+ */+DUCKDB_C_API char *duckdb_struct_type_child_name(duckdb_logical_type type, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the child type of the given struct type at the specified index.+ *+ * The result must be freed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type object+ * @param index The child index+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_struct_type_child_type(duckdb_logical_type type, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * Returns the number of members that the union type has.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param type The logical type (union) object+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_union_type_member_count(duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * Retrieves the name of the union member.+ *+ * The result must be freed with `duckdb_free`.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param type The logical type object+ * @param index The child index+ * @return char*+ */+DUCKDB_C_API char *duckdb_union_type_member_name(duckdb_logical_type type, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * Retrieves the child type of the given union member at the specified index.+ *+ * The result must be freed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param type The logical type object+ * @param index The child index+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_union_type_member_type(duckdb_logical_type type, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Destroys the logical type and de-allocates all memory allocated for that type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param type The logical type to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_logical_type(duckdb_logical_type *type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Registers a custom type within the given connection. The type must have an alias+ *+ * history:+ * - stable: v1.1.0+ *+ * @param con The connection to use+ * @param type The custom type to register+ * @param info+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_logical_type(duckdb_connection con, duckdb_logical_type type,+ duckdb_create_type_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Gets the CRS (Coordinate Reference System) of a GEOMETRY type. Result must be freed with `duckdb_free`.+ *+ * history:+ * - unstable: v1.5.2+ * - stable: v1.5.6+ *+ * @param type The GEOMETRY type.+ * @return char*+ */+DUCKDB_C_API char *duckdb_geometry_type_get_crs(duckdb_logical_type type);+#endif++/* --- Struct definitions for logical_type --- */++/* ============================================================================+ * MODULE: pending+ * ============================================================================ */++/* --- Enums for pending --- */++/* --- Struct forward declarations for pending --- */++/* --- Types for pending --- */++/* --- Constants for pending --- */++/* --- Function pointer typedefs for pending --- */++/* --- Functions for pending --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param prepared_statement The prepared statement to execute.+ * @param out_result The pending query result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement,+ duckdb_pending_result *out_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * Closes the pending result and de-allocates all memory allocated for the result.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param pending_result The pending result to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_pending(duckdb_pending_result *pending_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param pending_result The pending result to fetch the error from.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_pending_error(duckdb_pending_result pending_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param pending_result The pending result to execute a task within.+ * @return duckdb_pending_state+ */+DUCKDB_C_API duckdb_pending_state duckdb_pending_execute_task(duckdb_pending_result pending_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param pending_result The pending result.+ * @return duckdb_pending_state+ */+DUCKDB_C_API duckdb_pending_state duckdb_pending_execute_check_state(duckdb_pending_result pending_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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`.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param pending_result The pending result to execute.+ * @param out_result The result object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_execute_pending(duckdb_pending_result pending_result, duckdb_result *out_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0)+/*!+ * Returns whether a duckdb_pending_state is finished executing. For example if `pending_state` is+ * DUCKDB_PENDING_RESULT_READY, this function will return true.+ *+ * history:+ * - stable: v0.9.0+ *+ * @param pending_state The pending state on which to decide whether to finish execution.+ * @return bool+ */+DUCKDB_C_API bool duckdb_pending_execution_is_finished(duckdb_pending_state pending_state);+#endif++/* --- Struct definitions for pending --- */++/* ============================================================================+ * MODULE: prepared_statement+ * ============================================================================ */++/* --- Enums for prepared_statement --- */++/* --- Struct forward declarations for prepared_statement --- */++/* --- Types for prepared_statement --- */++/* --- Constants for prepared_statement --- */++/* --- Function pointer typedefs for prepared_statement --- */++/* --- Functions for prepared_statement --- */++/*!+ * 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.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param connection The connection object+ * @param query The SQL query to prepare+ * @param out_prepared_statement The resulting prepared statement object+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_prepare(duckdb_connection connection, const char *query,+ duckdb_prepared_statement *out_prepared_statement);++/*!+ * Closes the prepared statement and de-allocates all memory allocated for the statement.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement The prepared statement to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_prepare(duckdb_prepared_statement *prepared_statement);++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 8)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.8+ *+ * @param prepared_statement The prepared statement to obtain the error from.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_prepare_error(duckdb_prepared_statement prepared_statement);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 1, 1)+/*!+ * Returns the number of parameters that can be provided to the given prepared statement.+ *+ * Returns 0 if the query was not successfully prepared.+ *+ * history:+ * - stable: v0.1.1+ *+ * @param prepared_statement The prepared statement to obtain the number of parameters for.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_nparams(duckdb_prepared_statement prepared_statement);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.9.0+ *+ * @param prepared_statement The prepared statement for which to get the parameter name from.+ * @param index+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_parameter_name(duckdb_prepared_statement prepared_statement, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param prepared_statement The prepared statement.+ * @param param_idx The parameter index.+ * @return duckdb_type+ */+DUCKDB_C_API duckdb_type duckdb_param_type(duckdb_prepared_statement prepared_statement, idx_t param_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the logical type for the parameter at the given index.+ *+ * Returns `nullptr` if the parameter index is out of range or the statement was not successfully prepared.+ *+ * The return type of this call should be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param prepared_statement The prepared statement.+ * @param param_idx The parameter index.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_param_logical_type(duckdb_prepared_statement prepared_statement,+ idx_t param_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * Clear the params bind to the prepared statement.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param prepared_statement+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_clear_bindings(duckdb_prepared_statement prepared_statement);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Returns the statement type of the statement to be executed+ *+ * history:+ * - stable: v0.10.0+ *+ * @param statement The prepared statement.+ * @return duckdb_statement_type+ */+DUCKDB_C_API duckdb_statement_type duckdb_prepared_statement_type(duckdb_prepared_statement statement);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the number of columns present in a the result of the prepared statement. If any of the column types are+ * invalid, the result will be 1.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param prepared_statement The prepared statement.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_prepared_statement_column_count(duckdb_prepared_statement prepared_statement);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the name of the specified column of the result of the prepared_statement. The returned string should be freed+ * using `duckdb_free`.+ *+ * Returns `nullptr` if the column is out of range.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param prepared_statement The prepared statement.+ * @param col_idx The column index.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_prepared_statement_column_name(duckdb_prepared_statement prepared_statement,+ idx_t col_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the column type of the specified column of the result of the prepared_statement.+ *+ * Returns `DUCKDB_TYPE_INVALID` if the column is out of range. The return type of this call should be destroyed with+ * `duckdb_destroy_logical_type`.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param prepared_statement The prepared statement to fetch the column type from.+ * @param col_idx The column index.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type+duckdb_prepared_statement_column_logical_type(duckdb_prepared_statement prepared_statement, idx_t col_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the column type of the specified column of the result of the prepared_statement.+ *+ * Returns `DUCKDB_TYPE_INVALID` if the column is out of range.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param prepared_statement The prepared statement to fetch the column type from.+ * @param col_idx The column index.+ * @return duckdb_type+ */+DUCKDB_C_API duckdb_type duckdb_prepared_statement_column_type(duckdb_prepared_statement prepared_statement,+ idx_t col_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0)+/*!+ * Binds a value to the prepared statement at the specified index.+ *+ * Supersedes all type-specific bind functions (e.g., `duckdb_bind_varchar`, `duckdb_bind_int64`, etc.).+ *+ * history:+ * - stable: v0.9.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_value(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 9, 0)+/*!+ * Retrieve the index of the parameter for the prepared statement, identified by name+ *+ * history:+ * - stable: v0.9.0+ *+ * @param prepared_statement+ * @param param_idx_out+ * @param name+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_parameter_index(duckdb_prepared_statement prepared_statement,+ idx_t *param_idx_out, const char *name);+#endif++/*!+ * Binds a bool value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_boolean(duckdb_prepared_statement prepared_statement, idx_t param_idx, bool val);++/*!+ * Binds an int8_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_int8(duckdb_prepared_statement prepared_statement, idx_t param_idx, int8_t val);++/*!+ * Binds an int16_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_int16(duckdb_prepared_statement prepared_statement, idx_t param_idx, int16_t val);++/*!+ * Binds an int32_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_int32(duckdb_prepared_statement prepared_statement, idx_t param_idx, int32_t val);++/*!+ * Binds an int64_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_int64(duckdb_prepared_statement prepared_statement, idx_t param_idx, int64_t val);++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Binds a duckdb_hugeint value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_hugeint(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_hugeint val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Binds a duckdb_uhugeint value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_uhugeint(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_uhugeint val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 6, 0)+/*!+ * Binds a duckdb_decimal value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.6.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_decimal(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_decimal val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Binds a uint8_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_uint8(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint8_t val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Binds a uint16_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_uint16(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ uint16_t val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Binds a uint32_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_uint32(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ uint32_t val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Binds a uint64_t value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_uint64(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ uint64_t val);+#endif++/*!+ * Binds a float value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_float(duckdb_prepared_statement prepared_statement, idx_t param_idx, float val);++/*!+ * Binds a double value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_double(duckdb_prepared_statement prepared_statement, idx_t param_idx, double val);++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Binds a duckdb_date value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_date(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_date val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Binds a duckdb_time value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_time(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_time val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Binds a duckdb_timestamp value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_timestamp(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_timestamp val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Binds a duckdb_timestamp value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_timestamp_tz(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_timestamp val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Binds a duckdb_interval value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_interval(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ duckdb_interval val);+#endif++/*!+ * Binds a null-terminated varchar value to the prepared statement at the specified index.+ *+ * Superseded by `duckdb_bind_value`.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_varchar(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ const char *val);++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Binds a varchar value to the prepared statement at the specified index.+ *+ * Superseded by `duckdb_bind_value`.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param prepared_statement+ * @param param_idx+ * @param val+ * @param length+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_varchar_length(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ const char *val, idx_t length);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5)+/*!+ * Binds a blob value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.2.5+ *+ * @param prepared_statement+ * @param param_idx+ * @param data+ * @param length+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_blob(duckdb_prepared_statement prepared_statement, idx_t param_idx,+ const void *data, idx_t length);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 1, 2)+/*!+ * Binds a NULL value to the prepared statement at the specified index.+ *+ * history:+ * - stable: v0.1.2+ *+ * @param prepared_statement+ * @param param_idx+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_bind_null(duckdb_prepared_statement prepared_statement, idx_t param_idx);+#endif++/*!+ * 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`.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param prepared_statement The prepared statement to execute.+ * @param out_result The query result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_execute_prepared(duckdb_prepared_statement prepared_statement,+ duckdb_result *out_result);++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param connection The connection object+ * @param query The SQL query to extract+ * @param out_extracted_statements The resulting extracted statements object+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_extract_statements(duckdb_connection connection, const char *query,+ duckdb_extracted_statements *out_extracted_statements);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param connection The connection object+ * @param extracted_statements The extracted statements object+ * @param index The index of the extracted statement to prepare+ * @param out_prepared_statement The resulting prepared statement object+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_prepare_extracted_statement(duckdb_connection connection,+ duckdb_extracted_statements extracted_statements,+ idx_t index,+ duckdb_prepared_statement *out_prepared_statement);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param extracted_statements The extracted statements to fetch the error from.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_extract_statements_error(duckdb_extracted_statements extracted_statements);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * De-allocates all memory allocated for the extracted statements.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param extracted_statements The extracted statements to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_extracted(duckdb_extracted_statements *extracted_statements);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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`.+ *+ * history:+ * - stable: v0.10.0+ * - deprecated: v1.0.0+ *+ * @param prepared_statement The prepared statement to execute.+ * @param out_result The query result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_execute_prepared_streaming(duckdb_prepared_statement prepared_statement,+ duckdb_result *out_result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 8, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.8.0+ * - deprecated: v1.0.0+ *+ * @param prepared_statement The prepared statement to execute.+ * @param out_result The pending query result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement,+ duckdb_pending_result *out_result);+#endif++/* --- Struct definitions for prepared_statement --- */++/* ============================================================================+ * MODULE: query+ * ============================================================================ */++/* --- Enums for query --- */++/* --- Struct forward declarations for query --- */++/* --- Types for query --- */++/* --- Constants for query --- */++/* --- Function pointer typedefs for query --- */++/* --- Functions for 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.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param connection The connection to perform the query in.+ * @param query The SQL query to run.+ * @param out_result The query result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_query(duckdb_connection connection, const char *query, duckdb_result *out_result);++/*!+ * Closes the result and de-allocates all memory allocated for that result.+ *+ * history:+ * - stable: v0.1.0+ *+ * @param result The result to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_result(duckdb_result *result);++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 1)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.1+ *+ * @param result The result object to fetch the column name from.+ * @param col The column index.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_column_name(duckdb_result *result, idx_t col);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Returns the column type of the specified column.+ *+ * Returns `DUCKDB_TYPE_INVALID` if the column is out of range.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param result The result object to fetch the column type from.+ * @param col The column index.+ * @return duckdb_type+ */+DUCKDB_C_API duckdb_type duckdb_column_type(duckdb_result *result, idx_t col);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Returns the statement type of the statement that was executed+ *+ * history:+ * - stable: v0.10.0+ *+ * @param result The result object to fetch the statement type from.+ * @return duckdb_statement_type+ */+DUCKDB_C_API duckdb_statement_type duckdb_result_statement_type(duckdb_result result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param result The result object to fetch the column type from.+ * @param col The column index.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_column_logical_type(duckdb_result *result, idx_t col);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the arrow options associated with the given result. These options are definitions of how the arrow+ * arrays/schema should be produced.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param result The result object to fetch arrow options from.+ * @return duckdb_arrow_options+ */+DUCKDB_C_API duckdb_arrow_options duckdb_result_get_arrow_options(duckdb_result *result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * Returns the number of columns present in a the result object.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param result The result object.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_column_count(duckdb_result *result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param result The result object.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_rows_changed(duckdb_result *result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9)+/*!+ * 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.+ *+ * history:+ * - stable: v0.2.9+ *+ * @param result The result object to fetch the error from.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_result_error(duckdb_result *result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the result error type contained within the result. The error is only set if `duckdb_query` returns+ * `DuckDBError`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param result The result object to fetch the error from.+ * @return duckdb_error_type+ */+DUCKDB_C_API duckdb_error_type duckdb_result_error_type(duckdb_result *result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Returns the return_type of the given result, or DUCKDB_RETURN_TYPE_INVALID on error+ *+ * history:+ * - stable: v0.10.0+ *+ * @param result The result object+ * @return duckdb_result_type+ */+DUCKDB_C_API duckdb_result_type duckdb_result_return_type(duckdb_result result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 0, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v1.0.0+ *+ * @param result The result object to fetch the data chunk from.+ * @return duckdb_data_chunk+ */+DUCKDB_C_API duckdb_data_chunk duckdb_fetch_chunk(duckdb_result result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates duckdb_error_data. Must be destroyed with `duckdb_destroy_error_data`.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param type The error type.+ * @param message The error message.+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_create_error_data(duckdb_error_type type, const char *message);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the error data and deallocates its memory.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param error_data The error data to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_error_data(duckdb_error_data *error_data);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the duckdb_error_type of the error data.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param error_data The error data.+ * @return duckdb_error_type+ */+DUCKDB_C_API duckdb_error_type duckdb_error_data_error_type(duckdb_error_data error_data);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the error message of the error data. Must not be freed.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param error_data The error data.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_error_data_message(duckdb_error_data error_data);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns whether the error data contains an error or not.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param error_data The error data.+ * @return bool+ */+DUCKDB_C_API bool duckdb_error_data_has_error(duckdb_error_data error_data);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 7)+/*!+ * Allocate `size` bytes of memory using the duckdb internal malloc function. Any memory allocated in this manner should+ * be freed using `duckdb_free`.+ *+ * history:+ * - stable: v0.2.7+ *+ * @param size The number of bytes to allocate.+ * @return void*+ */+DUCKDB_C_API void *duckdb_malloc(size_t size);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 7)+/*!+ * Free a value returned from `duckdb_malloc`, `duckdb_value_varchar`, `duckdb_value_blob`, or `duckdb_value_string`.+ *+ * history:+ * - stable: v0.2.7+ *+ * @param ptr The memory region to de-allocate.+ * @return void+ */+DUCKDB_C_API void duckdb_free(void *ptr);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_vector_size(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 8, 0)+/*!+ * Whether or not the duckdb_string_t value is inlined. This means that the data of the string does not have a separate+ * allocation.+ *+ * history:+ * - stable: v0.8.0+ *+ * @param string+ * @return bool+ */+DUCKDB_C_API bool duckdb_string_is_inlined(duckdb_string_t string);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Get the length of a string+ *+ * history:+ * - stable: v1.1.0+ *+ * @param string The string to get the length of.+ * @return uint32_t+ */+DUCKDB_C_API uint32_t duckdb_string_t_length(duckdb_string_t string);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Get a pointer to the string data of a string+ *+ * history:+ * - stable: v1.1.0+ *+ * @param string The string to get the pointer to.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_string_t_data(duckdb_string_t *string);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Checks if a string is valid UTF-8.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param str The string to check+ * @param len The length of the string (in bytes)+ * @return duckdb_error_data+ */+DUCKDB_C_API duckdb_error_data duckdb_valid_utf8_check(const char *str, idx_t len);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Returns the number of rows present in the result object.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result The result object.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_row_count(duckdb_result *result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **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](types) or the `DUCKDB_TYPE` enum.+ *+ * For example, for a column of type `DUCKDB_TYPE_INTEGER`, rows can be accessed in the following manner: ```c int32_t+ * *data = (int32_t *) duckdb_column_data(&result, 0); printf("Data for row %d: %d\n", row, data[row]); ```+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result The result object to fetch the column data from.+ * @param col The column index.+ * @return void*+ */+DUCKDB_C_API void *duckdb_column_data(duckdb_result *result, idx_t col);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **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.+ *+ * ```c 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]); } ```+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result The result object to fetch the nullmask from.+ * @param col The column index.+ * @return bool*+ */+DUCKDB_C_API bool *duckdb_nullmask_data(duckdb_result *result, idx_t col);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.3.3+ * - deprecated: v1.0.0+ *+ * @param result The result object to fetch the data chunk from.+ * @param chunk_index The chunk index to fetch from.+ * @return duckdb_data_chunk+ */+DUCKDB_C_API duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 8, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Checks if the type of the internal result is StreamQueryResult.+ *+ * history:+ * - stable: v0.8.0+ * - deprecated: v1.0.0+ *+ * @param result The result object to check.+ * @return bool+ */+DUCKDB_C_API bool duckdb_result_is_streaming(duckdb_result result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * Returns the number of data chunks present in the result.+ *+ * history:+ * - stable: v0.3.3+ * - deprecated: v1.0.0+ *+ * @param result The result object+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_result_chunk_count(duckdb_result result);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 8, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: 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.+ *+ * history:+ * - stable: v0.8.0+ * - deprecated: v1.0.0+ *+ * @param result The result object to fetch the data chunk from.+ * @return duckdb_data_chunk+ */+DUCKDB_C_API duckdb_data_chunk duckdb_stream_fetch_chunk(duckdb_result result);+#endif++/* --- Struct definitions for query --- */++/* ============================================================================+ * MODULE: replacement_scan+ * ============================================================================ */++/* --- Enums for replacement_scan --- */++/* --- Struct forward declarations for replacement_scan --- */++/* --- Types for replacement_scan --- */++/* --- Constants for replacement_scan --- */++/* --- Function pointer typedefs for replacement_scan --- */++/* --- Functions for replacement_scan --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Add a replacement scan definition to the specified database.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param db The database object to add the replacement scan to+ * @param replacement The replacement scan callback+ * @param extra_data Extra data that is passed back into the specified callback+ * @param delete_callback The delete callback to call on the extra data, if any+ * @return void+ */+DUCKDB_C_API void duckdb_add_replacement_scan(duckdb_database db, duckdb_replacement_callback_t replacement,+ void *extra_data, duckdb_delete_callback_t delete_callback);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param function_name The function name to substitute.+ * @return void+ */+DUCKDB_C_API void duckdb_replacement_scan_set_function_name(duckdb_replacement_scan_info info,+ const char *function_name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Adds a parameter to the replacement scan function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param parameter The parameter to add.+ * @return void+ */+DUCKDB_C_API void duckdb_replacement_scan_add_parameter(duckdb_replacement_scan_info info, duckdb_value parameter);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 6, 0)+/*!+ * Report that an error has occurred while executing the replacement scan.+ *+ * history:+ * - stable: v0.6.0+ *+ * @param info The info object+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_replacement_scan_set_error(duckdb_replacement_scan_info info, const char *error);+#endif++/* --- Struct definitions for replacement_scan --- */++/* ============================================================================+ * MODULE: scalar_function+ * ============================================================================ */++/* --- Enums for scalar_function --- */++/* --- Struct forward declarations for scalar_function --- */++/* --- Types for scalar_function --- */++/* --- Constants for scalar_function --- */++/* --- Function pointer typedefs for scalar_function --- */++/* --- Functions for scalar_function --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a new empty scalar function.+ *+ * The return value must be destroyed with `duckdb_destroy_scalar_function`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @return duckdb_scalar_function+ */+DUCKDB_C_API duckdb_scalar_function duckdb_create_scalar_function(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Destroys the given scalar function object.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function to destroy+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_scalar_function(duckdb_scalar_function *scalar_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the name of the given scalar function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function+ * @param name The name of the scalar function+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_name(duckdb_scalar_function scalar_function, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the parameters of the given scalar function to varargs. Does not require adding parameters with+ * duckdb_scalar_function_add_parameter.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function.+ * @param type The type of the arguments.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_varargs(duckdb_scalar_function scalar_function, duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the scalar function's null-handling behavior to special.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_special_handling(duckdb_scalar_function scalar_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the Function Stability of the scalar function to VOLATILE, indicating the function should be re-run for every+ * row. This limits optimization that can be performed for the function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_volatile(duckdb_scalar_function scalar_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Adds a parameter to the scalar function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function.+ * @param type The parameter type. Cannot contain INVALID.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_add_parameter(duckdb_scalar_function scalar_function,+ duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the return type of the scalar function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function+ * @param type Cannot contain INVALID or ANY.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_return_type(duckdb_scalar_function scalar_function,+ duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Assigns extra information to the scalar function that can be fetched during binding, etc.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function+ * @param extra_info The extra information+ * @param destroy The callback that will be called to destroy the extra information (if any)+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_extra_info(duckdb_scalar_function scalar_function, void *extra_info,+ duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the (optional) bind function of the scalar function.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param scalar_function The scalar function.+ * @param bind The bind function.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_bind(duckdb_scalar_function scalar_function,+ duckdb_scalar_function_bind_t bind);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the user-provided bind data in the bind object of the scalar function. The bind data object can be retrieved+ * again during execution. In most case, you also need to set the copy-callback of your bind data via+ * duckdb_scalar_function_set_bind_data_copy.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param info The bind info of the scalar function.+ * @param bind_data The bind data object.+ * @param destroy The callback to destroy the bind data (if any).+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_bind_data(duckdb_bind_info info, void *bind_data,+ duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the copy-callback for the user-provided bind data in the bind object of the scalar function.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param info The bind info of the scalar function.+ * @param copy The callback to copy the bind data (if any).+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_bind_data_copy(duckdb_bind_info info, duckdb_copy_callback_t copy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Report that an error has occurred while calling bind on a scalar function.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param info The bind info object.+ * @param error The error message.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_bind_set_error(duckdb_bind_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Sets the main function of the scalar function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function The scalar function+ * @param function The function+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_function(duckdb_scalar_function scalar_function,+ duckdb_scalar_function_t function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Register the scalar function object within the given connection.+ *+ * The function requires at least a name, a function and a return type.+ *+ * If the function is incomplete or a function with this name already exists DuckDBError is returned.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param con The connection to register it in.+ * @param scalar_function The function pointer+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_scalar_function(duckdb_connection con,+ duckdb_scalar_function scalar_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Retrieves the extra info of the function as set in `duckdb_scalar_function_set_extra_info`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object.+ * @return void*+ */+DUCKDB_C_API void *duckdb_scalar_function_get_extra_info(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the extra info of the function as set in the bind info.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param info The info object.+ * @return void*+ */+DUCKDB_C_API void *duckdb_scalar_function_bind_get_extra_info(duckdb_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Gets the scalar function's bind data set by `duckdb_scalar_function_set_bind_data`. Note that the bind data is+ * read-only.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param info The function info.+ * @return void*+ */+DUCKDB_C_API void *duckdb_scalar_function_get_bind_data(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the bind info of a scalar function.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param info The bind info object of the scalar function.+ * @param out_context The client context of the bind info. Must be destroyed with `duckdb_destroy_client_context`.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_get_client_context(duckdb_bind_info info, duckdb_client_context *out_context);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Report that an error has occurred while executing the scalar function.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param info The info object.+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_error(duckdb_function_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a new empty scalar function set.+ *+ * The return value must be destroyed with `duckdb_destroy_scalar_function_set`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param name+ * @return duckdb_scalar_function_set+ */+DUCKDB_C_API duckdb_scalar_function_set duckdb_create_scalar_function_set(const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Destroys the given scalar function set object.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param scalar_function_set+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_scalar_function_set(duckdb_scalar_function_set *scalar_function_set);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Adds the scalar function as a new overload to the scalar function set.+ *+ * Returns DuckDBError if the function could not be added, for example if the overload already exists.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param set The scalar function set+ * @param function The function to add+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_add_scalar_function_to_set(duckdb_scalar_function_set set,+ duckdb_scalar_function function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Register the scalar function set within the given connection.+ *+ * The set requires at least a single valid overload.+ *+ * If the set is incomplete or a function with this name already exists DuckDBError is returned.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param con The connection to register it in.+ * @param set The function set to register+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_scalar_function_set(duckdb_connection con, duckdb_scalar_function_set set);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the number of input arguments of the scalar function.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param info The bind info.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_scalar_function_bind_get_argument_count(duckdb_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the input argument at index of the scalar function.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param info The bind info.+ * @param index The argument index.+ * @return duckdb_expression+ */+DUCKDB_C_API duckdb_expression duckdb_scalar_function_bind_get_argument(duckdb_bind_info info, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the state pointer of the function info.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The function info object.+ * @return void*+ */+DUCKDB_C_API void *duckdb_scalar_function_get_state(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the (optional) state init function of the scalar function. This is called once for each worker thread that+ * begins executing the function+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param scalar_function The scalar function.+ * @param init The init function.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_set_init(duckdb_scalar_function scalar_function,+ duckdb_scalar_function_init_t init);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Report that an error has occurred while calling init on a scalar function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info object.+ * @param error The error message.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_init_set_error(duckdb_init_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Sets the state pointer in the init info of the scalar function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info object.+ * @param state The state pointer.+ * @param destroy The callback to destroy the state (if any).+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_init_set_state(duckdb_init_info info, void *state,+ duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the init info of a scalar function.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info object of the scalar function.+ * @param out_context The client context of the init info. Must be destroyed with `duckdb_destroy_client_context`.+ * @return void+ */+DUCKDB_C_API void duckdb_scalar_function_init_get_client_context(duckdb_init_info info,+ duckdb_client_context *out_context);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Gets the scalar function's bind data set by `duckdb_scalar_function_set_bind_data`. Note that the bind data is+ * read-only.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info object.+ * @return void*+ */+DUCKDB_C_API void *duckdb_scalar_function_init_get_bind_data(duckdb_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the extra info of the function as set in the init info.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The init info object.+ * @return void*+ */+DUCKDB_C_API void *duckdb_scalar_function_init_get_extra_info(duckdb_init_info info);+#endif++/* --- Struct definitions for scalar_function --- */++/* ============================================================================+ * MODULE: table_description+ * ============================================================================ */++/* --- Enums for table_description --- */++/* --- Struct forward declarations for table_description --- */++/* --- Types for table_description --- */++/* --- Constants for table_description --- */++/* --- Function pointer typedefs for table_description --- */++/* --- Functions for table_description --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a table description object. Note that `duckdb_table_description_destroy` should always be called on the+ * resulting table_description, even if the function returns `DuckDBError`.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param connection The connection context.+ * @param schema The schema of the table, or `nullptr` for the default schema.+ * @param table The table name.+ * @param out The resulting table description object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_table_description_create(duckdb_connection connection, const char *schema,+ const char *table, duckdb_table_description *out);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a table description object. Note that `duckdb_table_description_destroy` must be called on the resulting+ * table_description, even if the function returns `DuckDBError`.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param connection The connection context.+ * @param catalog The catalog (database) name of the table, or `nullptr` for the default catalog.+ * @param schema The schema of the table, or `nullptr` for the default schema.+ * @param table The table name.+ * @param out The resulting table description object.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_table_description_create_ext(duckdb_connection connection, const char *catalog,+ const char *schema, const char *table,+ duckdb_table_description *out);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Destroy the TableDescription object.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param table_description The table_description to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_table_description_destroy(duckdb_table_description *table_description);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the error message associated with the given table_description. If the table_description has no error message,+ * this returns `nullptr` instead. The error message should not be freed. It will be de-allocated when+ * `duckdb_table_description_destroy` is called.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param table_description The table_description to get the error from.+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_table_description_error(duckdb_table_description table_description);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Check if the column at 'index' index of the table has a DEFAULT expression.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param table_description The table_description to query.+ * @param index The index of the column to query.+ * @param out The out-parameter used to store the result.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_column_has_default(duckdb_table_description table_description, idx_t index, bool *out);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Return the number of columns of the described table.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param table_description The table_description to query.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_table_description_get_column_count(duckdb_table_description table_description);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Obtain the column name at 'index'. The out result must be destroyed with `duckdb_free`.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param table_description The table_description to query.+ * @param index The index of the column to query.+ * @return char*+ */+DUCKDB_C_API char *duckdb_table_description_get_column_name(duckdb_table_description table_description, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Obtain the column type at 'index'. The return value must be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param table_description The table_description to query.+ * @param index The index of the column to query.+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_table_description_get_column_type(duckdb_table_description table_description,+ idx_t index);+#endif++/* --- Struct definitions for table_description --- */++/* ============================================================================+ * MODULE: table_function+ * ============================================================================ */++/* --- Enums for table_function --- */++/* --- Struct forward declarations for table_function --- */++/* --- Types for table_function --- */++/* --- Constants for table_function --- */++/* --- Function pointer typedefs for table_function --- */++/* --- Functions for table_function --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Creates a new empty table function.+ *+ * The return value should be destroyed with `duckdb_destroy_table_function`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @return duckdb_table_function+ */+DUCKDB_C_API duckdb_table_function duckdb_create_table_function(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Destroys the given table function object.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function to destroy+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_table_function(duckdb_table_function *table_function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Sets the name of the given table function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function+ * @param name The name of the table function+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_set_name(duckdb_table_function table_function, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Adds a parameter to the table function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function.+ * @param type The parameter type. Cannot contain INVALID.+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_add_parameter(duckdb_table_function table_function, duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 8, 0)+/*!+ * Adds a named parameter to the table function.+ *+ * history:+ * - stable: v0.8.0+ *+ * @param table_function The table function.+ * @param name The parameter name.+ * @param type The parameter type. Cannot contain INVALID.+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_add_named_parameter(duckdb_table_function table_function, const char *name,+ duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Assigns extra information to the table function that can be fetched during binding, etc.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function+ * @param extra_info The extra information+ * @param destroy The callback that will be called to destroy the extra information (if any)+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_set_extra_info(duckdb_table_function table_function, void *extra_info,+ duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Sets the bind function of the table function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function+ * @param bind The bind function+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_set_bind(duckdb_table_function table_function,+ duckdb_table_function_bind_t bind);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Sets the init function of the table function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function+ * @param init The init function+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_set_init(duckdb_table_function table_function,+ duckdb_table_function_init_t init);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Sets the thread-local init function of the table function.+ *+ * history:+ * - stable: v0.4.0+ *+ * @param table_function The table function+ * @param init The init function+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_set_local_init(duckdb_table_function table_function,+ duckdb_table_function_init_t init);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Sets the main function of the table function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function+ * @param function The function+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_set_function(duckdb_table_function table_function,+ duckdb_table_function_t function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param table_function The table function+ * @param pushdown True if the table function supports projection pushdown, false otherwise.+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_supports_projection_pushdown(duckdb_table_function table_function,+ bool pushdown);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param con The connection to register it in.+ * @param function The function pointer+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_register_table_function(duckdb_connection con, duckdb_table_function function);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the extra info of the function as set in `duckdb_table_function_set_extra_info`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @return void*+ */+DUCKDB_C_API void *duckdb_bind_get_extra_info(duckdb_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the client context of the bind info of a table function.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param info The bind info object of the table function.+ * @param out_context The client context of the bind info. Must be destroyed with `duckdb_destroy_client_context`.+ * @return void+ */+DUCKDB_C_API void duckdb_table_function_get_client_context(duckdb_bind_info info, duckdb_client_context *out_context);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Adds a result column to the output of the table function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The table function's bind info.+ * @param name The column name.+ * @param type The logical column type.+ * @return void+ */+DUCKDB_C_API void duckdb_bind_add_result_column(duckdb_bind_info info, const char *name, duckdb_logical_type type);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the number of regular (non-named) parameters to the function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_bind_get_parameter_count(duckdb_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the parameter at the given index.+ *+ * The result must be destroyed with `duckdb_destroy_value`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param index The index of the parameter to get+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 8, 0)+/*!+ * Retrieves a named parameter with the given name.+ *+ * The result must be destroyed with `duckdb_destroy_value`.+ *+ * history:+ * - stable: v0.8.0+ *+ * @param info The info object+ * @param name The name of the parameter+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Sets the user-provided bind data in the bind object of the table function. This object can be retrieved again during+ * execution.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The bind info of the table function.+ * @param bind_data The bind data object.+ * @param destroy The callback to destroy the bind data (if any).+ * @return void+ */+DUCKDB_C_API void duckdb_bind_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * Sets the cardinality estimate for the table function, used for optimization.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param info The bind data object.+ * @param cardinality+ * @param is_exact Whether or not the cardinality estimate is exact, or an approximation+ * @return void+ */+DUCKDB_C_API void duckdb_bind_set_cardinality(duckdb_bind_info info, idx_t cardinality, bool is_exact);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Report that an error has occurred while calling bind on a table function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_bind_set_error(duckdb_bind_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the extra info of the function as set in `duckdb_table_function_set_extra_info`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @return void*+ */+DUCKDB_C_API void *duckdb_init_get_extra_info(duckdb_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @return void*+ */+DUCKDB_C_API void *duckdb_init_get_bind_data(duckdb_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Sets the user-provided init data in the init object. This object can be retrieved again during execution.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param init_data The init data object.+ * @param destroy The callback that will be called to destroy the init data (if any)+ * @return void+ */+DUCKDB_C_API void duckdb_init_set_init_data(duckdb_init_info info, void *init_data, duckdb_delete_callback_t destroy);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Returns the number of projected columns.+ *+ * This function must be used if projection pushdown is enabled to figure out which columns to emit.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_init_get_column_count(duckdb_init_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param column_index The index at which to get the projected column index, from 0..duckdb_init_get_column_count(info)+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_init_get_column_index(duckdb_init_info info, idx_t column_index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Sets how many threads can process this table function in parallel (default: 1)+ *+ * history:+ * - stable: v0.4.0+ *+ * @param info The info object+ * @param max_threads The maximum amount of threads that can process this table function+ * @return void+ */+DUCKDB_C_API void duckdb_init_set_max_threads(duckdb_init_info info, idx_t max_threads);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Report that an error has occurred while calling init.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_init_set_error(duckdb_init_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the extra info of the function as set in `duckdb_table_function_set_extra_info`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @return void*+ */+DUCKDB_C_API void *duckdb_function_get_extra_info(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Gets the table function's bind data set by `duckdb_bind_set_bind_data`.+ *+ * Note that the bind data is read-only. For tracking state, use the init data instead.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The function info object.+ * @return void*+ */+DUCKDB_C_API void *duckdb_function_get_bind_data(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Gets the init data set by `duckdb_init_set_init_data` during the init.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @return void*+ */+DUCKDB_C_API void *duckdb_function_get_init_data(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Gets the thread-local init data set by `duckdb_init_set_init_data` during the local_init.+ *+ * history:+ * - stable: v0.4.0+ *+ * @param info The info object+ * @return void*+ */+DUCKDB_C_API void *duckdb_function_get_local_init_data(duckdb_function_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Report that an error has occurred while executing the function.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param info The info object+ * @param error The error message+ * @return void+ */+DUCKDB_C_API void duckdb_function_set_error(duckdb_function_info info, const char *error);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the number of result columns of a table function.+ *+ * If the table function is used in a `COPY ... FROM` statement, this can be used to retrieve the number of columns in+ * the target table at the start of the bind callback.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_table_function_bind_get_result_column_count(duckdb_bind_info info);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the name of a result column of a table function.+ *+ * If the table function is used in a `COPY ... FROM` statement, this can be used to retrieve the names of the columns+ * in the target table at the start of the bind callback.+ *+ * The result is valid for the duration of the bind callback or until the next call to `duckdb_bind_add_result_column`,+ * so it must not be destroyed.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @param col_idx The index of the result column to retrieve the name for+ * @return const char*+ */+DUCKDB_C_API const char *duckdb_table_function_bind_get_result_column_name(duckdb_bind_info info, idx_t col_idx);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Retrieves the type of a result column of a table function.+ *+ * If the table function is used in a `COPY ... FROM` statement, this can be used to retrieve the types of the columns+ * in the target table at the start of the bind callback.+ *+ * The result must be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param info The bind info provided to the bind function+ * @param col_idx The index of the result column to retrieve the type for+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_table_function_bind_get_result_column_type(duckdb_bind_info info,+ idx_t col_idx);+#endif++/* --- Struct definitions for table_function --- */++/* ============================================================================+ * MODULE: threading+ * ============================================================================ */++/* --- Enums for threading --- */++/* --- Struct forward declarations for threading --- */++/* --- Types for threading --- */++/* --- Constants for threading --- */++/* --- Function pointer typedefs for threading --- */++/* --- Functions for threading --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 4, 0)+/*!+ * Execute DuckDB tasks on this thread.+ *+ * Will return after `max_tasks` have been executed, or if there are no more tasks present.+ *+ * history:+ * - stable: v0.4.0+ *+ * @param database The database object to execute tasks for+ * @param max_tasks The maximum amount of tasks to execute+ * @return void+ */+DUCKDB_C_API void duckdb_execute_tasks(duckdb_database database, idx_t max_tasks);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param database The database object to create the task state for+ * @return duckdb_task_state+ */+DUCKDB_C_API duckdb_task_state duckdb_create_task_state(duckdb_database database);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param state The task state of the executor+ * @return void+ */+DUCKDB_C_API void duckdb_execute_tasks_state(duckdb_task_state state);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param state The task state of the executor+ * @param max_tasks The maximum amount of tasks to execute+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_execute_n_tasks_state(duckdb_task_state state, idx_t max_tasks);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * Finish execution on a specific task.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param state The task state to finish execution+ * @return void+ */+DUCKDB_C_API void duckdb_finish_execution(duckdb_task_state state);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * Check if the provided duckdb_task_state has finished execution+ *+ * history:+ * - stable: v0.5.0+ *+ * @param state The task state to inspect+ * @return bool+ */+DUCKDB_C_API bool duckdb_task_state_is_finished(duckdb_task_state state);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 5, 0)+/*!+ * 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.+ *+ * history:+ * - stable: v0.5.0+ *+ * @param state The task state to clean up+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_task_state(duckdb_task_state state);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * Returns true if the execution of the current query is finished.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param con The connection on which to check+ * @return bool+ */+DUCKDB_C_API bool duckdb_execution_is_finished(duckdb_connection con);+#endif++/* --- Struct definitions for threading --- */++/* ============================================================================+ * MODULE: value+ * ============================================================================ */++/* --- Enums for value --- */++/* --- Struct forward declarations for value --- */++/* --- Types for value --- */++/* --- Constants for value --- */++/* --- Function pointer typedefs for value --- */++/* --- Functions for value --- */++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Destroys the value and de-allocates all memory allocated for that type.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param value The value to destroy.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_value(duckdb_value *value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Creates a value from a null-terminated string. Returns nullptr if the string is not valid UTF-8 or other invalid+ * input.+ *+ * Superseded by `duckdb_create_varchar_length`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param text The null-terminated string+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_varchar(const char *text);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Creates a value from a string. Returns nullptr if the string is not valid UTF-8 or other invalid input.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param text The text+ * @param length The length of the text+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_varchar_length(const char *text, idx_t length);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a boolean+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The boolean value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_bool(bool input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from an int8_t (a tinyint)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The tinyint value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_int8(int8_t input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a uint8_t (a utinyint)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The utinyint value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_uint8(uint8_t input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from an int16_t (a smallint)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The smallint value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_int16(int16_t input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a uint16_t (a usmallint)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The usmallint value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_uint16(uint16_t input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from an int32_t (an integer)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The integer value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_int32(int32_t input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a uint32_t (a uinteger)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The uinteger value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_uint32(uint32_t input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a uint64_t (a ubigint)+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The ubigint value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_uint64(uint64_t input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Creates a value from an int64+ *+ * history:+ * - stable: v0.3.3+ *+ * @param val+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_int64(int64_t val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a hugeint+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The hugeint value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_hugeint(duckdb_hugeint input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a uhugeint+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The uhugeint value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_uhugeint(duckdb_uhugeint input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a BIGNUM value from a duckdb_bignum+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_bignum value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_bignum(duckdb_bignum input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a DECIMAL value from a duckdb_decimal+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_decimal value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_decimal(duckdb_decimal input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a float+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The float value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_float(float input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a double+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The double value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_double(double input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a date+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The date value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_date(duckdb_date input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a time+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The time value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_time(duckdb_time input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a value from a time_ns+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param input The time value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_time_ns(duckdb_time_ns input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a time_tz. Not to be confused with `duckdb_create_time_tz`, which creates a duckdb_time_tz_t.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param value The time_tz value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_time_tz_value(duckdb_time_tz value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a TIMESTAMP value from a duckdb_timestamp+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The duckdb_timestamp value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_timestamp(duckdb_timestamp input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a TIMESTAMP_TZ value from a duckdb_timestamp+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_timestamp value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_timestamp_tz(duckdb_timestamp input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a TIMESTAMP_S value from a duckdb_timestamp_s+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_timestamp_s value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_timestamp_s(duckdb_timestamp_s input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a TIMESTAMP_MS value from a duckdb_timestamp_ms+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_timestamp_ms value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_timestamp_ms(duckdb_timestamp_ms input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a TIMESTAMP_NS value from a duckdb_timestamp_ns+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_timestamp_ns value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_timestamp_ns(duckdb_timestamp_ns input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from an interval+ *+ * history:+ * - stable: v1.1.0+ *+ * @param input The interval value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_interval(duckdb_interval input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Creates a value from a blob+ *+ * history:+ * - stable: v1.1.0+ *+ * @param data The blob data+ * @param length The length of the blob data+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_blob(const uint8_t *data, idx_t length);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a BIT value from a duckdb_bit+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_bit value+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_bit(duckdb_bit input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a UUID value from a uhugeint+ *+ * history:+ * - stable: v1.2.0+ *+ * @param input The duckdb_uhugeint containing the UUID+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_uuid(duckdb_uhugeint input);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the boolean value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a boolean+ * @return bool+ */+DUCKDB_C_API bool duckdb_get_bool(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the int8_t value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a tinyint+ * @return int8_t+ */+DUCKDB_C_API int8_t duckdb_get_int8(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the uint8_t value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a utinyint+ * @return uint8_t+ */+DUCKDB_C_API uint8_t duckdb_get_uint8(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the int16_t value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a smallint+ * @return int16_t+ */+DUCKDB_C_API int16_t duckdb_get_int16(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the uint16_t value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a usmallint+ * @return uint16_t+ */+DUCKDB_C_API uint16_t duckdb_get_uint16(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the int32_t value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing an integer+ * @return int32_t+ */+DUCKDB_C_API int32_t duckdb_get_int32(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the uint32_t value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a uinteger+ * @return uint32_t+ */+DUCKDB_C_API uint32_t duckdb_get_uint32(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Returns the int64_t value of the given value.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param val A duckdb_value containing a bigint+ * @return int64_t+ */+DUCKDB_C_API int64_t duckdb_get_int64(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the uint64_t value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a ubigint+ * @return uint64_t+ */+DUCKDB_C_API uint64_t duckdb_get_uint64(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the hugeint value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a hugeint+ * @return duckdb_hugeint+ */+DUCKDB_C_API duckdb_hugeint duckdb_get_hugeint(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the uhugeint value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a uhugeint+ * @return duckdb_uhugeint+ */+DUCKDB_C_API duckdb_uhugeint duckdb_get_uhugeint(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the duckdb_bignum value of the given value. The `data` field must be destroyed with `duckdb_free`.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a BIGNUM+ * @return duckdb_bignum+ */+DUCKDB_C_API duckdb_bignum duckdb_get_bignum(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the duckdb_decimal value of the given value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a DECIMAL+ * @return duckdb_decimal+ */+DUCKDB_C_API duckdb_decimal duckdb_get_decimal(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the float value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a float+ * @return float+ */+DUCKDB_C_API float duckdb_get_float(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the double value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a double+ * @return double+ */+DUCKDB_C_API double duckdb_get_double(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the date value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a date+ * @return duckdb_date+ */+DUCKDB_C_API duckdb_date duckdb_get_date(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the time value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a time+ * @return duckdb_time+ */+DUCKDB_C_API duckdb_time duckdb_get_time(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the time_ns value of the given value.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param val A duckdb_value containing a time_ns+ * @return duckdb_time_ns+ */+DUCKDB_C_API duckdb_time_ns duckdb_get_time_ns(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the time_tz value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a time_tz+ * @return duckdb_time_tz+ */+DUCKDB_C_API duckdb_time_tz duckdb_get_time_tz(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the TIMESTAMP value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a TIMESTAMP+ * @return duckdb_timestamp+ */+DUCKDB_C_API duckdb_timestamp duckdb_get_timestamp(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the TIMESTAMP_TZ value of the given value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a TIMESTAMP_TZ+ * @return duckdb_timestamp+ */+DUCKDB_C_API duckdb_timestamp duckdb_get_timestamp_tz(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the duckdb_timestamp_s value of the given value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a TIMESTAMP_S+ * @return duckdb_timestamp_s+ */+DUCKDB_C_API duckdb_timestamp_s duckdb_get_timestamp_s(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the duckdb_timestamp_ms value of the given value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a TIMESTAMP_MS+ * @return duckdb_timestamp_ms+ */+DUCKDB_C_API duckdb_timestamp_ms duckdb_get_timestamp_ms(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the duckdb_timestamp_ns value of the given value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a TIMESTAMP_NS+ * @return duckdb_timestamp_ns+ */+DUCKDB_C_API duckdb_timestamp_ns duckdb_get_timestamp_ns(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the interval value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a interval+ * @return duckdb_interval+ */+DUCKDB_C_API duckdb_interval duckdb_get_interval(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the type of the given value. The type is valid as long as the value is not destroyed. The type itself must+ * not be destroyed.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_get_value_type(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the blob value of the given value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param val A duckdb_value containing a blob+ * @return duckdb_blob+ */+DUCKDB_C_API duckdb_blob duckdb_get_blob(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the duckdb_bit value of the given value. The `data` field must be destroyed with `duckdb_free`.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a BIT+ * @return duckdb_bit+ */+DUCKDB_C_API duckdb_bit duckdb_get_bit(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns a duckdb_uhugeint representing the UUID value of the given value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param val A duckdb_value containing a UUID+ * @return duckdb_uhugeint+ */+DUCKDB_C_API duckdb_uhugeint duckdb_get_uuid(duckdb_value val);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Obtains a string representation of the given value. The result must be destroyed with `duckdb_free`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param value The value+ * @return char*+ */+DUCKDB_C_API char *duckdb_get_varchar(duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Creates a struct value from a type and an array of values. Must be destroyed with `duckdb_destroy_value`.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param type The type of the struct+ * @param values The values for the struct fields+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_struct_value(duckdb_logical_type type, duckdb_value *values);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0)+/*!+ * Creates a list value from a child (element) type and an array of values of length `value_count`. Must be destroyed+ * with `duckdb_destroy_value`.+ *+ * history:+ * - stable: v0.10.0+ *+ * @param type The type of the list+ * @param values The values for the list+ * @param value_count The number of values in the list+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_list_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 1)+/*!+ * Creates an array value from a child (element) type and an array of values of length `value_count`. Must be destroyed+ * with `duckdb_destroy_value`.+ *+ * history:+ * - stable: v0.10.1+ *+ * @param type The type of the array+ * @param values The values for the array+ * @param value_count The number of values in the array+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_array_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a map value from a map type and two arrays, one for the keys and one for the values, each of length+ * `entry_count`. Must be destroyed with `duckdb_destroy_value`.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param map_type The map type+ * @param keys The keys of the map+ * @param values The values of the map+ * @param entry_count The number of entries (key-value pairs) in the map+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_map_value(duckdb_logical_type map_type, duckdb_value *keys,+ duckdb_value *values, idx_t entry_count);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a union value from a union type, a tag index, and a value. Must be destroyed with `duckdb_destroy_value`.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param union_type The union type+ * @param tag_index The index of the tag of the union+ * @param value The value of the union for that tag+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_union_value(duckdb_logical_type union_type, idx_t tag_index,+ duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the number of elements in a MAP value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param value The MAP value.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_get_map_size(duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the MAP key at index as a duckdb_value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param value The MAP value.+ * @param index The index of the key.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_get_map_key(duckdb_value value, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 1, 0)+/*!+ * Returns the MAP value at index as a duckdb_value.+ *+ * history:+ * - stable: v1.1.0+ *+ * @param value The MAP value.+ * @param index The index of the value.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_get_map_value(duckdb_value value, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns whether the value's type is SQLNULL or not.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param value The value to check.+ * @return bool+ */+DUCKDB_C_API bool duckdb_is_null_value(duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates a value of type SQLNULL.+ *+ * history:+ * - stable: v1.2.0+ *+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_null_value(void);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the number of elements in a LIST value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param value The LIST value.+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_get_list_size(duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the LIST child at index as a duckdb_value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param value The LIST value.+ * @param index The index of the child.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_get_list_child(duckdb_value value, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Creates an enum value from a type and a value. Must be destroyed with `duckdb_destroy_value`.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param type The type of the enum+ * @param value The value for the enum+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_create_enum_value(duckdb_logical_type type, uint64_t value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the enum value of the given value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param value A duckdb_value containing an enum+ * @return uint64_t+ */+DUCKDB_C_API uint64_t duckdb_get_enum_value(duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 2, 0)+/*!+ * Returns the STRUCT child at index as a duckdb_value.+ *+ * history:+ * - stable: v1.2.0+ *+ * @param value The STRUCT value.+ * @param index The index of the child.+ * @return duckdb_value+ */+DUCKDB_C_API duckdb_value duckdb_get_struct_child(duckdb_value value, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Returns the SQL string representation of the given value.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param value A duckdb_value.+ * @return char*+ */+DUCKDB_C_API char *duckdb_value_to_string(duckdb_value value);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return bool+ */+DUCKDB_C_API bool duckdb_value_boolean(duckdb_result *result, idx_t col, idx_t row);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return int8_t+ */+DUCKDB_C_API int8_t duckdb_value_int8(duckdb_result *result, idx_t col, idx_t row);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return int16_t+ */+DUCKDB_C_API int16_t duckdb_value_int16(duckdb_result *result, idx_t col, idx_t row);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return int32_t+ */+DUCKDB_C_API int32_t duckdb_value_int32(duckdb_result *result, idx_t col, idx_t row);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return int64_t+ */+DUCKDB_C_API int64_t duckdb_value_int64(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_hugeint+ */+DUCKDB_C_API duckdb_hugeint duckdb_value_hugeint(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.10.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_uhugeint+ */+DUCKDB_C_API duckdb_uhugeint duckdb_value_uhugeint(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.3.3+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_decimal+ */+DUCKDB_C_API duckdb_decimal duckdb_value_decimal(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.5+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return uint8_t+ */+DUCKDB_C_API uint8_t duckdb_value_uint8(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.5+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return uint16_t+ */+DUCKDB_C_API uint16_t duckdb_value_uint16(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.5+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return uint32_t+ */+DUCKDB_C_API uint32_t duckdb_value_uint32(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.5+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return uint64_t+ */+DUCKDB_C_API uint64_t duckdb_value_uint64(duckdb_result *result, idx_t col, idx_t row);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return float+ */+DUCKDB_C_API float duckdb_value_float(duckdb_result *result, idx_t col, idx_t row);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return double+ */+DUCKDB_C_API double duckdb_value_double(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_date+ */+DUCKDB_C_API duckdb_date duckdb_value_date(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_time+ */+DUCKDB_C_API duckdb_time duckdb_value_time(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_timestamp+ */+DUCKDB_C_API duckdb_timestamp duckdb_value_timestamp(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_interval+ */+DUCKDB_C_API duckdb_interval duckdb_value_interval(duckdb_result *result, idx_t col, idx_t row);+#endif++#if (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.1.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return char*+ */+DUCKDB_C_API char *duckdb_value_varchar(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 6, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.6.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_string+ */+DUCKDB_C_API duckdb_string duckdb_value_string(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return char*+ */+DUCKDB_C_API char *duckdb_value_varchar_internal(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 6, 0) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.6.0+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_string+ */+DUCKDB_C_API duckdb_string duckdb_value_string_internal(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 5) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.5+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return duckdb_blob+ */+DUCKDB_C_API duckdb_blob duckdb_value_blob(duckdb_result *result, idx_t col, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 2, 9) && (DUCKDB_API_VERSION_BELOW(1, 0, 0) || DUCKDB_API_ALLOW_DEPRECATED)+/*!+ * **DEPRECATION NOTICE**: This method is scheduled for removal in a future release.+ *+ * history:+ * - stable: v0.2.9+ * - deprecated: v1.0.0+ *+ * @param result+ * @param col+ * @param row+ * @return bool+ */+DUCKDB_C_API bool duckdb_value_is_null(duckdb_result *result, idx_t col, idx_t row);+#endif++/* --- Struct definitions for value --- */++/* ============================================================================+ * MODULE: vector+ * ============================================================================ */++/* --- Enums for vector --- */++/* --- Struct forward declarations for vector --- */++/* --- Types for vector --- */++/* --- Constants for vector --- */++/* --- Function pointer typedefs for vector --- */++/* --- Functions for vector --- */++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a flat vector. Must be destroyed with `duckdb_destroy_vector`.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param type The logical type of the vector.+ * @param capacity The capacity of the vector.+ * @return duckdb_vector+ */+DUCKDB_C_API duckdb_vector duckdb_create_vector(duckdb_logical_type type, idx_t capacity);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the vector and de-allocates its memory.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param vector A pointer to the vector.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_vector(duckdb_vector *vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the column type of the specified vector.+ *+ * The result must be destroyed with `duckdb_destroy_logical_type`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector get the data from+ * @return duckdb_logical_type+ */+DUCKDB_C_API duckdb_logical_type duckdb_vector_get_column_type(duckdb_vector vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector to get the data from+ * @return void*+ */+DUCKDB_C_API void *duckdb_vector_get_data(duckdb_vector vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector to get the data from+ * @return uint64_t*+ */+DUCKDB_C_API uint64_t *duckdb_vector_get_validity(duckdb_vector vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector to alter+ * @return void+ */+DUCKDB_C_API void duckdb_vector_ensure_validity_writable(duckdb_vector vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Assigns a string element in the vector at the specified location. For VARCHAR vectors, the input is validated as+ * UTF-8; if invalid, a NULL value is assigned at that index.+ *+ * Superseded by `duckdb_unsafe_vector_assign_string_element_len`, optionally combined with `duckdb_valid_utf8_check`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector to alter+ * @param index The row position in the vector to assign the string to+ * @param str The null-terminated string+ * @return void+ */+DUCKDB_C_API void duckdb_vector_assign_string_element(duckdb_vector vector, idx_t index, const char *str);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Assigns a string element in the vector at the specified location. For VARCHAR vectors, the input is validated as+ * UTF-8; if invalid, a NULL value is assigned at that index. For BLOB vectors, no validation is performed.+ *+ * Superseded by `duckdb_unsafe_vector_assign_string_element_len`, optionally combined with `duckdb_valid_utf8_check`.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector to alter+ * @param index The row position in the vector to assign the string to+ * @param str The string+ * @param str_len The length of the string (in bytes)+ * @return void+ */+DUCKDB_C_API void duckdb_vector_assign_string_element_len(duckdb_vector vector, idx_t index, const char *str,+ idx_t str_len);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Assigns a string element in the vector at the specified location without UTF-8 validation. The caller is responsible+ * for ensuring the input is valid UTF-8. Use `duckdb_valid_utf8_check` to validate strings before calling this function+ * if needed. If the input is known to be valid UTF-8, this function can be called directly for better performance,+ * avoiding the overhead of redundant validation.+ *+ * history:+ * - unstable: v1.5.0+ * - stable: v1.5.6+ *+ * @param vector The vector to alter+ * @param index The row position in the vector to assign the string to+ * @param str The string+ * @param str_len The length of the string (in bytes)+ * @return void+ */+DUCKDB_C_API void duckdb_unsafe_vector_assign_string_element_len(duckdb_vector vector, idx_t index, const char *str,+ idx_t str_len);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the child vector of a list vector.+ *+ * The resulting vector is valid as long as the parent vector is valid.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector+ * @return duckdb_vector+ */+DUCKDB_C_API duckdb_vector duckdb_list_vector_get_child(duckdb_vector vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Returns the size of the child vector of the list.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector+ * @return idx_t+ */+DUCKDB_C_API idx_t duckdb_list_vector_get_size(duckdb_vector vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * Sets the size of the underlying child-vector of a list vector. Note that this does NOT reserve the memory in the+ * child buffer, and that it is possible to set a size exceeding the capacity. To set the capacity, use+ * `duckdb_list_vector_reserve`.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param vector The list vector.+ * @param size The size of the child list.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_list_vector_set_size(duckdb_vector vector, idx_t size);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 7, 0)+/*!+ * Sets the capacity of the underlying child-vector of a list vector. We increment to the next power of two, based on+ * the required capacity. Thus, the capacity might not match the size of the list (capacity >= size), which is set via+ * `duckdb_list_vector_set_size`.+ *+ * history:+ * - stable: v0.7.0+ *+ * @param vector The list vector.+ * @param required_capacity The child buffer capacity to reserve.+ * @return duckdb_state+ */+DUCKDB_C_API duckdb_state duckdb_list_vector_reserve(duckdb_vector vector, idx_t required_capacity);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Retrieves the child vector of a struct vector. The resulting vector is valid as long as the parent vector is valid.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param vector The vector+ * @param index The child index+ * @return duckdb_vector+ */+DUCKDB_C_API duckdb_vector duckdb_struct_vector_get_child(duckdb_vector vector, idx_t index);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 10, 1)+/*!+ * Retrieves the child vector of an 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.+ *+ * history:+ * - stable: v0.10.1+ *+ * @param vector The vector+ * @return duckdb_vector+ */+DUCKDB_C_API duckdb_vector duckdb_array_vector_get_child(duckdb_vector vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Slice a vector with a selection vector. The length of the selection vector must be less than or equal to the length+ * of the vector. Turns the vector into a dictionary vector.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param vector The vector to slice.+ * @param sel The selection vector.+ * @param len The length of the selection vector.+ * @return void+ */+DUCKDB_C_API void duckdb_slice_vector(duckdb_vector vector, duckdb_selection_vector sel, idx_t len);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Copy the src vector to the dst with a selection vector that identifies which indices to copy.+ *+ * history:+ * - unstable: v1.4.0+ * - stable: v1.5.6+ *+ * @param src The vector to copy from.+ * @param dst The vector to copy to.+ * @param sel The selection vector. The length of the selection vector should not be more than the length of the src+ * vector+ * @param src_count The number of entries from selection vector to copy. Think of this as the effective length of the+ * selection vector starting from index 0+ * @param src_offset The offset in the selection vector to copy from (important: actual number of items copied =+ * src_count - src_offset).+ * @param dst_offset The offset in the dst vector to start copying to.+ * @return void+ */+DUCKDB_C_API void duckdb_vector_copy_sel(duckdb_vector src, duckdb_vector dst, duckdb_selection_vector sel,+ idx_t src_count, idx_t src_offset, idx_t dst_offset);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Copies the value from `value` to `vector`.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param vector The receiving vector.+ * @param value The value to copy into the vector.+ * @return void+ */+DUCKDB_C_API void duckdb_vector_reference_value(duckdb_vector vector, duckdb_value value);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Changes `to_vector` to reference `from_vector. After, the vectors share ownership of the data.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param to_vector The receiving vector.+ * @param from_vector The vector to reference.+ * @return void+ */+DUCKDB_C_API void duckdb_vector_reference_vector(duckdb_vector to_vector, duckdb_vector from_vector);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * Returns whether or not a row is valid (i.e. not NULL) in the given validity mask.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param validity The validity mask, as obtained through `duckdb_vector_get_validity`+ * @param row The row index+ * @return bool+ */+DUCKDB_C_API bool duckdb_validity_row_is_valid(uint64_t *validity, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * 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.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param validity The validity mask, as obtained through `duckdb_vector_get_validity`.+ * @param row The row index+ * @param valid Whether or not to set the row to valid, or invalid+ * @return void+ */+DUCKDB_C_API void duckdb_validity_set_row_validity(uint64_t *validity, idx_t row, bool valid);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * In a validity mask, sets a specific row to invalid.+ *+ * Equivalent to `duckdb_validity_set_row_validity` with valid set to false.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param validity The validity mask+ * @param row The row index+ * @return void+ */+DUCKDB_C_API void duckdb_validity_set_row_invalid(uint64_t *validity, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(0, 3, 3)+/*!+ * In a validity mask, sets a specific row to valid.+ *+ * Equivalent to `duckdb_validity_set_row_validity` with valid set to true.+ *+ * history:+ * - stable: v0.3.3+ *+ * @param validity The validity mask+ * @param row The row index+ * @return void+ */+DUCKDB_C_API void duckdb_validity_set_row_valid(uint64_t *validity, idx_t row);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Creates a new selection vector of size `size`. Must be destroyed with `duckdb_destroy_selection_vector`.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param size The size of the selection vector.+ * @return duckdb_selection_vector+ */+DUCKDB_C_API duckdb_selection_vector duckdb_create_selection_vector(idx_t size);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Destroys the selection vector and de-allocates its memory.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param sel The selection vector.+ * @return void+ */+DUCKDB_C_API void duckdb_destroy_selection_vector(duckdb_selection_vector sel);+#endif++#if DUCKDB_API_VERSION_AT_LEAST(1, 5, 6)+/*!+ * Access the data pointer of a selection vector.+ *+ * history:+ * - unstable: v1.3.0+ * - stable: v1.5.6+ *+ * @param sel The selection vector.+ * @return sel_t*+ */+DUCKDB_C_API sel_t *duckdb_selection_vector_get_data_ptr(duckdb_selection_vector sel);+#endif++/* --- Struct definitions for vector --- */++//===--------------------------------------------------------------------===//+// Renamed constructs+//===--------------------------------------------------------------------===//+//! Former spellings, available only while targeting a version that still had+//! them. Each names the same construct, so an alias costs nothing at runtime.+#if DUCKDB_API_VERSION_BELOW(1, 4, 0)+//! Renamed to duckdb_bignum in v1.4.0.+typedef duckdb_bignum duckdb_varint;+#endif+#if DUCKDB_API_VERSION_BELOW(1, 4, 0)+//! Renamed to duckdb_get_bignum in v1.4.0.+#define duckdb_get_varint duckdb_get_bignum+#endif+#if DUCKDB_API_VERSION_BELOW(1, 4, 0)+//! Renamed to duckdb_create_bignum in v1.4.0.+#define duckdb_create_varint duckdb_create_bignum+#endif++//===--------------------------------------------------------------------===//+// DuckDB extension access+//===--------------------------------------------------------------------===//++//! Passed to C API extension as a parameter to the entrypoint.+struct duckdb_extension_access {+ //! Indicate that an error has occurred.+ void (*set_error)(duckdb_extension_info info, const char *error);+ //! Fetch the database on which to register the extension.+ duckdb_database *(*get_database)(duckdb_extension_info info);+ //! Fetch the API struct pointer.+ const void *(*get_api)(duckdb_extension_info info, const char *version);+}; #ifdef __cplusplus }
duckdb-ffi.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: duckdb-ffi-version: 1.5.3.0+version: 1.5.6.0 author: Matthias Pall Gissurarson maintainer: mpg@mpg.is category: Database@@ -19,7 +19,7 @@ bug-reports: https://github.com/Tritlo/duckdb-haskell/issues description: Haskell FFI bindings to the DuckDB C API.- Supports native DuckDB >= 1.5.3 and < 1.6. Tested with version 1.5.3.+ Supports native DuckDB >= 1.5.3 and < 1.6. Tested with versions 1.5.3 through 1.5.6. . Downloads a verified native library to the user cache on Linux and macOS. Uses an existing library when the user or Nix supplies it.
src/Database/DuckDB/FFI/LogicalTypes.hs view
@@ -27,6 +27,7 @@ c_duckdb_union_type_member_count, c_duckdb_union_type_member_name, c_duckdb_union_type_member_type,+ c_duckdb_geometry_type_get_crs, c_duckdb_destroy_logical_type, c_duckdb_register_logical_type, ) where@@ -45,6 +46,11 @@ @DUCKDB_TYPE_STRUCT@, @DUCKDB_TYPE_MAP@, @DUCKDB_TYPE_ARRAY@, or @DUCKDB_TYPE_UNION@. +For @DUCKDB_TYPE_VARIANT@, DuckDB 1.5 returns an incomplete descriptor.+Obtain a complete descriptor from a query result with+@duckdb_column_logical_type@. Inspecting the incomplete descriptor's children+can terminate the process.+ Parameters: * @type@: The primitive type to create. @@ -150,10 +156,12 @@ should be destroyed with @duckdb_destroy_logical_type@. Parameters:-* @width@: The width of the decimal type-* @scale@: The scale of the decimal type+* @width@: The width of the decimal type. Must be between 1 and 38.+* @scale@: The scale of the decimal type. Must not exceed the width. -Returns The logical type.+Returns the logical type. If the width or scale is out of range, DuckDB 1.5.4+and later return @nullptr@. Invalid input can terminate the process on DuckDB+1.5.3. Validate the width and scale before calling this function on that version. -} foreign import ccall safe "duckdb_create_decimal_type" c_duckdb_create_decimal_type :: Word8 -> Word8 -> IO DuckDBLogicalType@@ -363,6 +371,20 @@ -} foreign import ccall safe "duckdb_union_type_member_type" c_duckdb_union_type_member_type :: DuckDBLogicalType -> DuckDBIdx -> IO DuckDBLogicalType++{- | Return the CRS (Coordinate Reference System) of a GEOMETRY type.+Free the result with @duckdb_free@.++Parameters:+* @type@: The GEOMETRY type.++Returns the CRS, or @nullptr@ if the type is not GEOMETRY or has no CRS.+The returned string remains valid after the logical type is destroyed.++Available since DuckDB 1.5.2. The C API marks this function stable since 1.5.6.+-}+foreign import ccall safe "duckdb_geometry_type_get_crs"+ c_duckdb_geometry_type_get_crs :: DuckDBLogicalType -> IO CString {- | Destroys the logical type and de-allocates all memory allocated for that type.
src/Database/DuckDB/FFI/Types.hs view
@@ -50,6 +50,8 @@ pattern DuckDBTypeStringLiteral, pattern DuckDBTypeIntegerLiteral, pattern DuckDBTypeTimeNs,+ pattern DuckDBTypeGeometry,+ pattern DuckDBTypeVariant, DuckDBPendingState (..), pattern DuckDBPendingResultReady, pattern DuckDBPendingResultNotReady,@@ -89,6 +91,9 @@ pattern DuckDBStatementTypeAttach, pattern DuckDBStatementTypeDetach, pattern DuckDBStatementTypeMulti,+ pattern DuckDBStatementTypeCopyDatabase,+ pattern DuckDBStatementTypeUpdateExtensions,+ pattern DuckDBStatementTypeMergeInto, DuckDBErrorType (..), pattern DuckDBErrorInvalid, pattern DuckDBErrorOutOfRange,@@ -392,7 +397,9 @@ , DuckDBTypeSQLNull , DuckDBTypeStringLiteral , DuckDBTypeIntegerLiteral- , DuckDBTypeTimeNs ::+ , DuckDBTypeTimeNs+ , DuckDBTypeGeometry+ , DuckDBTypeVariant :: DuckDBType pattern DuckDBTypeInvalid = DuckDBType 0 pattern DuckDBTypeBoolean = DuckDBType 1@@ -434,6 +441,8 @@ pattern DuckDBTypeStringLiteral = DuckDBType 37 pattern DuckDBTypeIntegerLiteral = DuckDBType 38 pattern DuckDBTypeTimeNs = DuckDBType 39+pattern DuckDBTypeGeometry = DuckDBType 40+pattern DuckDBTypeVariant = DuckDBType 41 -- | Pending result state returned from @duckdb_pending_*@ APIs. newtype DuckDBPendingState = DuckDBPendingState {unDuckDBPendingState :: CInt}@@ -514,7 +523,10 @@ , DuckDBStatementTypeLogicalPlan , DuckDBStatementTypeAttach , DuckDBStatementTypeDetach- , DuckDBStatementTypeMulti ::+ , DuckDBStatementTypeMulti+ , DuckDBStatementTypeCopyDatabase+ , DuckDBStatementTypeUpdateExtensions+ , DuckDBStatementTypeMergeInto :: DuckDBStatementType pattern DuckDBStatementTypeInvalid = DuckDBStatementType 0 pattern DuckDBStatementTypeSelect = DuckDBStatementType 1@@ -544,6 +556,9 @@ pattern DuckDBStatementTypeAttach = DuckDBStatementType 25 pattern DuckDBStatementTypeDetach = DuckDBStatementType 26 pattern DuckDBStatementTypeMulti = DuckDBStatementType 27+pattern DuckDBStatementTypeCopyDatabase = DuckDBStatementType 28+pattern DuckDBStatementTypeUpdateExtensions = DuckDBStatementType 29+pattern DuckDBStatementTypeMergeInto = DuckDBStatementType 30 {-# COMPLETE DuckDBStatementTypeInvalid@@ -574,6 +589,9 @@ , DuckDBStatementTypeAttach , DuckDBStatementTypeDetach , DuckDBStatementTypeMulti+ , DuckDBStatementTypeCopyDatabase+ , DuckDBStatementTypeUpdateExtensions+ , DuckDBStatementTypeMergeInto #-} -- | DuckDB error classification codes.
test/LogicalTypesTest.hs view
@@ -3,7 +3,9 @@ module LogicalTypesTest (tests) where +import Control.Exception (bracket) import Control.Monad (forM_, when, (>=>))+import Data.List (stripPrefix) import Data.Word (Word32, Word8) import Database.DuckDB.FFI import Database.DuckDB.FFI.Deprecated@@ -13,6 +15,7 @@ import Foreign.Ptr (castPtr, nullPtr) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (assertBool, assertFailure, testCase, (@?=))+import Text.Read (readMaybe) import Utils (withConnection, withDatabase, withLogicalType, withResult) tests :: TestTree@@ -21,10 +24,14 @@ "Logical Type Interface" [ primitiveLogicalTypes , decimalLogicalType+ , invalidDecimalLogicalType+ , variantLogicalType , enumLogicalType , compositeLogicalTypes , aliasRoundtrip , registerLogicalType+ , geometryTypeCrs+ , geometryTypeCrsOwnership ] primitiveLogicalTypes :: TestTree@@ -42,6 +49,28 @@ , (DuckDBTypeBlob, DuckDBTypeBlob) ] +-- | VARIANT needs the complete descriptor from an executed query.+variantLogicalType :: TestTree+variantLogicalType =+ testCase "query-derived VARIANT exposes its physical children" $+ withDatabase \db ->+ withConnection db \conn ->+ withResult conn "SELECT NULL::VARIANT" \result ->+ withLogicalType (c_duckdb_column_logical_type result 0) \logical -> do+ c_duckdb_get_type_id logical >>= (@?= DuckDBTypeVariant)+ c_duckdb_struct_type_child_count logical >>= (@?= 4)++-- | Invalid decimal metadata became safe to pass to the C API in 1.5.4.+invalidDecimalLogicalType :: TestTree+invalidDecimalLogicalType =+ testCase "invalid decimal types return NULL on DuckDB 1.5.4 and later" $ do+ version <- c_duckdb_library_version >>= peekCString+ case stripPrefix "v1.5." version >>= readMaybe of+ Just patch | patch >= (4 :: Int) ->+ forM_ [(0, 0), (39, 0), (2, 3), (255, 0)] \(width, scale) ->+ withLogicalType (c_duckdb_create_decimal_type width scale) (@?= nullPtr)+ _ -> pure ()+ decimalLogicalType :: TestTree decimalLogicalType = testCase "decimal logical type exposes width/scale/internal type" $@@ -166,3 +195,37 @@ typeName <- peekCString typePtr c_duckdb_free (castPtr typePtr) typeName @?= aliasName++geometryTypeCrs :: TestTree+geometryTypeCrs =+ testCase "geometry CRS is null without a coordinate reference system" $+ withDatabase \db ->+ withConnection db \conn -> do+ -- A GEOMETRY column reports the GEOMETRY type id, and carries no+ -- CRS unless the data supplies one.+ withResult conn "SELECT 'POINT(1 2)'::GEOMETRY" \resPtr -> do+ columnType <- c_duckdb_column_logical_type resPtr 0+ withLogicalType (pure columnType) \lt -> do+ c_duckdb_get_type_id lt >>= (@?= DuckDBTypeGeometry)+ crs <- c_duckdb_geometry_type_get_crs lt+ assertBool "plain GEOMETRY has no CRS" (crs == nullPtr)++ -- Types other than GEOMETRY never have a CRS.+ withLogicalType (c_duckdb_create_logical_type DuckDBTypeInteger) \lt -> do+ crs <- c_duckdb_geometry_type_get_crs lt+ assertBool "INTEGER has no CRS" (crs == nullPtr)++-- | The caller owns the returned CRS independently of the type and result.+geometryTypeCrsOwnership :: TestTree+geometryTypeCrsOwnership =+ testCase "geometry CRS outlives its type and result" $+ bracket+ ( withDatabase \db ->+ withConnection db \conn ->+ withResult conn "SELECT ST_SetCRS('POINT(1 2)'::GEOMETRY, 'duckdb-haskell-test-crs')" \result ->+ withLogicalType (c_duckdb_column_logical_type result 0) c_duckdb_geometry_type_get_crs+ )+ (c_duckdb_free . castPtr)+ \crs -> do+ assertBool "expected an owned CRS string" (crs /= nullPtr)+ peekCString crs >>= (@?= "duckdb-haskell-test-crs")