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  			  
posted @   辰令  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示