修复开源VS Code 插件Trino Driver的三个小问题

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和搜索引流。

修复开源VS Code 插件Trino Driver的三个小问题缩略图
本文目录
  1. 1. 前言
  2. 2. 问题
  3. 3. 组件关系梳理
  4. 4. 调试,问题解决
  5. 5. 总结

前言

最近产品中使用到一款SQLTools的VS Code插件。该插件可以在VS Code中实现数据库管理,而且支持非常多的数据源类型,
官方的数据源类型有CockroachDB,MariaDB,MySQL,PostgreSQL,SQLite,Microsoft SQL Server/Azure ,
另外还有很多社区的数据源驱动。而我们使用管理的数据源类型是Trino,图标是一个小兔子。使用到的组件是
Trino Driver
但在使用这个插件时,存在两个问题。

问题

问题1是,Trino Driver不支持Https的链接,来链接Trino数据源 (一开始只有这一个问题,解决后,又发现二个。?)
问题2是,不支持表记录的预览
问题3是,切换schema时,无法预览表记录

而我的任务就是解决这两个问题。

组件关系梳理

在我查看过SQLTools与Trino Driver的组件文档后,才发现后者依赖前者。
SQLTools充当一个平台,提供了UI和基础的对接接口。而Trino Driver是一个专为
Trino数据源做的一个适配器。其他的数据源类型支持也是如此。
而Trino Driver 这种插件是基于trino-client该项目而开发的,trino-client基于trino的http协议,
使用axios实现了trino数据源的连接,sql执行。

所以这就是他们的关系,
SQLTools 包含 Trino Driver
Trino Driver 包含 trino-client
trino-client 包含 axios,和trino HTTP API

调试,问题解决

要实现https连接数据源,还要看trino-client这个库支不支持。
在我调试时,最新正式版的trino-client(v0.2.0)是不支持的,但最新分支main是支持的。(目前作者已发布v0.2.1。支持HTTPS的方式)
于是我基于main分支,构建出一个库,替换Trino Driver中的。这样就支持的HTTPS。
但Trino Driver连接数据源时也需要多一个参数。
verifySSLCert: false

这样第一个问题就解决啦。这种问题解决方式,本质是不校验证书,而不是真正意义上的支持HTTPS

要实现真正的HTTPS方式连接数据源,还需要改造Trino Driver库,增加上传文件的表单项,并调试好axios使用证书的姿势。

第二个问题,是在连接了Trino数据源后出现的,(使用量少的插件问题都被我遇到了,不活跃的社区维护并不可靠啊。)

第二个问题就是在预览表记录数时,报了一个 OFFSET的问题。这个问题很像是SQL写的有问题。
修复开源VS Code 插件Trino Driver的三个小问题插图

遇到复杂组件,嵌套插件的问题,首先要找到是那个插件的问题,通过对比发现其他数据源插件没有这个问题,只在Trino数据源出现,于是 问题就出现在Trino Driver插件上。
没办法该呗。

一段疯狂全局搜索,找到了有OFFSET的SQL代码。凭借着自己井底之蛙的SQL知识,发现了问题所在。
该库中写的分页查询sql是这样的。

SELECT *
FROM ${(p) => p.table.label || p.table}
LIMIT ${(p) => p.limit || 50}
OFFSET ${(p) => p.offset || 0};

而在百度查询后得到的结果是,Trino的查询SQL,OFFSET一般放在LIMIT 之前,并且去掉末尾的;分号。

修改后,再调试一下。哈哈哈。。。竟然可以了。

正当我洋洋得意把插件构建出来发给测试后,过了二个小时,测试反馈说有发现了一个新的bug。
我的第一反应是,不管这个问题是什么,都绝壁是原作者写的,不可能我的。

最后的一个问题是
由于链接数据源后,会有很多schema,表是存放在schema下的,当切换schema,查看表记录时会报错。
修复开源VS Code 插件Trino Driver的三个小问题插图1

出现这样的问题,发布插件时真的有人测试吗?还是说,你们只有一个schema?

没办法,这种小众的数据源和插件 很少有人去关注,你如果非要用,那你只能去尝试改改,改不了,就去和作者直接对线吧。

这个问题直接说结论吧, Trino Driver插件在接受到SQLTools传过来的参数后,在查询sql中并没有使用schema参数。以下是作者写的二段sql

SELECT *
FROM ${(p) => p.table.label || p.table}
OFFSET ${(p) => p.offset || 0}
LIMIT ${(p) => p.limit || 50}

SELECT count(1) AS total
FROM ${(p) => p.table.label || p.table};

我改后

SELECT *
FROM ${(p) => p.table.schema+'.'+p.table.label}
OFFSET ${(p) => p.offset || 0}
LIMIT ${(p) => p.limit || 50}

SELECT count(1) AS total
FROM ${(p) => p.table.schema+'.'+p.table.label}

修改后,重新构建新插件,使用新插件就可以啦。要想用正式版,还需要去催催作者,赶快review我的PR。

相关代码的PR:
https://github.com/regadas/sqltools-trino-driver/pulls?q=+author%3APmcFizz+

总结

重要的不是写了多少行代码,而是这些代码带来的价值,时刻思考着自己的价值。

成长是遇河搭桥,逢山开路。

来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 Node-RED 字数 2243 字 · 阅读约 6 分钟 更新 2023-04-05 永久链接 https://www.modbus.cn/11905.html
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注