--- layout: docu title: Table Functions --- The table function API can be used to define a table function that can then be called from within DuckDB in the `FROM` clause of a query. ## API Reference Overview
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_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
);