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

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

修复开源VS Code 插件Trino Driver的三个小问题缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 前言
  2. 2. 问题
  3. 3. 组件关系梳理
  4. 4. debug,问题解决
  5. 5. 总结

前言

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

问题

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

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

组件关系梳理

在我View过SQLTools与Trino Driver的组件Document后,才发现后者依赖前者。
SQLTools充当一个平台,提供了UI和基础的对接Interface。而Trino Driver是一个专为
Trinodata source做的一个适配器。其他的data sourceType支持也是如此。
而Trino Driver 这种插件是基于trino-client该项目而开发的,trino-client基于trino的httpProtocol,
使用axios实现了trinodata source的connect,sql执行。

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

debug,问题解决

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

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

要实现真正的HTTPS方式connectdata source,还需要改造Trino Driver库,增加上传文件的表单项,并debug好axios使用证书的姿势。

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

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

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

一段疯狂全局Search,找到了有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 之前,并且去掉末尾的;分号。

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

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

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

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

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

这个问题直接说结论吧, Trino Driver插件在接受到SQLTools传过来的参数后,在查询sql中并没有使用schema参数。以下是Author写的二段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}

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

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

总结

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

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

来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbuscommunication protocol technical community Category Node-RED 字数 2243 字 · 阅读约 6 分钟 更新 2023-04-05 永久链接 https://www.modbus.cn/11905.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时Communicationdebug、register读写、线圈控制、data监控和message分析。 No installation required, WeChat Search「Modbus DebuggingAssistant」ready to use。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.