AI_使用_DeepSeek_阅读Duckdb-Extension源码
利用DeepSeek阅读Duckdb-Extension源码
问题: 如何写duckdb的扩展
请解读代码
头文件
头文件-- "quack_extension.hpp"
// QuackExtension 类,继承自 Extension。这个类重写了Load、Name和Version方法
#include "duckdb.hpp"
namespace duckdb {
class QuackExtension : public Extension {
public:
void Load(DuckDB &db) override;
std::string Name() override;
std::string Version() const override;
};
}
源文件
定义函数
使用 UnaryExecutor::Execute 来处理输入参数,生成结果字符串
inline void QuackScalarFun(DataChunk &args, ExpressionState &state, Vector &result) {
UnaryExecutor::Execute<string_t, string_t>( name_vector, result, args.size(),[&](string_t name) {
return StringVector::AddString(result, "Quack "+name.GetString()+" 🐥");;
});
功能:接受一个字符串参数,返回拼接后的字符串(如输入 "Alice" 返回 "Quack Alice 🐥")。
输入类型和输出类型 Execute<string_t, string_t>
UnaryExecutor::Execute<string_t, bool>(strings, result, args.size(), [&](string_t input) {
return OP::Operation(CreateStringPiece(input), lstate.constant_pattern);
});
注册函数
通过ScalarFunction创建函数对象,指定函数名、参数类型、返回类型以及对应的处理函数,
然后使用 ExtensionUtil::RegisterFunction 将函数注册到DuckDB实例中
static void LoadInternal(DatabaseInstance &instance) {
auto quack_scalar_function = ScalarFunction("quack", {LogicalType::VARCHAR}, LogicalType::VARCHAR, QuackScalarFun);
ExtensionUtil::RegisterFunction(instance, quack_scalar_function);
}
QuackExtension类的
Load方法调用了 LoadInternal,将扩展加载到数据库实例中。
Name方法返回扩展的名称“quack”,
Version方法返回版本号
在extern "C"部分,quack_init:扩展的入口函数,DuckDB 在加载扩展时会调用此函数。
定义了quack_init和quack_version函数。
quack_init函数是扩展的初始化入口,创建DuckDB包装器并加载 QuackExtension 。
duckdb::DuckDB db_wrapper(db);
db_wrapper.LoadExtension<duckdb::QuackExtension>();
quack_version返回DuckDB的库版本
C++语法
C++ 匿名函数 lambda表达式实现
[capture_list] (parameters) mutable-> return_type {
// function body
}
auto lambda = []() {std::cout << "Hello, World!" << std::endl;};
lambda()
参考:
https://tdoehmen.github.io/blog/2023/03/07/quackingduck.html
https://github.com/jtigani/duckprompt
https://github.com/duckdb/extension-template
分类:
Tools
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)