用SQL实现对DuckDB rusty_sheet插件批量测试

发布于:2025-08-16 ⋅ 阅读:(11) ⋅ 点赞:(0)

张泽鹏先生写的插件,我来给他做测试,在网上找到一个https://github.com/jmcnamara/libxlsxwriter工具库自带好多例子xlsx文件,但是文件很多,测试很费事,能否批量测试?当然可以,依靠duckdb的glob函数我们很容易写出以下语句

select 'copy(from read_sheet('''||file||''')) to '''||replace(file,'.xlsx','.xls')||''';' from  glob('.\libxlsxwriter\test\functional\xlsx_files\*.xlsx') limit 2;

运行该查询,返回两行数据,每行都是一个查询read_sheet()的语句:

copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xlsx')) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xls';
copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xlsx')) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xls';

只要把该语句的输出写入一个脚本文件,用.read命令读入脚本就实现了全自动测试,为了防止存在相同的列标题报错,加入header=0参数。

完整语句如下:

.header off
.mode list
.output out.txt

select 'copy(from read_sheet('''||file||''',header=0)) to '''||replace(file,'.xlsx','.xls')||''';' from  glob('.\libxlsxwriter\test\functional\xlsx_files\*.xlsx');

.output

.read out.txt

还真被我测试出一些问题。
比如

Binder Error:
Read spreadsheet failed: Empty sheet or missing data
和
Invalid Input Error:
Read spreadsheet failed: Invalid cell value at 'A1': #VALUE!
以及
Invalid Input Error:
Read spreadsheet failed: Invalid cell value at 'A2': #DIV/0!

想要捕捉出错的文件,可以在每两个语句之间插入文件名标记,像这样, 只要用它替换上面完整语句中间那一句就行了。注意去掉limit 2。

select 'copy(from read_sheet('''||file||''',header=0)) to '''||replace(file,'.xlsx','.xls')||''';'||chr(10)||'select '''||file||''';' from  glob('.\libxlsxwriter\test\functional\xlsx_files\*.xlsx')limit 2;

输出

copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xlsx',header=0)) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xls';
select '.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xlsx';
copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xlsx',header=0)) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xls';
select '.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xlsx';

这样错在哪个文件就明确了。


网站公告

今日签到

点亮在社区的每一天
去签到