替换扫描API可用于注册一个回调函数,当读取的表中不存在于目录中时,将调用该回调函数。例如,当执行诸如SELECT * FROM my_table
的查询并且my_table
不存在时,将使用my_table
作为参数调用替换扫描回调函数。然后,替换扫描可以插入一个带有特定参数的表函数来替换表的读取。
API 参考概览
void duckdb_add_replacement_scan(duckdb_database db, duckdb_replacement_callback_t replacement, void *extra_data, duckdb_delete_callback_t delete_callback);
void duckdb_replacement_scan_set_function_name(duckdb_replacement_scan_info info, const char *function_name);
void duckdb_replacement_scan_add_parameter(duckdb_replacement_scan_info info, duckdb_value parameter);
void duckdb_replacement_scan_set_error(duckdb_replacement_scan_info info, const char *error);
duckdb_add_replacement_scan
向指定的数据库添加替换扫描定义。
语法
void duckdb_add_replacement_scan(
duckdb_database db,
duckdb_replacement_callback_t replacement,
void *extra_data,
duckdb_delete_callback_t delete_callback
);
参数
db
: 要添加替换扫描的数据库对象replacement
: 替换扫描回调函数extra_data
: 传递回指定回调函数的额外数据delete_callback
: 如果有额外数据,则调用删除回调函数
duckdb_replacement_scan_set_function_name
设置替换函数名称。如果在替换回调中调用此函数,则执行替换扫描。如果未调用,则不执行替换回调。
语法
void duckdb_replacement_scan_set_function_name(
duckdb_replacement_scan_info info,
const char *function_name
);
参数
info
: 信息对象function_name
: 要替换的函数名称。
duckdb_replacement_scan_add_parameter
向替换扫描函数添加一个参数。
Syntax
void duckdb_replacement_scan_add_parameter(
duckdb_replacement_scan_info info,
duckdb_value parameter
);
Parameters
info
: 信息对象parameter
: 要添加的参数。
duckdb_replacement_scan_set_error
报告在执行替换扫描时发生错误。
Syntax
void duckdb_replacement_scan_set_error(
duckdb_replacement_scan_info info,
const char *error
);
Parameters
info
: 信息对象error
: 错误信息