当前位置: 首页 > news >正文

深圳美容网站建广西壮族自治区在线seo关键词排名优化

深圳美容网站建,广西壮族自治区在线seo关键词排名优化,做直播平台网站赚钱吗,网站建设合作合同模板前段时间在DeepSeek的辅助下,先后实现了: deepseek辅助编写的支持gmp高精度运算duckdb客户端利用DeepSeek编写能在DuckDB中读PostgreSQL表的表函数使用DeepSeek编写DuckDB支持中文字符集编码的read_csv表函数让DeepSeek参照libxls的xls2csv例子实现的Du…

前段时间在DeepSeek的辅助下,先后实现了:

  • deepseek辅助编写的支持gmp高精度运算duckdb客户端
  • 利用DeepSeek编写能在DuckDB中读PostgreSQL表的表函数
  • 使用DeepSeek编写DuckDB支持中文字符集编码的read_csv表函数
  • 让DeepSeek参照libxls的xls2csv例子实现的DuckDB read_xls表函数
  • DeepSeek辅助编写的将DuckDB查询结果写多种格式文件的通用类

但使用不同功能要调用不同的程序很麻烦,而且有的程序没有输入SQL语句的界面,每次改变语句都要重新编译,不实用,所以将它们整合到一个带有交互式界面的程序。

整合的步骤其实很机械,在主程序中添加相应函数的注册代码,以及用某种方式将实现该函数的cpp程序加入编译,后者既可以用#include "源代码.cpp"的方式,也可以用#include "源代码.h"的方式再将源代码.cpp加入编译命令行,前一种更简单,不过后一种更规范。

修改后的主程序的增加部分如下:
包含头文件和源代码

#include "readpg5.cpp" //读取符合postgresql协议的数据库中的表
#include "csv_reader2.hpp" //读取中文字符集csv
#include "copy_files2.cpp" //将查询结果写入xls电子表格文件和docx文档文件,支持中文
#include "read_xls2.cpp" //读取xls电子表格文件

在注册程序void registerGMPFunctions()中添加如下行

    duckdb::DatabaseInstance& db_instance = *db_->instance;//注册read_pg自定义函数duckdb::ExtensionUtil::RegisterFunction(db_instance, PGTableFunction::GetFunction());//注册read_csv_e自定义函数duckdb::ExtensionUtil::RegisterFunction(db_instance, duckdb::ReadCSVEFunction::GetFunction());//注册read_xls自定义函数ExtensionUtil::RegisterFunction(db_instance, ReadXLSFunction::GetFunction());//注册copy to自定义函数, 支持xls和docx格式duckdb::RegisterMultiFormatCopyFunction(db_instance);

因为有同名冲突,修改了两处
1.在copy_files2.cpp中重新定义unsigned64_t后再包含xlslib.h,再取消

#define unsigned64_t xls_unsigned64_t
#include "xlslib.h"
#undef unsigned64_t

2.在read_xls2.cpp中将结构体XLSGlobalState改名为ReadXLSGlobalState,并同步修改两处对它的使用。

struct ReadXLSGlobalState {xlsWorkBook* workbook;xlsWorkSheet* worksheet;unsigned int current_row;bool finished;
};struct XLSFunctionGlobalState : public GlobalTableFunctionState {duckdb::unique_ptr<ReadXLSGlobalState> xls_state;
};unique_ptr<GlobalTableFunctionState> ReadXLSFunction::InitGlobal(ClientContext &context, TableFunctionInitInput &input) {auto result = make_uniq<XLSFunctionGlobalState>();auto &bind_data = (BindData &)*input.bind_data;result->xls_state = make_uniq<ReadXLSGlobalState>();

用如下命令行编译通过,注意xlslib是用的是修改后的支持中文的版本

export LIBRARY_PATH=/par:/usr/local/lib:/par/duck/build/src
export LD_LIBRARY_PATH=/par:/usr/local/lib:/par/duck/build/srcg++ csv_reader2.cpp minidocx-0.6.0/src/minidocx.cpp minidocx-0.6.0/3rdparty/pugixml-1.13/*.cpp minidocx-0.6.0/3rdparty/zip-0.2.1/*.c  ducksql2.cpp -o ducksql2  -lduckdb -lxls -I /par/duck/src/include -I /par/xlslib/xlslib/src -I minidocx-0.6.0/src -I minidocx-0.6.0/3rdparty/pugixml-1.13 -I minidocx-0.6.0/3rdparty/zip-0.2.1  -I xlslib/src -std=c++17 -lgmp -lpqxx -lpq -liconv -lxlsreader -O3

这里将minidocx-0.6.0的代码直接链接到二进制文件中,而没有使用动态链接库,如果使用后者,可以自行修改。

为了验证我们加入的自定义函数,可以采取以下步骤。
用官方duckdb CLI新建一个数据库,将系统函数列表存入一个表中

 ./duckdb130 duck130.db
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D create table tduckdb_functions as select * from duckdb_functions();
D select * from tduckdb_functions limit 1;
┌───────────────┬──────────────┬─────────────┬───────────────┬──────────┬───────────────┬─────────────┬───┬──────────────────┬──────────────────┬──────────┬──────────────┬───────────┬───────────┬────────────┐
│ database_name │ database_oid │ schema_name │ function_name │ alias_of │ function_type │ description │ … │ macro_definition │ has_side_effects │ internal │ function_oid │ examples  │ stability │ categories │
│    varcharvarcharvarcharvarcharvarcharvarcharvarchar   │   │     varcharbooleanboolean  │    int64     │ varchar[]varcharvarchar[]  │
├───────────────┼──────────────┼─────────────┼───────────────┼──────────┼───────────────┼─────────────┼───┼──────────────────┼──────────────────┼──────────┼──────────────┼───────────┼───────────┼────────────┤
│ system        │ 0            │ main        │ duckdb_views  │ NULLtableNULL        │ … │ NULLNULLtrue72[]NULL[]         │
├───────────────┴──────────────┴─────────────┴───────────────┴──────────┴───────────────┴─────────────┴───┴──────────────────┴──────────────────┴──────────┴──────────────┴───────────┴───────────┴────────────┤
│ 1 rows                                                                                                                                                                                 20 columns (14 shown) │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
D

然后用程序打开同一个数据库,将现在的函数列表与原有的备份比较,找出新增的

./ducksql2 duck130.db
DuckDB GMP Shell (enter 'exit;' to quit, 'read file.sql' to execute script)
Type 'timi on/off' to enable/disable timing
=============================================
duckdb> select function_name, function_type from duckdb_functions() where function_name not in(select function_name from tduckdb_functions);
┌───────────────┬───────────────┐
│ function_name │ function_type │
│    varcharvarchar    │
├───────────────┼───────────────┤
│ read_csv_e    │ table         │
│ read_xls      │ table         │
│ read_pg       │ table         │
│ mpz_add       │ scalar        │
│ mpz_div       │ scalar        │
│ mpz_mul       │ scalar        │
│ mpz_root      │ scalar        │
│ mpz_sub       │ scalar        │
│ mpz_sum       │ aggregate     │
└───────────────┴───────────────┘

可见,新增的copy to函数不在其中,但其实它们存在,当加载官方excel插件时,报了如下错误

duckdb> install excel;
duckdb> load excel;
Error: Invalid Input Error: Initialization function "excel_init" from file "/root/.duckdb/extensions/v1.3.0/linux_amd64/excel.duckdb_extension" threw an exception: "Catalog write-write conflict on create with "xlsx""

而把copy_files2.cpp中涉及xlsx格式的内容完全删除以后,重新编译执行,以上错误消失,证明我们原有的copy_files2.cpp确实处理了xlsx格式,虽然它实际上就是把xls文件改个后缀名,但duckdb还是不允许。
加载excel插件后的新增函数列表如下,现在我们的程序和它和平共处了。

duckdb> load excel;
duckdb> select function_name, function_type from duckdb_functions() where function_name not in(select function_name from tduckdb_functions);
┌───────────────┬───────────────┐
│ function_name │ function_type │
│    varcharvarchar    │
├───────────────┼───────────────┤
│ read_pg       │ table         │
│ read_xls      │ table         │
│ read_xlsx     │ table<--
│ read_csv_e    │ table         │
│ mpz_div       │ scalar        │
│ mpz_add       │ scalar        │
│ mpz_mul       │ scalar        │
│ mpz_root      │ scalar        │
│ mpz_sub       │ scalar        │
│ text          │ scalar        │<--
│ excel_text    │ scalar        │<--
│ mpz_sum       │ aggregate     │
├───────────────┴───────────────┤
│ 12 rows             2 columns │
└───────────────────────────────┘

各个函数的用法在引用的文章中都有,就不重复了。
另外,将程序输出结果的部分做了如下修改,使得explain语句能像官方CLI那样输出,而不是输出explain_value表的结果。

                std::string lower;lower.resize(query.size()); transform(query.begin(), query.end(), lower.begin(), ::tolower);if (lower.find("explain ") ==  std::string::npos)std::cout << result->ToBox(context, config) << std::endl; //正常语句输出else //explain语句输出std::cout <<result->GetValue(1,0)<< std::endl;

修改前

duckdb> explain select 1 a;
┌───────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│  explain_key  │                                                                                         explain_value                                                                                         │
│    varcharvarchar                                                                                            │
├───────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ physical_plan │ ┌───────────────────────────┐\n│         PROJECTION        │\n│    ────────────────────   │\n│             a             │\n│                           │\n│          ~1 Rows          │\n└…  │
└───────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

修改后

duckdb> explain select 1 a;
┌───────────────────────────┐
│         PROJECTION        │
│    ────────────────────   │
│             a             │
│                           │
│          ~1 Rows          │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│         DUMMY_SCAN        │
└───────────────────────────┘

其他语句,现在的输出看起来不错,比如copy to返回写入的行数,就没有修改,如有需要也可以自行修改。

duckdb> copy (select mpz_mul('111111111111111111111111','222222222222222222222222')) to 'mpz_mul.docx';
┌───────┐
│ Count │
│ int64 │
├───────┤
│     1 │
└───────┘
http://www.zhongyajixie.com/news/36941.html

相关文章:

  • 网站开发综合实训记录周记宿迁网站建设制作
  • 怎么免费创建一个网站今日头条荆州新闻
  • 武汉 网站制作案例盐酸达泊西汀片是治疗什么的药物
  • 网站怎么关键字优化教育培训机构前十名
  • 做标书的网站5月新冠病毒最新消息
  • 兰州做网站维护的公司建设营销网站
  • 网站推广塔山双喜网络营销与管理
  • 深圳电商网站设计百度推广和百度竞价有什么区别
  • 做时时的网站百度店铺怎么开通
  • 做网站运营经理的要求怎样在百度打广告
  • 湖南衡阳市建设工程造价网站谷歌网站
  • 做ui的图从哪个网站找今日热点新闻一览
  • 灵芝住房和城乡建设局局网站媒体:多地新增感染趋势回落
  • 网站开发模块就业前景百度推广运营公司
  • 做网站郑州官网优化 报价
  • 网站如何做seo优化谷歌浏览器入口
  • 企业网站建设itcask网站营销网
  • 如何开展网站推广青岛网
  • 移动互联网网站建设手机端网站排名
  • 个人单页网站建设百度搜索最多的关键词
  • 曲靖做网站优秀网站设计赏析
  • 广东省住房和城乡建设厅官网查证推广优化seo
  • 石岩附近网站建设公司活动推广方案策划
  • 海南省城乡和建设厅网站外贸推广引流
  • 全国的网站建设如何做网站 新手 个人 教程
  • 群晖WordPress绑定域名seo网站优化培训班
  • 专门做10s视频的网站百度精准营销获客平台
  • 免费网站提供目前网络推广平台
  • 小县城做网站最近一周新闻大事件
  • 在局域网服务器建设网站教程公司广告推广