DuckDB 是一个强类型数据库系统。因此,每个列都指定了一个单一类型。此类型在整个列中是恒定的。也就是说,一个被标记为 INTEGER
类型的列将只包含 INTEGER
值。
DuckDB 也支持复合类型列。例如,可以定义一个整数数组 (INTEGER[]
)。也可以将类型定义为任意结构体 (ROW(i INTEGER, j VARCHAR)
)。因此,DuckDB 的原生类型对象不仅仅是枚举,而是一个可以嵌套的类。
C API 中的类型使用枚举 (duckdb_type
) 和一个复杂类 (duckdb_logical_type
) 进行建模。对于大多数原始类型,例如整数或变长字符串,枚举就足够了。对于更复杂的类型,例如列表、结构体或 Decimal,必须使用逻辑类型。
typedef enum DUCKDB_TYPE {
DUCKDB_TYPE_INVALID = 0,
DUCKDB_TYPE_BOOLEAN = 1,
DUCKDB_TYPE_TINYINT = 2,
DUCKDB_TYPE_SMALLINT = 3,
DUCKDB_TYPE_INTEGER = 4,
DUCKDB_TYPE_BIGINT = 5,
DUCKDB_TYPE_UTINYINT = 6,
DUCKDB_TYPE_USMALLINT = 7,
DUCKDB_TYPE_UINTEGER = 8,
DUCKDB_TYPE_UBIGINT = 9,
DUCKDB_TYPE_FLOAT = 10,
DUCKDB_TYPE_DOUBLE = 11,
DUCKDB_TYPE_TIMESTAMP = 12,
DUCKDB_TYPE_DATE = 13,
DUCKDB_TYPE_TIME = 14,
DUCKDB_TYPE_INTERVAL = 15,
DUCKDB_TYPE_HUGEINT = 16,
DUCKDB_TYPE_UHUGEINT = 32,
DUCKDB_TYPE_VARCHAR = 17,
DUCKDB_TYPE_BLOB = 18,
DUCKDB_TYPE_DECIMAL = 19,
DUCKDB_TYPE_TIMESTAMP_S = 20,
DUCKDB_TYPE_TIMESTAMP_MS = 21,
DUCKDB_TYPE_TIMESTAMP_NS = 22,
DUCKDB_TYPE_ENUM = 23,
DUCKDB_TYPE_LIST = 24,
DUCKDB_TYPE_STRUCT = 25,
DUCKDB_TYPE_MAP = 26,
DUCKDB_TYPE_ARRAY = 33,
DUCKDB_TYPE_UUID = 27,
DUCKDB_TYPE_UNION = 28,
DUCKDB_TYPE_BIT = 29,
DUCKDB_TYPE_TIME_TZ = 30,
DUCKDB_TYPE_TIMESTAMP_TZ = 31,
} duckdb_type;
函数
结果集中列的枚举类型可以通过 duckdb_column_type
函数获取。列的逻辑类型可以通过 duckdb_column_logical_type
函数获取。
duckdb_value
当需要时,duckdb_value
函数会自动转换值类型。例如,在 duckdb_value_int32
类型的列上使用 duckdb_value_double
没有任何问题。值将被自动转换并以 double 类型返回。请注意,在某些情况下,类型转换可能会失败。例如,当我们请求 duckdb_value_int8
但值不适合 int8
值时,就会发生这种情况。在这种情况下,将返回一个默认值(通常是 0
或 nullptr
)。如果相应的值是 NULL
,也会返回相同的默认值。
duckdb_value_is_null
函数可用于检查特定值是否为 NULL
。
自动类型转换规则的例外是 duckdb_value_varchar_internal
函数。此函数不会自动转换类型,并且仅适用于 VARCHAR
列。此函数存在的原因是其结果无需释放。
duckdb_value_varchar
和duckdb_value_blob
要求使用duckdb_free
来释放结果。
duckdb_fetch_chunk
duckdb_fetch_chunk
函数可用于从 DuckDB 结果集中读取数据块,是使用 C API 从 DuckDB 结果中读取数据的最有效方式。它也是从 DuckDB 结果中读取某些类型数据的唯一方式。例如,duckdb_value
函数不支持复合类型(列表或结构体)或更复杂类型(如枚举和 Decimal)的结构化读取。
有关数据块的更多信息,请参阅数据块文档。
API参考概览
duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_index);
bool duckdb_result_is_streaming(duckdb_result result);
idx_t duckdb_result_chunk_count(duckdb_result result);
duckdb_result_type duckdb_result_return_type(duckdb_result result);
日期时间戳辅助函数
duckdb_date_struct duckdb_from_date(duckdb_date date);
duckdb_date duckdb_to_date(duckdb_date_struct date);
bool duckdb_is_finite_date(duckdb_date date);
duckdb_time_struct duckdb_from_time(duckdb_time time);
duckdb_time_tz duckdb_create_time_tz(int64_t micros, int32_t offset);
duckdb_time_tz_struct duckdb_from_time_tz(duckdb_time_tz micros);
duckdb_time duckdb_to_time(duckdb_time_struct time);
duckdb_timestamp_struct duckdb_from_timestamp(duckdb_timestamp ts);
duckdb_timestamp duckdb_to_timestamp(duckdb_timestamp_struct ts);
bool duckdb_is_finite_timestamp(duckdb_timestamp ts);
bool duckdb_is_finite_timestamp_s(duckdb_timestamp_s ts);
bool duckdb_is_finite_timestamp_ms(duckdb_timestamp_ms ts);
bool duckdb_is_finite_timestamp_ns(duckdb_timestamp_ns ts);
Hugeint 辅助函数
double duckdb_hugeint_to_double(duckdb_hugeint val);
duckdb_hugeint duckdb_double_to_hugeint(double val);
Decimal 辅助函数
duckdb_decimal duckdb_double_to_decimal(double val, uint8_t width, uint8_t scale);
double duckdb_decimal_to_double(duckdb_decimal val);
逻辑类型接口
duckdb_logical_type duckdb_create_logical_type(duckdb_type type);
char *duckdb_logical_type_get_alias(duckdb_logical_type type);
void duckdb_logical_type_set_alias(duckdb_logical_type type, const char *alias);
duckdb_logical_type duckdb_create_list_type(duckdb_logical_type type);
duckdb_logical_type duckdb_create_array_type(duckdb_logical_type type, idx_t array_size);
duckdb_logical_type duckdb_create_map_type(duckdb_logical_type key_type, duckdb_logical_type value_type);
duckdb_logical_type duckdb_create_union_type(duckdb_logical_type *member_types, const char **member_names, idx_t member_count);
duckdb_logical_type duckdb_create_struct_type(duckdb_logical_type *member_types, const char **member_names, idx_t member_count);
duckdb_logical_type duckdb_create_enum_type(const char **member_names, idx_t member_count);
duckdb_logical_type duckdb_create_decimal_type(uint8_t width, uint8_t scale);
duckdb_type duckdb_get_type_id(duckdb_logical_type type);
uint8_t duckdb_decimal_width(duckdb_logical_type type);
uint8_t duckdb_decimal_scale(duckdb_logical_type type);
duckdb_type duckdb_decimal_internal_type(duckdb_logical_type type);
duckdb_type duckdb_enum_internal_type(duckdb_logical_type type);
uint32_t duckdb_enum_dictionary_size(duckdb_logical_type type);
char *duckdb_enum_dictionary_value(duckdb_logical_type type, idx_t index);
duckdb_logical_type duckdb_list_type_child_type(duckdb_logical_type type);
duckdb_logical_type duckdb_array_type_child_type(duckdb_logical_type type);
idx_t duckdb_array_type_array_size(duckdb_logical_type type);
duckdb_logical_type duckdb_map_type_key_type(duckdb_logical_type type);
duckdb_logical_type duckdb_map_type_value_type(duckdb_logical_type type);
idx_t duckdb_struct_type_child_count(duckdb_logical_type type);
char *duckdb_struct_type_child_name(duckdb_logical_type type, idx_t index);
duckdb_logical_type duckdb_struct_type_child_type(duckdb_logical_type type, idx_t index);
idx_t duckdb_union_type_member_count(duckdb_logical_type type);
char *duckdb_union_type_member_name(duckdb_logical_type type, idx_t index);
duckdb_logical_type duckdb_union_type_member_type(duckdb_logical_type type, idx_t index);
void duckdb_destroy_logical_type(duckdb_logical_type *type);
duckdb_state duckdb_register_logical_type(duckdb_connection con, duckdb_logical_type type, duckdb_create_type_info info);
duckdb_result_get_chunk
警告:弃用通知。此方法计划在未来版本中移除。
从 duckdb_result 中获取一个数据块。应重复调用此函数,直到结果耗尽。
必须使用 duckdb_destroy_data_chunk
销毁结果。
此函数取代了所有 duckdb_value
函数,以及 duckdb_column_data
和 duckdb_nullmask_data
函数。它能显著提升性能,在新代码库中应优先使用。
如果使用此函数,则不能使用其他任何结果函数,反之亦然(即,此函数不能与旧版结果函数混合使用)。
使用 duckdb_result_chunk_count
来确定结果中有多少个数据块。
语法
duckdb_data_chunk duckdb_result_get_chunk(
duckdb_result result,
idx_t chunk_index
);
参数
result
: 要从中获取数据块的结果对象。chunk_index
: 要获取的数据块索引。
返回值
生成的数据块。如果数据块索引超出范围,则返回 NULL
。
duckdb_result_is_streaming
警告:弃用通知。此方法计划在未来版本中移除。
检查内部结果的类型是否为 StreamQueryResult。
语法
bool duckdb_result_is_streaming(
duckdb_result result
);
参数
result
: 要检查的结果对象。
返回值
结果对象是否为 StreamQueryResult 类型。
duckdb_result_chunk_count
警告:弃用通知。此方法计划在未来版本中移除。
返回结果中存在的数据块数量。
语法
idx_t duckdb_result_chunk_count(
duckdb_result result
);
参数
result
: 结果对象
返回值
结果中存在的数据块数量。
duckdb_result_return_type
返回给定结果的 return_type,或在出错时返回 DUCKDB_RETURN_TYPE_INVALID。
语法
duckdb_result_type duckdb_result_return_type(
duckdb_result result
);
参数
result
: 结果对象
返回值
返回类型
duckdb_from_date
将 duckdb_date
对象分解为年、月和日(存储为 duckdb_date_struct
)。
语法
duckdb_date_struct duckdb_from_date(
duckdb_date date
);
参数
date
: 日期对象,从DUCKDB_TYPE_DATE
列中获取。
返回值
包含分解元素的 duckdb_date_struct
。
duckdb_to_date
从年、月和日(duckdb_date_struct
)重新组合一个 duckdb_date
。
语法
duckdb_date duckdb_to_date(
duckdb_date_struct date
);
参数
date
: 存储在duckdb_date_struct
中的年、月和日。
返回值
的 duckdb_date
元素。
duckdb_is_finite_date
测试 duckdb_date
是否为有限值。
语法
bool duckdb_is_finite_date(
duckdb_date date
);
参数
date
: 日期对象,从DUCKDB_TYPE_DATE
列中获取。
返回值
如果日期是有限的则为 true,如果是 ±infinity 则为 false。
duckdb_from_time
将 duckdb_time
对象分解为时、分、秒和微秒(存储为 duckdb_time_struct
)。
语法
duckdb_time_struct duckdb_from_time(
duckdb_time time
);
参数
time
: 时间对象,从DUCKDB_TYPE_TIME
列中获取。
返回值
包含分解元素的 duckdb_time_struct
。
duckdb_create_time_tz
从微秒和时区偏移量创建一个 duckdb_time_tz
对象。
语法
duckdb_time_tz duckdb_create_time_tz(
int64_t micros,
int32_t offset
);
参数
micros
: 时间的微秒部分。offset
: 时间的时区偏移部分。
返回值
的 duckdb_time_tz
元素。
duckdb_from_time_tz
将 TIME_TZ 对象分解为微秒和时区偏移量。
使用 duckdb_from_time
进一步将微秒分解为时、分、秒和微秒。
语法
duckdb_time_tz_struct duckdb_from_time_tz(
duckdb_time_tz micros
);
参数
micros
: 时间对象,从DUCKDB_TYPE_TIME_TZ
列中获取。
duckdb_to_time
从时、分、秒和微秒(duckdb_time_struct
)重新组合一个 duckdb_time
。
语法
duckdb_time duckdb_to_time(
duckdb_time_struct time
);
参数
time
: 存储在duckdb_time_struct
中的时、分、秒和微秒。
返回值
的 duckdb_time
元素。
duckdb_from_timestamp
将 duckdb_timestamp
对象分解为 duckdb_timestamp_struct
。
语法
duckdb_timestamp_struct duckdb_from_timestamp(
duckdb_timestamp ts
);
参数
ts
: 时间戳对象,从DUCKDB_TYPE_TIMESTAMP
列中获取。
返回值
包含分解元素的 duckdb_timestamp_struct
。
duckdb_to_timestamp
从 duckdb_timestamp_struct 重新组合一个 duckdb_timestamp
。
语法
duckdb_timestamp duckdb_to_timestamp(
duckdb_timestamp_struct ts
);
参数
ts
: 存储在duckdb_timestamp_struct
中的分解元素。
返回值
的 duckdb_timestamp
元素。
duckdb_is_finite_timestamp
测试 duckdb_timestamp
是否为有限值。
语法
bool duckdb_is_finite_timestamp(
duckdb_timestamp ts
);
参数
ts
: duckdb_timestamp 对象,从DUCKDB_TYPE_TIMESTAMP
列中获取。
返回值
如果时间戳是有限的则为 true,如果是 ±infinity 则为 false。
duckdb_is_finite_timestamp_s
测试 duckdb_timestamp_s
是否为有限值。
语法
bool duckdb_is_finite_timestamp_s(
duckdb_timestamp_s ts
);
参数
ts
: duckdb_timestamp_s 对象,从DUCKDB_TYPE_TIMESTAMP_S
列中获取。
返回值
如果时间戳是有限的则为 true,如果是 ±infinity 则为 false。
duckdb_is_finite_timestamp_ms
测试 duckdb_timestamp_ms
是否为有限值。
语法
bool duckdb_is_finite_timestamp_ms(
duckdb_timestamp_ms ts
);
参数
ts
: duckdb_timestamp_ms 对象,从DUCKDB_TYPE_TIMESTAMP_MS
列中获取。
返回值
如果时间戳是有限的则为 true,如果是 ±infinity 则为 false。
duckdb_is_finite_timestamp_ns
测试 duckdb_timestamp_ns
是否为有限值。
语法
bool duckdb_is_finite_timestamp_ns(
duckdb_timestamp_ns ts
);
参数
ts
: duckdb_timestamp_ns 对象,从DUCKDB_TYPE_TIMESTAMP_NS
列中获取。
返回值
如果时间戳是有限的则为 true,如果是 ±infinity 则为 false。
duckdb_hugeint_to_double
将 duckdb_hugeint 对象(从 DUCKDB_TYPE_HUGEINT
列中获取)转换为 double 类型。
语法
double duckdb_hugeint_to_double(
duckdb_hugeint val
);
参数
val
: hugeint 值。
返回值
转换后的 double
元素。
duckdb_double_to_hugeint
将 double 值转换为 duckdb_hugeint 对象。
如果因 double 值过大导致转换失败,结果将为 0。
语法
duckdb_hugeint duckdb_double_to_hugeint(
double val
);
参数
val
: double 值。
返回值
转换后的 duckdb_hugeint
元素。
duckdb_double_to_decimal
将 double 值转换为 duckdb_decimal 对象。
如果因 double 值过大或宽度/精度无效导致转换失败,结果将为 0。
语法
duckdb_decimal duckdb_double_to_decimal(
double val,
uint8_t width,
uint8_t scale
);
参数
val
: double 值。
返回值
转换后的 duckdb_decimal
元素。
duckdb_decimal_to_double
将 duckdb_decimal 对象(从 DUCKDB_TYPE_DECIMAL
列中获取)转换为 double 类型。
语法
double duckdb_decimal_to_double(
duckdb_decimal val
);
参数
val
: decimal 值。
返回值
转换后的 double
元素。
duckdb_create_logical_type
从原始类型创建一个 duckdb_logical_type
。生成的逻辑类型必须使用 duckdb_destroy_logical_type
销毁。
如果类型为:DUCKDB_TYPE_INVALID
、DUCKDB_TYPE_DECIMAL
、DUCKDB_TYPE_ENUM
、DUCKDB_TYPE_LIST
、DUCKDB_TYPE_STRUCT
、DUCKDB_TYPE_MAP
、DUCKDB_TYPE_ARRAY
或 DUCKDB_TYPE_UNION
,则返回无效逻辑类型。
语法
duckdb_logical_type duckdb_create_logical_type(
duckdb_type type
);
参数
type
: 要创建的原始类型。
返回值
逻辑类型。
duckdb_logical_type_get_alias
返回 duckdb_logical_type 的别名(如果已设置),否则返回 nullptr
。结果必须使用 duckdb_free
销毁。
语法
char *duckdb_logical_type_get_alias(
duckdb_logical_type type
);
参数
type
: 逻辑类型
返回值
别名或 nullptr
duckdb_logical_type_set_alias
设置 duckdb_logical_type 的别名。
语法
void duckdb_logical_type_set_alias(
duckdb_logical_type type,
const char *alias
);
参数
type
: 逻辑类型alias
: 要设置的别名。
duckdb_create_list_type
从其子类型创建 LIST 类型。返回类型必须使用 duckdb_destroy_logical_type
销毁。
语法
duckdb_logical_type duckdb_create_list_type(
duckdb_logical_type type
);
参数
type
: 列表的子类型。
返回值
逻辑类型。
duckdb_create_array_type
从其子类型创建 ARRAY 类型。返回类型必须使用 duckdb_destroy_logical_type
销毁。
语法
duckdb_logical_type duckdb_create_array_type(
duckdb_logical_type type,
idx_t array_size
);
参数
type
: 数组的子类型。array_size
: 数组中的元素数量。
返回值
逻辑类型。
duckdb_create_map_type
从其键类型和值类型创建 MAP 类型。返回类型必须使用 duckdb_destroy_logical_type
销毁。
语法
duckdb_logical_type duckdb_create_map_type(
duckdb_logical_type key_type,
duckdb_logical_type value_type
);
参数
key_type
: Map 的键类型。value_type
: Map 的值类型。
返回值
逻辑类型。
duckdb_create_union_type
从传入的数组创建 UNION 类型。返回类型必须使用 duckdb_destroy_logical_type
销毁。
语法
duckdb_logical_type duckdb_create_union_type(
duckdb_logical_type *member_types,
const char **member_names,
idx_t member_count
);
参数
member_types
: 联合成员类型的数组。member_names
: 联合成员名称。member_count
: 联合成员的数量。
返回值
逻辑类型。
duckdb_create_struct_type
根据成员类型和名称创建 STRUCT 类型。生成的类型必须使用 duckdb_destroy_logical_type
销毁。
语法
duckdb_logical_type duckdb_create_struct_type(
duckdb_logical_type *member_types,
const char **member_names,
idx_t member_count
);
参数
member_types
: 结构体成员类型的数组。member_names
: 结构体成员名称的数组。member_count
: 结构体成员的数量。
返回值
逻辑类型。
duckdb_create_enum_type
从传入的成员名称数组创建 ENUM 类型。生成的类型应使用 duckdb_destroy_logical_type
销毁。
语法
duckdb_logical_type duckdb_create_enum_type(
const char **member_names,
idx_t member_count
);
参数
member_names
: 枚举应包含的名称数组。member_count
: 数组中指定的元素数量。
返回值
逻辑类型。
duckdb_create_decimal_type
创建具有指定宽度和精度的 DECIMAL 类型。生成的类型应使用 duckdb_destroy_logical_type
销毁。
语法
duckdb_logical_type duckdb_create_decimal_type(
uint8_t width,
uint8_t scale
);
参数
width
: Decimal 类型的宽度。scale
: Decimal 类型的精度。
返回值
逻辑类型。
duckdb_get_type_id
检索 duckdb_logical_type
的枚举 duckdb_type
。
语法
duckdb_type duckdb_get_type_id(
duckdb_logical_type type
);
参数
type
: 逻辑类型。
返回值
的 duckdb_type
ID。
duckdb_decimal_width
检索 Decimal 类型的宽度。
语法
uint8_t duckdb_decimal_width(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
Decimal 类型的宽度。
duckdb_decimal_scale
检索 Decimal 类型的精度。
语法
uint8_t duckdb_decimal_scale(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
Decimal 类型的精度。
duckdb_decimal_internal_type
检索 Decimal 类型的内部存储类型。
语法
duckdb_type duckdb_decimal_internal_type(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
Decimal 类型的内部类型。
duckdb_enum_internal_type
检索枚举类型的内部存储类型。
语法
duckdb_type duckdb_enum_internal_type(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
枚举类型的内部类型。
duckdb_enum_dictionary_size
检索枚举类型的字典大小。
语法
uint32_t duckdb_enum_dictionary_size(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
枚举类型的字典大小。
duckdb_enum_dictionary_value
从枚举中检索指定位置的字典值。
结果必须使用 duckdb_free
释放。
语法
char *duckdb_enum_dictionary_value(
duckdb_logical_type type,
idx_t index
);
参数
type
: 逻辑类型对象。index
: 字典中的索引。
返回值
枚举类型的字符串值。必须使用 duckdb_free
释放。
duckdb_list_type_child_type
检索给定 LIST 类型的子类型。也接受 MAP 类型。结果必须使用 duckdb_destroy_logical_type
释放。
语法
duckdb_logical_type duckdb_list_type_child_type(
duckdb_logical_type type
);
参数
type
: 逻辑类型,可以是 LIST 或 MAP。
返回值
LIST 或 MAP 类型的子类型。
duckdb_array_type_child_type
检索给定 ARRAY 类型的子类型。
结果必须使用 duckdb_destroy_logical_type
释放。
语法
duckdb_logical_type duckdb_array_type_child_type(
duckdb_logical_type type
);
参数
type
: 逻辑类型。必须是 ARRAY。
返回值
ARRAY 类型的子类型。
duckdb_array_type_array_size
检索给定数组类型的数组大小。
语法
idx_t duckdb_array_type_array_size(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
此数组类型的值可以存储的固定元素数量。
duckdb_map_type_key_type
检索给定 Map 类型的键类型。
结果必须使用 duckdb_destroy_logical_type
释放。
语法
duckdb_logical_type duckdb_map_type_key_type(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
Map 类型的键类型。必须使用 duckdb_destroy_logical_type
销毁。
duckdb_map_type_value_type
检索给定 Map 类型的值类型。
结果必须使用 duckdb_destroy_logical_type
释放。
语法
duckdb_logical_type duckdb_map_type_value_type(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
Map 类型的值类型。必须使用 duckdb_destroy_logical_type
销毁。
duckdb_struct_type_child_count
返回结构体类型的子项数量。
语法
idx_t duckdb_struct_type_child_count(
duckdb_logical_type type
);
参数
type
: 逻辑类型对象。
返回值
结构体类型的子项数量。
duckdb_struct_type_child_name
检索结构体子项的名称。
结果必须使用 duckdb_free
释放。
语法
char *duckdb_struct_type_child_name(
duckdb_logical_type type,
idx_t index
);
参数
type
: 逻辑类型对象。index
: 子项索引。
返回值
结构体类型的名称。必须使用 duckdb_free
释放。
duckdb_struct_type_child_type
检索给定结构体类型在指定索引处的子类型。
结果必须使用 duckdb_destroy_logical_type
释放。
语法
duckdb_logical_type duckdb_struct_type_child_type(
duckdb_logical_type type,
idx_t index
);
参数
type
: 逻辑类型对象。index
: 子项索引。
返回值
结构体类型的子类型。必须使用 duckdb_destroy_logical_type
销毁。
duckdb_union_type_member_count
返回联合类型拥有的成员数量。
语法
idx_t duckdb_union_type_member_count(
duckdb_logical_type type
);
参数
type
: 逻辑类型(联合)对象。
返回值
联合类型的成员数量。
duckdb_union_type_member_name
检索联合成员的名称。
结果必须使用 duckdb_free
释放。
语法
char *duckdb_union_type_member_name(
duckdb_logical_type type,
idx_t index
);
参数
type
: 逻辑类型对象。index
: 子项索引。
返回值
联合成员的名称。必须使用 duckdb_free
释放。
duckdb_union_type_member_type
检索给定联合成员在指定索引处的子类型。
结果必须使用 duckdb_destroy_logical_type
释放。
语法
duckdb_logical_type duckdb_union_type_member_type(
duckdb_logical_type type,
idx_t index
);
参数
type
: 逻辑类型对象。index
: 子项索引。
返回值
联合成员的子类型。必须使用 duckdb_destroy_logical_type
销毁。
duckdb_destroy_logical_type
销毁逻辑类型并释放为该类型分配的所有内存。
语法
void duckdb_destroy_logical_type(
duckdb_logical_type *type
);
参数
type
: 要销毁的逻辑类型。
duckdb_register_logical_type
在给定连接中注册自定义类型。该类型必须具有别名。
语法
duckdb_state duckdb_register_logical_type(
duckdb_connection con,
duckdb_logical_type type,
duckdb_create_type_info info
);
参数
con
: 要使用的连接。type
: 要注册的自定义类型。
返回值
注册是否成功。