CN111221846B - 一种sql语句的自动翻译方法及装置 - Google Patents

一种sql语句的自动翻译方法及装置 Download PDF

Info

Publication number
CN111221846B
CN111221846B CN202010010999.3A CN202010010999A CN111221846B CN 111221846 B CN111221846 B CN 111221846B CN 202010010999 A CN202010010999 A CN 202010010999A CN 111221846 B CN111221846 B CN 111221846B
Authority
CN
China
Prior art keywords
statement
index
saas
sql
fields
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.)
Active
Application number
CN202010010999.3A
Other languages
English (en)
Other versions
CN111221846A (zh
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.)
Guangzhou Lakala Information Technology Co ltd
Original Assignee
Guangzhou Lakala 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 Guangzhou Lakala Information Technology Co ltd filed Critical Guangzhou Lakala Information Technology Co ltd
Priority to CN202010010999.3A priority Critical patent/CN111221846B/zh
Publication of CN111221846A publication Critical patent/CN111221846A/zh
Application granted granted Critical
Publication of CN111221846B publication Critical patent/CN111221846B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开实施例公开了一种SQL语句的自动翻译方法及装置,涉及数据库领域。其中,该方法包括:从接收到的输入信息中识别提取出SQL语句;对输出的SQL语句进行语句分析,生成SQL语句的语法分析树;根据语法分析树对SQL语句进行自动翻译,生成翻译后的SQL语句;执行翻译后的SQL语句,返回执行状态。

Description

一种SQL语句的自动翻译方法及装置
技术领域
本公开涉及数据库领域,具体涉及一种SQL语句的自动翻译方法及装置。
背景技术
现代网络技术的迅速发展,早已进入了云计算的时代,越来越多的软件供应商把自己的工作流从本地设备转移到了云端平台。SaaS(Software as a Service,软件即服务)是云计算的服务模型之一,其主要特点是通过网络提供软件服务,从而为使用软件应用的客户们提供了一种按需订阅的能力。用户可通过远程网络使用软件供应商提供的服务,且为不同类型的用户提供的服务可以自由配置,从用户角度看来看起来他们完全拥有这个应用。通过这种方法可以利用资源共享方式来减少软件应用整体的拥有成本,因此,SaaS使得那些中小型企业可以负担得起以往费用高昂的专业软件服务,从而有机会获得长尾效应以进一步开发相关市场。
在传统软件应用到SaaS服务模型的转移中,由于SaaS应用独特的数据设计方法,传统数据库的SQL(Structured Query Language,结构化查询语言)语句不能在SaaS应用中直接使用,需要根据SaaS应用的数据库设计重新改写SQL语句。但当前这种改写工作主要依赖人工完成,不但容易出错,还会耗费大量的人力物力;而且对于常见的DDL(DataDefinition Language,数据库模式定义语言)语句和DML(Data Manipulation Language,数据操纵语言)语句中insert,update,delete等语句都没有办法直接进行翻译改写,无法做到从传统应用到SaaS应用SQL语句翻译的自动化。因此,亟需一种SQL语句的自动翻译方案来解决此问题。
发明内容
针对现有技术中的上述技术问题,本公开实施例提出了一种SQL语句的自动翻译方法及装置,以解决现有技术中翻译SQL语句容易出错,耗费大量人力物力的问题,同时还解决了对常见的DDL语句和DML语句没有办法进行翻译的问题。
本公开实施例的第一方面提供了一种SQL语句的自动翻译方法,包括:
接收输入并输出SQL语句;
对输出的SQL语句进行语句分析,生成所述SQL语句的语法分析树;
根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句;
执行所述翻译后的SQL语句,返回执行状态。
在一些实施例中,所述接收并输出SQL语句,具体包括:接收输入,并对所述输入进行预处理,输出经预处理后的SQL语句。
在一些实施例中,所述预处理,具体包括:
判断所述输入中的SQL语句是否符合预定义的语法规则;
若符合所述语法规则,判断所述输入中的SQL语句所属类型,并调用相应的翻译类型。
在一些实施例中,对所述SQL语句进行语句分析,具体包括:对所述SQL语句进行词法分析和语法分析。
在一些实施例中,对所述SQL语句进行词法分析和语法分析,具体包括:根据所述SQL语句,使用分析工具自定义词法,进行词法分析,获得多个词法单元;根据预定义的语法规则对所述SQL语句进行语法分析;
所述生成所述SQL语句的语法分析树,具体包括:根据所述词法单元和所述预定义的语法生成所述SQL语句的语法分析树。
在一些实施例中,所述SQL语句包括DDL语句和DML语句;
所述根据所述语法分析树对所述SQL语句进行自动翻译,具体包括:根据所述语法分析树对所述DDL语句和所述DML语句进行自动翻译。
在一些实施例中,所述DDL语句包括:CREATE TABLE语句、CREATE INDEX语句、DROPTABLE语句和DROP INDEX语句;所述DML语句包括:SELECT语句、INSERT语句、UPDATE语句、DELETE语句。
在一些实施例中,所述方法还包括:若所述执行状态为失败,则报错,执行回滚操作。
本公开实施例的第二方面提供了一种SQL语句的自动翻译装置,包括:
接收输出模块,用于接收输入并输出SQL语句;
语法分析树生成模块,用于对所述SQL语句进行语句分析,生成所述SQL语句的语法分析树;
翻译模块,用于根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句;
执行模块,用于执行所述翻译后的SQL语句,返回执行状态。
在一些实施例中,所述语法分析树生成模块具体用于对所述SQL语句进行词法分析和语法分析。
本公开实施例的第三方面提供了一种电子设备,包括:
存储器以及一个或多个处理器;
其中,所述存储器与所述一个或多个处理器通信连接,所述存储器中存储有可被所述一个或多个处理器执行的指令,所述指令被所述一个或多个处理器执行时,所述电子设备用于实现如前述各实施例所述的方法。
本公开实施例的第四方面提供了一种计算机可读存储介质,其上存储有计算机可执行指令,当所述计算机可执行指令被计算装置执行时,可用来实现如前述各实施例所述的方法。
本公开实施例的第五方面提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,可用来实现如前述各实施例所述的方法。
本公开实施例中,通过对输出的SQL语句进行语句分析生成语法分析树,并根据所述语法分析树对所述SQL语句进行自动翻译,不仅可以实现查询语句的自动翻译,还可以实现DDL语句与DML语句的翻译,真正的做到了从传统应用到SaaS应用SQL语句翻译的自动化,在极大地提高了翻译效率的同时提升了翻译的正确率,节约了大量的人力物力,降低了成本。
附图说明
通过参考附图会更加清楚的理解本公开的特征和优点,附图是示意性的而不应理解为对本公开进行任何限制,在附图中:
图1是根据本公开的一些实施例所示的一种SQL语句的自动翻译方法的流程图;
图2是根据本公开的一些实施例所示的一种数据定义与存储模型的示意图;
图3是根据本公开的一些实施例所示的一种SQL语句的自动翻译装置的结构框图;
图4是根据本公开的一些实施例所示的一种电子设备的结构示意图。
具体实施方式
在下面的详细描述中,通过示例阐述了本公开的许多具体细节,以便提供对相关披露的透彻理解。然而,对于本领域的普通技术人员来讲,本公开显而易见的可以在没有这些细节的情况下实施。应当理解的是,本公开中使用“系统”、“装置”、“单元”和/或“模块”术语,是用于区分在顺序排列中不同级别的不同部件、元件、部分或组件的一种方法。然而,如果其他表达式可以实现相同的目的,这些术语可以被其他表达式替换。
应当理解的是,当设备、单元或模块被称为“在……上”、“连接到”或“耦合到”另一设备、单元或模块时,其可以直接在另一设备、单元或模块上,连接或耦合到或与其他设备、单元或模块通信,或者可以存在中间设备、单元或模块,除非上下文明确提示例外情形。例如,本公开所使用的术语“和/或”包括一个或多个相关所列条目的任何一个和所有组合。
本公开所用术语仅为了描述特定实施例,而非限制本公开范围。如本公开说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的特征、整体、步骤、操作、元素和/或组件,而该类表述并不构成一个排它性的罗列,其他特征、整体、步骤、操作、元素和/或组件也可以包含在内。
参看下面的说明以及附图,本公开的这些或其他特征和特点、操作方法、结构的相关元素的功能、部分的结合以及制造的经济性可以被更好地理解,其中说明和附图形成了说明书的一部分。然而,可以清楚地理解,附图仅用作说明和描述的目的,并不意在限定本公开的保护范围。可以理解的是,附图并非按比例绘制。
本公开中使用了多种结构图用来说明根据本公开的实施例的各种变形。应当理解的是,前面或下面的结构并不是用来限定本公开。本公开的保护范围以权利要求为准。
现有技术中由于SaaS应用独特的数据设计方法,传统数据库的SQL语句不能在SaaS应用中直接使用,需要根据SaaS应用的数据库设计重新改写SQL语句,改写的思路主要是通过表重构的思想来进行SQL语句的自动翻译,但是表重构的思想只能实现查询语句的翻译,因为表重构的本质是先将SaaS应用中的表重构为传统应用数据库中的表,然后进行操作,但是这种方法没有办法实现insert,update,delete以及常见的DDL语句,因为无法在虚拟表中进行上述操作。因此,通过表重构的思想来实现查询语句的翻译,对于常见的DDL语句和DML语句中insert,update,delete语句都没有办法进行翻译。为解决此问题,本公开实施例提供了一种SQL语句的自动翻译方法,如图1所示,具体包括:
S101、从接收到的输入信息中识别提取出SQL语句;
S102、对所述SQL语句进行语句分析,生成所述SQL语句的语法分析树;
S103、根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句;
S104、执行所述翻译后的SQL语句,返回执行状态。
在一些实施例中,所述接从接收到的输入信息中识别提取出SQL语句具体包括:接收输入信息,对所述输入信息进行预处理,输出经预处理后识别提取出的SQL语句。
具体地,所述预处理,具体包括:
判断所述输入信息中的SQL语句是否符合预定义的语法规则;
若符合所述语法规则,判断所述输入信息中的SQL语句所属类型,并调用相应的翻译类型。
在一些实施例中,所述输入信息包括文件、字符串或多条以逗号分隔的SQL语句中的一个或多个;若输入信息是文件则还需通过读取文件内容获取SQL语句;若输入信息的是字符串,则将字符串用逗号分隔开。
在一些实施例中,对所述SQL语句进行语句分析,具体包括:对所述SQL语句进行词法分析和语法分析。
进一步地,对所述SQL语句进行词法分析和语法分析,具体包括:根据所述SQL语句,使用分析工具自定义词法进行词法分析,获得多个词法单元;根据预定义的语法规则对所述SQL语句进行语法分析;其中,所述分析工具优选为ANTLR(Another Tool forLanguage Recognition)框架分析工具。
具体地,所述词法分析主要采用上下文无关文法。
更进一步地,所述生成所述SQL语句的语法分析树,具体包括:根据所述词法单元和所述预定义的语法生成所述SQL语句的语法分析树。
在一些实施例中,所述SQL语句具体包括DDL语句和DML语句;所述根据所述语法分析树对所述SQL语句进行自动翻译,具体包括:根据所述语法分析树对所述DDL语句和所述DML语句进行自动翻译。
具体地,所述DDL语句包括:CREATE TABLE语句、CREATE INDEX语句、DROP TABLE语句和DROP INDEX语句;所述DML语句包括:SELECT语句、INSERT语句、UPDATE语句、DELETE语句。
在一些实施例中,DDL语句翻译具体如下所示:
1、CREATE TABLE语句
传统应用中的CREATE TABLE语句,在SaaS应用中会被翻译成两条分别插入saas_table与saas_field表的插入语句,具体翻译过程如下所示:
a.根据语法分析树获取表名和自己的租户ID,生成插入到saas_table的insert语句;
b.根据语法分析树获得原create table语句中的所有字段名,生成插入到saas_field表中的insert语句。
2、CREATE INDEX语句
CREATE INDEX对应的操作是根据需要创建索引字段的类型组合,如果该类型组合在saas_meta表中不存在,则创建一张saas_indexn表,其中这里的n表示的saas_meta表中对应字段类型组合的主键ID。
具体翻译过程如下:
a.更改saas_table表中原索引表的索引字段的indexTime为当前时间戳;
b.根据索引字段的类型组合,判断其对应的索引表是否已创建,如果未创建,则首先在saas_meta表中插入关于该索引表的相关信息,然后使用CREATE TABLE语句创建该表,表名为saas_indexn,其中n为saas_meta表中刚插入记录的主键ID;
c.将saas_data表中对应数据表ID的对应字段的数据转移到新创建的saas_indexn表中。
一般地,DROP操作主要对应着DROP TABLE和DROP INDEX。其翻译规则如下:
<drop_relation>::=DROP TABLE[IF EXISTS]<relation>
<drop_index>::=DROP INDEX[IF EXISTS]<index>
实际上,“DROP TABLE”与“DROP INDEX”是“CREATE TABLE”与“CREATE INDEX”的逆操作。
3、DROP TABLE语句
具体地,DROP TABLE的翻译步骤如下:
a.根据语法分析树获得要删除表的表名;
b.生成在saas_table中删除该表名的SQl语句;
c.生成在saas_data中删除该表相关的记录的SQL语句;
d.如果该表有建立索引,则也要生成在对应索引表中含有该表数据的记录的SQL语句。
4、DROP INDEX语句
具体地,DROP INDEX的翻译步骤如下:
a.根据语法分析树获得索引名;
b.根据索引名找到对应的索引字段类型的组合,进而找到该索引存储的具体saas_indexn表以及该索引的tableId。
c.生成删除该saas_indexn中索引对应表的所有数据的SQL语句。
在一些实施例中,DML语句翻译具体如下所示:
1、SELECT语句
SELECT语句的翻译比较复杂,主要分为两种情况:
case 1:where子句不含有索引字段,翻译步骤如下:
a.根据语法分析树,获得所有的查询字段及条件;
b.将from子句的表名替换为saas_data;
c.将select子句的字段翻译为saas_data表中相应的字段名;
case 2:where子句含有索引字段,翻译步骤如下:
a.根据索引字段的类型组合,从saas_meta表中确定saas_indexn中的n是多少
b.将带有索引字段的where子句翻译为对应saas_indexn表的where子句并并保留满足对应条件的recordID作为结果集;
c.在saas_data表中过滤掉不在这些recordID中的记录,并将select子句的字段翻译为saas_data表中对应的字段。
2、INSERT语句
INSERT语句的翻译步骤如下:
a.根据语法分析树,将所有的插入字段翻译为saas_data表中对应的字段,并加入saas_data表的元数据字段;
b.将插入的表对象替换为saas_data表;
c.判断插入的字段是否含有索引字段,如果含有索引字段,则继续生成一个插入到该索引字段对应的saas_indexn表的插入语句。
3、UPDATE语句
具体地,UPDATE语句翻译步骤如下:
a.根据语法分析树,UPDATE…SET部分的语的翻译方法与insert的翻译方法一致;
b.where子句的翻译与SELECT翻译中的where子句的翻译方法一致;
c.拼接a,b两部分翻译之后的语句作为最终的翻译语句。
4、DELETE语句
本质上,DELETE语句是INSERT语句的逆操作,因此其翻译方法基本与INSERT的翻译方法一致,只需要将相应的INSERT语句转换为DELETE语句即可。
在一些实施例中,本公开实施例中涉及到的底层数据存储方法是与目前Salesforce的底层数据库表设计除了在索引表的设计上,其他基本一致;如图2所示,给出了一种数据定义与存储模型的示意图,其中,各个表的相关字段及含义如下所示:
(1)saas_table表存储的是所有传统数据库表的元数据信息,包括表ID,表名以及该表隶属于的租户ID。
(2)saas_field表存储的是saas_table表中对应的tableId的相关字段的元数据信息,例如包括dataType(数据类型),fieldName(字段名),tableId(该字段隶属于的tableId)。
(3)saas_data表存储的是所有的应用数据。即原先传统应用数据表中的数据都将存储在该表中.其中tableId,tenantId,naturnalName表示的是该条数据记录所属于的tableId,租户ID以及自然名。value1,value2…valuen这几个字断是varchar类型的,value后面跟着的数字对应的是saas_field表中的fieldNum。例如,value3代表的是租户ID下的相应tableId中的第三个字断的取值。
(4)与索引存储相关的数据表是saas_meta_index,saas_indexn,saas_relationship,saas_uniqueFields等表,其中我们根据索引字段类型的组合创建saas_indexn数据表,saas_meta_index表存储的是索引字段的组合信息以及该组合对应的ID,这个ID对应的是saas_indexn数据表中的n。saas_relationship表存储的外键相关的数据,saas_uniqueFields表存储的唯一索引的数据。
在一些实施例中,所述方法还包括:若所述执行状态为失败,则报错,执行回滚操作。
具体地,在数据库系统中执行翻译后的SQL语句时,每执行一条语句都会返回一个执行状态;如果执行失败,则报错执行失败语句位置,并回滚至执行失败语句的上一句SQL语句,或者,直接回滚至第一行SQL语句。
本公开实施例还提供了一种SQL语句的自动翻译装置300,如图3所示,具体包括:
SQL语句输出模块301,用于从接收到的输入信息中识别提取出SQL语句;
语法分析树生成模块302,用于对所述SQL语句进行语句分析,生成所述SQL语句的语法分析树;
翻译模块303,用于根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句;
执行模块304,用于执行所述翻译后的SQL语句,返回执行状态。
在一些实施例中,所述语法分析树生成模块302具体用于对所述SQL语句进行词法分析和语法分析。
由上述公开的实施例可知,现有技术方案中采用的是基于表重构的思路实现了从传统应用到SaaS应用的SQL语句的翻译。由于方法的本质是通过构造虚拟表的方式来实现的,因此这种方法只能实现查询语句的翻译,但是在数据库SQL语句中并不仅仅只有查询语句,还有大量的DDL语句以及其他DML语句。因此,本发明的优点是提出了一种SQL语句的自动翻译的方法,除了可以实现查询语句的自动翻译,还可以实现DDL语句与其他DML语句的翻译,真正的做到了从传统应用到SaaS应用SQL语句翻译的自动化,可以节约大量的人力物力,降低成本。
参考附图4,为本申请一个实施例提供的电子设备示意图。如图4所示,该电子设备400包括:
存储器430以及一个或多个处理器410;
其中,所述存储器430与所述一个或多个处理器410通信连接,所述存储器430中存储有可被所述一个或多个处理器执行的指令432,所述指令432被所述一个或多个处理器410执行,以使所述一个或多个处理器410执行本申请前述实施例中的方法。
具体地,处理器410和存储器430可以通过总线或者其他方式连接,图中以通过总线440连接为例。处理器410可以为中央处理器(Central Processing Unit,CPU)。处理器410还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器430作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本申请实施例中的级联渐进网络等。处理器410通过运行存储在存储器430中的非暂态软件程序、指令以及模块432,从而执行处理器的各种功能应用以及数据处理。
存储器430可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器410所创建的数据等。此外,存储器430可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器430可选包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络(比如通过通信接口420)连接至处理器410。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请的一个实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机可执行指令,所述计算机可执行指令被执行后执行本申请前述实施例中的方法。
前述的计算机可读取存储介质包括以存储如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方式或技术来实现的物理易失性和非易失性、可移动和不可移动介质。计算机可读取存储介质具体包括,但不限于,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、可擦除可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、闪存或其他固态存储器技术、CD-ROM、数字多功能盘(DVD)、HD-DVD、蓝光(Blue-Ray)或其他光存储设备、磁带、磁盘存储或其他磁性存储设备、或能用于存储所需信息且可以由计算机访问的任何其他介质。
尽管此处所述的主题是在结合操作系统和应用程序在计算机系统上的执行而执行的一般上下文中提供的,但本领域技术人员可以认识到,还可结合其他类型的程序模块来执行其他实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其他类型的结构。本领域技术人员可以理解,此处所述的本主题可以使用其他计算机系统配置来实践,包括手持式设备、多处理器系统、基于微处理器或可编程消费电子产品、小型计算机、大型计算机等,也可使用在其中任务由通过通信网络连接的远程处理设备执行的分布式计算环境中。在分布式计算环境中,程序模块可位于本地和远程存储器存储设备的两者中。
本领域普通技术人员可以意识到,结合本文中所本申请的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对原有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
综上所述,本公开提出了一种SQL语句的自动翻译方法、装置、电子设备及其计算机可读存储介质。通过对输出的SQL语句进行语句分析生成语法分析树,并根据所述语法分析树对所述SQL语句进行自动翻译,不仅可以实现查询语句的自动翻译,还可以实现DDL语句与DML语句的翻译,真正的做到了从传统应用到SaaS应用SQL语句翻译的自动化,在极大地提高了翻译效率的同时提升了翻译的正确率,节约了大量的人力物力,降低了成本。
应当理解的是,本公开的上述具体实施方式仅仅用于示例性说明或解释本公开的原理,而不构成对本公开的限制。因此,在不偏离本公开的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。此外,本公开所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

Claims (9)

1.一种SQL语句的自动翻译方法,其特征在于,所述方法包括:
从接收到的输入信息中识别提取出SQL语句;
对输出的SQL语句进行语句分析,生成所述SQL语句的语法分析树;
根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句;
执行所述翻译后的SQL语句,返回执行状态,
所述SQL语句包括DDL语句和DML语句,所述DDL语句包括:CREATE TABLE语句、CREATEINDEX语句、DROP TABLE语句和DROP INDEX语句;所述DML语句包括:SELECT语句、INSERT语句、UPDATE语句、DELETE语句,
所述根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句,包括:
对于CREATE TABLE语句,根据所述语法分析树获取表名和租户ID,生成插入到saas_table的insert语句,根据所述语法分析树获取原create table语句中的所有字段名,生成插入到saas_field表中的insert语句;
对于CREATE INDEX语句,更改saas_table表中源索引表的索引字段的index Time为当前时间戳,根据索引字段的类型组合,判断其对应的索引表是否已创建,若未创建,则在saas_meta表中插入关于该索引表的相关信息,再通过CREATE TABLE语句创建该表,表名为saas_indexn,其中n为saas_meta表中插入记录的主键ID,将saas_data表中对应数据表ID的对应字段的数据转移到新创建的saas_indexn表中;
对于DROP TABLE语句,根据所述语法分析树获得到要删除表的表名,生成在saas_table中删除该表名的SQL语句,生成在saas_data中删除该表相关的记录的SQL语句,如果该表有建立索引,则生成在对应索引表中含有该表数据的记录的SQL语句;
对于DROP INDEX语句,根据所述语法分析树获得索引名,根据索引名找到对应的索引字段类型的组合,以找到该索引存储的saas_indexn表以及该索引的tableId,生成删除该saas_indexn中索引对应表的所有数据的SQL语句;
对于SELECT语句,当where子句不包含索引字段时:根据所述语法分析树获得所有查询字段及条件,将from子句的表名替换为saas_data,将select子句的子弹翻译为saas_data表中相应的字段名
当where子句不包含索引字段时:根据索引字段的类型组合,从saas_meta表中确定saas_indexn中的n,将带有索引字段的where子句翻译为对应saas_indexn表的where子句并保留满足对应条件的recordID作为结果集,在saas_data表中过滤掉不在recordID中的记录,并将select子句的字段翻译为saas_data表中对应的字段;
对于INSERT语句,根据所述语法分析树将所有插入字段翻译为saas_data表中对应的字段,并加入saas_data表的元数据字段,将插入的表对象替换为saas_data表,判断插入的字段是否包含索引字段,如果含有索引字段,则继续生成一个插入该索引字段对应的saas_indexn表的插入语句;
对于UPDATE语句,语句中SET前部分的翻译与所述INSERT语句的翻译一致,where字句的翻译与所述SELECT语句的翻译一致,拼接上述翻译之后的语句为update的翻译语句;
对于DELETE语句,为所述INSERT语句翻译的逆操作。
2.根据权利要求1所述的方法,其特征在于,所述从接收到的输入信息中识别提取出SQL语句包括:接收输入,并对所述输入进行预处理,输出经预处理后的SQL语句。
3.根据权利要求2所述的方法,其特征在于,所述预处理包括:
判断所述输入中的SQL语句是否符合预定义的语法规则;
若符合所述语法规则,判断所述输入中的SQL语句所属类型,并调用相应的翻译类型。
4.根据权利要求1所述的方法,其特征在于,对所述SQL语句进行语句分析包括:对所述SQL语句进行词法分析和语法分析。
5.根据权利要求4所述的方法,其特征在于,对所述SQL语句进行词法分析和语法分析包括:根据所述SQL语句,使用分析工具自定义词法进行词法分析,获得多个词法单元;根据预定义的语法规则对所述SQL语句进行语法分析;
所述生成所述SQL语句的语法分析树,具体包括:根据所述词法单元和所述预定义的语法生成所述SQL语句的语法分析树。
6.根据权利要求1所述的方法,其特征在于,所述根据所述语法分析树对所述SQL语句进行自动翻译包括:根据所述语法分析树对所述DDL语句和所述DML语句进行自动翻译。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:若所述执行状态为失败,则报错,执行回滚操作。
8.一种SQL语句的自动翻译装置,其特征在于,所述装置包括:
SQL语句输出模块,用于从接收到的输入信息中识别提取出SQL语句;
语法分析树生成模块,用于对所述SQL语句进行语句分析,生成所述SQL语句的语法分析树;
翻译模块,用于根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句;
执行模块,用于执行所述翻译后的SQL语句,返回执行状态,
所述SQL语句包括DDL语句和DML语句,所述DDL语句包括:CREATE TABLE语句、CREATEINDEX语句、DROP TABLE语句和DROP INDEX语句;所述DML语句包括:SELECT语句、INSERT语句、UPDATE语句、DELETE语句,
所述根据所述语法分析树对所述SQL语句进行自动翻译,生成翻译后的SQL语句,包括:
对于CREATE TABLE语句,根据所述语法分析树获取表名和租户ID,生成插入到saas_table的insert语句,根据所述语法分析树获取原create table语句中的所有字段名,生成插入到saas_field表中的insert语句;
对于CREATE INDEX语句,更改saas_table表中源索引表的索引字段的index Time为当前时间戳,根据索引字段的类型组合,判断其对应的索引表是否已创建,若未创建,则在saas_meta表中插入关于该索引表的相关信息,再通过CREATE TABLE语句创建该表,表名为saas_indexn,其中n为saas_meta表中插入记录的主键ID,将saas_data表中对应数据表ID的对应字段的数据转移到新创建的saas_indexn表中;
对于DROP TABLE语句,根据所述语法分析树获得到要删除表的表名,生成在saas_table中删除该表名的SQL语句,生成在saas_data中删除该表相关的记录的SQL语句,如果该表有建立索引,则生成在对应索引表中含有该表数据的记录的SQL语句;
对于DROP INDEX语句,根据所述语法分析树获得索引名,根据索引名找到对应的索引字段类型的组合,以找到该索引存储的saas_indexn表以及该索引的tableId,生成删除该saas_indexn中索引对应表的所有数据的SQL语句;
对于SELECT语句,当where子句不包含索引字段时:根据所述语法分析树获得所有查询字段及条件,将from子句的表名替换为saas_data,将select子句的子弹翻译为saas_data表中相应的字段名
当where子句不包含索引字段时:根据索引字段的类型组合,从saas_meta表中确定saas_indexn中的n,将带有索引字段的where子句翻译为对应saas_indexn表的where子句并保留满足对应条件的recordID作为结果集,在saas_data表中过滤掉不在recordID中的记录,并将select子句的字段翻译为saas_data表中对应的字段;
对于INSERT语句,根据所述语法分析树将所有插入字段翻译为saas_data表中对应的字段,并加入saas_data表的元数据字段,将插入的表对象替换为saas_data表,判断插入的字段是否包含索引字段,如果含有索引字段,则继续生成一个插入该索引字段对应的saas_indexn表的插入语句;
对于UPDATE语句,语句中SET前部分的翻译与所述INSERT语句的翻译一致,where字句的翻译与所述SELECT语句的翻译一致,拼接上述翻译之后的语句为update的翻译语句;
对于DELETE语句,为所述INSERT语句翻译的逆操作。
9.根据权利要求8所述的装置,其特征在于,所述语法分析树生成模块具体用于对所述SQL语句进行词法分析和语法分析。
CN202010010999.3A 2020-01-06 2020-01-06 一种sql语句的自动翻译方法及装置 Active CN111221846B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010010999.3A CN111221846B (zh) 2020-01-06 2020-01-06 一种sql语句的自动翻译方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010010999.3A CN111221846B (zh) 2020-01-06 2020-01-06 一种sql语句的自动翻译方法及装置

Publications (2)

Publication Number Publication Date
CN111221846A CN111221846A (zh) 2020-06-02
CN111221846B true CN111221846B (zh) 2023-09-29

Family

ID=70810692

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010010999.3A Active CN111221846B (zh) 2020-01-06 2020-01-06 一种sql语句的自动翻译方法及装置

Country Status (1)

Country Link
CN (1) CN111221846B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678532A (zh) * 2013-12-02 2014-03-26 中国移动(深圳)有限公司 变更语句逆向分析方法、数据库变更回退方法及系统
CN105787044A (zh) * 2016-02-26 2016-07-20 广州品唯软件有限公司 一种基于MySQL的SQL解析器及其解析方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678532A (zh) * 2013-12-02 2014-03-26 中国移动(深圳)有限公司 变更语句逆向分析方法、数据库变更回退方法及系统
CN105787044A (zh) * 2016-02-26 2016-07-20 广州品唯软件有限公司 一种基于MySQL的SQL解析器及其解析方法

Also Published As

Publication number Publication date
CN111221846A (zh) 2020-06-02

Similar Documents

Publication Publication Date Title
CN110795455B (zh) 依赖关系解析方法、电子装置、计算机设备及可读存储介质
CN110908997B (zh) 数据血缘构建方法、装置、服务器及可读存储介质
CN111949541A (zh) 多源数据库语句检查方法及装置
CN111078729B (zh) 医疗数据溯源方法、装置、系统、存储介质以及电子设备
CN115543402B (zh) 一种基于代码提交的软件知识图谱增量更新方法
CN114091426A (zh) 一种处理数据仓库中字段数据的方法和装置
CN112579610A (zh) 多数据源结构分析方法、系统、终端设备及存储介质
CN117093599A (zh) 面向异构数据源的统一sql查询方法
CN116483850A (zh) 数据处理方法、装置、设备以及介质
CN113297251A (zh) 多源数据检索方法、装置、设备及存储介质
CN116775488A (zh) 异常数据确定方法、装置、设备、介质及产品
CN111221846B (zh) 一种sql语句的自动翻译方法及装置
CN114880483A (zh) 一种元数据知识图谱构建方法、存储介质及系统
CN115033592A (zh) 基于数据库的sql语句处理方法、装置、设备及存储介质
CN114461454A (zh) 数据恢复方法、装置、存储介质及电子设备
CN114519071A (zh) 规则匹配模型的生成方法、匹配方法、系统、设备和介质
CN113868138A (zh) 测试数据的获取方法、系统、设备及存储介质
CN113221528A (zh) 基于openEHR模型的临床数据质量评估规则的自动生成与执行方法
CN111079391B (zh) 一种报表的生成方法及装置
CN116755684B (zh) OAS Schema的生成方法、装置、设备及介质
CN112749186B (zh) 数据处理方法、装置、电子设备和计算机可读存储介质
CN111159218B (zh) 数据处理方法、装置及可读存储介质
CN113343036B (zh) 基于关键拓扑结构分析的数据血缘关系解析方法和系统
CN110968634B (zh) 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法
CN117472940A (zh) 数据血缘关系构建方法和装置、电子设备及存储介质

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
GR01 Patent grant
GR01 Patent grant