对数据库管理系统进程进行递归路径分析的系统和方法

文档序号:6478438阅读:143来源:国知局
专利名称:对数据库管理系统进程进行递归路径分析的系统和方法
技术领域
本发明涉及计算机相关系统和方法的领域。更具体地说,本发明是自动生成DBMS(数据库管理系统)存储的代码对象的完全相关信息的系统和方法。
背景技术
为生成对数据库管理系统的询问提供既有效又廉价的过程是众望所归。在当今关系数据库管理系统(RDBMS)的世界里,数据库可以存储对象,这样的对象也可以调用其它对象。调用这样的对象的过程牵涉到调用本身可以调用其它进程达几个层次的进程。这种嵌套的复杂性使得对这样的对象的调试和测试既非常费时又非常低效。
过去,对使生成程序的完全相关性的过程自动化和将其用于编译和调试代码已经作了许多尝试。一种这样的尝试牵涉到将预编译的子例程绑定在一起以形成完全主进程目标代码,如标题为“绑定编译的例程的递归系统和方法(Recursive System and Method for Binding Compiled Routines)”的美国专利第4,330,822号所述。另一个这样的尝试牵涉到利用模块相关性的一个层次缩短模块的编译时间,如标题为“基于模块相关性的递增式编译器和方法(Module Dependency based Incremental Compiler and Method)”的美国专利第5,586,328号所述。还有一种这样的尝试牵涉到生成互补源代码,解决程序单元的外部相关性以利于单元测试,如标题为“利用互补代码生成软件测试系统以解决外部相关性的方法和设备(Method and Apparatus for producing asoftware test system using complementary code to resolve extemaldependencies)”的美国专利第6,651,111号。还有一种这样的尝试牵涉到利用编译器生成的直接相关性信息建立面向对象的软件程序,如标题为“利用从软件分界面推出的相关性建立软件程序的方法和设备(Method and apparatusfor building a software program using dependencies derived from softwarecomponent interfaces)”的美国专利第5,758,160号所述。在所有这些情况中,只有有关模块的直接相关性得到使用。在数据库编程环境中,利用编译器花费大量时间寻找程序单元的相关性不是大家所希望的,因为那样的信息可以从数据库目录中直接获得。许多其它的美国专利描述了各种各样的调试和测试系统,但是,这些为本申请人所知的专利文件中,没有一个提供了本发明自动生成调试代码对象所需要的完全相关性的方法和系统。
拥有自动生成子程序的调试版本和它的所有相关对象的方法将会是有利的。该方法排除了在人工方式下生成所有相关子程序的调试版本的必要性,使得对编码错误的改正应该变得更快。该方法还应该在调试或执行子程序之前,允许检测潜在的运行错误。这将会使在生产环节中非常难以检测的一些运行错误得以排除。该方法还应该使程序员能够看得见子程序的完全相关性的图形表示。该方法还应该使程序员能够看得见相关图形中的INVALID(无效)数据库对象。该方法还应该允许从视觉上识别循环相关性。这将会排除程序员花时间算出实际相关性、这样的相关性的性质和这样的相关对象的有效性的必要性。对于特定的相关信息,这个过程牵涉到浏览源代码和查找数据库目录的组合。这个人工过程是费时费力的,因为在数据库开发环境下,多层次的相关性是普遍存在的。
例如,可以用如下的附加信息评价技术问题PL/SQL是一种复杂的语言,它使复杂的相关代码得到开发。PL/SQL中的代码模块可以驻留在彼此参考的分离库单位中。有四种主要类型的库单位1.软件包是可以包括一个或多个存储的进程和一个或多个函数的真库。那些对象的每一个可以是公用的或专用的。公用对象(在特定软件包中展示的)可以从其它库单位中调用。专用对象可以在软件包内部调用。每个对象(进程或函数)可以在软件包内或它的外部调用其它对象。
2.存储进程是只包括一个可调用模块的存储对象。进程中的代码可以调用外部对象。
3.函数是只包括一个可调用模块的存储对象。函数中的代码可以调用外部对象。函数在返回值方面与进程不同。
4.触发器是当发生各种事件时由数据库引擎触发的存储对象。触发器可以调用外部对象。
Oracle8TM也拥有是抽象数据类型的类型,这种抽象数据类型可以保存数据成员和成员函数。
调试过程牵涉到一个对象和它的所有相关对象。如果被调用对象返回或设置的值存在逻辑问题,那么,在被调用对象本身或被调用对象之一中可能存在编码错误。真正的调试器应该让开发者无需任何特别的努力,就能随意地走遍遍历相关性的代码。在大应用程序中复杂度的层次可以容易地达到5至10个相关性层次,和相关性树可以包括数百个对象。
替代调试器自动检测所有相关性的另一种手段是用户可以人工地分析有关对象的相关性,然后进行将所有那些对象改变成调试模式的过程,以便使它们可以得到调试。在上述的范例中,对于数百个相关的对象,这种过程是耗时费力的。
或者,用户可以在调试模式下编译所有它们的对象,但这也不是最佳的,因为根据调试阶段的完成,他们将不得不再次重新编译所有东西(为了生产)。然后,对于以后发现的每一故障,都需要相同的处理过程。
一些RDBMS试图对处理这些问题提供帮助。例如,Oracle提供了‘connect by’子句生成隐式树,作为SQL询问的结果。这种询问的方法可以应用于对生成存储代码对象的完全相关性树的问题提供部分解答。由于一些Oracle代码对象行为的方式,该方法只能提供部分解答。具体地说,在Oracle中软件包作为“两种不同的代码对象”-软件说明和软件主体来实现。应用上面‘ connect by’子句将导致包含相关性树中所有软件包说明的相关性,但不包含相应软件包主体的相关性。因为SQL并不提供假定不再进一步连接的方式,所以,不能构造也可以跟踪软件包主体相关性的‘connect by’子句的变型,如果条件满足-即,为了防止相关性树中的无限递归,支持如果在父路径(parent path)中的树中已经存在相关性就不应该继续再次获得对象的相关性的方式是必要的。
对从存储在RDBMS中的对象中检索所有对象相关性的技术问题,本发明是一种行之有效的解决方案。本申请人开发的、对这种技术问题的解决方案利用了递归地调用的询问。一个阵列用于跟踪父路径,以便可以重构图形。在每一步骤中,确定在图形中是否已经存在了相关性。如果已经存在,就停止递归。
本发明公开本发明公开了通过应用一组递归进程和分析代码对象的源代码,自动生成在数据库中存储的代码对象的完全相关性的系统、方法和数据库开发工具。
还要求保护根据完全相关性信息和它们的相互关系生成相关性的循环图的方法。另外要求保护的还有生成存储代码对象的调试版本和它的所有相关性的方法。另外要求保护的还有根据有关相关代码对象的有效性的信息识别潜在运行错误的方法。另外要求保护的还有识别数据库代码对象的循环相关性的方法。另外要求保护的还有利用特定代码对象的完全相关性图形调试数据库中的代码对象的方法。另外要求保护的还有开发包括计算机系统和用于自动生成存储代码对象的完全相关性的程序代码机构在内的数据库程序的方法。
通过结合附图,对本发明的优选实施例进行图示和描述,本发明的其它目的和优点将更加清楚。本发明能够实现其它不同的实施例,为了说明起见,可以对其中的一些加以描述,并在许多方面能够对一些细节加以修改,但所有这一切均不偏离本发明的精神和范围。
附图简述本发明的系统和方法的特征和优点将从如下的描述中清楚地看到,在附图中

图1说明了本发明优选实施例的整个流程的流程图;图2说明了显示优选实施例的递归分析步骤的一般处理流程的流程图;图3说明了显示用于将软件包主体的相关性合并到相关性图形中的步骤的流程图;图4和5一起说明了显示用于将有关数据库触发器和它们的相关对象的相关性合并到相关性图形中的步骤的流程图;图6说明了显示与获得诸如软件包主体的相关性和关于触发器的相关性之类、不考虑间接相关性的代码对象的相关性有关的步骤的流程图;图7显示了与跟踪相关的示范性阵列,它是用于存储相关性图形的数据元的库数据结构;图8是用于说明目的的示范性对象树;和图9说明了可用作本发明优选实施例中的客户PC和/或服务器的代表性通用计算机结构。
实现本发明的最佳方式本发明提供了生成数据库代码对象的完全相关性图形的方法和设备。调试代码对象的能力是开发者的基本要求。随着代码对象被不断开发出来,这样就允许核验它们的逻辑性。
在如下为了说明目的的描述中,给出了特定的数据和结构,以便达到对本发明的全面理解。在当前的优选实施例中,利用Oracle综合开发环境(IDE)描述本发明。但是,对本领域的普通技术人员来说,显而易见,在诸如Sybase、Microsoft SQLS Server、UDB、DB2、Informix等之类的各种各样的数据库系统中,没有这些特定的细节也可以实施本发明。在其它的情况中,以示意图或方块图的形式显示和描述众所周知的系统和协议,以便不会不必要地使本发明难以理解。
附加的背景信息随着存储在DBMS中的数据日益复杂,用于检索和/或更新数据的SQL询问也越来越复杂。这导致了将程序性和面向对象的扩展附加到标准SQL语言中。PL/SQLTM是将程序性和面向对象的扩展提供给与Oracle数据库相对的程序的事务处理语言。其它数据库提供相似的程序性和面向对象的扩展。这些语言的日益复杂导致了特殊调试器的开发,这些特殊调试器在严密控制下运行SQL语言的语句,和当这些语句被执行时使开发者能够与这些语句交互和分析这些语句。
交互式调试与驻留在服务器上的代码对象的组合导致了必须为正在调试的进程和它的所有相关进程构造调试器的问题。具体地说,使你步入相关对象的‘step into’操作将只有当那些代码对象被构造成要调试时才工作。因此,用户要么不得不识别和构造将使用的所有进程,包括被那些进程调用的进程,要么他们就放弃整个调试控制。
这是一个麻烦的过程,经常使部分开发者感到灰心丧气。
PL/SQL是一种复杂的语言,它使复杂的相关代码得到开发。PL/SQL中的代码模块可以驻留在彼此参考的分离代码对象中。PL/SQL中的代码对象采取如下之一的形式a)PL/SQL存储的进程,它是一个能够获取输入参数和返回输出参数的例程;b)PL/SQL存储的函数,它是一个能够获取输入参数和返回输出参数的例程。另外,存储的函数可能用在表达式中和返回在说明或规范中声明的特定类型的值;c)PL/SQL存储的软件包说明,它形成关于标识为单命名入口的存储函数和进程的集合的说明;d)PL/SQL存储的软件包主体,它形成关于标识为单入口的存储函数和进程的集合的实现或工具;e)PL/SQL存储的类型说明(只有Oracle8TM),它形成关于标识为单命名入口的数据元和成分函数的集合的说明;f)PL/SQL存储的类型主体(只有Oracle8TM),它形成关于标识为单入口的成分函数的集合的实现;g)PL/SQL存储的触发器,它是当在数据库服务器中执行数据操纵语句时,自动得到执行的例程;和h)匿名PL/SQL块,它是可以在服务器上执行的PL/SQL语句的无名集。
数据库以不同方式支持面向对象的编程。Oracle7TM通过PL/SQL存储的软件包说明和PL/SQL存储的软件包主体支持这种编程技术。尽管这样的支持的语法对不同的数据库是不同的,但在所有数据库中都支持具有可以表示抽象数据类型的说明和实施该说明的实现的基本概念。(Oracle、Oracle7、Oracle8和PL/SQL是Oracle公司的商标)。
调试过程牵涉到一个对象和它的所有从属对象(相关性)。如果被调用对象返回或设置的值存在逻辑问题,那么,在被调用对象、或被调用对象的从属物之一中就可能存在编码错误。真正的调试器应该让开发者无需任何特别的努力,就能随意地走遍遍历从属对象的代码。在大应用程序中复杂度的层次可以容易地达到5至10个相关性层次,和相关性树可以包括数百个对象。
替代调试器自动检测所有相关性的另一种手段是用户可以人工地分析对象的相关性,然后进行将所有那些对象改变成调试模式的过程,以便使它们可以得到调试。在上述的范例中,对于数百个相关的对象,这种过程是耗时费力的。
或者,用户可以在调试模式下编译所有它们的对象,但这也不是最佳的,因为根据调试阶段的完成,他们将不得不再次重新编译所有东西(为了生产)。然后,对于以后发现的每一只臭虫(故障),都需要相同的处理过程。
操作环境本发明在通用计算机单元中和作为通用计算机单元单元的一部分操作,该通用计算机单元通常可以包括图9所示的部件的一些或全部,其中通用系统201包括母板203,上面含有输入/输出(“I/O”)部分205、一个或多个中央处理单元(“CPU”)207、和可以含有与之有关的闪速存储卡211的存储器部分209。I/O部分205与键盘226、其它类似的通用计算机单元225和215、盘存储单元223和CD-ROM驱动器单元217相连接。CD-ROM驱动器单元217可以读取通常包含程序221和其它数据的CD-ROM介质219。这些编程计算机的逻辑电路或其它成分将执行一系列由下面将作更详细描述的计算机程序命令的、特别标识的操作。
优选实施例本发明提供了生成存储代码对象的完全相关性图形的方法和设备。在优选实施例中,该方法生成Oracle数据库中存储的代码对象的完全相关性图形。该方法考虑获得含有与说明分开的实现的面向对象的代码对象的相关性。在优选实施例中,这牵涉到除了软件包和类型说明的相关性之外,还包括软件包和类型主体的相关性。该方法还考虑有关数据库触发器的相关性。触发器是作为执行用于修改特定表中的数据的数据操纵语句(DML)的结果,自动得到执行的代码对象。其它代码对象不直接与触发器相关。但是,当代码对象执行自动执行(“触发”)触发器的DML语句时,间接相关是可能的。本发明通过如下算法所描述的过程来实现它。
1.根据与返回单层相关性的数据库相对的询问,利用返回程序性代码对象的相关性和面向对象的代码对象的说明的相关性的递归进程。
2.根据与返回单层相关性的数据库相对的询问,利用步骤1中的递归进程确定面向对象的代码对象的实现部分的相关性。
3.利用源代码语法分析进程来标识可以“触发”触发器的DML语句。具体地说,语法分析器寻找UPDATE(更新)、DELETE(删除)和INSERT(插入)语句。语法分析器标识语句的类型以及数据库表。然后,算法检验相应的触发器是否存在于数据库中。这就标识了与任何存储的代码对象的触发器的相关性。图4和5所示的流程图解释了这种算法的一种变型,它从与表的相关性开始向后工作寻找与触发器的相关性。
4.根据与返回单层相关性的数据库相对的询问,利用步骤1中的递归进程确定在步骤3中找到的触发器的的相关性。
5.重复步骤2至4直到没有新的相关性为止。
现在参照图1描述优选实施例的一般流程。
用户界面单元部件11用于从数据库中选择代码对象。所选代码对象提供生成相关性信息所需要的信息。部件12用于生成所选对象的完全相关性图形。它生成保存特此称为跟踪阵列(tracking array)的完全相关性信息的数据结构。该跟踪阵列由部件13用于生成显示完全相关性图形的用户界面单元。部件14在调试模式下扫描跟踪阵列和编译对象。这个步骤确保了“StepInto”操作相对于调试设施来说是透明的。如果在调试模式下编译的对象的任何一个是INVALID,那么,部件15用强调的INVALID对象显示完全相关性图形。完全相关性图形中的INVALID对象标识可能导致运行错误的代码路径。这种功能对于数据库程序员来说是必不可少的,因为,否则的话,就要花费大量的时间试图识别运行错误的来源。部件14扫描相关性阵列,和对于阵列中的每个对象,检验那个对象是否是循环相关性的一部分。众所周知的图形遍历算法(graph traversal algorithm)用于此目的。然后,在显示相关性图形的用户界面部件中强调图形的循环单元。部件16利用在部件12中生成的跟踪阵列和在调试模式下编译的对象起动调试器。
现在参照图2至5描述解决这个问题的一般技术方案。
图2中的部件21应用图6所示的流程图生成相关代码对象的跟踪阵列。图7所示的阵列数据结构包含画出相关性图形所需要的所有信息。该算法不考虑与触发器的相关性,以及与面向对象的代码对象的实现的相关性。结果是,在方块21中生成初始阵列数据之后,流程接着转到下面参照图3描述的组成部分A23,在图3中标识了与面向对象的代码对象的实现的相关性。然后,系统流程转到下面参照图4描述的部件B24,在图4中评估了与触发器的任何相关性。在确定再也找不到新的节点之后(部件22),用包含目标对象的所有相关性的阵列结束整个例程。
现在参照图3,部件31从跟踪阵列中的第一个开始选择下一个代码对象。部件32检验该代码对象是“软件包”还是“类型”。(Oracle7TM服务器应用程序开发人员指南(Oracle7TMServer Application developers Guide)第7章定义和描述了“软件包”,特此引用,以供参考。Oracle8 SQL参考手册第8.0版(Oracle8 SQL Reference,Release 8.0)定义和描述了“类型”,特此引用,以供参考。)。如果是软件包或者是类型,则部件33再次应用图6所示的流程图,将软件包主体或类型主体的相关性分别合并到跟踪阵列中。然后,部件34检验这是否是跟踪阵列中的最后一个对象。
图4中的组成部分41从跟踪阵列中的第一个开始选择下一个代码对象。组成部分42利用与目录相对的数据库询问获得与代码对象的数据库的相关性。组成部分43从第一个开始选择下一个数据库表相关性。组成部分44获得与数据库表的数据库触发器的相关性。(Oracle7TM服务器应用程序开发人员指南(Oracle7TMServer Application developers Guide)第8章定义和描述了“触发器”,特此引用,以供参考。)。组成部分45从第一个开始选择下一个数据库触发器相关性。组成部分46语法分析代码对象的源代码,以核验“触发”触发器的数据操纵语句(DML)是否存在于源代码中。如果存在这样的语句,则图5中的组成部分52再次应用图6所示的流程图,将触发器的相关性合并到跟踪阵列中。图5中的组成部分53检验这是否是最后的触发器相关性。如果回答是“否”,控制返回到图4中的组成部分45,选择下一个触发器相关性。如果回答是“是”,图5中的组成部分54检验这是否是最后的表相关性。如果回答是“否”,控制返回到图4中的组成部分43,选择下一个数据库表相关性。如果回答是“是”,控制转移到图2中的组成部分22,检验在应用图3和4中的算法期间是否加入了新的节点。如果回答是“否”,则算法结束,和跟踪阵列包含所选代码对象的完全相关性信息。
现在参照图6和7更详细地描述基本递归过程。
将当前代码对象作为变元传入到图6所示的算法中。图6中的部件61将当前代码对象作为新的项目加入跟踪阵列中。图7中描绘了跟踪阵列中的示范性项目。如图所示,跟踪阵列由如下元素构成-唯一地标识数据库中的对象的对象id(标识符)号71、对象名72、对象的拥有者73、指示对象是否驻留在当前数据库中的标志74、对象的类型75和数量可变的子对象id(标识符)76。子对象id76跟踪特定代码对象的直接相关性。再参照图6,部件62询问数据库目录以获得当前对象的直接相关性。然后,部件63从第一个开始获得下一个直接相关性。部件64检验在部件63中是否找到了相关性。如果没有找到,则算法结束。如果找到一个,那么,部件65更新当前对象的跟踪阵列元素以包含这个相关性。这是通过将相关对象的对象id作为子对象id加入当前对象的跟踪阵列元素中完成的。接着,部件66检验这个相关对象是否已经存在于跟踪阵列中。如果回答是“是”,控制转移到部件63,获取下一个直接相关性。如果回答是“否”,则通过传入这个相关对象作为变元递归地调用算法。
现在参照图8描述描绘典型对象和它的相关性分析的例子。
下列是典型的存储函数的例子1.create or replace function CheckGender return number2.as3.begin4.proc1;5.proc2;6.proc3;7.end;8./在图8中函数被描绘成‘id=1’的节点。该函数分别与图8中被描绘成‘id=2’、‘id=3’、和‘id=4’的节点的3个进程‘proc1’、‘proc2’、和‘proc3’存在直接相关性。进程‘proc2’不存在任何相关性。进程‘proc3’与图8中被描绘成‘id=10’的节点的进程‘proc6’存在相关性。为了说明起见,‘proc1’的源代码显示如下1.create or replace procedure proc1 as2.begin3.proc4;
4.insert into talbel values(1);5.proc5;6.end;7./进程‘ proc1’与图8中被描绘成‘id=5’和‘id=7’的节点的进程‘proc4’和‘proc5’存在直接相关性。该进程还存在触发图8中被描绘成‘id=6’的节点的插入触发器‘trig1’的数据操纵语句(DML)。触发器‘trig1’又分别与图8中被描绘成‘id=4’和‘id=8’的节点的进程‘proc3’和‘proc7’存在相关性。触发器‘trig1’还与图8中被描绘成‘id=9’的节点的存储软件包‘pack1’存在相关性。‘pack1’的说明没有任何相关性。但是,pack1’的主体与图8中被描绘成‘id=2’的节目的进程‘proc1’存在相关性。
在本例中,该算法计算如下应用图6中描绘的算法(图2所示算法中的第一步)产生由id1、2、3、4、5、7和10的对象构成的基本相关性图形。跟踪阵列现在有7个项目。项目1拥有对象id1,并拥有入口2、3和4作为子对象id。项目2拥有对象id2,并拥有入口5和7作为子对象id。项目3拥有对象id3,但没有子对象。项目4拥有对象id4,并拥有入口10作为唯一子对象id。项目5拥有对象id5,但没有子对象。项目6拥有对象id7,但没有子对象id。项目7拥有对象id10,但没有子对象id。请注意,‘proc1’(id=2)与触发器‘trig1’(id=6)的相关性还没有包括于其中。触发器‘trig1’的相关性也还没有合并到其中。然后,应用图3中的算法没有任何改变地产生完全相同的图形。接着,应用图4和5中的算法产生包括完全相关性图形中所有节点的相关性图形。项目2现在拥有id6作为附加子对象。跟踪阵列现在拥有10个项目。项目8拥有对象id6和拥有入口8、9和4作为子对象id。项目9拥有对象id8,但没有子对象id。项目10拥有对象id9,但没有子对象id。但是,软件包‘pack1’(id=9)的主体部分与进程‘proc1’(id=2)的相关性还没有合并到相关性图形中。然后,我们再次应用图3至5中的算法,因为在图2中部件22中的条件评估成‘是’-当我们应用图3至5中的算法时,加入了id6、8和9的节点。应用图3中的算法产生完全相关性图形-在这个步骤期间加入了软件包‘pack1’(id=9)的主体部分与进程‘proc1’(id=2)的相关性。跟踪阵列中的项目10现在拥有子对象id2。应用图4和5中的算法不改变相关性图形。图2中部件22中的条件现在评估成‘否’,因为没有加入新节点。结束图2中的算法。跟踪阵列现在保存生成完全相关性图形所需要的信息。然后,扫描跟踪阵列以生成相关性图形中所有对象的调试版本。如果如此编译的对象的任何一个是INVALID,则在生成的相关性图形中强调这样的对象。对于跟踪阵列中的每个对象,应用众所周知的图形遍历算法来标识它们是否是循环相关性的一部分。然后,强调图形中这样的循环路径。在本例中,对象id2、6和9形成循环路径,因此强调那些节点和路径。这样就在运行时标识出潜在的无限循环。当触发器‘trig1’(id=6)触发和软件包主体代码得到执行时,图形标识了‘pack1’(id=9)的软件包主体可能又调用进程‘proc1’(id=2),从而导致潜在无限循环的可能性。
虽然借助于优选实施例已经对本发明进行了描述,但本领域的普通技术人员应该认识到,用各种类型的通用计算机硬件替代上述的结构也能取得等效的结果。同样,应该明白,算术逻辑电路被构造成实现权利要求书中的各项所需装置,处理因特网保密协议和隧道技术协议;允许主单元为输入消息适当地分配处理赋值和允许集团成员识别哪些消息是它们要处理的;和从集团中的其它成员中识别消息等。对本领域的普通技术人员来说,显而易见,可以对优选实施例进行各种各样的修改和变动,但均落在下列权利要求书所规定的本发明的精神实质和范围之内。
权利要求
1.一种利用与数据库服务器连接的计算机和连通性软件自动生成数据库代码对象的完全相关性图形的方法,所述计算机含有处理器、存储器、显示器、输入/输出设备,所述方法包括下列步骤应用询问相关性信息的数据库和输出数据库代码对象的直接相关性图形的递归算法,“直接相关性图形”包含表示不牵涉数据库中与触发器的相关性和与面向对象的代码对象的实现部分的相关性的相关性的相关性;对相关性图形中面向对象的代码对象中的每一个应用递归算法以合并数据库中代码对象的实现部分的相关性;对相关性图形中代码对象中的每一个使用语法分析器以标识“触发”触发器的DML语句,从而标识与触发器的相关性;对触发器中的每一个应用递归算法以将触发器的相关性并入相关性图形中;和重复合并面向对象的代码对象的实现部分的相关性以及与触发器的相关性的进程和它的相关性,直到没有新的相关性要加入相关性图形中为止。
2.根据权利要求1所述的方法,包括下列附加步骤利用生成的相关性图形作为数据库代码对象调试工具的一部分在调试模式下编译代码对象。
3.根据权利要求1所述的方法,包括下列附加步骤在数据库代码覆盖工具中利用生成的相关性图形标识调用路径。
4.根据权利要求1所述的方法,包括下列附加步骤在数据库代码对象成形工具中利用生成的相关性图形标识调用路径。
5.根据权利要求1所述的方法,包括下列附加步骤在数据库代码对象测试工具中利用生成的相关性图形。
6.根据权利要求1所述的方法,包括下列附加步骤利用生成的相关性图形标识数据库中是INVALID的相关对象。
7.根据权利要求1所述的方法,包括下列附加步骤利用生成的相关性图形标识数据库中代码对象中的循环相关性。
8.根据权利要求1所述的方法,包括下列附加步骤在相关性图形表示工具中利用生成的相关性图形。
9.一种生成不考虑与触发器的相关性和与面向对象的代码对象的实现部分的相关性的代码对象的基本相关性树的方法,所述方法包括下列步骤为代码对象的直接相关性询问数据库目录,然后为找到的每一个相关性询问数据库目录,递归地做这样的询问直到所有的基本相关性都被生成到相关性树中为止。
10.根据权利要求9所述的方法,包括下列附加步骤利用生成的相关性树作为数据库代码对象调试工具的一部分在调试模式下编译代码对象。
11.根据权利要求9所述的方法,包括下列附加步骤在数据库代码覆盖工具中利用生成的相关性树标识调用路径。
12.根据权利要求9所述的方法,包括下列附加步骤在数据库代码对象成形工具中利用生成的相关性树标识调用路径。
13.根据权利要求9所述的方法,包括下列附加步骤在数据库代码对象测试工具中利用生成的相关性树。
14.根据权利要求9所述的方法,包括下列附加步骤利用生成的相关性树标识数据库中是INVALID的相关对象。
15.根据权利要求9所述的方法,包括下列附加步骤利用生成的相关性树标识数据库中代码对象中的循环相关性。
16.根据权利要求9所述的方法,包括下列附加步骤在相关性树表示工具中利用生成的相关性图形。
17.一种生成包括代码对象与数据库触发器的相关性的相关性信息的方法,所述方法包括下列步骤1)利用递归算法为代码对象的直接相关性询问数据库目录,然后为找到的每一个相关性询问数据库目录,递归地做这样的询问直到所有的基本相关性都被生成到相关性图形中为止。2)对相关性图形中代码对象的每一个使用语法分析器以标识“触发”触发器的DML语句,从而标识与触发器的相关性;3)对触发器中的每一个应用递归算法以将触发器的相关性并入相关性图形中;和4)重复步骤1-3并入与触发器的相关性和它们的相关性,直到没有新的相关性要加入相关性图形中为止。
18.根据权利要求17所述的方法,包括下列附加步骤在数据库代码覆盖工具中利用生成的相关性信息标识调用路径。
19.根据权利要求17所述的方法,包括下列附加步骤在数据库代码对象成形工具中利用生成的相关性信息标识调用路径。
20.根据权利要求17所述的方法,包括下列附加步骤在数据库代码对象测试工具中利用生成的相关性信息。
21.根据权利要求17所述的方法,包括下列附加步骤利用生成的相关性信息标识数据库中是INVALID的相关对象。
22.一种在数据库中生成代码对象以及面向对象的代码对象的实现部分的相关性的方法,所述方法包括下列步骤1)应用询问相关性信息的数据库和输出数据库代码对象的直接相关性图形的递归算法,“直接相关性图形”包含不牵涉数据库中与触发器的相关性和与面向对象的代码对象的实现部分的相关性的相关性;2)对相关性图形中面向对象的代码对象的每一个应用递归算法以并入数据库中代码对象的实现部分的相关性;和3)重复步骤1和2合并与面向对象的代码对象的实现部分的相关性,直到没有新的相关性要加入相关性图形中为止。
23.根据权利要求22所述的方法,包括下列附加步骤在数据库代码覆盖工具中利用直接相关性图形中生成的相关性信息标识调用路径。
24.根据权利要求22所述的方法,包括下列附加步骤在数据库代码对象成形工具中利用直接相关性图形中生成的相关性信息标识调用路径。
25.根据权利要求22所述的方法,包括下列附加步骤在数据库代码对象测试工具中利用直接相关性图形中生成的相关性信息。
26.根据权利要求22所述的方法,包括下列附加步骤利用直接相关性图形中生成的相关性信息标识数据库中是INVALID的相关对象。
27.一种标识目标数据库代码对象的相关性的系统,所述系统包括数字计算机;与计算机耦合的数据库服务器;与数据存储在其中的数据库服务器耦合的数据库,所述数据包括面向对象的代码对象、软件包的说明部分、软件包的实现部分、类型的说明部分、类型的实现部分和触发器;和生成相关性图形的代码机构,所述相关性图形是数据结构和拥有若干个入口,以包含与目标数据库代码对象有关的相关代码对象的表示部分、软件包的说明部分、软件包的实现部分、类型的说明部分、类型的实现部分、触发器和触发器的相关性。
28.一种利用计算机生成目标数据库代码对象的相关性的方法,所述计算机含有处理器、存储器、显示器、输入/输出设备,所述方法包括下列步骤提供与数据存储在其中的计算机耦合的数据库,所述数据包括面向对象的代码对象的表示部分、软件包的说明部分、软件包的实现部分、类型的说明部分、类型的实现部分和触发器;和利用生成相关性图形的递归代码机构,所述相关性图形是数据结构和拥有若干个入口,以包含与目标数据库代码对象有关的相关代码对象的表示部分、软件包的说明部分、软件包的实现部分、类型的说明部分、类型的实现部分、触发器和触发器的相关性。
29.一种用于调试目标数据库代码对象的、嵌在计算机可读介质中的计算机程序产品,包括递归代码机构,生成目标数据库代码对象的相关性图形,所述相关性图形是数据结构和拥有若干个入口,以包含与目标数据库代码对象有关的相关代码对象的表示部分、软件包的说明部分、软件包的实现部分、类型的说明部分、类型的实现部分、触发器和触发器的相关性;和程序代码机构,利用相关性图形调试目标数据库代码对象。
30.一种用于调试目标数据库代码对象的、嵌在计算机可读介质中的计算机程序产品,包括第一程序代码机构,应用询问相关性信息的数据库和输出数据库代码对象的直接相关性图形的递归算法,“直接相关性图形”包含表示不牵涉数据库中与触发器的相关性和与面向对象的代码对象的实现部分的相关性的相关性的相关性;第二程序代码机构,对相关性图形中面向对象的代码对象中的每一个应用递归算法以合并数据库中代码对象的实现部分的相关性;第三程序代码机构,语法分析代码对象的源代码以标识“触发”触发器的DML语句,从而标识与触发器的相关性;第四程序代码机构,对触发器中的每一个应用递归算法以将触发器的相关性并入相关性图形中;第五程序代码机构,重复合并面向对象的代码对象的实现部分的相关性的进程以及与触发器的相关性,直到没有新的相关性要加入相关性图形中为止;和第六程序代码机构,利用相关性图形调试目标数据库代码对象。
全文摘要
本发明公开了通过使用递归相关性跟踪算法(14),自动生成用于调试数据库中存储的代码对象(11)的完全相关性图形(12)的系统、方法和数据库开发工具,所述递归相关性跟踪算法(14)考虑了与触发器的间接相关性(15),以及与作为数据库目录中分离对象表示的面向对象的代码对象的实现部分的相关性。
文档编号G06F11/36GK1342292SQ00804484
公开日2002年3月27日 申请日期2000年1月6日 优先权日1999年1月8日
发明者约翰·K·文森特, 艾戈·彻尼 申请人:电脑联合想象公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1