您喜欢一遍又一遍地重复日常操作吗? 所以我不。 但每次在 SQL 客户端中使用 Rostelecom 存储时,我都必须手动注册表之间的所有连接。 尽管事实上在 90% 的情况下,连接表的字段和条件在查询之间是一致的! 似乎任何 SQL 客户端都有自动完成功能,但对于存储来说,它并不总是有效:它们很少包含唯一约束和外键以提高性能,如果没有这个,程序将不知道实体如何与每个实体相关。其他以及它能为您提供什么。
在经历了否认、愤怒、讨价还价、沮丧和接近接受之后,我决定 - 为什么不尝试自己实现二十一点自动填充并以正确的方式进行呢? 我使用dbeaver客户端,用java编写,它有一个开源社区版本。 一个简单的计划已经成熟:
- 在源代码中查找负责自动完成的类
- 重定向它们以使用外部元数据并从那里提取有关连接的信息
- ?
- 除
我很快就弄清楚了第一点 - 我在错误跟踪器中找到了调整自动填充的请求以及相关的请求
为了使用 json,我决定使用该库
最后,我设法修复了构建错误:我按照 OSGI 的要求,不在 pom.xml 中注册库,而是在 manifest.mf 清单中注册库,同时将其指定为 import-package。 这不是最漂亮的解决方案,但它确实有效。 然后下一个惊喜出现了。 如果你在 Intellij Idea 中进行开发,你不能直接基于 eclipse 平台开始调试你的项目:一个没有经验的开发人员在没有查询完成的情况下所遭受的痛苦应该不亚于分析师。 海狸开发者自己前来救援,在 wiki 中指出了所有需要完成的手鼓舞蹈。 最烦人的是,即使在所有这些蹲下之后,该项目也不想在调试中启动,并通过 import-package 连接 json 库(尽管它仍然成功组装成成品)。
到那时,我已经意识到使用 json 来完成任务的不便 - 毕竟元数据应该手动编辑,而 xml 格式更适合于此。 支持 xml 的第二个论点是 JDK 中存在所有必要的类,这使得停止与外部库的冲突成为可能。 我非常高兴地将所有元数据从 json 转移到 xml 并开始编辑自动完成逻辑。
元数据示例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tableRelations>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_partner</rightTable>
<joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
</tableRelation>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_branch</rightTable>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
<joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/>
</tableRelation>
</tableRelations>
结果我
当对代码进行更改时,出现了问题 - 谁将用元数据填充文件? 存储库中有很多实体,自己注册所有连接的成本很高。 因此,我决定将这项任务分配给我的分析师同事。 我在 svn 中发布了元数据文件,从那里用程序签出到本地目录。 原理是这样的:存储库中是否出现了新的实体? 一名分析师将可能的连接输入到文件中,提交更改,其余的分析师自行检查并享受工作自动完成:社区、知识积累等等。 为同事举办了一个关于使用该程序的研讨会,在 Confluence 上写了一篇文章 - 现在公司有了一个更方便的工具。
开发此功能让我认识到无需害怕修改开源项目 - 一般来说,它们具有清晰的架构,甚至语言的基本知识也足以进行实验。 只要有一定的毅力,您甚至可以摆脱讨厌的常规操作,从而节省时间进行新的实验。
来源: habr.com