This commit is contained in:
Yves
2025-02-17 11:10:17 +01:00
parent 79a83b65a7
commit 944a173745
14 changed files with 136 additions and 644 deletions

View File

@@ -4,7 +4,7 @@
namespace duckdb {
class QuackExtension : public Extension {
class UiExtension : public Extension {
public:
void Load(DuckDB &db) override;
std::string Name() override;

View File

@@ -1,6 +1,6 @@
#define DUCKDB_EXTENSION_MAIN
#include "quack_extension.hpp"
#include "ui_extension.hpp"
#include "duckdb.hpp"
#include "duckdb/common/exception.hpp"
#include "duckdb/common/string_util.hpp"
@@ -13,21 +13,21 @@
namespace duckdb {
inline void QuackScalarFun(DataChunk &args, ExpressionState &state, Vector &result) {
inline void UiScalarFun(DataChunk &args, ExpressionState &state, Vector &result) {
auto &name_vector = args.data[0];
UnaryExecutor::Execute<string_t, string_t>(
name_vector, result, args.size(),
[&](string_t name) {
return StringVector::AddString(result, "Quack "+name.GetString()+" 🐥");
return StringVector::AddString(result, "Ui "+name.GetString()+" 🐥");
});
}
inline void QuackOpenSSLVersionScalarFun(DataChunk &args, ExpressionState &state, Vector &result) {
inline void UiOpenSSLVersionScalarFun(DataChunk &args, ExpressionState &state, Vector &result) {
auto &name_vector = args.data[0];
UnaryExecutor::Execute<string_t, string_t>(
name_vector, result, args.size(),
[&](string_t name) {
return StringVector::AddString(result, "Quack " + name.GetString() +
return StringVector::AddString(result, "Ui " + name.GetString() +
", my linked OpenSSL version is " +
OPENSSL_VERSION_TEXT );
});
@@ -35,25 +35,25 @@ inline void QuackOpenSSLVersionScalarFun(DataChunk &args, ExpressionState &state
static void LoadInternal(DatabaseInstance &instance) {
// Register a scalar function
auto quack_scalar_function = ScalarFunction("quack", {LogicalType::VARCHAR}, LogicalType::VARCHAR, QuackScalarFun);
ExtensionUtil::RegisterFunction(instance, quack_scalar_function);
auto ui_scalar_function = ScalarFunction("ui", {LogicalType::VARCHAR}, LogicalType::VARCHAR, UiScalarFun);
ExtensionUtil::RegisterFunction(instance, ui_scalar_function);
// Register another scalar function
auto quack_openssl_version_scalar_function = ScalarFunction("quack_openssl_version", {LogicalType::VARCHAR},
LogicalType::VARCHAR, QuackOpenSSLVersionScalarFun);
ExtensionUtil::RegisterFunction(instance, quack_openssl_version_scalar_function);
auto ui_openssl_version_scalar_function = ScalarFunction("ui_openssl_version", {LogicalType::VARCHAR},
LogicalType::VARCHAR, UiOpenSSLVersionScalarFun);
ExtensionUtil::RegisterFunction(instance, ui_openssl_version_scalar_function);
}
void QuackExtension::Load(DuckDB &db) {
void UiExtension::Load(DuckDB &db) {
LoadInternal(*db.instance);
}
std::string QuackExtension::Name() {
return "quack";
std::string UiExtension::Name() {
return "ui";
}
std::string QuackExtension::Version() const {
#ifdef EXT_VERSION_QUACK
return EXT_VERSION_QUACK;
std::string UiExtension::Version() const {
#ifdef EXT_VERSION_UI
return EXT_VERSION_UI;
#else
return "";
#endif
@@ -63,12 +63,12 @@ std::string QuackExtension::Version() const {
extern "C" {
DUCKDB_EXTENSION_API void quack_init(duckdb::DatabaseInstance &db) {
DUCKDB_EXTENSION_API void ui_init(duckdb::DatabaseInstance &db) {
duckdb::DuckDB db_wrapper(db);
db_wrapper.LoadExtension<duckdb::QuackExtension>();
db_wrapper.LoadExtension<duckdb::UiExtension>();
}
DUCKDB_EXTENSION_API const char *quack_version() {
DUCKDB_EXTENSION_API const char *ui_version() {
return duckdb::DuckDB::LibraryVersion();
}
}