CN112765209A - 一种数据库间的sql语句语法迁移方法及系统 - Google Patents

一种数据库间的sql语句语法迁移方法及系统 Download PDF

Info

Publication number
CN112765209A
CN112765209A CN202110174583.XA CN202110174583A CN112765209A CN 112765209 A CN112765209 A CN 112765209A CN 202110174583 A CN202110174583 A CN 202110174583A CN 112765209 A CN112765209 A CN 112765209A
Authority
CN
China
Prior art keywords
rule
syntax
tree
conversion
rules
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110174583.XA
Other languages
English (en)
Inventor
樊鑫源
蒋家超
颜亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Cloud Information Technology Co Ltd
Original Assignee
Inspur Cloud Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Cloud Information Technology Co Ltd filed Critical Inspur Cloud Information Technology Co Ltd
Priority to CN202110174583.XA priority Critical patent/CN112765209A/zh
Publication of CN112765209A publication Critical patent/CN112765209A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • G06F40/154Tree transformation for tree-structured or markup documents, e.g. XSLT, XSL-FO or stylesheets

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据库间的SQL语句语法迁移方法及系统,属于数据库处理领域;所述的方法具体步骤包括:S1对sql语句进行语法分析产生抽象语法树;S2对抽象语法树进行重构的规则进行提取;S3编写规则自动的生成树结构转换的代码;S4调用生成代码对不同数据库间的sql语句进行转换。传统方式往往需要对两种数据库语法不同部分进行单独的处理,人为进行代码开发,本发明使用的方法转化为对树结构转换规则的提取,自动地生成树结构转换代码,开发方式更加简便,能够降低生产成本。

Description

一种数据库间的SQL语句语法迁移方法及系统
技术领域
本发明公开一种数据库间的SQL语句语法迁移方法及系统,涉及数据库处理技术领域。
背景技术
Sql语言是进行数据库查询的语言,目前SQL语言已有国际标准,成为定义和操作关系数据库名义上和实际上的标准。但不同的数据库厂商对SQL标准有着不同的实现,同时,不同的厂商也会实现一些SQL标准不支持的便利以及复杂的功能。用户在更改数据库产品时,往往需要付出较大的学习成本,这促进了语法迁移工具的产生。
从本质上讲,所有Sql语句在经过语法分析后生成的抽象语法树应该是相似或者相近的。传统的迁移工具开发需要处理分析输入语句,将其一一分解,将分解得到的单元进行重组得到新的输出语句,或者直接在原语句经过语法分析得到的AST树进行结构改变,生成新的树结构再进行遍历,进而得到输出语句。这种方式需要对迁移语句单个进行处理。由于每个需要迁移的语句都需要单独的处理过程,开发该部分代码尤其是多种数据库之间的语法迁移时,成本过于昂贵,同时限制了可扩展性。当迁移的数据库语法发生变化时,语法迁移的代码就需要进行重构,大大降低了迁移工具的可维护性。另一方面,当需要进行新的数据库语法迁移时,需要重新进行上述工作,这限制了之后数据库的可扩展性。
故现发明一种数据库间的SQL语句语法迁移方法及系统,以解决上述问题。
发明内容
本发明针对现有技术的问题,提供一种数据库间的SQL语句语法迁移方法及系统,所采用的技术方案为:一种数据库间的SQL语句语法迁移方法,所述的方法具体步骤包括:
S1对sql语句进行语法分析产生抽象语法树;
S2对抽象语法树进行重构的规则进行提取;
S3编写规则自动的生成树结构转换的代码;
S4调用生成代码对不同数据库间的sql语句进行转换。
所述S2对抽象语法树进行重构的规则进行提取的具体步骤包括:
S201对抽象语法树的转换规则进行提取得到树结构变换的基本规则;
S202对树结构重构转换的规则进行编写。
所述S201中的基本规则定义为转化为抽象语法树并可以被antlr4识别的规则语法。
所述S4中的语句开发转换为规则的编写,所述规则与S2中的语法规则一致。
一种数据库间的SQL语句语法迁移系统,所述的系统具体包括语法分析模块、规则提取模块、代码编写模块和语句转换模块:
语法分析模块:对sql语句进行语法分析产生抽象语法树;
规则提取模块:对抽象语法树进行重构的规则进行提取;
代码编写模块:编写规则自动的生成树结构转换的代码;
语句转换模块:调用生成代码对不同数据库间的sql语句进行转换。
所述规则提取模块具体包括:
第一提取模块:对抽象语法树的转换规则进行提取得到树结构变换的基本规则;
第二提取模块:对树结构重构转换的规则进行编写。
所述第二提取模块中的基本规则定义为转化为抽象语法树并可以被antlr4识别的规则语法。
所述语句转换模块的语句开发转换为规则的编写,所述规则与规则提取模块中的语法规则一致。
本发明的有益效果为:传统方式往往需要对两种数据库语法不同部分进行单独的处理,人为进行代码开发,本发明使用的方法转化为对树结构转换规则的提取,自动地生成树结构转换代码,开发方式更加简便,能够降低生产成本;
将代码的开发设计转换为规则的提取设计,提高了项目面临多种数据库时开发迁移工具的可扩展性。当需要进行新的语法迁移工具开发时,只需要进行规则的提取,除此之外的规则语法,生成代码等部分均可以直接复用,大大提高了迁移工具的扩展性能;
当一些数据库的某些语句发生变化时,可以直接修改其对应的树结构的规则文件,更改规则文件并直接生成代码。这种方式比起传统方式更加简便直接,并且不用担心修改部分与其他的模块相耦合,便于维护扩充。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明方法的流程图;图2是本发明系统的结构示意图;图3是本发明实施例的语句转换流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
实施例一:
一种数据库间的SQL语句语法迁移方法,所述的方法具体步骤包括:
S1对sql语句进行语法分析产生抽象语法树;
S2对抽象语法树进行重构的规则进行提取;
S3编写规则自动的生成树结构转换的代码;
S4调用生成代码对不同数据库间的sql语句进行转换;
使用本发明方法时,抽象提取出对sql语句经过语法分析产生的抽象语法树进行重构的规则,编写规则自动的生成树结构转换的代码,调用生成代码可以直接完成不同数据库语句的语法转换工作;
进一步的,所述S2对抽象语法树进行重构的规则进行提取的具体步骤包括:
S201对抽象语法树的转换规则进行提取得到树结构变换的基本规则;
S202对树结构重构转换的规则进行编写;
通过对经过语法分析得到的抽象语法树的转换规则进行提取,得到一些树结构变换的基本规则,如增加树节点,删除树节点,节点属性变化等,后续的开发工作转换为树结构重构转换的规则编写;
进一步的,所述S201中的基本规则定义为转化为抽象语法树并可以被antlr4识别的规则语法;
自定义了一种能转换为抽象语法树并可以被antlr4识别的规则语法,该规则语法代表树结构变化的基本操作;
再进一步的,所述S4中的语句开发转换为规则的编写,所述规则与S2中的语法规则一致;
语法转换工具的开发转换为规则的编写,该规则是开发者在S2中定义的自定义规则,而非使用原本开发语言如java手动对树结构进行改变;
用户在编写规则后,可以根据编写的规则,来自动的生成出相应的树结构转换的程序代码。
实施例二:
一种数据库间的SQL语句语法迁移系统,所述的系统具体包括语法分析模块、规则提取模块、代码编写模块和语句转换模块:
语法分析模块:对sql语句进行语法分析产生抽象语法树;
规则提取模块:对抽象语法树进行重构的规则进行提取;
代码编写模块:编写规则自动的生成树结构转换的代码;
语句转换模块:调用生成代码对不同数据库间的sql语句进行转换。
进一步的,所述规则提取模块具体包括第一提取模块和第二提取模块:
第一提取模块:对抽象语法树的转换规则进行提取得到树结构变换的基本规则;
第二提取模块:对树结构重构转换的规则进行编写;
进一步的,所述第二提取模块中的基本规则定义为转化为抽象语法树并可以被antlr4识别的规则语法;
进一步的,所述语句转换模块的语句开发转换为规则的编写,所述规则与规则提取模块中的语法规则一致;
本发明提供一种数据库间的SQL语句语法迁移方法及系统,在不同数据库之间开发sql语法迁移转换工具的方法,以antlr4语法分析工具,构造出一种在多种sql语言之间的翻译器,抽象出简单的规则,用户只需编写规则便能够进行语法迁移工具的设计,自动生成语法迁移代码,而不需要对编译器,以及对数据库事务有详尽的了解,简化降低开发成本;
方案优选地,使用antlr4作为解析和处理sql语法的工具。Antlr4是一个强大的不同语言之间的语法解析器,可以用来读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用来构建语言,工具和框架,对于两种不同的数据库,根据不同的数据库的语法文件,便可以使用antlr4进行语法的检查与处理;
方案优选地,使用Listener遍历机制。Antlr4有两种树遍历机制Listener和Visitor,可以从语法上来生成一个可以构建和遍历解析树的解析器;Listener通过DFS算法遍历整个树,用户可以在任意节点自定义响应函数。
Antlr4可以根据语法以及输入的语句生成相应的抽象语法树(Abstract SyntaxTree,AST),并在遍历语法树时对树的节点进行转换,变更树的结构。一般翻译器直接进行树的节点转换,常使用在不同语言之间。但是sql语言则是由于sql标准被不同数据库厂商的实现方式不同,同时,不同的数据库厂商有些更方便用户使用的,不属于sql标准的语法。像传统方式进行实现过于冗余复杂,且缺乏可扩展性。迁移代码需要对不同的语法理解深刻。本方法将节点转换的操作规则抽象提取出来,在此基础上进行语法的转换,自动生成该部分语法迁移代码;
抽象提取的一些基础操作规则有
MOVE移动当前节点到某节点
UPDATE更新当前节点的相关属性
NEWT生成新的Terminal Node
FINDUP从当前节点的祖先节点查找相关节点
FINDDOWN从当前节点的子孙节点查找相关节点
DELETE删除节点
ADD增加节点
引入模块ruler,包含操作的基本语法以及实现步骤。规则的语法用户可以自定义地实现,只需提供能够识别给定规则的语法即可;
引入compile,用于生成迁移代码;
引入类migrator,负责进行语法的转换,继承了antlr4的listener部分,重写了其中需要进行语法迁移的部分,该部分由compile生成;
用户自定义语法转换规则,调用compile,生成migrator代码。
Ruler模块为抽象规则的语法设计。用户可以自定义的设计相关的规则语法,如以下规则
Figure BDA0002940230040000061
该语句表示对当遍历AST树时,对遇到的PLUS节点进行移除,并向上查找WHERE节点进行移除,并将FROMC节点移动到该节点;
Compile部分会根据语法转换文件,读取转换规则并进行解析和转换。Compile读取后会对每种给定的规则进行解析,包括需要对哪种转换规则进行处理,以及进行处理的动作和顺序。然后根据这些信息生成migrator。migrator是一个antlr4的的listener,用户调用migrator对输入的sql语句进行遍历时可以对AST树进行结构上的改变,输出的AST就是转换后的sql语句。
以Oracle的SQL语句为例,Oracle的OUTER JOIN提供了(+)语法,如
SELECT empno,ename,job,dname,loc FROM emp,dept
WHERE emp.deptno=dept.deptno(+)
AND salary>50000
在没有实现了(+)语法的数据库中,该语句与下述语句等价
SELECT empno,ename,job,dname,loc
FROM emp LEFT OUTER JOIN dept ON emp.detno=dept.deptno
WHERE salary>50000
那么转换规则需要在处理OUTER JOIN语法时,在此节点向上查找WHERE节点,然后对WHERE节点的内容进行更改;通过编写以下规则
Figure BDA0002940230040000071
Figure BDA0002940230040000081
调用compile,以go语言为例,便可生成重载antlr4 Listener的代码部分如下
Figure BDA0002940230040000082
使用生成的Listener代码当对输入的带(+)语句进行遍历,便可以得到输出
SELECT empno,ename,job,dname,loc
FROM emp LEFT OUTER JOIN dept ON emp.detno=dept.deptno
WHERE salary>50000
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (8)

1.一种数据库间的SQL语句语法迁移方法,其特征是所述的方法具体步骤包括:
S1对sql语句进行语法分析产生抽象语法树;
S2对抽象语法树进行重构的规则进行提取;
S3编写规则自动的生成树结构转换的代码;
S4调用生成代码对不同数据库间的sql语句进行转换。
2.根据权利要求1所述的方法,其特征是所述S2对抽象语法树进行重构的规则进行提取的具体步骤包括:
S201对抽象语法树的转换规则进行提取得到树结构变换的基本规则;
S202对树结构重构转换的规则进行编写。
3.根据权利要求2所述的方法,其特征是所述S201中的基本规则定义为转化为抽象语法树并可以被antlr4识别的规则语法。
4.根据权利要求3所述的方法,其特征是所述S4中的语句开发转换为规则的编写,所述规则与S2中的语法规则一致。
5.一种数据库间的SQL语句语法迁移系统,其特征是所述的系统具体包括语法分析模块、规则提取模块、代码编写模块和语句转换模块:
语法分析模块:对sql语句进行语法分析产生抽象语法树;
规则提取模块:对抽象语法树进行重构的规则进行提取;
代码编写模块:编写规则自动的生成树结构转换的代码;
语句转换模块:调用生成代码对不同数据库间的sql语句进行转换。
6.根据权利要求5所述的系统,其特征是所述规则提取模块具体包括:
第一提取模块:对抽象语法树的转换规则进行提取得到树结构变换的基本规则;
第二提取模块:对树结构重构转换的规则进行编写。
7.根据权利要求6所述的系统,其特征是所述第二提取模块中的基本规则定义为转化为抽象语法树并可以被antlr4识别的规则语法。
8.根据权利要求7所述的系统,其特征是所述语句转换模块的语句开发转换为规则的编写,所述规则与规则提取模块中的语法规则一致。
CN202110174583.XA 2021-02-07 2021-02-07 一种数据库间的sql语句语法迁移方法及系统 Pending CN112765209A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110174583.XA CN112765209A (zh) 2021-02-07 2021-02-07 一种数据库间的sql语句语法迁移方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110174583.XA CN112765209A (zh) 2021-02-07 2021-02-07 一种数据库间的sql语句语法迁移方法及系统

Publications (1)

Publication Number Publication Date
CN112765209A true CN112765209A (zh) 2021-05-07

Family

ID=75705347

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110174583.XA Pending CN112765209A (zh) 2021-02-07 2021-02-07 一种数据库间的sql语句语法迁移方法及系统

Country Status (1)

Country Link
CN (1) CN112765209A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113360482A (zh) * 2021-08-10 2021-09-07 深圳市中科鼎创科技股份有限公司 基于sql数据库的在线迁移方法
CN113467785A (zh) * 2021-07-19 2021-10-01 上海红阵信息科技有限公司 一种拟态数据库的sql转译方法和系统
CN113485182A (zh) * 2021-06-30 2021-10-08 中冶华天工程技术有限公司 自动生成料场皮带流程控制程序的方法
CN114047927A (zh) * 2022-01-11 2022-02-15 山东捷瑞数字科技股份有限公司 一种数据库代码转换方法及系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101770363A (zh) * 2005-06-27 2010-07-07 奎朴兹有限公司 代码转换
CN104408134A (zh) * 2013-11-28 2015-03-11 中国科学院计算技术研究所 一种sql到云环境的映射方法及系统
CN105335366A (zh) * 2014-05-30 2016-02-17 北大方正信息产业集团有限公司 一种sql语句处理方法、装置和服务器
CN105335412A (zh) * 2014-07-31 2016-02-17 阿里巴巴集团控股有限公司 用于数据转换、数据迁移的方法和装置
CN107861728A (zh) * 2017-10-25 2018-03-30 深圳四方精创资讯股份有限公司 用于传统程序语言向现代程序语言转换的方法及其系统
CN110851142A (zh) * 2019-10-18 2020-02-28 浙江大学 一种将Transact-SQL程序转换为Java程序的方法
CN111061757A (zh) * 2019-12-19 2020-04-24 用友网络科技股份有限公司 数据库的语言转换方法、装置、电子设备及存储介质
CN111538743A (zh) * 2020-04-22 2020-08-14 电子科技大学 基于sql的数据血缘关系分析方法以及系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101770363A (zh) * 2005-06-27 2010-07-07 奎朴兹有限公司 代码转换
CN104408134A (zh) * 2013-11-28 2015-03-11 中国科学院计算技术研究所 一种sql到云环境的映射方法及系统
CN105335366A (zh) * 2014-05-30 2016-02-17 北大方正信息产业集团有限公司 一种sql语句处理方法、装置和服务器
CN105335412A (zh) * 2014-07-31 2016-02-17 阿里巴巴集团控股有限公司 用于数据转换、数据迁移的方法和装置
CN107861728A (zh) * 2017-10-25 2018-03-30 深圳四方精创资讯股份有限公司 用于传统程序语言向现代程序语言转换的方法及其系统
CN110851142A (zh) * 2019-10-18 2020-02-28 浙江大学 一种将Transact-SQL程序转换为Java程序的方法
CN111061757A (zh) * 2019-12-19 2020-04-24 用友网络科技股份有限公司 数据库的语言转换方法、装置、电子设备及存储介质
CN111538743A (zh) * 2020-04-22 2020-08-14 电子科技大学 基于sql的数据血缘关系分析方法以及系统

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113485182A (zh) * 2021-06-30 2021-10-08 中冶华天工程技术有限公司 自动生成料场皮带流程控制程序的方法
CN113467785A (zh) * 2021-07-19 2021-10-01 上海红阵信息科技有限公司 一种拟态数据库的sql转译方法和系统
CN113467785B (zh) * 2021-07-19 2023-02-28 上海红阵信息科技有限公司 一种拟态数据库的sql转译方法和系统
CN113360482A (zh) * 2021-08-10 2021-09-07 深圳市中科鼎创科技股份有限公司 基于sql数据库的在线迁移方法
CN114047927A (zh) * 2022-01-11 2022-02-15 山东捷瑞数字科技股份有限公司 一种数据库代码转换方法及系统
CN114047927B (zh) * 2022-01-11 2022-04-29 山东捷瑞数字科技股份有限公司 一种数据库代码转换方法及系统

Similar Documents

Publication Publication Date Title
CN112765209A (zh) 一种数据库间的sql语句语法迁移方法及系统
CN111309757B (zh) 一种HBase的SQL解释器和优化方法
CN110018829B (zh) 提高pl/sql语言解释器执行效率的方法及装置
US7860823B2 (en) Generic interface for deep embedding of expression trees in programming languages
CN106933869B (zh) 一种操作数据库的方法和装置
CN113741869B (zh) 一种高性能的可变语法编程语言的构造方法
CN111639501A (zh) 基于amsl的电网业务微服务组合方法
CN117033418A (zh) 语句重写方法、系统及装置
CN108153522B (zh) 基于模型转换由midcore生成Spark和Hadoop程序代码的方法
CN111367893A (zh) 数据库版本迭代的方法及装置
CN113467785B (zh) 一种拟态数据库的sql转译方法和系统
CN117093487A (zh) 一种基于扩展正则表达式的通用sql测试用例集生成方法及生成系统
CN115757593A (zh) 一种数据处理方法、装置及存储介质
WO2021259290A1 (zh) 存储过程转换方法、装置、设备和存储介质
CN115344932A (zh) 一种模型数据的规则审查方法、装置及电子设备
CN113032366A (zh) 基于Flex和Bison的SQL语法树解析方法
CN113608748A (zh) C语言转换Java语言的数据处理方法、装置及设备
Murching et al. Incremental recursive descent parsing
CN112051991A (zh) 一种基于触发规则描述文件的数据通用触发方法
Xiao Transformation System of two Similar Syntax Programs Based on the Compiler Principle
CN117193781B (zh) 一种面向simscript语言的抽象语法树构建方法和装置
CN113641745B (zh) 跨语言平台操作数据库的方法
Jia-di et al. Modeling Language Design and Mapping Rules for REST Interface
CN110968634B (zh) 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法
CN115757339A (zh) Oracle脚本自动转Postgresql脚本方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20210507