掌桥专利:专业的专利平台
掌桥专利
首页

一种SQL语句的语法解析方法及装置

文献发布时间:2023-06-19 18:32:25


一种SQL语句的语法解析方法及装置

技术领域

本申请涉及数据安全技术领域,具体而言,涉及一种SQL语句的语法解析方法及装置。

背景技术

目前,SQL语言应用于各行各业,并发挥着巨大的作用。但是随着使用场景的复杂化,SQL语法的嵌套使用频率开始不断增加,从而直接增强了SQL语法解析复杂度,进而使得SQL语法解析效率大幅下降。

发明内容

本申请实施例的目的在于提供一种SQL语句的语法解析方法及装置,能够在SQL语法解析过程中移除指定子树,从而提高SQL语言解析效率。

本申请实施例第一方面提供了一种SQL语句的语法解析方法,包括:

获取SQL语句和待移除对象;

对所述SQL语句进行解析,得到词素序列;

基于所述词素序列,确定语法树节点;

在忽略所述待移除对象的情况下,基于SQL语法对所述语法树节点进行节点连接,得到SQL语法树。

在上述实现过程中,该方法可以优先获取SQL语句和待移除对象;可见,该方法为了减少解析压力提高解析效率,提前选出了不影响解析效果的可移除对象,并将其作为SQL语句中的待移除对象,以使对SQL语句的解析可以对其进行关注与忽略,从而能够实现以此为基础的选择性语法解析效果。然后,该方法基于前述条件对SQL语句进行解析,得到词素序列,并基于词素序列,确定语法树节点;可见,该方法可以基于SQL语句中的词素确定语法树的节点,同时将待移除对象视作语法树中的子树,从而使得该方法能够在此处分清待移除对象的关系树,便于后续忽略对其的解析。基于上述结果,该方法可以在忽略待移除对象的情况下,基于SQL语法对语法树节点进行节点连接,得到SQL语法树。可见,该方法能够在忽略待移除对象的基础上实现SQL语句的语法解析,得到简练却又完整的SQL语法树,从而实现高效语法解析的效果。具体的,该方法中的待移除对象可以为where模块,其对应着where子树,而该where子树在该方法中被忽略了解析,从而使得where模块未参与到解析当中,进而使得该语法解析的过程更加高效,且结果也不逊色于传统解析结果。

进一步地,,所述获取SQL语句和待移除对象的步骤包括:

获取SQL语句和待移除对象,并对内存空间进行初始化。

在上述实现过程中,该方法可以通过接口接收一条完整的SQL语句,并在同时初始化内存空间,从而为该条完整SQL语句留出语法解析所需要的内存空间,进而便于SQL语句的准确解析,并且有利于同步解析多条SQL语句,避免其互相干扰。

进一步地,所述对所述SQL语句进行解析,得到词素序列的步骤包括:

对所述SQL语句进行解析,得到字符流;

在所述字符流中过滤语句相关字符,得到词素序列。

在上述实现过程中,该方法在对SQL语句进行解析,得到词素序列的过程中,可以优先对SQL语句进行解析,得到字符流;可见,该方法能够无差别的获取到所有字符,并在此之后对字符流中的语句相关字符进行过滤,从而得到不具有注释等相关字符的词素序列,进而有利于提高对SQL语句的解析精度。

进一步地,所述在忽略所述待移除对象的情况下,基于SQL语法对所述语法树节点进行节点连接,得到SQL语法树的步骤包括:

在所述词素序列中识别出所述待移除对象,并确定所述待移除对象在所述词素序列中的始末位置;

在基于所述始末位置对所述待移除对象忽略的情况下,基于SQL语法对所述语法树节点进行节点连接,得到SQL语法树。

在上述实现过程中,该方法可以在忽略待移除对象的情况下,基于SQL语法对语法树节点进行节点连接,得到SQL语法树的过程中,可以优先在词素序列中识别出待移除对象,并确定待移除对象在词素序列中的始末位置;可见,该方法能够在词素序列中优先识别出where等实际可用性不高的多个待移除对象,然后再在词素序列中进一步识别待移除对象的始末位置,从而便于该方法在后续对待移除对象进行全面的忽略式移除。具体的,该方法可以基于始末位置忽略待移除对象的同时,基于SQL语法对语法树节点进行节点连接,从而得到移除待移除对象后的SQL语法树。

进一步地,所述基于SQL语法对所述语法树节点进行节点连接,得到SQL语法树的步骤包括:

基于SQL语法和自顶向下的递归下降算法对所述语法树节点进行语法结构分析,得到语法结构分析结果;

基于所述结构分析结果对所述语法树节点进行节点连接,得到SQL语法树。

在上述实现过程中,该方法可以再基于SQL语法对语法树节点进行节点连接,得到SQL语法树的过程中,优先基于SQL语法和自顶向下的递归下降算法对语法树节点进行语法结构分析,得到语法结构分析结果;然后再基于结构分析结果对语法树节点进行节点连接,得到SQL语法树。可见,该方法能够做到有据可依地SQL语法树的生成,从而更精确地实现SQL语句的解析。

进一步地,所述方法还包括:

根据所述SQL语法树对待脱敏数据进行数据脱敏,得到脱敏语句;

将所述脱敏语句发送至服务器进行送检,得到送检结果;其中,所述送检结果用于表示所述待脱敏数据是否脱敏成功。

在上述实现过程中,该方法可以在获取到SQL语法树之后,根据SQL语法树对待脱敏数据进行数据脱敏,得到脱敏语句;然后,再将脱敏语句发送至服务器进行送检,得到送检结果;其中,送检结果用于表示待脱敏数据是否脱敏成功。可见,该方法能够基于大数据防泄漏系统,实现移除where子树的SQL语法解析,从而能够提高SQL语法解析效率,进而能够降低无关数据的影响,减少数据防泄漏系统的压力。

本申请实施例第二方面提供了一种SQL语句的语法解析装置,所述SQL语句的语法解析装置包括:

获取单元,用于获取SQL语句和待移除对象;

解析单元,用于对所述SQL语句进行解析,得到词素序列;

确定单元,用于基于所述词素序列,确定语法树节点;

生成单元,用于在忽略所述待移除对象的情况下,基于SQL语法对所述语法树节点进行节点连接,得到SQL语法树。

进一步地,所述获取单元具体用于获取SQL语句和待移除对象,并对内存空间进行初始化。

进一步地,所述解析单元包括:

解析子单元,用于对所述SQL语句进行解析,得到字符流;

过滤子单元,用于在所述字符流中过滤语句相关字符,得到词素序列。

进一步地,所述生成单元包括:

识别子单元,用于在所述词素序列中识别出所述待移除对象,并确定所述待移除对象在所述词素序列中的始末位置;

生成子单元,用于在基于所述始末位置对所述待移除对象忽略的情况下,基于SQL语法对所述语法树节点进行节点连接,得到SQL语法树。

进一步地,所述生成子单元包括:

语法分析模块,用于基于SQL语法和自顶向下的递归下降算法对所述语法树节点进行语法结构分析,得到语法结构分析结果;

节点连接模块,用于基于所述结构分析结果对所述语法树节点进行节点连接,得到SQL语法树。

进一步地,所述SQL语句的语法解析装置还包括:

脱敏单元,用于根据所述SQL语法树对待脱敏数据进行数据脱敏,得到脱敏语句;

送检单元,用于将所述脱敏语句发送至服务器进行送检,得到送检结果;其中,所述送检结果用于表示所述待脱敏数据是否脱敏成功。

本申请实施例第三方面提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例第一方面中任一项所述的SQL语句的语法解析方法。

本申请实施例第四方面提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例第一方面中任一项所述的SQL语句的语法解析方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种SQL语句的语法解析方法的流程示意图;

图2为本申请实施例提供的一种SQL语句的语法解析方法的流程示意图;

图3为本申请实施例提供的一种SQL语句的语法解析装置的结构示意图;

图4为本申请实施例提供的一种SQL语句的语法解析装置的结构示意图;

图5为本申请实施例提供的一种SQL语句的语法解析方法的举例流程示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

实施例1

请参看图1,图1为本实施例提供了一种SQL语句的语法解析方法的流程示意图。其中,该SQL语句的语法解析方法包括:

S101、获取SQL语句和待移除对象。

本实施例中,该方法提供的是一种基于ANTLR的可移除where子树的SQL语法解析方法。

本实施例中,该步骤可以通过接口接收单条SQL语句。

S102、对SQL语句进行解析,得到词素序列。

本实施例中,该方法可以通过词法分析器从头拆解完整的SQL语句;其中,生成的词素序列作为生成语法树所需要的节点。

S103、基于词素序列,确定语法树节点。

本实施例中,该方法可以通过语法分析器基于语法定义的关联自顶向下链接节点。

S104、在忽略待移除对象的情况下,基于SQL语法对语法树节点进行节点连接,得到SQL语法树。

本实施例中,该方法可以基于判断where模块的算法,通过语法分析器在遇到where模块的所有节点时,进行跳过操作,最终生成一棵移除where模块的语法解析树,完成移除where模块的SQL语法解析。

本实施例中,本申请提供了一种基于ANTLR的可移除where子树的SQL语法解析方法,基于ANTLR的该种语法解析方法,可以直接对where子树的相关语法识别进行修改实现对应模块的移除。

本实施例中,该方法的执行主体可以为计算机、服务器等计算装置,对此本实施例中不作任何限定。

在本实施例中,该方法的执行主体还可以为智能手机、平板电脑等智能设备,对此本实施例中不作任何限定。

本实施例中,考虑目前方法可以对接收到的单段SQL语句进行语法解析,得到AST语法解析树;然后,再遍历AST语法解析树,将AST语法解析树与元数据库进行匹配,提取AST语法解析树中节点的信息;最后按照制定的约束条件,将AST语法解析树进行变形,得到形变后的AST语法解析树。但是,在实际应用中,语法树复杂程度偏高,目前的这种方法无法较大程度提高解析效率;面对嵌套较多,复杂度较高的SQL语句时,该方法存在语法不完整隐患;同时,在许多SQL应用领域中,如:数据库访问控制相关,SQL语句中的where模块实际可用性不高可直接跳过相关语法解析。因此,本申请提供了一种能够在ANTLR的语法树生成之前添加where模块的专项处理的方法,从而通过不解析where模块的方式,生成一棵不包含where节点的语法解析树。从而实现SQL语法的高效解析,若特殊情况下where模块需要正常解析时,该方法还可以关闭移除where模块的流程,从而使之能够传统地解析完整SQL语句,进而提高了该方法的使用灵活性。

可见,实施本实施例所描述的SQL语句的语法解析方法,能够提高SQL语法解析效率,降低无关数据的影响,减少数据防泄漏系统的压力;同时,还能够应用于各种SQL语言,提高其可移植性;另外,该方法可基于ANTLR进行语法解析,而ANTLR又可以支持多种语言,因此该方法能够轻松地做到跨平台/语言的支持;最后,该方法还可以与其他产品进行联动,从而使得该方法更具有通用性。

实施例2

请参看图2,图2为本实施例提供了一种SQL语句的语法解析方法的流程示意图。其中,该SQL语句的语法解析方法包括:

S201、获取SQL语句和待移除对象,并对内存空间进行初始化。

S202、对SQL语句进行解析,得到字符流。

S203、在字符流中过滤语句相关字符,得到词素序列。

S204、基于词素序列,确定语法树节点。

S205、在词素序列中识别出待移除对象,并确定待移除对象在词素序列中的始末位置。

S206、在基于始末位置对待移除对象忽略的情况下,基于SQL语法和自顶向下的递归下降算法对语法树节点进行语法结构分析,得到语法结构分析结果。

S207、基于结构分析结果对语法树节点进行节点连接,得到SQL语法树。

S208、根据SQL语法树对待脱敏数据进行数据脱敏,得到脱敏语句。

S209、将脱敏语句发送至服务器进行送检,得到送检结果;其中,送检结果用于表示待脱敏数据是否脱敏成功。

本实施例中,该方法基于图5举例如下:

(1)系统初始化的过程中,可以通过接口接收一条完整的SQL语句,并初始化内存空间;

(2)ANTLR已编译过SQL对应的词法文件并生成对应的词法分析器。接口将使用该词法分析器,读入输入的字符流,过滤输入SQL中的注释等相关字符,产生记号序列,提交给语法分析器使用;

(3)ANTLR已编译过SQL对应的语法文件并生成对应的语法分析器。接口将使用该语法分析器,接收词法分析器提供的记号串,根据对应的SQL语法使用自顶向下的递归下降LL(*)算法进行语法结构分析;

(4)语法分析器在进行语法结构分析的过程中,遇到记号”where”时,调用where模块算法,得到该SQL语句中完整where模块的开始位置和终止为止,并记录嵌套层数,保证解析SQL时跳过整个where模块,最终生成一棵移除where模块的语法解析树,完成移除where模块的SQL语法解析。

本实施例中,该方法的执行主体可以为计算机、服务器等计算装置,对此本实施例中不作任何限定。

在本实施例中,该方法的执行主体还可以为智能手机、平板电脑等智能设备,对此本实施例中不作任何限定。

举例来说,该方法可以应用于大数据防泄漏系统的协议解析引擎设计当中,具体的,该方法能够基于大数据防泄漏系统,实现可移除where子树的SQL语法解析效果,从而以此来提高SQL语法解析效率,从而降低无关数据的影响,减少数据防泄漏系统的压力。

其中,按照本申请详细描述中的方法,该方法可以具体的举例如下:

(1)系统接收客户端发送的需送检的SQL语句;

(2)语法解析装置将SQL语句进行解析,生成已移除where子树的对应语法解析树;

(3)系统根据生成的语法解析树对需要进行脱敏的模块进行数据脱敏操作,并将脱敏后的SQL语句发送给服务器进行送检;

(4)通过送检,数据脱敏成功。

实施这种实施方式,能够使得语法解析器在顺序读入符号流过程中,若遇到where符号,当前位置为where模块开始位置,进入where模块算法;同时,移动符号流读取指针,完成移除。依次读取符号流,若遇到括号便计数,直到遇到分号时或者左括号数大于右括号数时,where模块结束,当前位置为where模块结束位置。语法解析器在生成语法树时,指针跳过where模块内相关节点,不改变原SQL语法结构。

本实施例中,该方法能够对现有SQL语法解析的效率优化程度较低,针对复杂SQL语句无法实现优化解析的问题进行解决;还能够对现有SQL语法进行修改,处理复杂度较高的SQL语句时存在语法不完整隐患的问题进行解决。并在此基础上,通过移除多重where子树,提高SQL语法解析效率,实现语法解析高效性;通过不对SQL语法进行修改,保留SQL语法完整性的方法提高解析结果的完整性;通过在各种SQL语言上配置使用,提高可移植性和通用性;再通过需求来灵活的调整开启移除和关闭移除的装填,从而满足高效解析和完整解析两种需求,进而提高语法解析的灵活性。

可见,实施本实施例所描述的SQL语句的语法解析方法,能够提高SQL语法解析效率,降低无关数据的影响,减少数据防泄漏系统的压力;同时,还能够应用于各种SQL语言,提高其可移植性;另外,该方法可基于ANTLR进行语法解析,而ANTLR又可以支持多种语言,因此该方法能够轻松地做到跨平台/语言的支持;最后,该方法还可以与其他产品进行联动,从而使得该方法更具有通用性。

实施例3

请参看图3,图3为本实施例提供的一种SQL语句的语法解析装置的结构示意图。如图3所示,该SQL语句的语法解析装置包括:

获取单元310,用于获取SQL语句和待移除对象;

解析单元320,用于对SQL语句进行解析,得到词素序列;

确定单元330,用于基于词素序列,确定语法树节点;

生成单元340,用于在忽略待移除对象的情况下,基于SQL语法对语法树节点进行节点连接,得到SQL语法树。

本实施例中,对于SQL语句的语法解析装置的解释说明可以参照实施例1或实施例2中的描述,对此本实施例中不再多加赘述。

可见,该装置能够对现有SQL语法解析的效率优化程度较低,针对复杂SQL语句无法实现优化解析的问题进行解决;还能够对现有SQL语法进行修改,处理复杂度较高的SQL语句时存在语法不完整隐患的问题进行解决。并在此基础上,通过移除多重where子树,提高SQL语法解析效率,实现语法解析高效性;通过不对SQL语法进行修改,保留SQL语法完整性的方法提高解析结果的完整性;通过在各种SQL语言上配置使用,提高可移植性和通用性;再通过需求来灵活的调整开启移除和关闭移除的装填,从而满足高效解析和完整解析两种需求,进而提高语法解析的灵活性。

可见,实施本实施例所描述的SQL语句的语法解析装置,能够提高SQL语法解析效率,降低无关数据的影响,减少数据防泄漏系统的压力;同时,还能够应用于各种SQL语言,提高其可移植性;另外,该方法可基于ANTLR进行语法解析,而ANTLR又可以支持多种语言,因此该方法能够轻松地做到跨平台/语言的支持;最后,该方法还可以与其他产品进行联动,从而使得该方法更具有通用性。

实施例4

请参看图4,图4为本实施例提供的一种SQL语句的语法解析装置的结构示意图。如图4所示,该SQL语句的语法解析装置包括:

获取单元310,用于获取SQL语句和待移除对象;

解析单元320,用于对SQL语句进行解析,得到词素序列;

确定单元330,用于基于词素序列,确定语法树节点;

生成单元340,用于在忽略待移除对象的情况下,基于SQL语法对语法树节点进行节点连接,得到SQL语法树。

作为一种可选的实施方式,获取单元310具体用于获取SQL语句和待移除对象,并对内存空间进行初始化。

作为一种可选的实施方式,解析单元320包括:

解析子单元321,用于对SQL语句进行解析,得到字符流;

过滤子单元322,用于在字符流中过滤语句相关字符,得到词素序列。

作为一种可选的实施方式,生成单元340包括:

识别子单元341,用于在词素序列中识别出待移除对象,并确定待移除对象在词素序列中的始末位置;

生成子单元342,用于在基于始末位置对待移除对象忽略的情况下,基于SQL语法对语法树节点进行节点连接,得到SQL语法树。

作为一种可选的实施方式,生成子单元342包括:

语法分析模块,用于基于SQL语法和自顶向下的递归下降算法对语法树节点进行语法结构分析,得到语法结构分析结果;

节点连接模块,用于基于结构分析结果对语法树节点进行节点连接,得到SQL语法树。

作为一种可选的实施方式,SQL语句的语法解析装置还包括:

脱敏单元350,用于根据SQL语法树对待脱敏数据进行数据脱敏,得到脱敏语句;

送检单元360,用于将脱敏语句发送至服务器进行送检,得到送检结果;其中,送检结果用于表示待脱敏数据是否脱敏成功。

本实施例中,对于SQL语句的语法解析装置的解释说明可以参照实施例1或实施例2中的描述,对此本实施例中不再多加赘述。

可见,实施本实施例所描述的SQL语句的语法解析装置,能够提高SQL语法解析效率,降低无关数据的影响,减少数据防泄漏系统的压力;同时,还能够应用于各种SQL语言,提高其可移植性;另外,该方法可基于ANTLR进行语法解析,而ANTLR又可以支持多种语言,因此该方法能够轻松地做到跨平台/语言的支持;最后,该方法还可以与其他产品进行联动,从而使得该方法更具有通用性。

本申请实施例提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例1或实施例2中的SQL语句的语法解析方法。

本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例1或实施例2中的SQL语句的语法解析方法。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

相关技术
  • 一种标记SQL语句的方法、装置和电子设备
  • 基于SQL语句的数据修改方法、装置及存储介质
  • SQL语句的性能分析方法、装置、存储介质和电子设备
  • SQL语句生成方法、装置及计算机可读存储介质
  • 一种语法解析方法、装置、设备及存储介质
  • 一种数据关系语法解析方法及装置、电子设备、存储介质
技术分类

06120115599281