语句块执行计划的生成方法、装置、设备和存储介质制造方法及图纸

技术编号:26031216 阅读:30 留言:0更新日期:2020-10-23 21:08
本发明专利技术实施例公开了一种语句块执行计划的生成方法、装置、设备和存储介质。该方法包括:获取当前语句块;将所述当前语句块中关联有安全策略函数的第一语句改写为第二语句,其中,所述第一语句为插入语句、更新语句、删除语句或查询语句,所述第二语句为动态执行语句;基于所述第一语句改写后得到的目标语句块生成所述当前语句块的目标执行计划。本发明专利技术实施例通过采用上述技术方案,能够使得所生成的目标执行计划在第一语句关联任意安全策略函数以及在任意执行环境中都能够返回正确的执行结果,实现包含关联安全策略函数的第一语句的语句块的目标执行计划的重用。

【技术实现步骤摘要】
语句块执行计划的生成方法、装置、设备和存储介质
本专利技术涉及数据库
,尤其涉及一种语句块执行计划的生成方法、装置、设备和存储介质。
技术介绍
为了保证数据库中所存储数据的安全性,越来越多的数据库开始使用行级安全策略。在执行结构化查询语言(StructuredQueryLanguage,SQL)语句时,当SQL语句访问的数据库对象关联安全策略函数时,现有技术会在语义分析阶段对语句块中包含的数据库对象关联有安全策略函数的SQL语句进行改写,在SQL语句中增加谓词,并基于改写后的目标SQL语句生成目标执行计划。例如,假设存在表T(IDINT,PIDINT),表T存在安全策略函数P1,待执行原始SQL语句为“SELECT*FROMTOBJ,TP_OBJWHEREOBJ.PID=P_OBJ.ID”,则现有技术会在语义分析阶段将该待执行原始SQL语句改写为“SELECT*FROM(SELECT*FROMTWHERE“P1对应的谓词”)OBJ,(SELECT*FROMTWHERE“P1对应的谓词”)P_OBJWHEREOBJ.PID=P_OBJ.ID”。当SQL语句访问的数据库对象关联安全策略函数时,下列三种情况可能导致安全策略函数的谓词发生改变:第一,ALTER或者CREATEORREPLACE语句修改安全策略函数的定义;第二,为数据库对象添加新的安全策略函数,或者删除数据库对象已关联的安全策略函数;第三,安全策略函数中存在IF或CASEWHEN等条件子句,或者,引用了数据库运行环境中的信息或当前会话中的信息,即安全策略函数中引用了可能随着数据库服务器的运行时刻发生变化的信息。第三条比前两条更容易引发数据库对象的安全策略函数对应的谓词发生变化,相同的SQL语句执行计划可能会因为谓词的不同而生成完全不同的执行计划,错误使用相同SQL语句的执行计划,会导致返回执行结果错误。因此,为了保证SQL语句结果正确性,一旦SQL语句访问的数据库对象关联安全策略函数时,则SQL语句的执行计划不能重用。当在语句块包含多条SQL时,如函数FUNCTION(或过程PROCEDURE)定义体或者包PACKAGE定义体中,在复杂的应用中一个定义体中可能包含成千上万条SQL语句,如果只是其中一条或几条SQL语句与安全策略函数相关就导致整个定义体的执行计划不能重用的话,则定义体每次都需要重新解析整个语句块获取执行计划,代价是相当巨大的,而且一个过程可能重复调用多次或者互相引用。在实际应用场景中发现,由于语句块过于庞大且涉及了关联安全策略函数的数据库对象,导致整体计划不能重用,多次重复解析语句块耗费大量时间。从上可知,为了确保执行结果的正确性,当语句块中包含访问的数据库对象关联有安全策略函数的SQL语句时,采用现有技术生成的语句块的执行计划是不可重复利用的。
技术实现思路
有鉴于此,本专利技术实施例提供一种语句块执行计划的生成方法、装置、设备和存储介质,从而当语句块中包含访问的数据库对象关联有安全策略函数的SQL语句时,生成能够重复利用的执行计划。第一方面,本专利技术实施例提供了一种语句块执行计划的生成方法,包括:获取当前语句块;将所述当前语句块中关联有安全策略函数的第一语句改写为第二语句,其中,所述第一语句为插入语句、更新语句、删除语句或查询语句,所述第二语句为动态执行语句;基于所述第一语句改写后得到的目标语句块生成所述当前语句块的目标执行计划。第二方面,本专利技术实施例提供了一种语句块执行计划的生成装置,包括:语句块获取模块,用于获取当前语句块;语句改写模块,用于将所述当前语句块中关联有安全策略函数的第一语句改写为第二语句,其中,所述第一语句为插入语句、更新语句、删除语句或查询语句,所述第二语句为动态执行语句;计划生成模块,用于基于所述第一语句改写后得到的目标语句块生成所述当前语句块的目标执行计划。第三方面,本专利技术实施例提供了一种计算机设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本专利技术实施例所述的语句块执行计划的生成方法。第四方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本专利技术实施例所述的语句块执行计划的生成方法。在上述生成语句块执行计划的技术方案中,获取当前语句块,将当前语句块中关联有安全策略函数的插入语句、更新语句、删除语句和查询语句改写为动态执行语句,并根据改写后得到的目标语句块生成当前语句块的目标执行计划。本专利技术实施例通过采用上述技术方案,由于生成的目标执行计划中并不包含访问关联有安全策略函数的数据库对象的执行计划,因此,能够使得所生成的目标执行计划在第一语句关联任意安全策略函数以及在任意执行环境中都能够返回正确的执行结果,实现包含关联安全策略函数的第一语句的语句块的目标执行计划的重用。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本专利技术的其它特征、目的和优点将会变得更明显:图1为本专利技术实施例一提供的一种语句块执行计划的生成方法的流程示意图;图2为本专利技术实施例一提供的一种当前语句块中的第一语句的改写过程的流程示意图;图3为本专利技术实施例二提供的一种语句块执行计划的生成方法的流程示意图;图4为本专利技术实施例三提供的一种语句块执行计划的生成装置的结构框图;图5为本专利技术实施例四提供的一种计算机设备的结构示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部内容。此外,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合实施例一本专利技术实施例一提供一种语句块执行计划的生成方法。该方法可以由语句块执行计划的生成装置执行,其中,该装置可以由软件和/或硬件实现,一般可集成在计算机设备的,典型的,可以集成在承载有数据库的计算机设备中。图1是本专利技术实施例一提供的一种语句块执行计划的生成方法的流程示意图,如图1所示,该方法包括:S110、获取当前语句块。具体的,数据库所对应的服务器接收到客户端发送的SQL语句,此SQL语句可能是简单的单条SQL语句,如插入INSERT语句、更新UPDATE语句、删除DELETE语句、查询SELECT语句;也可能是BEGIN...END包裹的语句块,该语句块可能嵌套其它语句块;还可能是函数FUNCTION(或过程PROCEDURE)定义体或者包PACKAGE定义体中已定义方法的调用。服务器逐条解析已接收到的SQL语句,若所解析的当前SQL语句是语句块中的SQL语句,则将该语句块确定为当前语句块;以及,若所解析的当前SQL语句访问的数据库对象是函数或包方法等,则本文档来自技高网
...

【技术保护点】
1.一种语句块执行计划的生成方法,其特征在于,包括:/n获取当前语句块;/n将所述当前语句块中关联有安全策略函数的第一语句改写为第二语句,其中,所述第一语句为插入语句、更新语句、删除语句或查询语句,所述第二语句为动态执行语句;/n基于所述第一语句改写后得到的目标语句块生成所述当前语句块的目标执行计划。/n

【技术特征摘要】
1.一种语句块执行计划的生成方法,其特征在于,包括:
获取当前语句块;
将所述当前语句块中关联有安全策略函数的第一语句改写为第二语句,其中,所述第一语句为插入语句、更新语句、删除语句或查询语句,所述第二语句为动态执行语句;
基于所述第一语句改写后得到的目标语句块生成所述当前语句块的目标执行计划。


2.根据权利要求1所述的方法,其特征在于,所述将所述当前语句块中关联安全策略函数的第一语句改写为第二语句,包括:
将所述当前语句块的引用安全策略函数标识置为FALSE,并按照执行顺序将所述当前语句块中的第一条SQL语句确定为当前SQL语句;
解析所述当前SQL语句,并判断所述当前SQL语句是否为第一语句,若是,则将所述当前语句块的引用安全策略函数标识置为TURE,并继续解析所述当前SQL语句,直至所述当前SQL语句解析完成;若否,则继续解析所述当前SQL语句,直至所述当前SQL语句解析完成;
判断所述当前语句块的引用安全策略函数标识是否为TURE,若是,则将所述当前SQL语句改写为动态执行语句,将所述当前语句块的引用安全策略函数标识重置为FALSE,将所述当前语句块中的下一条SQL语句确定为当前SQL语句,并返回执行解析所述当前SQL语句的操作,直至不存在下一条SQL语句为止;若否,则将所述当前语句块中的下一条SQL语句确定为当前SQL语句,并返回执行解析所述当前SQL语句的操作,直至不存在下一条SQL语句为止。


3.根据权利要求1所述的方法,其特征在于,在所述基于所述第一语句改写后得到的目标语句块生成所述当前语句块的目标执行计划之后,还包括:
依据所述目标执行计划执行所述当前语句块。


4.根据权利要求1-3任一所述的方法,其特征在于,在所述基于所述第一语句改写后得到的目标语句块生成所述当前语句块的目标执行计划之后,还包括:
将所述当前语句块与所述目标执行计划对应存储于承载有所述当前数据库的计算机设备中。


5.根据权利要求4所述的方法,其特征在于,在所述将所述当前语句块中关联有安全策略函数的第一语句改写为第二语句之前,还包括:
确定承载有所述当前数据库的计算机设备中未存储与所述当前语句块相同的历史语句块。<...

【专利技术属性】
技术研发人员:望声宜孟正凌韩朱忠
申请(专利权)人:上海达梦数据库有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1