System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种动态编译视图的方法和系统技术方案_技高网

一种动态编译视图的方法和系统技术方案

技术编号:41186413 阅读:3 留言:0更新日期:2024-05-07 22:18
本发明专利技术涉及视图访问技术领域,提供一种动态编译视图的方法和系统,包括:在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中;在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查;根据依赖检查结果,对视图进行动态编译。本发明专利技术动态编译视图的方法和系统,可以减少开发工作;当视图依赖的数据库对象发生变化时,只需更新视图已有查询树中的数据库对象OID信息,不需要重新生成整个查询树;通过将重新更新后的数据库依赖对象表、查询树结构更新到视图系统表中,使得再次访问视图时即可获取最新的查询树结构,避免应用层手动删除视图和重建视图。

【技术实现步骤摘要】

本专利技术涉及视图访问,尤其涉及一种动态编译视图的方法和系统


技术介绍

1、视图(view)是一种虚拟的表,其结构和数据来自于一个或多个基本表,可以被当作普通表一样进行查询操作,但实际上不存储任何数据。在数据库中,视图可以被看作是一种数据访问的方式,它可以隐藏底层表的复杂性,提供简洁易懂的数据访问接口,方便用户进行查询、分析和报表等操作。

2、opengauss在创建视图时,会将视图依赖的查询语句解析为查询树结构,将查询树结构序列化后会保存到系统表中。其他sql语句访问视图时,从系统表中获取序列化后的查询树,经过反序列化并合并到当前sql的查询树中,进而实现视图的访问。但是,opengauss的视图在生成化查询树时,将数据库对象都转换为相应的对象标识符oid,oid是一种内部的标识,而sql中都是通过数据库对象名进行操作;当数据库对象发生删除后重新创建、重新编译等ddl操作时,数据库对象的oid会发生变化,就导致视图查询树信息中的oid失效,并且不确定变化后的数据库对象oid是什么,导致视图失效。

3、目前,opengauss通过一些依赖机制来检测视图失效的问题,让用户知道视图已经失效进而采取相应的措施,但是这种依赖对象粒度比较大,并且主要在数据库对象删除时进行依赖检测。这样当视图依赖的表、分区等数据库对象发生重建、重编译时,要么在删除依赖对象时级联删除该视图,要么在后续的执行中检测到依赖对象不存在而失效;用户要继续使用该视图则只能手动重新创建。

4、因此,如何提供一种视图编译方法,在检测到数据库对象发生变化时动态编译视图,重新更新视图的查询树结构,避免由于视图失效而导致操作失败,或者重新创建视图,成为亟待解决的技术问题。


技术实现思路

1、有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种动态编译视图的方法和系统。

2、根据本专利技术的第一方面,提供一种动态编译视图的方法,该方法包括:

3、在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中;

4、在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查;

5、根据依赖检查结果,对视图进行动态编译。

6、优选地,本专利技术动态编译视图的方法中,在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中,包括:

7、在创建视图时,通过解析视图依赖的查询语句,构建视图依赖的查询树结构;

8、通过从构建的查询树结构中提取视图依赖的数据库对象信息,通过保存提取的视图依赖的数据库对象信息,构建数据库依赖对象表;

9、将查询树结构和数据库依赖对象表序列化保存至系统表中。

10、优选地,本专利技术动态编译视图的方法中,数据库对象信息包括数据库对象的对象标识符、名称和类型信息。

11、优选地,本专利技术动态编译视图的方法中,在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查,包括:当其他sql语句访问视图时,从视图系统表中获取视图依赖的查询树结构,在将获取的查询树结构经过反序列化合并至当前sql语句的查询树之前,对视图依赖的数据库依赖对象表进行依赖检查。

12、优选地,本专利技术动态编译视图的方法中,在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查,包括:从视图系统中表中获取数据库依赖对象表,检查数据库依赖对象表中的每个数据库依赖对象的对象标识符是否有效。

13、优选地,本专利技术动态编译视图的方法中,根据依赖检查结果,对视图进行动态编译,包括:

14、如果数据库依赖对象表中,所有数据库依赖对象的对象标识符均有效,执行视图访问;

15、如果数据库依赖对象表中,有一个或多个数据库依赖对象的对象标识符无效,对数据库依赖对象进行解析,根据解析结果对视图进行动态编译。

16、优选地,本专利技术动态编译视图的方法中,如果数据库依赖对象表中,有一个或多个数据库依赖对象的对象标识符无效,对数据库依赖对象进行解析,根据解析结果对视图进行动态编译,包括:

17、根据数据库依赖对象的名称和类型信息对数据库依赖对象进行解析,根据解析结果查询符合视图依赖条件的数据库依赖对象;

18、当查询不到符合视图依赖条件的数据库依赖对象时,结束依赖检测,将视图判定为无效,向用户发送视图错误提示信息;

19、当查询到符合视图依赖条件的数据库依赖对象时,根据查询到的数据库依赖对象的对象标识符,对视图依赖的数据库依赖对象表以及查询树结构进行更新。

20、优选地,本专利技术动态编译视图的方法中,对视图依赖的数据库依赖对象表以及查询树结构进行更新,包括:根据查询到的数据库依赖对象的对象标识符,对视图依赖的数据库依赖对象表以及查询树结构中相应对象的对象标识符进行更新,将更新后的数据库依赖对象表以及查询树结构序列化保存至视图系统表中。

21、根据本专利技术的第二方面,提供一种动态编译视图的系统,该系统包括动态编译视图服务端,所述动态编译视图服务端用于:在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中;在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查;根据依赖检查结果,对视图进行动态编译。

22、优选地,本专利技术动态编译视图的系统的动态编译视图服务端包括:

23、创建视图模块,用于在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中;

24、解析视图模块,用于在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查;

25、动态编译模块,用于根据依赖检查结果,对视图进行动态编译。

26、根据本专利技术的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本专利技术第一方面所述的方法。

27、本专利技术动态编译视图的方法和系统,可以有效利用opengauss数据库中的已有查询树结构以及视图系统表,将动态编译工作集中在数据库的语义处理阶段,既限制了影响范围,也减少了大量的开发工作;当视图依赖的数据库对象发生变化时,只需要更新视图已有查询树中的数据库对象oid信息,不需要重新生成整个查询树;通过将重新更新后的数据库依赖对象表、查询树结构更新到视图系统表中,使得再次访问视图时即可获取最新的查询树结构,避免应用层手动删除视图和重建视图。

本文档来自技高网...

【技术保护点】

1.一种动态编译视图的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的动态编译视图的方法,其特征在于,在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中,包括:

3.根据权利要求2所述的动态编译视图的方法,其特征在于,数据库对象信息包括数据库对象的对象标识符、名称和类型信息。

4.根据权利要求1所述的动态编译视图的方法,其特征在于,在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查,包括:当其他SQL语句访问视图时,从视图系统表中获取视图依赖的查询树结构,在将获取的查询树结构经过反序列化合并至当前SQL语句的查询树之前,对视图依赖的数据库依赖对象表进行依赖检查。

5.根据权利要求1所述的动态编译视图的方法,其特征在于,在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查,包括:从视图系统中表中获取数据库依赖对象表,检查数据库依赖对象表中的每个数据库依赖对象的对象标识符是否有效。

6.根据权利要求1所述的动态编译视图的方法,其特征在于,根据依赖检查结果,对视图进行动态编译,包括:

7.根据权利要求6所述的动态编译视图的方法,其特征在于,如果数据库依赖对象表中,有一个或多个数据库依赖对象的对象标识符无效,对数据库依赖对象进行解析,根据解析结果对视图进行动态编译,包括:

8.根据权利要求7所述的动态编译视图的方法,其特征在于,对视图依赖的数据库依赖对象表以及查询树结构进行更新,包括:根据查询到的数据库依赖对象的对象标识符,对视图依赖的数据库依赖对象表以及查询树结构中相应对象的对象标识符进行更新,将更新后的数据库依赖对象表以及查询树结构序列化保存至视图系统表中。

9.一种动态编译视图的系统,其特征在于,所述系统包括动态编译视图服务端,所述动态编译视图服务端用于:在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中;在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查;根据依赖检查结果,对视图进行动态编译。

10.根据权利要求9所述的动态编译视图的系统,其特征在于,动态编译视图服务端包括:

...

【技术特征摘要】

1.一种动态编译视图的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的动态编译视图的方法,其特征在于,在创建视图时,构建视图依赖的查询树结构以及数据库依赖对象表,将构建的查询树结构以及数据库依赖对象表保存至视图系统表中,包括:

3.根据权利要求2所述的动态编译视图的方法,其特征在于,数据库对象信息包括数据库对象的对象标识符、名称和类型信息。

4.根据权利要求1所述的动态编译视图的方法,其特征在于,在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查,包括:当其他sql语句访问视图时,从视图系统表中获取视图依赖的查询树结构,在将获取的查询树结构经过反序列化合并至当前sql语句的查询树之前,对视图依赖的数据库依赖对象表进行依赖检查。

5.根据权利要求1所述的动态编译视图的方法,其特征在于,在解析视图引用时,对视图系统表中的数据库依赖对象表进行依赖检查,包括:从视图系统中表中获取数据库依赖对象表,检查数据库依赖对象表中的每个数据库依赖对象的对象标识符是否有效。

6.根据权利要求1所述的动态编译视图的方法,其...

【专利技术属性】
技术研发人员:那海涛何小栋
申请(专利权)人:北京海量数据技术股份有限公司
类型:发明
国别省市:

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

1