CN114281840A - 查询语句的解析方法、装置以及存储介质 - Google Patents

查询语句的解析方法、装置以及存储介质 Download PDF

Info

Publication number
CN114281840A
CN114281840A CN202111442040.8A CN202111442040A CN114281840A CN 114281840 A CN114281840 A CN 114281840A CN 202111442040 A CN202111442040 A CN 202111442040A CN 114281840 A CN114281840 A CN 114281840A
Authority
CN
China
Prior art keywords
query
statement
query statement
analysis
parsing
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
CN202111442040.8A
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.)
Debang Securities Co ltd
Original Assignee
Debang Securities 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 Debang Securities Co ltd filed Critical Debang Securities Co ltd
Priority to CN202111442040.8A priority Critical patent/CN114281840A/zh
Publication of CN114281840A publication Critical patent/CN114281840A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种查询语句的解析方法、装置以及存储介质。其中,一种查询语句的解析方法,包括:获取第一查询语句;通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句;对多个第二查询语句进行第二解析;以及根据解析结果将第一查询语句进行重组,得到第一查询语句的层次结构。

Description

查询语句的解析方法、装置以及存储介质
技术领域
本申请涉及信息技术领域,特别是涉及一种查询语句的解析方法、装置以及存储介质。
背景技术
随着微服务的不断发展,尤其是分布式环境下多租户技术的应用发展,如何保证多租户环境下,租户信息数据之间的隔离越来越受到关注。目前主流的应用系统,数据信息还是主要存储于关系型数据库中的。对应多租户数据的隔离,主要是三种方式:1.每个租户一个独立数据、2.共享数据库,分不同的schema(mysql数据库中,不同的数据库)3.共享相同的表,每个业务表中增加租户字段来区别。由于目前主流的数据库访问层都是使用mybatis插件来实现的,自然而然的会使用到mybatis-plus的多租户插件来实现不同租户用户数据之间的隔离(应用代码无侵入性和可移植性)。
然而在上述插件的sql解析过程中,面对复杂sql,尤其像微服务应用中有较复杂的sql查询时,无法在语句中正确合适的添加租户字段的情况,导致插件的适用性较低。mybatis-plus的多租户解析模块,是借助于开源的sql解析插件jsqlparser来完成的。Jsqlparser会将sql解析成java的类层次结构,可以方便程序代码中以访问者模式进行导航调用访问来进行应用自身的一些业务扩展。但目前该解析引擎存在的问题是,对于复杂的sql,解析出的java类层次结构不太准确,尤其对于可解析多层的子查询来说,过多层次的可解析,无法解析出内部的层次结构。
针对上述的现有技术中存在的无法准确解析复杂sql的层次结构的技术问题,目前尚未提出有效的解决方案。
发明内容
本申请的实施例提供了一种查询语句的解析方法、装置以及存储介质,以至少解决现有技术中存在的无法准确解析复杂sql的层次结构的技术问题。
根据本申请实施例的一个方面,提供了一种查询语句的解析方法,包括:获取第一查询语句;通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句;对多个第二查询语句进行第二解析;以及根据解析结果将第一查询语句进行重组,得到第一查询语句的层次结构。
根据本申请实施例的另一个方面,还提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时由处理器执行以上任意一项所述的方法。
根据本申请实施例的另一个方面,还提供了一种查询语句的解析装置,包括:第一获取模块,用于获取第一查询语句;第一解析模块,用于通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句;第二解析模块,用于对多个第二查询语句进行第二解析;以及语句重组模块,用于根据解析结果将第一查询语句进行重组,得到第一查询语句的层次结构。
根据本申请实施例的另一个方面,还提供了一种查询语句的解析装置,包括:处理器;以及存储器,与处理器连接,用于为处理器提供处理以下处理步骤的指令:获取第一查询语句;通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句;对多个第二查询语句进行第二解析;以及根据解析结果将第一查询语句进行重组,得到第一查询语句的层次结构。
在本申请实施例中,计算设备通过预设的语法解析算法根据递归下降法将需要解析的语句进行解析,分析解析后拆分成各个子语句,再对各个子语句再进行相同的分析解析,如此递归进行下去,直到最底层没法拆分为止。从而可以利用现有的mybatis-plus调用jsqlparser拦截解析sql的方式以及结果处理方式,重新调整了一下mybatis-plus使用jsqlparser拦截解析功能(利用递归下降法来重试局部sql文本,然后重组回现有的解析结果层次结构中),来达到拦截解析增加多租户的精确度问题。进而解决了现有技术中存在的无法准确解析复杂sql的层次结构的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是用于实现根据本申请实施例1所述的方法的计算设备的硬件结构框图;
图2是根据本申请实施例1的第一个方面所述的查询语句的解析方法的流程示意图;
图3是根据本申请实施例2所述的查询语句的解析装置的示意图;以及
图4是根据本申请实施例3所述的查询语句的解析装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本实施例,提供了一种查询语句的解析方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本实施例所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的计算设备中执行。图1示出了一种用于实现查询语句的解析方法的计算设备的硬件结构框图。如图1所示,计算设备可以包括一个或多个处理器(处理器可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器、以及用于通信功能的传输装置。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算设备还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算设备中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器可用于存储应用软件的软件程序以及模块,如本申请实施例中的查询语句的解析方法对应的程序指令/数据存储装置,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的查询语句的解析方法。存储器可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算设备的通信供应商提供的无线网络。在一个实例中,传输装置包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算设备的用户界面进行交互。
此处需要说明的是,在一些可选实施例中,上述图1所示的计算设备可以包括硬件元件(包括电路)、软件元件(包括存储在计算机可读介质上的计算机代码)、或硬件元件和软件元件两者的结合。应当指出的是,图1仅为特定具体实例的一个实例,并且旨在示出可存在于上述计算设备中的部件的类型。
在上述运行环境下,根据本实施例的第一个方面,提供了一种查询语句的解析方法。图2示出了该方法的流程示意图,参考图2所示,该方法包括:
S202:获取第一查询语句;
S204:通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句;
S206:对多个第二查询语句进行第二解析;以及
S208:根据解析结果将第一查询语句进行重组,得到第一查询语句的层次结构。
具体地,计算设备获取需要解析的sql语句(即第一查询语句),例如:
SELECT*FROM MY_TABLE1,MY_TABLE2,(SELECT*FROM MY_TABLE3)LEFT OUTERJOIN MY_TABLE4
WHERE ID=(SELECT MAX(ID)FROM MY_TABLE5)AND ID2 IN(SELECT*FROM MY_TABLE6)
其中该sql语句(即第一查询语句),总共查询6个表MY_TABLE1、MY_TABLE2、MY_TABLE3、MY_TABLE4、MY_TABLE5、MY_TABLE6。(这六个表都包括字段tenant_id)。
计算设备会通过预设的语法解析算法(例如jsqlparser解析算法)对该sql语句(即第一查询语句)进行解析,通过递归下降法,将该sql语句(即第一查询语句)解析为多个子语句(即第二查询语句)。例如有:
(1)SELECT*FROM MY_TABLE3
(2)LEFT OUTER JOIN MY_TABLE4
(3)SELECT MAX(ID)FROM MY_TABLE5
(4)SELECT*FROM MY_TABLE6
(5)ID2 IN(SELECT*FROM MY_TABLE6)
进一步地,计算设备利用递归下降法对上述多个子语句(即第二查询语句)进行解析(即第二解析),得到与sql语句对应的解析结果。假设用户标识为“123”,即,tenant_id='123'。则计算设备得到的解析结果为:
(1)SELECT*FROM MY_TABLE3 WHERE tenant_id='123'
(2)LEFT OUTER JOIN MY_TABLE4 ON tenant_id='123'
(3)SELECT MAX(ID)FROM MY_TABLE5 WHERE tenant_id='123'
(4)SELECT*FROM MY_TABLE6 WHERE tenant_id='123'
(5)ID2 IN(SELECT*FROM MY_TABLE6 WHERE tenant_id='123')AND tenant_id='123'
进一步地,计算设备根据解析结果将sql语句(即第一查询语句)进行重组,得到sql语句(即第一查询语句)的层次结构为:
SELECT*FROM MY_TABLE1,MY_TABLE2,(SELECT*FROM MY_TABLE3 WHERE tenant_id='123')
LEFT OUTER JOIN MY_TABLE4 ON tenant_id='123'WHERE ID=(SELECT MAX(ID)FROM MY_TABLE5 WHERE tenant_id='123')
AND ID2 IN(SELECT*FROM MY_TABLE6 WHERE tenant_id='123')AND tenant_id='123'
正如背景技术中所述的,在上述插件的sql解析过程中,面对复杂sql,尤其像微服务应用中有较复杂的sql查询时,无法在语句中正确合适的添加租户字段的情况,导致插件的适用性较低。mybatis-plus的多租户解析模块,是借助于开源的sql解析插件jsqlparser来完成的。Jsqlparser会将sql解析成java的类层次结构,可以方便程序代码中以访问者模式进行导航调用访问来进行应用自身的一些业务扩展。但目前该解析引擎存在的问题是,对于复杂的sql,解析出的java类层次结构不太准确,尤其对于可解析多层的子查询来说,过多层次的可解析,无法解析出内部的层次结构。
针对以上所述的技术问题,通过本申请实施例的技术方案,计算设备通过预设的语法解析算法根据递归下降法将需要解析的语句进行解析,分析解析后拆分成各个子语句,再对各个子语句再进行相同的分析解析,如此递归进行下去,直到最底层没法拆分为止。从而可以利用现有的mybatis-plus调用jsqlparser拦截解析sql的方式以及结果处理方式,重新调整了一下mybatis-plus使用jsqlparser拦截解析功能(利用递归下降法来重试局部sql文本,然后重组回现有的解析结果层次结构中),来达到拦截解析增加多租户的精确度问题。进而解决了现有技术中存在的无法准确解析复杂sql的层次结构的技术问题。
可选地,通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句的操作,包括:将第一查询语句进行拆分,得到多个第二查询语句,其中多个第二查询语句为第一查询语句的子语句。
具体地,将sql语句(即第一查询语句)
SELECT*FROM MY_TABLE1,MY_TABLE2,(SELECT*FROM MY_TABLE3)LEFT OUTERJOIN MY_TABLE4
WHERE ID=(SELECT MAX(ID)FROM MY_TABLE5)AND ID2 IN(SELECT*FROM MY_TABLE6)
进行拆分,得到的多个子语句包括
(1)SELECT*FROM MY_TABLE3
(2)LEFT OUTER JOIN MY_TABLE4
(3)SELECT MAX(ID)FROM MY_TABLE5
(4)SELECT*FROM MY_TABLE6
(5)ID2 IN(SELECT*FROM MY_TABLE6)
从而从而本技术方案可以准确地对第一查询语句进行解析。
可选地,将第一查询语句进行拆分之前,还包括:判断第一查询语句是否包含可解析语句;以及在包含可解析语句的情况下,对第一查询语句进行拆分。
具体地,计算设备获取到sql语句(即第一查询语句)后,首先会判断sql语句(即第一查询语句)是否可解析。更具体地,计算设备在对sql语句(即第一查询语句)进行拆分之前会先检查sql语句(即第一查询语句)是否可拆分,例如是否包含嵌套语句等。在包含可解析语句的情况下,即包含嵌套语句的情况下,计算设备对sql语句(即第一查询语句)进行拆分。从而本技术方案可以准确地对第一查询语句进行拆分。
可选地,对多个第二查询语句进行第二解析的操作,包括:判断多个第二查询语句是否包含可解析语句;在包含可解析语句的情况下,对第二查询语句进行拆分。
具体地,计算设备在对sql语句(即第一查询语句)进行拆分后,还会对拆分后的子语句再次进行拆分。在对子语句进行拆分之前,计算设备还会判断子语句(即第二查询语句)是否包含可解析语句,例如嵌套语句,当子语句(即第二查询语句)包括嵌套语句时,计算设备将会对子语句(即第二查询语句)进行拆分。从而本技术方案可以准确地对第二查询语句进行解析。
可选地,方法还包括:在对多个第二查询语句进行第二解析后,得到多个第三查询语句,其中多个第三查询语句为多个第二查询语句的子语句。
具体地,在对第二查询语句进行拆分后,得到第二查询语句的子语句(即第三查询语句)。如果在第三查询语句还包括嵌套语句的情况下,计算设备会将第三查询语句再次进行拆分,得到解析结果。即计算设备通过递归下降法将sql语句一层层解析,直到无法进行拆分为止。从而本技术方案可以准确地将第二查询语句进行拆分。
本方案在jsqlparser解析算法的基础上,引入类似编译器解析的递归下降语法分析的方法,对于现有的每一层次解析出来的结构,再使用递归下降法来进行新的解析处理。虽然再次采用递归下降法来对局部的sql片段进行再次解析(再次进行jsqlparser解析算法),不一定能解析出新的层次结构(此时我们认为已经到达了递归下降法的终结符号:因为已经不能再次进行解析了,那么就表示此sql片段已经无法再次分隔,是一个独立完整的java表达式了),而对于能新解析出的结构体,那么合并到现有的java层次结构中。虽然再次引入局部的递归下降法,会损失程序运行性能,但是目前本技术方案的微服务分布式应用的数据访问层的sql脚本,虽然有些比较复杂(多几层的子查询)但相对于报表等复杂的查询逻辑,相对来说还算是比较简单(查询逻辑够明确),而且多数sql还是基于单表的操作,只有少数一些sql有多表连接子查询,所以目前方式的性能损失,可以忽略不计。
比如下面的查询sql(对应的表增加租户字段tenant_id):
SELECT*FROM MY_TABLE1,MY_TABLE2,(SELECT*FROM MY_TABLE3)LEFT OUTERJOIN MY_TABLE4
WHERE ID=(SELECT MAX(ID)FROM MY_TABLE5)AND ID2 IN(SELECT*FROM MY_TABLE6)
上面的sql,总共查询6个表MY_TABLE1、MY_TABLE2、MY_TABLE3、MY_TABLE4、MY_TABLE5、MY_TABLE6。(这六个表都增加了租户字段tenant_id),如果使用原有的mybaits-plus多租户插件(目前假设租户标识为“123”),那么解析重构之后的sql如下:
SELECT*FROM MY_TABLE1,MY_TABLE2,(SELECT*FROM MY_TABLE3 WHERE tenant_id='123')
LEFT OUTER JOIN MY_TABLE4 ON tenant_id='123'WHERE ID=(SELECT MAX(ID)FROM MY_TABLE5)
AND ID2 IN(SELECT*FROM MY_TABLE6 WHERE tenant_id='123')AND tenant_id='123'
而使用改进增强后的版本,解析的结果为:
SELECT*FROM MY_TABLE1,MY_TABLE2,(SELECT*FROM MY_TABLE3 WHERE tenant_id='123')
LEFT OUTER JOIN MY_TABLE4 ON tenant_id='123'WHERE ID=(SELECT MAX(ID)FROM MY_TABLE5 WHERE tenant_id='123')
AND ID2 IN(SELECT*FROM MY_TABLE6 WHERE tenant_id='123')AND tenant_id='123'
此外,参考图1所示,根据本实施例的第二个方面,提供了一种存储介质。所述存储介质包括存储的程序,其中,在所述程序运行时由处理器执行以上任意一项所述的方法。
从而根据本实施例,计算设备通过预设的语法解析算法根据递归下降法将需要解析的语句进行解析,分析解析后拆分成各个子语句,再对各个子语句再进行相同的分析解析,如此递归进行下去,直到最底层没法拆分为止。从而可以利用现有的mybatis-plus调用jsqlparser拦截解析sql的方式以及结果处理方式,重新调整了一下mybatis-plus使用jsqlparser拦截解析功能(利用递归下降法来重试局部sql文本,然后重组回现有的解析结果层次结构中),来达到拦截解析增加多租户的精确度问题。进而解决了现有技术中存在的无法准确解析复杂sql的层次结构的技术问题。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
图3示出了根据本实施例所述的查询语句的解析装置300,该装置300与根据实施例1的第一个方面所述的方法相对应。参考图3所示,该装置300包括:第一获取模块310,用于获取第一查询语句;第一解析模块320,用于通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句;第二解析模块330,用于对多个第二查询语句进行第二解析;以及语句重组模块340,用于根据解析结果将第一查询语句进行重组,得到第一查询语句的层次结构。
可选地,第一解析模块320包括:第一拆分子模块,用于将第一查询语句进行拆分,得到多个第二查询语句,其中多个第二查询语句为第一查询语句的子语句。
可选地,将第一查询语句进行拆分之前,装置300还包括:第一判断子模块模块,用于判断第一查询语句是否包含可解析语句;以及第二拆分子模块,用于在包含可解析语句的情况下,对第一查询语句进行拆分。
可选地,第二解析模块330包括:第二判断子模块,用于判断多个第二查询语句是否包含可解析语句;第三拆分子模块,用于在包含可解析语句的情况下,对第二查询语句进行拆分。
可选地,装置300还包括:第三解析模块,用于在对多个第二查询语句进行第二解析后,得到多个第三查询语句,其中多个第三查询语句为多个第二查询语句的子语句。
从而根据本实施例,计算设备通过预设的语法解析算法根据递归下降法将需要解析的语句进行解析,分析解析后拆分成各个子语句,再对各个子语句再进行相同的分析解析,如此递归进行下去,直到最底层没法拆分为止。从而可以利用现有的mybatis-plus调用jsqlparser拦截解析sql的方式以及结果处理方式,重新调整了一下mybatis-plus使用jsqlparser拦截解析功能(利用递归下降法来重试局部sql文本,然后重组回现有的解析结果层次结构中),来达到拦截解析增加多租户的精确度问题。进而解决了现有技术中存在的无法准确解析复杂sql的层次结构的技术问题。
实施例3
图4示出了根据本实施例所述的查询语句的解析装置400,该装置400与根据实施例1的第一个方面所述的方法相对应。参考图4所示,该装置400包括:处理器410;以及存储器420,与处理器410连接,用于为处理器410提供处理以下处理步骤的指令:获取第一查询语句;通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句;对多个第二查询语句进行第二解析;以及根据解析结果将第一查询语句进行重组,得到第一查询语句的层次结构。
可选地,通过预设的语法解析算法根据对第一查询语句进行第一解析,得到多个第二查询语句的操作,包括:将第一查询语句进行拆分,得到多个第二查询语句,其中多个第二查询语句为第一查询语句的子语句。
可选地,将第一查询语句进行拆分之前,装置400还包括:判断第一查询语句是否包含可解析语句;以及在包含可解析语句的情况下,对第一查询语句进行拆分。
可选地,对多个第二查询语句进行第二解析的操作,包括:判断多个第二查询语句是否包含可解析语句;在包含可解析语句的情况下,对第二查询语句进行拆分。
可选地,存储器420还用于为处理器410提供处理以下处理步骤的指令:在对多个第二查询语句进行第二解析后,得到多个第三查询语句,其中多个第三查询语句为多个第二查询语句的子语句。
从而根据本实施例,计算设备通过预设的语法解析算法根据递归下降法将需要解析的语句进行解析,分析解析后拆分成各个子语句,再对各个子语句再进行相同的分析解析,如此递归进行下去,直到最底层没法拆分为止。从而可以利用现有的mybatis-plus调用jsqlparser拦截解析sql的方式以及结果处理方式,重新调整了一下mybatis-plus使用jsqlparser拦截解析功能(利用递归下降法来重试局部sql文本,然后重组回现有的解析结果层次结构中),来达到拦截解析增加多租户的精确度问题。进而解决了现有技术中存在的无法准确解析复杂sql的层次结构的技术问题。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种查询语句的解析方法,其特征在于,包括:
获取第一查询语句;
通过预设的语法解析算法根据对所述第一查询语句进行第一解析,得到多个第二查询语句;
对所述多个第二查询语句进行第二解析;以及
根据解析结果将所述第一查询语句进行重组,得到所述第一查询语句的层次结构。
2.根据权利要求1所述的方法,其特征在于,通过预设的语法解析算法根据对所述第一查询语句进行第一解析,得到多个第二查询语句的操作,包括:
将所述第一查询语句进行拆分,得到所述多个第二查询语句,其中所述多个第二查询语句为所述第一查询语句的子语句。
3.根据权利要求2所述的方法,其特征在于,将所述第一查询语句进行拆分之前,还包括:
判断所述第一查询语句是否包含可解析语句;以及
在包含所述可解析语句的情况下,对所述第一查询语句进行拆分。
4.根据权利要求1所述的方法,其特征在于,对所述多个第二查询语句进行第二解析的操作,包括:
判断所述多个第二查询语句是否包含可解析语句;
在包含所述可解析语句的情况下,对所述第二查询语句进行拆分。
5.根据权利要求1所述的方法,其特征在于,还包括:
在对所述多个第二查询语句进行第二解析后,得到多个第三查询语句,其中所述多个第三查询语句为所述多个第二查询语句的子语句。
6.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时由处理器执行权利要求1至5中任意一项所述的方法。
7.一种查询语句的解析装置,其特征在于,包括:
第一获取模块,用于获取第一查询语句;
第一解析模块,用于通过预设的语法解析算法根据对所述第一查询语句进行第一解析,得到多个第二查询语句;
第二解析模块,用于对所述多个第二查询语句进行第二解析;以及
语句重组模块,用于根据解析结果将所述第一查询语句进行重组,得到所述第一查询语句的层次结构。
8.根据权利要求7所述的装置,其特征在于,通过预设的语法解析算法根据对所述第一查询语句进行第一解析,得到多个第二查询语句的操作,包括:
第一拆分子模块,用于将所述第一查询语句进行拆分,得到所述多个第二查询语句,其中所述多个第二查询语句为所述第一查询语句的子语句。
9.根据权利要求8所述的装置,其特征在于,将所述第一查询语句进行拆分之前,还包括:
第一判断子模块模块,用于判断所述第一查询语句是否包含可解析语句;以及
第二拆分子模块,用于在包含所述可解析语句的情况下,对所述第一查询语句进行拆分。
10.一种查询语句的解析装置,其特征在于,包括:
处理器;以及
存储器,与所述处理器连接,用于为所述处理器提供处理以下处理步骤的指令:
获取第一查询语句;
通过预设的语法解析算法根据对所述第一查询语句进行第一解析,得到多个第二查询语句;
对所述多个第二查询语句进行第二解析;以及
根据解析结果将所述第一查询语句进行重组,得到所述第一查询语句的层次结构。
CN202111442040.8A 2021-11-30 2021-11-30 查询语句的解析方法、装置以及存储介质 Pending CN114281840A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111442040.8A CN114281840A (zh) 2021-11-30 2021-11-30 查询语句的解析方法、装置以及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111442040.8A CN114281840A (zh) 2021-11-30 2021-11-30 查询语句的解析方法、装置以及存储介质

Publications (1)

Publication Number Publication Date
CN114281840A true CN114281840A (zh) 2022-04-05

Family

ID=80870597

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111442040.8A Pending CN114281840A (zh) 2021-11-30 2021-11-30 查询语句的解析方法、装置以及存储介质

Country Status (1)

Country Link
CN (1) CN114281840A (zh)

Similar Documents

Publication Publication Date Title
CN109299110A (zh) 数据查询方法、装置、存储介质和电子设备
CN114691786A (zh) 数据血缘关系的确定方法及装置、存储介质、电子装置
CN112416962A (zh) 数据查询方法、装置以及存储介质
US8838550B1 (en) Readable text-based compression of resource identifiers
CN110795069A (zh) 代码分析方法、智能终端及计算机可读存储介质
CN114064601B (zh) 存储过程转换方法、装置、设备和存储介质
CN110909168A (zh) 知识图谱的更新方法和装置、存储介质及电子装置
CN112988780A (zh) 数据校核方法和装置、存储介质及电子设备
CN112667632B (zh) 一种元数据处理方法及装置
CN113467777A (zh) 路径识别方法、装置和系统
CN113505143B (zh) 语句类型的转换方法、装置、存储介质及电子装置
CN116827774A (zh) 一种业务分析方法、装置、设备及存储介质
CN114676678A (zh) 结构化查询语言数据的解析方法、装置和电子设备
CN112860699A (zh) 数据库的管理方法和装置、存储介质及电子装置
CN114281840A (zh) 查询语句的解析方法、装置以及存储介质
CN110874365B (zh) 一种信息查询方法及其相关设备
CN116737760A (zh) 数据的查询方法及装置、非易失性存储介质、电子设备
CN106933926B (zh) 数据表的过滤方法及装置
CN113760961A (zh) 数据查询方法和装置
CN115203248A (zh) 数据库表空间的快速查询方法及装置
CN114296696A (zh) 业务功能操作方法和装置、存储介质及电子设备
CN107220327A (zh) 基于MongoDB的数据查询方法及系统、服务终端、存储器
CN111078960B (zh) 一种电力调度系统设备实时检索的实现方法及系统
CN116974795A (zh) 一种业务路径生成、业务数据校验方法、装置及电子设备
CN117009430A (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