让 TDengine 在 JetBrains IDEs 里更像“原生数据库”一点

news2026/3/31 14:55:26
让 TDengine 在 JetBrains IDEs 里更像“原生数据库”一点Author: ChangJin Wei (魏昌进)最近我做了一个小插件把 TDengine 接入到了 JetBrains IDEs 的数据库工具链里。先埋个小提示文末有彩蛋。项目地址GitHub: https://github.com/galaxy-sea/TDengine-Driver-IntegrationJetBrains Plugin Marketplace: https://plugins.jetbrains.com/plugin/30538-tdengine-driver-integration写这个插件的起因其实很直接。我平时更习惯在 JetBrains IDEs 里处理数据库相关工作尤其是 DataGrip 这一套交互逻辑已经用顺手了。对于 MySQL、PostgreSQL、ClickHouse 这类 JetBrains 已经支持得比较完整的数据库连库、写 SQL、看对象定义、做补全整个过程都比较流畅。但一旦切到 TDengine体验就会突然断层。不是说不能用而是“不顺”。要么是驱动和连接参数要自己折腾要么是 SQL 编辑体验不完整再加上其他数据库管理工具的交互逻辑和 JetBrains IDEs 并不完全一样来回切换时总会有一种“工具在迁就数据库而不是数据库融入工具”的感觉。所以我当时的想法很简单能不能让 TDengine 在 JetBrains IDEs 里至少先拥有接近原生数据库的基础体验一开始真正难的不是写代码真正开始动手以后我很快发现最难的部分并不是“把功能写出来”而是“搞清楚应该怎么写”。原因主要有两个。第一JetBrains Database 插件开发资料很少。常规 IntelliJ Platform 插件还能找到不少示例和文章但一旦具体到 database 模块、数据源注册、元数据包装、方言挂载这些问题能参考的内容就明显少很多。很多时候只能对着现象试、对着 API 猜或者直接进源码里一点点摸。第二关于 PSI 方言设计的资料也不多。尤其是 TDengine 这种并不是完全照搬某个主流数据库方言的场景语法该怎么拆、哪些 token 应该视为关键字、哪些应该进入函数调用链路这些都需要自己整理。换句话说真正的门槛不是“插件开发”而是“在缺少现成路径的情况下把这套东西自己走通”。中间最卡的三个问题如果要总结这次开发过程中最卡的三个问题我会归纳成下面这三个。1. TDengine 方言的 PSI 设计这是最核心、也最容易反复返工的一块。JetBrains 的 SQL 能力很多都建立在 PSI 结构之上。语法树设计得不稳后面的补全、高亮、参数提示、文档提示基本都会跟着变形。看起来像是“只是一个函数没高亮”本质上往往是语法分类错了。比如 TDengine 里有些内容既像关键字又像函数有些写法既支持裸写也支持带括号调用。如果一开始 PSI 设计没把这类情况理顺后续处理会非常痛苦。这部分我花了不少时间反复调整因为它不是单点功能而是整条链路的地基。2. TDengine 方言的整理和归纳写方言不是简单把关键字表贴进去就结束了。真正麻烦的是整理规则哪些属于关键字哪些属于内建函数哪些是特殊语法哪些虽然看起来像函数但又不完全适合按普通函数处理。只要归类模糊最后表现出来就会是补全不一致、高亮不一致、某些语句能过某些语句不能过。这个过程更像是在做“方言工程化整理”而不是单纯写解析器。尤其当你想把体验做成“像 JetBrains 原生支持的数据库一样”时对一致性的要求会更高。3. TDengine 方言的回归测试这个问题一开始其实容易被低估。方言适配最怕的不是“有 bug”而是“你修了一个点又把另一个点带坏了”。今天修了函数高亮明天可能影响补全今天让一种写法能过解析明天可能把另一种写法冲掉。而 TDengine 的语法适配又涉及 lexer、parser、PSI、completion、documentation、live templates 这些不同层次回归验证的成本不低。很多时候不是写完就行而是你得想清楚这次改动到底影响了哪一层。这也让我更明确了一件事方言适配不能只追求“先能用”还得尽量控制后续回退成本。最后做成了什么到目前为止这个插件优先完成的是两件事连接体验和 SQL 开发体验。在连接层面插件提供了 TDengine 数据源入口、内置 JDBC 版本列表、连接参数模板和配置校验。也就是说用户在 JetBrains IDEs 里添加 TDengine 数据源时不需要再从零开始拼接配置整体路径会更接近 JetBrains 已支持数据库的使用方式。在 SQL 开发层面目前已经完成了 TDengine 方言的基础适配包括TDengine 数据源接入JDBC 驱动版本选择与下载连接配置校验SQL 方言支持关键字补全函数补全函数高亮函数参数提示函数悬停文档Live Templates对我来说这里面最重要的不是某一个单独功能而是整体交互逻辑终于开始“像一门被 JetBrains IDEs 认真支持的数据库”了。这也是我最想做成的效果当你在 JetBrains IDEs 里操作 TDengine 时不再明显感觉自己在使用一套“勉强接上去”的能力而是尽量贴近已经熟悉的数据库工作流。还有哪些没做完目前优先完成的是连接与 SQL 开发体验GUI DDL 适配仍在推进中。更直接一点说现在主要还是把“写 SQL、连库、看提示”这条主链路先打通了至于 GUI 侧的表创建、字段修改这类能力还没有完全做完。这部分之所以还在推进中不是因为价值低而是因为它和数据库工具内部的数据模型、元数据行为绑定得更深处理起来比表面看上去复杂得多。后续如果继续迭代我也会优先把这些 GUI 操作补齐。为什么我觉得这件事值得做我一直觉得一个数据库生态是否成熟不只取决于服务端和驱动本身也取决于它能不能自然地进入开发者已经习惯的工作环境。很多时候开发者并不是缺一个“能连接 TDengine 的工具”而是缺一个“能让 TDengine 融入现有工作流的工具”。如果一门数据库在常见 IDE 里始终缺少顺手的支持那它在很多场景里就会天然增加使用门槛。这个插件现在当然还谈不上完美但至少它在一个很具体的问题上往前走了一步让 TDengine 在 JetBrains IDEs 里开始变得更自然一些。如果这篇文章能让更多 TDengine 用户少走一点弯路或者让更多开发者愿意一起补齐 JetBrains 生态里的 TDengine 支持我觉得这件事就已经很值得了。看到最后的彩蛋让我们来个骚操作吧对多语言开发场景来说这次还有一个额外收益。如果你的项目本身就在 JetBrains IDEs 里使用 MyBatis 相关插件那么在 XML 中编写 TDengine SQL 时也可以联动获得语法提示体验。换句话说Java MyBatis 生态的兄弟们也有福了XML 里的 TDengine SQL 不再只能“盲写”。更进一步说这个收益也不局限于 MyBatis、Java甚至不局限于某一个固定框架。只要所在语言或框架支持 JetBrains IDEs 的语言注入能力例如Language(SQL)、//languageSQL或类似机制就可以把字符串里的 TDengine SQL 交给 IDE 识别从而获得接近的补全和提示体验。这不是一个单独做出来的“宣传点”而是 TDengine 方言能力接入 JetBrains IDEs 之后自然带出来的一个实用效果。对日常维护 XML SQL 或嵌入式 SQL 的项目来说这一点会非常省心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2465009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…