Tabellenfunktionen
Die Tabellenfunktions-API kann verwendet werden, um eine Tabellenfunktion zu definieren, die dann innerhalb von DuckDB in der FROM-Klausel einer Abfrage aufgerufen werden kann.
API-Referenz im Überblick
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);
Tabellenfunktion Bind
void *duckdb_bind_get_extra_info(duckdb_bind_info info);
void duckdb_table_function_get_client_context(duckdb_bind_info info, duckdb_client_context *out_context);
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);
Tabellenfunktion Init
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);
Tabellenfunktion
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
Erzeugt eine neue leere Tabellenfunktion.
Der Rückgabewert sollte mit duckdb_destroy_table_function zerstört werden.
Rückgabewert
Das Tabellenfunktionsobjekt.
Syntax
duckdb_table_function duckdb_create_table_function(
);
duckdb_destroy_table_function
Zerstört das angegebene Tabellenfunktionsobjekt.
Syntax
void duckdb_destroy_table_function(
duckdb_table_function *table_function
);
Parameter
table_function: Die zu zerstörende Tabellenfunktion
duckdb_table_function_set_name
Setzt den Namen der angegebenen Tabellenfunktion.
Syntax
void duckdb_table_function_set_name(
duckdb_table_function table_function,
const char *name
);
Parameter
table_function: Die Tabellenfunktionname: Der Name der Tabellenfunktion
duckdb_table_function_add_parameter
Fügt der Tabellenfunktion einen Parameter hinzu.
Syntax
void duckdb_table_function_add_parameter(
duckdb_table_function table_function,
duckdb_logical_type type
);
Parameter
table_function: Die Tabellenfunktion.type: Der Parametertyp. Darf kein INVALID enthalten.
duckdb_table_function_add_named_parameter
Fügt der Tabellenfunktion einen benannten Parameter hinzu.
Syntax
void duckdb_table_function_add_named_parameter(
duckdb_table_function table_function,
const char *name,
duckdb_logical_type type
);
Parameter
table_function: Die Tabellenfunktion.name: Der Parametername.type: Der Parametertyp. Darf kein INVALID enthalten.
duckdb_table_function_set_extra_info
Weist der Tabellenfunktion Extra-Informationen zu, die während des Bindens usw. geholt werden können.
Syntax
void duckdb_table_function_set_extra_info(
duckdb_table_function table_function,
void *extra_info,
duckdb_delete_callback_t destroy
);
Parameter
table_function: Die Tabellenfunktionextra_info: Die Extra-Informationendestroy: Der Callback, der aufgerufen wird, um die Extra-Informationen zu zerstören (falls vorhanden)
duckdb_table_function_set_bind
Setzt die Bind-Funktion der Tabellenfunktion.
Syntax
void duckdb_table_function_set_bind(
duckdb_table_function table_function,
duckdb_table_function_bind_t bind
);
Parameter
table_function: Die Tabellenfunktionbind: Die Bind-Funktion
duckdb_table_function_set_init
Setzt die Init-Funktion der Tabellenfunktion.
Syntax
void duckdb_table_function_set_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
Parameter
table_function: Die Tabellenfunktioninit: Die Init-Funktion
duckdb_table_function_set_local_init
Setzt die thread-lokale Init-Funktion der Tabellenfunktion.
Syntax
void duckdb_table_function_set_local_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
Parameter
table_function: Die Tabellenfunktioninit: Die Init-Funktion
duckdb_table_function_set_function
Setzt die Hauptfunktion der Tabellenfunktion.
Syntax
void duckdb_table_function_set_function(
duckdb_table_function table_function,
duckdb_table_function_t function
);
Parameter
table_function: Die Tabellenfunktionfunction: Die Funktion
duckdb_table_function_supports_projection_pushdown
Setzt, ob die angegebene Tabellenfunktion Projection Pushdown unterstützt.
Wenn dies auf true gesetzt ist, stellt das System in der init-Phase eine Liste aller benötigten Spalten über
die Funktionen duckdb_init_get_column_count und duckdb_init_get_column_index bereit.
Wenn dies auf false gesetzt ist (der Standard), erwartet das System, dass alle Spalten projiziert werden.
Syntax
void duckdb_table_function_supports_projection_pushdown(
duckdb_table_function table_function,
bool pushdown
);
Parameter
table_function: Die Tabellenfunktionpushdown: True, wenn die Tabellenfunktion Projection Pushdown unterstützt, andernfalls false.
duckdb_register_table_function
Registriert das Tabellenfunktionsobjekt innerhalb der angegebenen Verbindung.
Die Funktion benötigt mindestens einen Namen, eine Bind-Funktion, eine Init-Funktion und eine Hauptfunktion.
Wenn die Funktion unvollständig ist oder bereits eine Funktion mit diesem Namen existiert, wird DuckDBError zurückgegeben.
Syntax
duckdb_state duckdb_register_table_function(
duckdb_connection con,
duckdb_table_function function
);
Parameter
con: Die Verbindung, in der registriert wird.function: Der Funktionszeiger
Rückgabewert
Ob die Registrierung erfolgreich war.
duckdb_bind_get_extra_info
Ermittelt die Extra-Infos der Funktion, wie in duckdb_table_function_set_extra_info gesetzt.
Syntax
void *duckdb_bind_get_extra_info(
duckdb_bind_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Die Extra-Infos
duckdb_table_function_get_client_context
Ermittelt den Client-Kontext der Bind-Infos einer Tabellenfunktion.
Syntax
void duckdb_table_function_get_client_context(
duckdb_bind_info info,
duckdb_client_context *out_context
);
Parameter
info: Das Bind-Info-Objekt der Tabellenfunktion.out_context: Der Client-Kontext der Bind-Infos. Muss mitduckdb_destroy_client_contextzerstört werden.
duckdb_bind_add_result_column
Fügt dem Output der Tabellenfunktion eine Ergebnisspalte hinzu.
Syntax
void duckdb_bind_add_result_column(
duckdb_bind_info info,
const char *name,
duckdb_logical_type type
);
Parameter
info: Die Bind-Infos der Tabellenfunktion.name: Der Spaltenname.type: Der logische Spaltentyp.
duckdb_bind_get_parameter_count
Ermittelt die Anzahl der regulären (nicht benannten) Parameter der Funktion.
Syntax
idx_t duckdb_bind_get_parameter_count(
duckdb_bind_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Die Anzahl der Parameter
duckdb_bind_get_parameter
Ermittelt den Parameter am angegebenen Index.
Das Ergebnis muss mit duckdb_destroy_value zerstört werden.
Syntax
duckdb_value duckdb_bind_get_parameter(
duckdb_bind_info info,
idx_t index
);
Parameter
info: Das Info-Objektindex: Der Index des zu holenden Parameters
Rückgabewert
Der Wert des Parameters. Muss mit duckdb_destroy_value zerstört werden.
duckdb_bind_get_named_parameter
Ermittelt einen benannten Parameter mit dem angegebenen Namen.
Das Ergebnis muss mit duckdb_destroy_value zerstört werden.
Syntax
duckdb_value duckdb_bind_get_named_parameter(
duckdb_bind_info info,
const char *name
);
Parameter
info: Das Info-Objektname: Der Name des Parameters
Rückgabewert
Der Wert des Parameters. Muss mit duckdb_destroy_value zerstört werden.
duckdb_bind_set_bind_data
Setzt die benutzerdefinierten Bind-Daten im Bind-Objekt der Tabellenfunktion. Dieses Objekt kann während der Ausführung erneut geholt werden.
Syntax
void duckdb_bind_set_bind_data(
duckdb_bind_info info,
void *bind_data,
duckdb_delete_callback_t destroy
);
Parameter
info: Die Bind-Infos der Tabellenfunktion.bind_data: Das Bind-Daten-Objekt.destroy: Der Callback zum Zerstören der Bind-Daten (falls vorhanden).
duckdb_bind_set_cardinality
Setzt die Kardinalitätsschätzung für die Tabellenfunktion, verwendet zur Optimierung.
Syntax
void duckdb_bind_set_cardinality(
duckdb_bind_info info,
idx_t cardinality,
bool is_exact
);
Parameter
info: Das Bind-Daten-Objekt.is_exact: Ob die Kardinalitätsschätzung exakt oder eine Näherung ist
duckdb_bind_set_error
Meldet, dass beim Aufruf von Bind einer Tabellenfunktion ein Fehler aufgetreten ist.
Syntax
void duckdb_bind_set_error(
duckdb_bind_info info,
const char *error
);
Parameter
info: Das Info-Objekterror: Die Fehlermeldung
duckdb_init_get_extra_info
Ermittelt die Extra-Infos der Funktion, wie in duckdb_table_function_set_extra_info gesetzt.
Syntax
void *duckdb_init_get_extra_info(
duckdb_init_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Die Extra-Infos
duckdb_init_get_bind_data
Holt die von duckdb_bind_set_bind_data während des Bindens gesetzten Bind-Daten.
Beachten Sie, dass die Bind-Daten als schreibgeschützt betrachtet werden sollten. Zum Verfolgen von Zustand verwenden Sie stattdessen die Init-Daten.
Syntax
void *duckdb_init_get_bind_data(
duckdb_init_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Das Bind-Daten-Objekt
duckdb_init_set_init_data
Setzt die benutzerdefinierten Init-Daten im Init-Objekt. Dieses Objekt kann während der Ausführung erneut geholt werden.
Syntax
void duckdb_init_set_init_data(
duckdb_init_info info,
void *init_data,
duckdb_delete_callback_t destroy
);
Parameter
info: Das Info-Objektinit_data: Das Init-Daten-Objekt.destroy: Der Callback, der aufgerufen wird, um die Init-Daten zu zerstören (falls vorhanden)
duckdb_init_get_column_count
Gibt die Anzahl der projizierten Spalten zurück.
Diese Funktion muss verwendet werden, wenn Projection Pushdown aktiviert ist, um festzustellen, welche Spalten ausgegeben werden sollen.
Syntax
idx_t duckdb_init_get_column_count(
duckdb_init_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Die Anzahl der projizierten Spalten.
duckdb_init_get_column_index
Gibt den Spaltenindex der projizierten Spalte an der angegebenen Position zurück.
Diese Funktion muss verwendet werden, wenn Projection Pushdown aktiviert ist, um festzustellen, welche Spalten ausgegeben werden sollen.
Syntax
idx_t duckdb_init_get_column_index(
duckdb_init_info info,
idx_t column_index
);
Parameter
info: Das Info-Objektcolumn_index: Der Index, an dem der projizierte Spaltenindex geholt wird, von 0..duckdb_init_get_column_count(info)
Rückgabewert
Der Spaltenindex der projizierten Spalte.
duckdb_init_set_max_threads
Setzt, wie viele Threads diese Tabellenfunktion parallel verarbeiten können (Standard: 1)
Syntax
void duckdb_init_set_max_threads(
duckdb_init_info info,
idx_t max_threads
);
Parameter
info: Das Info-Objektmax_threads: Die maximale Anzahl von Threads, die diese Tabellenfunktion verarbeiten können
duckdb_init_set_error
Meldet, dass beim Aufruf von Init ein Fehler aufgetreten ist.
Syntax
void duckdb_init_set_error(
duckdb_init_info info,
const char *error
);
Parameter
info: Das Info-Objekterror: Die Fehlermeldung
duckdb_function_get_extra_info
Ermittelt die Extra-Infos der Funktion, wie in duckdb_table_function_set_extra_info gesetzt.
Syntax
void *duckdb_function_get_extra_info(
duckdb_function_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Die Extra-Infos
duckdb_function_get_bind_data
Holt die von duckdb_bind_set_bind_data gesetzten Bind-Daten der Tabellenfunktion.
Beachten Sie, dass die Bind-Daten schreibgeschützt sind. Zum Verfolgen von Zustand verwenden Sie stattdessen die Init-Daten.
Syntax
void *duckdb_function_get_bind_data(
duckdb_function_info info
);
Parameter
info: Das Funktions-Info-Objekt.
Rückgabewert
Das Bind-Daten-Objekt.
duckdb_function_get_init_data
Holt die von duckdb_init_set_init_data während des Init gesetzten Init-Daten.
Syntax
void *duckdb_function_get_init_data(
duckdb_function_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Das Init-Daten-Objekt
duckdb_function_get_local_init_data
Holt die thread-lokalen Init-Daten, die von duckdb_init_set_init_data während local_init gesetzt wurden.
Syntax
void *duckdb_function_get_local_init_data(
duckdb_function_info info
);
Parameter
info: Das Info-Objekt
Rückgabewert
Das Init-Daten-Objekt
duckdb_function_set_error
Meldet, dass beim Ausführen der Funktion ein Fehler aufgetreten ist.
Syntax
void duckdb_function_set_error(
duckdb_function_info info,
const char *error
);
Parameter
info: Das Info-Objekterror: Die Fehlermeldung