表函数 API 可用于定义一个表函数,然后可以在 DuckDB 查询的 FROM
子句中调用该函数。
API参考概览
duckdb_table_function duckdb_create_table_function();
void duckdb_destroy_table_function(duckdb_table_function *table_function);
void duckdb_table_function_set_name(duckdb_table_function table_function, const char *name);
void duckdb_table_function_add_parameter(duckdb_table_function table_function, duckdb_logical_type type);
void duckdb_table_function_add_named_parameter(duckdb_table_function table_function, const char *name, duckdb_logical_type type);
void duckdb_table_function_set_extra_info(duckdb_table_function table_function, void *extra_info, duckdb_delete_callback_t destroy);
void duckdb_table_function_set_bind(duckdb_table_function table_function, duckdb_table_function_bind_t bind);
void duckdb_table_function_set_init(duckdb_table_function table_function, duckdb_table_function_init_t init);
void duckdb_table_function_set_local_init(duckdb_table_function table_function, duckdb_table_function_init_t init);
void duckdb_table_function_set_function(duckdb_table_function table_function, duckdb_table_function_t function);
void duckdb_table_function_supports_projection_pushdown(duckdb_table_function table_function, bool pushdown);
duckdb_state duckdb_register_table_function(duckdb_connection con, duckdb_table_function function);
表函数绑定
void *duckdb_bind_get_extra_info(duckdb_bind_info info);
void duckdb_bind_add_result_column(duckdb_bind_info info, const char *name, duckdb_logical_type type);
idx_t duckdb_bind_get_parameter_count(duckdb_bind_info info);
duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index);
duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name);
void duckdb_bind_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy);
void duckdb_bind_set_cardinality(duckdb_bind_info info, idx_t cardinality, bool is_exact);
void duckdb_bind_set_error(duckdb_bind_info info, const char *error);
表函数初始化
void *duckdb_init_get_extra_info(duckdb_init_info info);
void *duckdb_init_get_bind_data(duckdb_init_info info);
void duckdb_init_set_init_data(duckdb_init_info info, void *init_data, duckdb_delete_callback_t destroy);
idx_t duckdb_init_get_column_count(duckdb_init_info info);
idx_t duckdb_init_get_column_index(duckdb_init_info info, idx_t column_index);
void duckdb_init_set_max_threads(duckdb_init_info info, idx_t max_threads);
void duckdb_init_set_error(duckdb_init_info info, const char *error);
表函数
void *duckdb_function_get_extra_info(duckdb_function_info info);
void *duckdb_function_get_bind_data(duckdb_function_info info);
void *duckdb_function_get_init_data(duckdb_function_info info);
void *duckdb_function_get_local_init_data(duckdb_function_info info);
void duckdb_function_set_error(duckdb_function_info info, const char *error);
duckdb_create_table_function
创建一个新的空表函数。
返回值应使用 duckdb_destroy_table_function
销毁。
返回值
表函数对象。
语法
duckdb_table_function duckdb_create_table_function(
);
duckdb_destroy_table_function
销毁给定的表函数对象。
语法
void duckdb_destroy_table_function(
duckdb_table_function *table_function
);
参数
table_function
:要销毁的表函数
duckdb_table_function_set_name
设置给定表函数的名称。
语法
void duckdb_table_function_set_name(
duckdb_table_function table_function,
const char *name
);
参数
table_function
:表函数name
:表函数的名称
duckdb_table_function_add_parameter
向表函数添加一个参数。
语法
void duckdb_table_function_add_parameter(
duckdb_table_function table_function,
duckdb_logical_type type
);
参数
table_function
:表函数。type
:参数类型。不能包含 INVALID。
duckdb_table_function_add_named_parameter
向表函数添加一个命名参数。
语法
void duckdb_table_function_add_named_parameter(
duckdb_table_function table_function,
const char *name,
duckdb_logical_type type
);
参数
table_function
:表函数。name
:参数名称。type
:参数类型。不能包含 INVALID。
duckdb_table_function_set_extra_info
将额外信息分配给表函数,该信息可以在绑定等阶段获取。
语法
void duckdb_table_function_set_extra_info(
duckdb_table_function table_function,
void *extra_info,
duckdb_delete_callback_t destroy
);
参数
table_function
:表函数extra_info
:额外信息destroy
:用于销毁额外信息(如果有)的回调函数
duckdb_table_function_set_bind
设置表函数的绑定函数。
语法
void duckdb_table_function_set_bind(
duckdb_table_function table_function,
duckdb_table_function_bind_t bind
);
参数
table_function
:表函数bind
:绑定函数
duckdb_table_function_set_init
设置表函数的初始化函数。
语法
void duckdb_table_function_set_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
参数
table_function
:表函数init
:初始化函数
duckdb_table_function_set_local_init
设置表函数的线程局部初始化函数。
语法
void duckdb_table_function_set_local_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
参数
table_function
:表函数init
:初始化函数
duckdb_table_function_set_function
设置表函数的主函数。
语法
void duckdb_table_function_set_function(
duckdb_table_function table_function,
duckdb_table_function_t function
);
参数
table_function
:表函数function
:函数
duckdb_table_function_supports_projection_pushdown
设置给定表函数是否支持投影下推。
如果此项设置为 true,系统将在 init
阶段通过 duckdb_init_get_column_count
和 duckdb_init_get_column_index
函数提供所有所需列的列表。如果此项设置为 false(默认),系统将期望所有列都进行投影。
语法
void duckdb_table_function_supports_projection_pushdown(
duckdb_table_function table_function,
bool pushdown
);
参数
table_function
:表函数pushdown
:如果表函数支持投影下推,则为 true,否则为 false。
duckdb_register_table_function
在给定连接中注册表函数对象。
该函数至少需要一个名称、一个绑定函数、一个初始化函数和一个主函数。
如果函数不完整或已存在同名函数,则返回 DuckDBError。
语法
duckdb_state duckdb_register_table_function(
duckdb_connection con,
duckdb_table_function function
);
参数
con
:注册所在的连接。function
:函数指针
返回值
注册是否成功。
duckdb_bind_get_extra_info
检索在 duckdb_table_function_set_extra_info
中设置的函数的额外信息。
语法
void *duckdb_bind_get_extra_info(
duckdb_bind_info info
);
参数
info
:信息对象
返回值
额外信息
duckdb_bind_add_result_column
向表函数的输出添加一个结果列。
语法
void duckdb_bind_add_result_column(
duckdb_bind_info info,
const char *name,
duckdb_logical_type type
);
参数
info
:表函数的绑定信息。name
:列名称。type
:逻辑列类型。
duckdb_bind_get_parameter_count
检索函数常规(非命名)参数的数量。
语法
idx_t duckdb_bind_get_parameter_count(
duckdb_bind_info info
);
参数
info
:信息对象
返回值
参数数量
duckdb_bind_get_parameter
检索给定索引处的参数。
结果必须使用 duckdb_destroy_value
销毁。
语法
duckdb_value duckdb_bind_get_parameter(
duckdb_bind_info info,
idx_t index
);
参数
info
:信息对象index
:要获取的参数的索引
返回值
参数的值。必须使用 duckdb_destroy_value
销毁。
duckdb_bind_get_named_parameter
检索具有给定名称的命名参数。
结果必须使用 duckdb_destroy_value
销毁。
语法
duckdb_value duckdb_bind_get_named_parameter(
duckdb_bind_info info,
const char *name
);
参数
info
:信息对象name
:参数名称
返回值
参数的值。必须使用 duckdb_destroy_value
销毁。
duckdb_bind_set_bind_data
在表函数的绑定对象中设置用户提供的绑定数据。此对象可以在执行期间再次检索。
语法
void duckdb_bind_set_bind_data(
duckdb_bind_info info,
void *bind_data,
duckdb_delete_callback_t destroy
);
参数
info
:表函数的绑定信息。bind_data
:绑定数据对象。destroy
:用于销毁绑定数据(如果有)的回调函数。
duckdb_bind_set_cardinality
设置表函数的基数估计,用于优化。
语法
void duckdb_bind_set_cardinality(
duckdb_bind_info info,
idx_t cardinality,
bool is_exact
);
参数
info
:绑定数据对象。is_exact
:基数估计是否精确,或近似值
duckdb_bind_set_error
报告在表函数上调用 bind 时发生的错误。
语法
void duckdb_bind_set_error(
duckdb_bind_info info,
const char *error
);
参数
info
:信息对象error
:错误消息
duckdb_init_get_extra_info
检索在 duckdb_table_function_set_extra_info
中设置的函数的额外信息。
语法
void *duckdb_init_get_extra_info(
duckdb_init_info info
);
参数
info
:信息对象
返回值
额外信息
duckdb_init_get_bind_data
获取在绑定期间通过 duckdb_bind_set_bind_data
设置的绑定数据。
请注意,绑定数据应被视为只读。对于跟踪状态,请使用初始化数据。
语法
void *duckdb_init_get_bind_data(
duckdb_init_info info
);
参数
info
:信息对象
返回值
绑定数据对象
duckdb_init_set_init_data
在初始化对象中设置用户提供的初始化数据。此对象可以在执行期间再次检索。
语法
void duckdb_init_set_init_data(
duckdb_init_info info,
void *init_data,
duckdb_delete_callback_t destroy
);
参数
info
:信息对象init_data
:初始化数据对象。destroy
:用于销毁初始化数据(如果有)的回调函数
duckdb_init_get_column_count
返回投影列的数量。
如果启用了投影下推,则必须使用此函数来确定要发出的列。
语法
idx_t duckdb_init_get_column_count(
duckdb_init_info info
);
参数
info
:信息对象
返回值
投影列的数量。
duckdb_init_get_column_index
返回指定位置处投影列的列索引。
如果启用了投影下推,则必须使用此函数来确定要发出的列。
语法
idx_t duckdb_init_get_column_index(
duckdb_init_info info,
idx_t column_index
);
参数
info
:信息对象column_index
:要获取投影列索引的索引,范围从 0 到 duckdb_init_get_column_count(info)
返回值
投影列的列索引。
duckdb_init_set_max_threads
设置可以并行处理此表函数的最大线程数(默认值:1)
语法
void duckdb_init_set_max_threads(
duckdb_init_info info,
idx_t max_threads
);
参数
info
:信息对象max_threads
:可以处理此表函数的最大线程数
duckdb_init_set_error
报告在调用 init 时发生的错误。
语法
void duckdb_init_set_error(
duckdb_init_info info,
const char *error
);
参数
info
:信息对象error
:错误消息
duckdb_function_get_extra_info
检索在 duckdb_table_function_set_extra_info
中设置的函数的额外信息。
语法
void *duckdb_function_get_extra_info(
duckdb_function_info info
);
参数
info
:信息对象
返回值
额外信息
duckdb_function_get_bind_data
获取通过 duckdb_bind_set_bind_data
设置的表函数的绑定数据。
请注意,绑定数据是只读的。对于跟踪状态,请使用初始化数据。
语法
void *duckdb_function_get_bind_data(
duckdb_function_info info
);
参数
info
:函数信息对象。
返回值
绑定数据对象。
duckdb_function_get_init_data
获取在初始化期间通过 duckdb_init_set_init_data
设置的初始化数据。
语法
void *duckdb_function_get_init_data(
duckdb_function_info info
);
参数
info
:信息对象
返回值
初始化数据对象
duckdb_function_get_local_init_data
获取在 local_init 期间通过 duckdb_init_set_init_data
设置的线程局部初始化数据。
语法
void *duckdb_function_get_local_init_data(
duckdb_function_info info
);
参数
info
:信息对象
返回值
初始化数据对象
duckdb_function_set_error
报告执行函数时发生的错误。
语法
void duckdb_function_set_error(
duckdb_function_info info,
const char *error
);
参数
info
:信息对象error
:错误消息