一种数据库变量参数作用域控制方法、装置及设备与流程

文档序号:33024972发布日期:2023-01-20 19:23阅读:33来源:国知局
一种数据库变量参数作用域控制方法、装置及设备与流程

1.本发明属于数据库技术领域,尤其是涉及一种数据库变量参数作用域控制方法、装置及设备。


背景技术:

2.数据库产品中可能存在大量的系统级(作用于当前的数据库服务)的变量参数,这些系统级的变量参数作用非常广泛,有用于优化的变量参数,有用于隔离某些功能的变量参数,也有一些干预数据库某些中间行为的变量参数。无论是哪一种变量参数对于数据库来讲都是非常非常重要的,但是目前设定参数的方法只有两种,方法一是写在所有相关配置文件中达到服务级全局有效的目的,方法二是使用独立sql语句的方式在数据库客户端中设定。
3.但是,两种方法在数据库中的作用域(影响范围)均有可能造成影响过大的负作用隐患,方法一服务全局生效是对所有执行的sql语句的算法均受到影响,方法二会对当前连接生效也会对当前连接运行的所有sql语句产生影响。如果修改了一个参数,可能会影响其他语句的执行,那结果不可估量。
4.因此,对数据库变量参数的作用域进行更细粒度地控制具有重要意义。


技术实现要素:

5.有鉴于此,本发明旨在提出一种数据库变量参数作用域控制方法、装置及设备,以对数据库变量参数的作用域进行更细粒度地控制。
6.为达到上述目的,本发明的技术方案是这样实现的:第一方面,本技术提出一种数据库变量参数作用域控制方法,包括:获取客户端发送的sql语句;解析所述sql语句,确定所述sql语句内各层查询语句间的嵌套关系;对目标查询语句进行语法合法性解析、语义合法性解析以及根据所述目标查询语句内预设的提示内容建立参数对象列表,并检查参数的合法性;所述提示内容包括参数变量及所述参数变量的作用域信息,所述参数变量包括变量名及赋予所述变量名的新变量值,所述参数对象列表用于存储所述参数变量内的所述变量名与所述变量名对应的所述新变量值,所述目标查询语句为所述sql语句中多层查询语句中的任意一层;建立所述目标查询语句的抽象语法树,将所述参数对象列表存储至所述抽象语法树的结构中;根据所述嵌套关系,将所述sql语句内所有的抽象语法树构建为一个完整语法树;执行所述sql语句的完整语法树,并返回执行结果。
7.可选的,所述对目标查询语句进行语法合法性解析、语义合法性解析以及根据所述目标查询语句内预设的提示内容建立参数对象列表,并检查参数的合法性,包括:对目标查询语句进行语法解析,形成所述目标查询语句的结构实体,并检查所述
目标查询语句的语法合法性,若合法则继续执行,若不合法则报错;对所述目标查询语句的结构实体进行语义解析,并检查所述目标查询语句的结构实体的语义合法性,若合法则继续执行,若不合法则报错;对所述目标查询语句内的提示内容进行参数的对象化,建立参数对象列表,并检查所述参数的合法性,若合法则继续执行,若不合法则报错。
8.可选的,预设的提示内容是指在用户生成所述sql语句时,编写在所述目标查询语句内的关键词后面的提示内容。
9.可选的,若提示内容的参数变量的作用域信息为父查询语句影响子查询语句的继承关系,则设置包括变量名和新变量值的提示;若提示内容的变量参数的作用域信息仅作用于所述提示内容所在层的查询语句,则设置包括作用域标识、变量名以及新变量值的提示,所述作用域标识为local。
10.可选的,在所述根据所述嵌套关系,将所述sql语句内所有的抽象语法树构建为一个完整语法树之后,包括:遍历所述完整语法树,根据每个参数变量对应的作用域信息,确定所述参数变量与所述参数变量作用的抽象语法树的关联关系;根据所述关联关系,将所述参数变量的参数对象列表存储至对应的抽象语法树;所述执行所述sql语句的完整语法树,包括:所述sql语句中的每层抽象语法树根据对应的参数对象列表修改参数,并执行所述sql语句的完整语法树。
11.第二方面,本技术还提出一种数据库变量参数作用域控制装置,包括:获取模块,用于获取客户端发送的sql语句;第一解析模块,用于解析所述sql语句,确定所述sql语句内各层查询语句间的嵌套关系;第二解析模块,用于对目标查询语句进行语法合法性解析、语义合法性解析以及根据所述目标查询语句内预设的提示内容建立参数对象列表,并检查参数的合法性;所述提示内容包括参数变量及所述参数变量的作用域信息,所述参数变量包括变量名及赋予所述变量名的新变量值,所述参数对象列表用于存储所述参数变量内的所述变量名与所述变量名对应的所述新变量值,所述目标查询语句为所述sql语句中多层查询语句中的任意一层;第一生成模块,用于建立所述目标查询语句的抽象语法树,将所述参数对象列表存储至所述抽象语法树的结构中;第二生成模块,用于根据所述嵌套关系,将所述sql语句内所有的抽象语法树构建为一个完整语法树;执行模块,用于执行所述sql语句的完整语法树,并返回执行结果。
12.可选的,所述第二解析模块包括:语法解析子模块,用于对目标查询语句进行语法解析,形成所述目标查询语句的结构实体,并检查所述目标查询语句的语法合法性,若合法则继续执行,若不合法则报错;语法解析子模块,用于对所述目标查询语句的结构实体进行语义解析,并检查所述目标查询语句的结构实体的语义合法性,若合法则继续执行,若不合法则报错;
对象化子模块,用于对所述目标查询语句内的提示内容进行参数的对象化,建立参数对象列表,并检查所述参数的合法性,若合法则继续执行,若不合法则报错。
13.可选的,该装置还包括关联模块,用于遍历所述完整语法树,根据每个参数变量对应的作用域信息,确定所述参数变量与所述参数变量作用的抽象语法树的关联关系;根据所述关联关系,将所述参数变量的参数对象列表存储至对应的抽象语法树;所述执行模块,还用于所述sql语句中的每层抽象语法树根据对应的参数对象列表修改参数,并执行所述sql语句的完整语法树。
14.第三方面,本技术还提出一种数据库变量参数作用域控制设备,包括存储器和处理器,所述存储器用于存储代码或程序,所述处理器用于调用所述代码或程序实现第一方面所述的一种数据库变量参数作用域控制方法。
15.相对于现有技术,本发明所述的一种数据库变量参数作用域控制方法、装置及设备具有以下有益效果:本技术使用提示的方式设定参数变量,通过建立各层查询语句的抽象语法树并将抽象语法树根据各层查询语句的嵌套关系建立完成语法树,对整个sql语句查询过程的实现方式进行了完整揭露。在需要进行参数调整的查询语句中设置对应的提示内容,并在提示内容中设置作用域信息及参数变量,明确设置有提示内容的每层查询语句的变量参数的作用域,有效解决业务场景中对于变量参数的更小粒度的控制的需要。
附图说明
16.构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1为本发明实施例所述的一种数据库变量参数作用域控制方法流程图。
17.图2为本发明实施例所述的一种数据库变量参数作用域控制装置结构图。
具体实施方式
18.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
19.在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
20.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语
在本发明中的具体含义。
21.下面将参考附图并结合实施例来详细说明本发明。
22.图1为本技术实施例提供的一种数据库变量参数作用域控制方法流程图,参见图1,一种数据库变量参数作用域控制方法,具体步骤包括:s101、获取客户端发送的sql语句。
23.s102、解析所述sql语句,确定所述sql语句内各层查询语句间的嵌套关系。
24.s103、对目标查询语句进行语法合法性解析、语义合法性解析以及根据所述目标查询语句内预设的提示内容建立参数对象列表,并检查参数的合法性;所述提示内容包括参数变量及所述参数变量的作用域信息,所述参数变量包括变量名及赋予所述变量名的新变量值,所述参数对象列表用于存储所述参数变量内的所述变量名与所述变量名对应的所述新变量值,所述目标查询语句为所述sql语句中多层查询语句中的任意一层。
25.在用户生成所述sql语句时,提示内容编写在所述目标查询语句内的关键词后面的提示内容。
26.若提示内容的参数变量的作用域信息为父查询语句影响子查询语句的继承关系,则设置包括变量名和新变量值的提示,所述提示的语句结构为“/*+变量名(新变量值)*/”;若提示内容的变量参数的作用域信息仅作用于所述提示内容所在层的查询语句,则设置包括作用域标识、变量名以及新变量值的提示,所述作用域标识为local,则所述提示的语句结构为“/*+local变量名(新变量值)*/”。
27.s104、建立所述目标查询语句的抽象语法树,将所述参数对象列表存储至所述抽象语法树的结构中。
28.s105、根据所述嵌套关系,将所述sql语句内所有的抽象语法树构建为一个完整语法树。
29.s106、执行所述sql语句的完整语法树,并返回执行结果。
30.基于上述的步骤s101-s106可知,本技术使用提示的方式设定参数变量,通过建立各层查询语句的抽象语法树并将抽象语法树根据各层查询语句的嵌套关系建立完成语法树,对整个sql语句查询过程的实现方式进行了完整揭露。在需要进行参数调整的查询语句中设置对应的提示内容,并在提示内容中设置作用域信息及参数变量,明确设置有提示内容的每层查询语句的变量参数的作用域,有效解决业务场景中对于变量参数的更小粒度的控制的需要。
31.上述实施例中,步骤s103可能存在多种实现方式,下面就其中一种实现方式进行展开介绍。
32.a1、对目标查询语句进行语法解析,形成所述目标查询语句的结构实体,并检查所述目标查询语句的语法合法性,若合法则继续执行,若不合法则报错。
33.对目标查询语句进行语法解析是将sql语句的语法、词法的解析,使普通的sql字符串变成有意义的sql语句结构实体。比如select代表查询语句,update代表更新语句。
34.a2、对所述目标查询语句的结构实体进行语义解析,并检查所述目标查询语句的结构实体的语义合法性,若合法则继续执行,若不合法则报错。
35.对所述目标查询语句的结构实体进行语义解析,是对当前层的查询语句的语义进行解析,使sql符合sql的规范。比如查询语句必须写成select...from...where..这样的顺
序。select后面是输出的投影列,from后面代表表名,where代表条件等等。
36.a3、对所述目标查询语句内的提示内容进行参数的对象化,建立参数对象列表,并检查所述参数的合法性,若合法则继续执行,若不合法则报错。
37.提示内容为在关键词后面加提示,提示可以有一个或多个,每个提示的结构为/*+ 变量1(变量值1)*/ (作用域信息为继承关系,父查询语句的参数调整变化会继承到子查询语句,),或,/*+ local 变量1(变量值1)*/ (作用域信息为私有,只在当前层的查询语句内执行参数调整变化)。
38.提示内容是在用户编写sql语句时加入的。
39.参数对象化是指解析后将普通的字符串变成程序对象的形式。将提示/*+ 变量1(变量值1)*/ ,通过参数对象化后会转化成程序对象类{ 对象名, 对象值},不再需要一个一个字符解析,而是整体确定对象名或对象值,提高后续查询语句的读取效率。
40.上述实施例中,步骤s104-s105可能存在多种实现方式,下面就其中一种实现方式进行展开介绍。
41.b1、遍历所述完整语法树,根据每个参数变量对应的作用域信息,确定所述参数变量与所述参数变量作用的抽象语法树的关联关系。
42.关联关系确定参数变量的作用域,对应作用的抽象语法树。
43.若为继承关系,父查询中指定了参数变量,但是子查询没有指定那么子查询默认是继续父查询指定的参数变量,兄弟查询也是类似的。
44.若父查询中指令作用域信息为私有,则变量参数只作用域当前层。
45.b2、根据所述关联关系,将所述参数变量的参数对象列表存储至所述参数变量的能够作用的所有查询语法树中最上层的查询语法树。
46.b3、所述sql语句中的每层抽象语法树根据对应的参数对象列表修改参数,并执行所述sql语句的完整语法树。
47.根据上述的步骤b1-b3可知,优化避免了每层查询语法树存储一份变量参数列表,节省空间,且提高查询效率。
48.具体的,为了方便理解,下述结合语句结构进行说明。
49.1.select /*+ local 参数1(新参数值) */ 表1列1 from 表1 where 表1列2 in (select 表2列1 from 表2 where 表2列2》0);这时的参数1是一个私有的作用域(提示中标注了local前缀),它不会被传递给in的子查询,in子查询中的参数1的值还是原来的值而不是新参数值1。
50.2.select /*+ 参数1(新参数值1) */ 表1列1 from 表1 where 表1列2 in (select 表2列1 fr om 表2 where 表2列2》0);此时的参数1就会将新参数值1传递到in的子查询中以达到子查询对其父查询的参设定作用域的一个继承。
51.3.select /*+ 参数1(新参数值1) */ 表1列1 from where 表1列2 in (select /*+ 参数1(参数值2) */ 表2列1 from 表2 where 表2列1》0);此时的参数1被设置了两次,但是根据优先级的原则,参数值2的值被父查询中的新参数值1所覆盖。
52.基于上述的一种数据库变量参数作用域控制方法,本技术还对应提出一种数据库
变量参数作用域控制装置,具体说明如下。
53.图2为本技术提出的一种数据库变量参数作用域控制装置示意图,参加图2,一种数据库变量参数作用域控制装置,包括:获取模块201,用于获取客户端发送的sql语句;第一解析模块202,用于解析所述sql语句,确定所述sql语句内各层查询语句间的嵌套关系;第二解析模块203,用于对目标查询语句进行语法合法性解析、语义合法性解析以及根据所述目标查询语句内预设的提示内容建立参数对象列表,并检查参数的合法性;所述提示内容包括参数变量及所述参数变量的作用域信息,所述参数变量包括变量名及赋予所述变量名的新变量值,所述参数对象列表用于存储所述参数变量内的所述变量名与所述变量名对应的所述新变量值,所述目标查询语句为所述sql语句中多层查询语句中的任意一层;第一生成模块204,用于建立所述目标查询语句的抽象语法树,将所述参数对象列表存储至所述抽象语法树的结构中;第二生成模块205,用于根据所述嵌套关系,将所述sql语句内所有的抽象语法树构建为一个完整语法树;执行模块206,用于执行所述sql语句的完整语法树,并返回执行结果。
54.在一种可能的实现方式中,所述第二解析模块203包括:语法解析子模块,用于对目标查询语句进行语法解析,形成所述目标查询语句的结构实体,并检查所述目标查询语句的语法合法性,若合法则继续执行,若不合法则报错;语法解析子模块,用于对所述目标查询语句的结构实体进行语义解析,并检查所述目标查询语句的结构实体的语义合法性,若合法则继续执行,若不合法则报错;对象化子模块,用于对所述目标查询语句内的提示内容进行参数的对象化,建立参数对象列表,并检查所述参数的合法性,若合法则继续执行,若不合法则报错。
55.在另一种可能的实现方式中,一种数据库变量参数作用域控制装置还包括:关联模块,用于遍历所述完整语法树,根据每个参数变量对应的作用域信息,确定所述参数变量与所述参数变量作用的抽象语法树的关联关系;根据所述关联关系,将所述参数变量的参数对象列表存储至对应的抽象语法树;所述执行模块206,还用于所述sql语句中的每层抽象语法树根据对应的参数对象列表修改参数,并执行所述sql语句的完整语法树。
56.基于上述的一种数据库变量参数作用域控制方法,本技术还对应提出一种数据库变量参数作用域控制设备,具体说明如下。
57.一种数据库变量参数作用域控制设备,包括存储器和处理器,所述存储器用于存储代码或程序,所述处理器用于调用所述代码或程序实现上述的一种数据库变量参数作用域控制方法。
58.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1