您想不时重复常规操作吗? 我来了 但是每次在SQL客户端中使用Rostelecom存储库时,我都必须注册表句柄之间的所有联接。 而且尽管事实是在90%的情况下,联接表的字段和条件在查询之间是一致的! 似乎任何SQL客户端都具有自动完成功能,但它并不总是适用于存储库:它们很少具有唯一的约束和外键来提高性能,而如果没有此功能,该程序将无法找出实体之间的关系以及它可以为您做什么建议。

在经历了否认,愤怒,讨价还价,沮丧和接近接受之后,我决定-为什么不尝试自己和二十一点来实现二十一点的自动完成? 我使用以Java编写的dbeaver客户端,它具有开源社区版本。 一个简单的计划已经成熟:
- 在源代码中查找自动完成类
- 重新定向它们以使用外部元数据,并从那里提取有关联接的信息
- ??????
- 获利
我很快想出了第一项-我在bugtracker中找到了一个调整自动填充的请求,并在相关的提交中找到了SQLCompletionAnalyzer类。 我看了一下代码-我需要什么。 仍然需要重写它,以便一切正常。 我等待一个免费的夜晚,然后开始考虑实施过程。 表链接规则(元数据)决定引入json。 我没有这种格式的实践经验,当前的任务被视为纠正此遗漏的机会。
为了使用json,我决定使用Google的
json-simple库。 从这里开始惊喜。 事实证明,作为tru应用程序的dbeaver是使用OSGi框架在Eclipse平台上编写的。 对于有经验的开发人员来说,这件事给依赖管理带来了便利,但对我来说,这更像是黑魔法,我显然还没有准备好:像往常一样,我将需要的类的导入从json-simple库注册到已编辑类的标题中,我在pom中指定了它。 xml,之后该项目会明确拒绝正确组装,并因错误而失败。
结果,有可能解决程序集错误:我将库指定为import-package时,未按OSGI的要求在pom.xml中,而是在manifest.mf清单中注册了库。 不是最漂亮的解决方案,但它可以工作。 然后下一个惊喜出现了。 如果您以intellij的想法进行开发,则不能仅基于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>
结果,我对SQLUtils和SQLCompletionAnalyzer类
进行了更改 。 想法是这样的:如果程序未能根据基本逻辑找到合适的自动完成语句,则它将使用外部xml文件检查可能的联接。 文件本身包含成对的表,这些表指示需要链接这些表的字段。 默认情况下,设置了eff_dttm和exp_dttm条目的技术有效日期限制以及Deleted_ind逻辑删除标志。
对代码进行更改后,出现了问题-谁来填充元数据文件? 存储库中有很多实体;您自己注册所有连接都是无利可图的。 最后,我决定将这项任务挂在我的其他分析师身上。 元数据文件已上传到svn,在该位置使用该程序在本地目录中进行检出。 原理是这样的:存储库中出现了新实体? 一位分析师可以加入文件,提交更改,其余的则对自己进行检查并享受自动完成的工作:社区,知识积累等等。 召开了一次有关该程序使用情况的研讨会,并合着写了一篇文章-现在该公司拥有多个便捷的工具。
从事此功能的工作使我了解到,不应该害怕选择开源项目-通常,它们具有清晰的体系结构,即使是该语言的基础知识也足以用于实验。 有了一定的毅力,您甚至可以摆脱讨厌的例行操作,从而节省了进行新实验的时间。