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