System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 携带注释的SQL语句的转译方法技术_技高网

携带注释的SQL语句的转译方法技术

技术编号:40704614 阅读:2 留言:0更新日期:2024-03-22 11:04
本公开提出一种携带注释的SQL语句的转译方法,方法包括:从源数据库中获取至少一个原始SQL语句,并获取任一原始SQL语句对应的至少一个注释;针对任一原始SQL语句,构建对应的抽象语法树;其中,抽象语法树包括至少一个SQL节点;针对原始SQL语句对应的任一注释,遍历抽象语法树,以从至少一个SQL节点中确定与注释匹配的目标SQL节点;将各注释添加至对应的目标SQL节点中,以得到目标抽象语法树;对目标抽象语法树进行语句转译,以得到目标数据库对应的目标SQL语句。将原始SQL语句中的注释添加至SQL语句对应的抽象语法树中,可实现原始SQL语句中注释的迁移,且无需进行大量修改,便可有效解决通过SQL编译的方式进行语法转换时丢失注释的问题,降低了技术难度。

【技术实现步骤摘要】

本公开涉及计算机,尤其涉及一种携带注释的sql语句的转译方法。


技术介绍

1、在一些数据迁移场景(比如,银行系统的客户信息的数据迁移、物流管理订单的配送信息的数据迁移)中,数据迁移服务平台需要对sql((structured query language,结构化查询语言)脚本文件进行语法转换,以得到目标数据库语法的sql语句,在这个过程中,需要确保注释不会丢失。

2、相关技术中,在将携带有注释的sql语句进行数据迁移的过程中,先基于calcite的语法解析模块,将sql语句转换为抽象语法树(abstract syntax tree,简称ast),并通过修改javacc的语法文件,将注释作为一个个字符单元token,由此,可以在数据迁移后,获得注释的token。然而,该方法存在的问题是:

3、1、所有会出现注释的地方均需要在语法文件中进行显式声明,对语法文件的改动量大,修改后的语法文件不利于阅读;

4、2、当sql语句中的注释太多时,要完全穷举难度较大;

5、3、若sql语句中存在未声明的注释,在将该sql语句编译成ast时可能会报错,从而降低了编译的成功率。


技术实现思路

1、本公开提供一种携带注释的sql语句的转译方法,以至少在一定程度上解决相关技术中的技术问题之一。本公开的技术方案如下:

2、根据本公开实施例的第一方面,提供一种携带注释的sql语句的转译方法,包括:从源数据库中获取至少一个原始sql语句,并获取任一所述原始sql语句对应的至少一个注释;其中,所述注释用于对所述原始sql语句进行解释说明;针对任一所述原始sql语句,构建对应的抽象语法树;其中,所述抽象语法树包括至少一个sql节点;针对所述原始sql语句对应的任一所述注释,遍历所述抽象语法树,以从所述至少一个sql节点中确定与所述注释匹配的目标sql节点;将各所述注释添加至对应的目标sql节点中,以得到目标抽象语法树;对所述目标抽象语法树进行语句转译,以得到目标数据库对应的目标sql语句。

3、根据本公开实施例的第二方面,提供了一种携带注释的sql语句的转译装置,包括:获取模块,用于从源数据库中获取至少一个原始sql语句,并获取任一所述原始sql语句对应的至少一个注释;其中,所述注释用于对所述原始sql语句进行解释说明;构建模块,用于针对任一所述原始sql语句,构建对应的抽象语法树;其中,所述抽象语法树包括至少一个sql节点;所述sql节点指示所述抽象语法树中对应的对象在所述原始sql语句中具有对应的位置信息的节点;遍历模块,用于针对所述原始sql语句对应的任一所述注释,遍历所述抽象语法树,以从所述至少一个sql节点中确定与所述注释匹配的目标sql节点;第一添加模块,用于将各所述注释添加至对应的目标sql节点中,以得到目标抽象语法树;转译模块,用于对所述目标抽象语法树进行语句转译,以得到目标数据库对应的目标sql语句。

4、根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如本公开第一方面实施例所述的携带注释的sql语句的转译方法。

5、根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如本公开第一方面实施例所述的携带注释的sql语句的转译方法。

6、根据本公开实施例的第五方面,提供一种计算机程序产品,包括:计算机程序,所述计算机程序被处理器执行时实现如本公开第一方面实施例所述的携带注释的sql语句的转译方法。

7、本公开的实施例提供的技术方案至少带来以下有益效果:

8、通过从源数据库中获取至少一个原始sql语句,并获取任一原始sql语句对应的至少一个注释;其中,注释用于对原始sql语句进行解释说明;针对任一原始sql语句,构建对应的抽象语法树;其中,抽象语法树包括至少一个sql节点;sql节点指示抽象语法树中对应的对象在原始sql语句中具有对应的位置信息的节点;针对原始sql语句对应的任一注释,遍历抽象语法树,以从至少一个sql节点中确定与注释匹配的目标sql节点;将各注释添加至对应的目标sql节点中,以得到目标抽象语法树;对目标抽象语法树进行语句转译,以得到目标数据库对应的目标sql语句。由此,将原始sql语句中的注释添加至sql语句对应的抽象语法树中,可实现原始sql语句中注释的迁移,且无需进行语法文件的大量修改,便可有效解决通过sql编译的方式进行语法转换时丢失注释的问题,降低了技术难度。

9、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

本文档来自技高网...

【技术保护点】

1.一种携带注释的SQL语句的转译方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述SQL节点对应的对象在所述原始SQL语句中对应的位置信息为第二位置信息;

3.根据权利要求2所述的方法,其特征在于,所述根据所述注释在所述原始SQL语句中的第一位置信息和各所述SQL节点在所述原始SQL语句中的第二位置信息,从所述至少一个SQL节点中确定与所述注释匹配的目标SQL节点,包括:

4.根据权利要求2所述的方法,其特征在于,所述第二位置信息包括所述SQL节点对应的对象在所述原始SQL语句中的起始行数、起始列数、结束行数和结束列数;

5.根据权利要求3所述的方法,其特征在于,所述第一位置信息包括所述注释在原始SQL语句中的起始行数、起始列数、结束行数和结束列数;

6.根据权利要求2所述的方法,其特征在于,所述根据所述注释在所述原始SQL语句中的第一位置信息和各所述SQL节点在所述原始SQL语句中的第二位置信息,从所述至少一个SQL节点中确定与所述注释匹配的目标SQL节点,包括:

7.根据权利要求6所述的方法,其特征在于,所述第二位置信息包括所述SQL节点对应的对象在所述原始SQL语句中的起始行数、起始列数、结束行数和结束列数;

8.根据权利要求6所述的方法,其特征在于,所述第一位置信息包括所述注释在原始SQL语句中的起始行数、起始列数、结束行数和结束列数;

9.根据权利要求1所述的方法,其特征在于,所述方法还包括:

10.根据权利要求1-9中任一所述的方法,其特征在于,所述将各所述注释添加至对应的目标SQL节点中,包括:

11.根据权利要求1-9中任一所述的方法,其特征在于,所述从源数据库中获取至少一个原始SQL语句,并提取任一所述原始SQL语句对应的注释,包括:

...

【技术特征摘要】

1.一种携带注释的sql语句的转译方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述sql节点对应的对象在所述原始sql语句中对应的位置信息为第二位置信息;

3.根据权利要求2所述的方法,其特征在于,所述根据所述注释在所述原始sql语句中的第一位置信息和各所述sql节点在所述原始sql语句中的第二位置信息,从所述至少一个sql节点中确定与所述注释匹配的目标sql节点,包括:

4.根据权利要求2所述的方法,其特征在于,所述第二位置信息包括所述sql节点对应的对象在所述原始sql语句中的起始行数、起始列数、结束行数和结束列数;

5.根据权利要求3所述的方法,其特征在于,所述第一位置信息包括所述注释在原始sql语句中的起始行数、起始列数、结束行数和结束列数;

6.根据权利要求2所述的方法,其特征在于,所述根据所述注释在所...

【专利技术属性】
技术研发人员:杜啸争汪正光
申请(专利权)人:中电金信软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1