- 1. 前言
- 2. 问题
- 3. 组件关系梳理
- 4. Tests,问题解决
- 5. 总结
前言
最近产品中使用zu一款SQLTools的VS Code插件。该插件可以在VS Code中实现Daten库管理,而且支持非常多的DatenquelleTypus,
官方的DatenquelleTypus有CockroachDB,MariaDB,MySQL,PostgreSQL,SQLite,Microsoft SQL Server/Azure ,
另外还有很多社区的Datenquelle驱动。而我们使用管理的DatenquelleTypus是Trino,图标是一个小兔子。使用zu的组件是
Trino Driver
但在使用这个插件时,Existenz两个问题。
问题
问题1是,Trino Driver不支持Https的链接,来链接TrinoDatenquelle (一开始只有这一个问题,解决后,又发现二个。?)
问题2是,不支持表记录的预览
问题3是,Wechselnschema时,无法预览表记录
而我的任务就是解决这两个问题。
组件关系梳理
在我Überprüfen过SQLTools与Trino Driver的组件Dokumentation后,才发现后者依赖前者。
SQLTools充当一个平台,提供了UI和基础的对接Schnittstelle。而Trino Driver是一个专为
TrinoDatenquelle做的一个适配器。其他的DatenquelleTypus支持也是如此。
而Trino Driver 这种插件是基于trino-client该项目而开发的,trino-client基于trino的httpVereinbarung,
使用axios实现了trinoDatenquelle的Verbindung,sql执行。
所以这就是他们的关系,
SQLTools 包含 Trino Driver
Trino Driver 包含 trino-client
trino-client 包含 axios,和trino HTTP API
Tests,问题解决
要实现httpsVerbindungDatenquelle,还要看trino-client这个库支不支持。
在我Tests时,最新正式版的trino-client(v0.2.0)是不支持的,但最新Unterteilung支main是支持的。(目前Der Autor已发布v0.2.1。支持HTTPS的方式)
于是我基于mainUnterteilung支,构建出一个库,替换Trino Driver中的。这样就支持的HTTPS。
但Trino DriverVerbindungDatenquelle时也需要多一个Parameter。verifySSLCert: false
这样Die一个问题就解决啦。这种问题解决方式,本质是不Prüfungen证书,而不是真正意义上的支持HTTPS
要实现真正的HTTPS方式VerbindungDatenquelle,还需要改造Trino Driver库,增加上传文件的表单项,并Tests好axios使用证书的姿势。
Die二个问题,是在Verbindung了TrinoDatenquelle后出现的,(使用Quantität少的插件问题都被我遇zu了,不活跃的社区维护并不可靠啊。)
Die二个问题就是在预览表记录数时,报了一个 OFFSET的问题。这个问题很像是SQL写的有问题。
遇zu复杂组件,嵌套插件的问题,首先要找zu是那个插件的问题,通过对比发现其他Datenquelle插件没有这个问题,只在TrinoDatenquelle出现,于是 问题就出现在Trino Driver插件上。
没办法该呗。
一段疯狂全局Suche nach,找zu了有OFFSET的SQL代码。凭借着自己井底之蛙的SQL知识,发现了问题所在。
该库中写的Unterteilung页查询sql是这样的。
SELECT *
FROM ${(p) => p.table.label || p.table}
LIMIT ${(p) => p.limit || 50}
OFFSET ${(p) => p.offset || 0};
而在百度查询后得zu的Ergebnis是,Trino的查询SQL,OFFSET一般放在LIMIT 之前,并且去掉末尾的;UnterteilungNr.。
修改后,再Tests一下。哈哈哈。。。竟然可以了。
正当我洋洋得意把插件构建出来发给测试后,过了二个小时,测试反馈说有发现了一个新的bug。
我的Die一反应是,不管这个问题Was ist das?,都绝壁是原Der Autor写的,不可能我的。
最后的一个问题是
由于链接Datenquelle后,会有很多schema,表是存放在schema下的,当Wechselnschema,Überprüfen表记录时会报错。
出现这样的问题,发布插件时真的有人测试吗?还是说,你们只有一个schema?
没办法,这种小众的Datenquelle和插件 很少有人去关注,你如果非要用,那你只能去尝试改改,改不了,就去和Der Autor直接对线吧。
这个问题直接说结论吧, Trino Driver插件在接受zuSQLTools传过来的Parameter后,在查询sql中并没有使用schemaParameter。以下是Der Autor写的二段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}
修改后,重新构建新插件,使用新插件就可以啦。要想用正式版,还需要去催催Der Autor,赶快review我的PR。
Related代码的PR:
https://github.com/regadas/sqltools-trino-driver/pulls?q=+author%3APmcFizz+
总结
重要的不是写了多少行代码,而是这些代码带来的价值,时刻思考着自己的价值。
成长是遇河搭桥,逢山开路。
Antwort veröffentlichen