Merge remote-tracking branch 'duckdb/main'
This commit is contained in:
@@ -6,7 +6,12 @@ namespace duckdb {
|
||||
|
||||
class UiExtension : public Extension {
|
||||
public:
|
||||
#ifdef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
void Load(ExtensionLoader &loader) override;
|
||||
#else
|
||||
void Load(DuckDB &db) override;
|
||||
#endif
|
||||
|
||||
std::string Name() override;
|
||||
std::string Version() const override;
|
||||
};
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <duckdb.hpp>
|
||||
#ifndef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
#include <duckdb/main/extension_util.hpp>
|
||||
#endif
|
||||
#include <type_traits>
|
||||
|
||||
namespace duckdb {
|
||||
@@ -64,6 +66,15 @@ void TableFunc(ClientContext &context, TableFunctionInput &input,
|
||||
output.SetValue(0, 0, result);
|
||||
}
|
||||
|
||||
#ifdef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
template <typename Func, Func func>
|
||||
void RegisterTF(ExtensionLoader &loader, const char *name) {
|
||||
TableFunction tf(name, {}, internal::TableFunc<Func, func>,
|
||||
internal::SingleStringResultBind,
|
||||
RunOnceTableFunctionState::Init);
|
||||
loader.RegisterFunction(tf);
|
||||
}
|
||||
#else
|
||||
template <typename Func, Func func>
|
||||
void RegisterTF(DatabaseInstance &instance, const char *name) {
|
||||
TableFunction tf(name, {}, internal::TableFunc<Func, func>,
|
||||
@@ -71,10 +82,16 @@ void RegisterTF(DatabaseInstance &instance, const char *name) {
|
||||
RunOnceTableFunctionState::Init);
|
||||
ExtensionUtil::RegisterFunction(instance, tf);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace internal
|
||||
|
||||
#ifdef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
#define REGISTER_TF(name, func) \
|
||||
internal::RegisterTF<decltype(&func), &func>(loader, name)
|
||||
#else
|
||||
#define REGISTER_TF(name, func) \
|
||||
internal::RegisterTF<decltype(&func), &func>(instance, name)
|
||||
#endif
|
||||
|
||||
} // namespace duckdb
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#ifdef _WIN32
|
||||
#define OPEN_COMMAND "start"
|
||||
#undef CreateDirectory // avoid being transformed to `CreateDirectoryA`
|
||||
#elif __linux__
|
||||
#define OPEN_COMMAND "xdg-open"
|
||||
#else
|
||||
@@ -81,7 +82,12 @@ void InitStorageExtension(duckdb::DatabaseInstance &db) {
|
||||
config.storage_extensions[STORAGE_EXTENSION_KEY] = std::move(ext);
|
||||
}
|
||||
|
||||
#ifdef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
static void LoadInternal(ExtensionLoader &loader) {
|
||||
auto &instance = loader.GetDatabaseInstance();
|
||||
#else
|
||||
static void LoadInternal(DatabaseInstance &instance) {
|
||||
#endif
|
||||
InitStorageExtension(instance);
|
||||
|
||||
// If the server is already running we need to update the database instance
|
||||
@@ -128,11 +134,20 @@ static void LoadInternal(DatabaseInstance &instance) {
|
||||
TableFunction tf("ui_is_started", {}, IsUIStartedTableFunc,
|
||||
internal::SingleBoolResultBind,
|
||||
RunOnceTableFunctionState::Init);
|
||||
#ifdef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
loader.RegisterFunction(tf);
|
||||
#else
|
||||
ExtensionUtil::RegisterFunction(instance, tf);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
void UiExtension::Load(ExtensionLoader &loader) { LoadInternal(loader); }
|
||||
#else
|
||||
void UiExtension::Load(DuckDB &db) { LoadInternal(*db.instance); }
|
||||
#endif
|
||||
|
||||
std::string UiExtension::Name() { return "ui"; }
|
||||
|
||||
std::string UiExtension::Version() const { return UI_EXTENSION_VERSION; }
|
||||
@@ -141,10 +156,14 @@ std::string UiExtension::Version() const { return UI_EXTENSION_VERSION; }
|
||||
|
||||
extern "C" {
|
||||
|
||||
#ifdef DUCKDB_CPP_EXTENSION_ENTRY
|
||||
DUCKDB_CPP_EXTENSION_ENTRY(ui, loader) { duckdb::LoadInternal(loader); }
|
||||
#else
|
||||
DUCKDB_EXTENSION_API void ui_init(duckdb::DatabaseInstance &db) {
|
||||
duckdb::DuckDB db_wrapper(db);
|
||||
db_wrapper.LoadExtension<duckdb::UiExtension>();
|
||||
}
|
||||
#endif
|
||||
|
||||
DUCKDB_EXTENSION_API const char *ui_version() {
|
||||
return duckdb::DuckDB::LibraryVersion();
|
||||
|
||||
Reference in New Issue
Block a user