用于持续对象检索的智能sql产生的制作方法

文档序号:6568397阅读:441来源:国知局

专利名称::用于持续对象检索的智能sql产生的制作方法用于持续对象检索的智能SQL产生对相关申请的交叉引用这一申请涉及共同待批的于2005年7月29日提交的、题为"从关系数据库检索对象并将其保存到关系数据库(RETRIEVINGANDPERSISTINGOBJECTSFROM/TORELATIONALDATABASES)"的美国专利申请第11/193,574号(代理编号MS313938.01/MSFTIP1104US)以及于2005年7月29日提交的、题为"代码生成模式(CODEGENERATIONPATTERNS)"的美国专利申请第11/193,6卯号(代理编号MS313940.01/MSFTP1105US)。上述全部申请被整体引用结合于此。扭旦疼眾计算机越来越频繁地被用来执行各种信息定位和检索任务。通常,这些信息定位和检索任务主要是在被构造成使用专门化查询语言针对关系数据库执行查询的专门化应用程序的领域。此类查询语言中最常见的是结构化査询语言(SQL)。然而,最近计算技术的惊人发展,例如,处理器性能和速度的增加以及信息存储能力的增加,在更多的计算机上提供了更大范围的信息定位和检索应用程序。传统上,已经有在用高级编程语言写成的已编译应用程序中包括信息定位和检索能力的两种主要方法。依照第一方法,用査询语言如SQL写的查询文本可以被编码为已编译应用程序中的串。在程序执行期间,可以从应用编程接口(API)将查询文本传给一函数,这可以把该查询传递给数据库以获得由执行查询而得到的信息。对于第二方法,由编译器从源代码文件提取出査询的内嵌文本表示。编译器重写查询以使用API并把该查询重新编码为文本串。这两种方法都要求应用程序设计者知道除了他用来写其自己应用程序的语言之外还要知道査询语言的正确句法和正确使用。通常,当使用这些方法的其中之一来把查询包括在应用程序中时,诸如句法检查的任务直到应用程序实际上被执行时才进行,也就是说,在运行时。进一步,在查询语言的编程风格和应用程序编程语言编程风格之间通常存在冲突。例如,SQL是具有其自己编程风格的关系数据模型语言,而应用程序通常用命令式编程风格写成,使用过程语言如C语言或使用面向对象语言如Java、C弁或VisualBasic或过程-面向对象混合语言如C+十的面向对象风格。对应用程序设计者来说,创建新应用程序时通常难以在不同编程范例之间切换。使用这些方法的其中之一通常也要求诸如对象査询语言的中间组件执行被表示为应用程序中的对象的数据和用关系数据库中的格式表示的数据之间的对象关系映射。通常,这些对象关系映射元件缺乏好的模型来表示实际上如何针对关系数据库中的数据执行査询,并且只提供从一个数据表示形式到另一数据表示形式的映射。目前的系统缺乏使得应用程序设计者可以直接把査询整合为被用来创建应用程序的高级编程语言中的构造并把查询构造翻译成可由关系数据库使用的查询语言中的等效査询的能力。概述下列内容给出简要概述以提供所公开和描述的组件以及与这些组件关联的方法的某些方面的基本理解。这一概述不是广泛纵览。并非旨在标识关键或重要元件,也不描绘范围。其唯一目的在于以简化形式呈现一些概念,作为在稍后被呈现的更加详细的描述的序言。另外,仅为方便而提供在此所使用的章节标题,这些章节标题不应该被看作任何方式的限制。查询翻译系统可以把以面向对象格式表示的查询,例如如以高级面向对象编程语言创建的应用程序中的对象,转换成以可以由数据库直接使用的查询语言的等效査询。系统可以检查査询的面向对象表示的结构,并使用该结构来创建目标査询语言的理想化版本中的等效查询。目标查询语言的理想化版本的这一等效査询可以被转换成为目标査询语言的实现版本中的实际查询串,以供在执行针对数据库的査询时使用。该系统可以从数据库取出一个结果集,并将该结果集转换成可以由应用程序使用的面向对象格式。查询翻译系统可以使用多级流水线来把查询从逻辑表示转换成可以直接用于数据库以执行针对该数据库的查询的物理表示。多级流水线可以被配置成使得可以创建不同的物理表示。不同物理表示可以是不同查询语言、单个查询语言的不同版本或两者。所公开和描述的组件和方法包含下文完整描述且在权利要求书中特别指出的特征。下列描写和附图详细阐述了某些说明性特征。这些特征指示所公开和描述的组件和方法可以使用的各种方式中的一些。所公开和描述的组件和方法的具体实现可以包括此类特征及其等效方式中的一些、许多或全部。当结合附图进行考虑时,本领域中的技术人员将会从下列详细描述明显看出在此所呈现的具体实现和示例的变型。附图简要描述图1是查询翻译系统的系统框图。图2是示例性数据关系的示意图。图3是査询翻译系统的系统框图。图4是语义树结构的框图。图5是多级流水线化翻译系统的系统框图。图6是可配置流水线的示意图。图7是査询翻译系统的系统框图。图8是可以与在此所公开或描述的组件结合使用的通用处理流的流程图。图9是可以与在此所公开或描述的组件结合使用的通用处理流的流程图。图IO是可以与在此所公开或描述的组件结合使用的通用处理流的流程图。图11是示例性连网环境的系统框图。图12是示例性操作环境的示意图。详细描述在这一申请中所使用的术语"组件"、"系统"、"模块"等等被旨在表示计算机相关实体,如硬件、软件(例如,执行中的软件)和/或固件。例如,组件可以是运行在处理器上的进程、处理器、对象、可执行(程序)、程序和/或计算机。并且,运行在服务器上的应用程序和服务器本身都可以是组件。一个或多个组件可以驻留在进程中,组件可以位于一台计算机上1和/或分布在两台或多台计算机之间。参照附图描述所公开的组件和方法,其中始终用相同的数字来指示相同的元素。在下列描述中,出于解释的目的,阐述很多具体细节,以提供对所公开主题的彻底理解。然而,显然,这些特定细节中的某些部分可以被忽略或在具体实现中与其他部分结合。在其他例子中,为便于描述,用框图形式示出特定结构和设备。此外,尽管所阐述的具体例子可以使用符合客户端/服务器架构的术语或者甚至可以是客户端/服务器架构实现的例子,但本领域的技术人员应该明白,客户端和服务器的角色可以被反转,所公开和描述的组件和方法不限于客户端/服务器架构且可以容易地适用于其他架构尤其包括对等(P2P)架构,而不偏离所公开和描述的组件和方法的精神或范围。此外,应该注意,尽管在此所呈现的具体例子包括或参考具体组件,但在此所公开和描述的组件和方法的实现并不一定限于这些具体组件,同样也可以用于其他上下文。可以与执行推理或概率性判定或基于统计的判定结合使用基于人工智能的系统(例如,显式和/或隐式训练的分类器),如以下所述。在此所使用的术语"推理"通常是指从如由事件和/或数据捕捉的一组观察值中推断或推理系统、环境和/或用户状态的过程。例如,推理可以被用来识别具体上下文或动作,或者可以产生状态的概率分布。推理可以是概率性的。例如,推理可以包括基于数据和事件的考虑对所关注状态的概率分布计算。推理也可以是指被用于从一组事件或数据构成更高级事件的技术。此类推理可以从一组所观察到的事件和/或所存储的事件数据构造新事件或动作,无论这些事件是否在时间上紧密相关,也无论这些事件和数据是来自一个还是多个事件和数据源。可以结合执行自动和/或所推理的动作使用各种分类方案和/或系统(例如,支持向量机、神经网络、专家系统、贝叶斯置信网络、模糊逻辑、数据融合引擎或其他类似系统)。此外,所公开并描述的组件可以被实现为使用生产软件、固件、硬件或其组合以控制计算机的标准编程和/或工程技术的方法、装置或制品。在此使用的术语"制品"旨在包含可以从任何计算机可读设备、载波或介质访问的计算机程序。例如,计算机可读介质可以包括但不限于诸如硬盘、软盘、磁条或其他类型的介质的磁存储设备;诸如紧致盘(CD)、数字多用途盘(DVD)或其他类似介质类型的光盘;智能卡和诸如通用串行总线(USB)拇指驱动器(thumbdrive)、安全数字(SD)卡和其他设备和闪存设备。此外应该明白,载波或数字信号可以被用来传送计算机可读电子数据,如在发送和接收电子邮件时或在访问诸如因特网或局域网(LAN)的网络时所使用的那些计算机可读电子数据。当然,本领域内的技术人员将会认识到,在不偏离所公开和描述的组件和方法的范围或精神的前提下,可以对这一配置进行许多修改。图1是查询翻译系统100的系统框图。查询翻译系统100可以被用来把用源语言表示的査询翻译成可用目标语言表示的语义等效查询。在概念上,该翻译可以被描述成从逻辑表示空间到物理表示空间的翻译。具体地,査询的源表示可以是使用通常是高级编程语言的主机语言的规则来绑定和类型检査的表示,目标语言可以是诸如SQL等可以被关系数据库直接使用的查询语言。应该注意,在这一说明书的全文中,诸例子是以高级编程语言、SQL和关系数据库为基础。此类引用仅仅是为了便于讨论并提供借此描述在此所呈现的组件和方法的例子。这些具体参考和例子并不旨在且不暗示在此所公开和描述的组件和方法限于那些例子。相反,在此所公开和描述的组件和方法可以与各种各样的高级编程语言、查询语言和数据库类型一起使用。具体地,在此所公开和描述的组件和方法可以在其他上下文中使用和应用,尤其结合其他代码生成场景使用和应用,这些场景包括图像协处理和诸如可扩展标记语言(XML)数据库的非关系数据库及其他。在具体实现中可能需要某种修改,但本领域内的技术人员在阅读这一说明书时将容易地明显看出此类修改。此外,可互换地使用术语主机语言、主机编程语言和高级编程语言。查询翻译系统100包括源査询表示110。源查询表示IIO可以是能在语义上表示查询的任何数据结构。此类数据结构的例子包括但不限于对象、树和图以及其他。具体地,源查询表示IIO可以是依照主机或高级编程语言的规则来对其进行绑定和类型检查的数据结构。绑定和类型检查功能可以由支持被用来创建源査询表示110的高级编程语言的编译器来执行。源查询表示110可以直接表示已编译应用程序中的查询。可以用与用于编程该应用程序的其他部分的句法相同的句法来描述在源查询表示110中所包括的数据查询。支持编译器可以査看査询,并且执行除绑定和类型检査之外的其他编译时任务,如也可以延期到运行时的句法检查。此外,支持编译器可以注入其自己的重载规则和强制转换规则,以确保程序正确性并防止运行时处理错误。在诸如面向对象环境的适当计算环境中,源查询表示可以被实现为语义树。语义树一般地可以表示可以用高级编程语言表达的任何应用程序或应用程序的一部分。为便于解释,在此呈现的例子把语义树的使用限制为表示表达式。然而,在适当的或所需要的具体实现中可以取消这一限制。至少部分地因为是使用主机编程语言来创建语义树的,语义树容易由对象关系实现在运行时使用。使用语义树可以避免把查询指令例如SQL语句编码到已编译应用程序中。这一方式允许编译器采取纯粹语言表达句法并编码表示所有指令的数据结构,否则这些指令会以树的形式被包括为SQL语句。支持编译器可以避免需要通过提供语法分析器、绑定规则或通常用来适当地支持正常编程语言的其他事物来理解并支持单独语言。翻译模块120可以访问源查询表示110来确定在源查询表示110中编码的查询的细节。此类访问的细节可以根据具体实现而改变。在源査询表示iio被实现为语义树的情况中,可以通过对该树走查(walkthrough)并使用该树的结构和树的元数据来驱动从源査询表示110到目标查询表示130的翻译,来检查该语义树。目标査询表示130可以是在语义上等效于在源查询表示110中被编码的查询的査询,但用如SQL的目标语言表示,其中目标表示可被数据库用来实际上执行针对数据库的查询并返回一组结果。可以从语义树成员的类描述获得被实现为源查询表示110的语义树的元数据。此外或备选地,诸如反射或轻量反射的技术可以被应用于获得元数据。在具体实现中希望或需要时,可以使用其他适当技术。翻译模块120可以使用各种技术来执行从源查询表示110到目标査询表示130的翻译。例如,翻译模块120可以使用各种对象关系映射技术来确定源查询表示110的对象引用了关系数据库的哪些表、列或行。翻译模块120也可以访问由后端关系数据库支持的査询结构库,以便构造基于在源査询表示110中被编码的查询的、可以针对后端关系数据库执行的SQL査询。在这一情况中,可以通过使用提供对应于对象结构的查询形式的库的使用来避免使用单独的对象査询语言。反射技术可以被用来确定所需要的关于对象结构的信息。另一方式是使用多级流水线进程在运行时直接地将源査询表示110翻译成目标查询表示130。这种多级流水线进程可以避免在翻译期间使用对象查询语言。这样做的一种方法是使用目标语言的理想化版本。目标语言的这一理想化版本可以表示目标语言的所有版本的所有功能和数据结构。翻译模块120可以首先创建在源查询表示110中被编码的查询的理想化版本,然后将该理想化版本转换成后端数据库实际使用的版本。此外,多级流水线进程可以分支到为相同的源查询表示提供备选的翻译。备选翻译可以被用来以目标语言的不同版本,如SQL-92或SQL-99,以及诸如AQL或DMQL以及其他的不同目标语言创建目标査询表示130。在操作中,查询翻译系统100可以如下所述动作。翻译模块120访问源查询表示110以确定执行査询需要来自后端数据库的哪些资源。翻译模块120也通过检査源查询表示110的结构决定该如何构造等效于查询表示110中被编码的查询的理想化査询。然后,通过标识理想化语言和实际目标语言之间所支持特征的任何差异,该理想化查询被翻译成目标査询表示130。对于每一差异,如不支持的函数,应用一个或多个替代函数以获得所需要的结果,同时仍确保正确的査询。然后,所完成的目标査询130被翻译模块120汇编,且可以被用来执行针对数据库的查询。图2是示例性的数据关系200的示意图。示例性的数据关系200可以被用作多种语言的数据表示的基础,包括对于逻辑观点的面向对象的编程语言和对于物理观点的SQL。具体地,它可以用作用于比较不同数据表示的参考。示例性的数据关系200包括部门210。部门210可以表示公司的部门。雇员220以零对多的关系与部门210相关。职位230以零对一对一或一对一的关系与雇员相关。这一方案是下列例子的基础。以上描述的图2中的三个实体可以用以下描述的相应的表或类来表示。类可以被映射到相应的表。createtableDivisionTable(Div工dintegeridentity,DivNatnevarchar(100),CONSTRAINTPK一DivisicmTablePRIMARYKEY(Div工d))createtableEmployeeTable(Empldintegeridentity,Divldintegernotnull,EmpNamevarchar(100),StartDateDateTimenotnull,CONSTRAINTPK—EmployeeTablePRIMARYKEY(Emp工d),CONSTRAINTFK—EmployeeDivisionFOREIGNKEY(Div工d)referencesDivisionTable(Divld))createtablePositionTable(Pos工dintegeridentity,Emp工dintegernotnull,PosNaruevarchar(100),Levelintegernotnull,CONSTRAINTPK—PositionTablePRIMARYKEY(Pos工d),CONSTRAINTFK—PositionEmployeeFOREIGNKEY(Empld)referencesEmployeeTable(Empld)相应的类的概要在下面示出,classDivisionprivateintid,'privatestringname,'privateEntitySet<Employee>employees,publicintDiv工dget{returnid,-}set{id=value/}publicstringDivNameget{:retu:rriname,-}set{name=value,'}publicEntitySet<Employee>Employees〃用于管理与Employee实例的关系的代码classEmployeeprivateintid,,privatestringnameprivateEntityRef<Division>division;privateEntityRef<Position>position;publicintEmp工dget{returnid/}set{id-value}publicstringEmpNameget{returnname/}set{name=value;}publicEntityRef<Division>Division//用于管理与Division实例的关系的代码publicEntityRef<Position>Position//用于管理与PQsition实例的关系的代码classPositionprivateintid,'privatestringname,'privateEntityRef<Employee>employee;publicintPos工dget{returnid,'}set{id=value;}publicstringPosNameget{returnname,'}set{name=value;}publicEntityRef<Employee>Employee//用于管理与Employee实例的关系的代码在前面的示例性代码片断中,关系数据库中的表的名字和面向对象的应用程序的类的名字之间存在清晰的对应关系。表的各字段可以和类的各成员对应。同时,类的方法可以对应于由数据库提供的用于对数据执行操作的函数。管理类之间的关系的代码可以对应于表约束或主键-外键关系。图3是查询翻译系统300的系统框图。查询翻译系统300可以被用来把可以用源语言表示的查询翻译成可以用目标语言表示的等效査询。具体地,查询的源表示可以是使用主机语言的规则绑定和类型检査的表示,目标语言可以是SQL。查询翻译系统300包括具有关联查询320的应用程序310。应用程序可以是任何应用程序,如文字处理器、文件管理器、服务或守护(daemon)进程或任何其他可执行应用程序。查询320可以是应用程序310的已编译代码的一部分,或者备选地可以与该代码耦合。具体地,査询320可以是语义树表示,如在上面结合图1所公开和描述。应用程序310可以在运行时环境330上运行。运行时环境330可以是操作系统、嵌入式操作系统、虚拟机或可以支持应用程序310的运行的某些其他适当操作环境。当应用程序310被实现为面向对象的应用程序且査询被实现为语义树时,如果需要,运行时环境330可以支持用于按需访问和操纵应用程序310的对象的功能。这些功能不但包括用于使用査询320的语义树表示的功能,还至少包括应用程序310的适当操作所需要的任何功能。翻译器340可以访问应用程序310的查询320。翻译器340也可以在运行时环境330上运行。或者,只要提供访问查询320的某种方法,翻译器340可以在不同的运行时环境中运行。翻译器也可以访问理想目标语言表示350。理想目标语言表示350可以对所需要的目标语言的理想或通用版本建模。例如,SQL-99包括其他SQL版本如SQL-92所不支持的特征。在SQL-99中可能已经不赞成使用SQL-92的一些特征。用理想目标语言表示350建模的SQL理想化版本可以包括所有SQL-99和SQL-92的特征。当最终目标是SQL-92时,用于实现SQL-99的特征的规则,如实现不可用的SQL-99功能的结果的功能等效方式或编程方法或算法,也可以被包括在理想目标语言表示350之内。类似地,可以包括用于以遵循SQL-99的代码实现来自SQL-92的不赞成使用的功能的规则。翻译器340可以创建翻译后查询360。翻译后查询360可以是以像SQL-99那样的目标语言的实际版本而非理想化版本。翻译后查询360的这一实际版本可以是以诸如可以被直接传送给数据库370的文本串形式。把翻译后查询360传送给数据库370可以以多种方法完成,包括通过计算平台上的进程间通信的技术。此外或备选地,可通过使用网络连接如到局域网(LAN)、广域网(WAN)、企业内部互联网或因特网和其他网络的连接,将翻译后查询360可以传送给远程数据库。数据库370可以使用翻译后查询360来执行针对数据库370的内容的查询并创建结果集(未示出)。在操作时,查询翻译系统300可以如下所示动作。应用程序310在运行时环境330上运行。在运行期间,当是时候处理查询320时,应用程序310把查询320的数据结构传送给翻译器340。翻译器340走查査询320的数据结构并访问理想目标语言表示350以创建查询320的理想化表示。然后,翻译器340访问理想目标语言表示350以决定该如何从该査询的理想化版本导出翻译后査询360。然后,翻译后查询360被转发给数据库370以供使用。图4是语义树结构400的框图。语义树结构400可以被用来以高级编程语言把查询编码成可以由该编程语言的编译器自然处理的数据结构。此外,语义树结构400可以被传送给可以评估其结构以获得用该结构编码的查询的其他计算组件。语义树结构400包括多个叶子410。每一叶子410可以是标量引用、列引用或可以被用于数据投影操作的表示的某种实字(literal)。被包括在每一叶子410中的数值可以被置于投影列表中,该投影列表可以被用来创建目标语言的查询。多个节点420也可以被包含在语义树400中。诸节点420之间的互连可以表示嵌套、实体之间的关系、投影的分层结构或可以被建模的另一关系概念。诸如翻译器的组件可以走査语义树400以发现其结构并确定已编码的查询。此外,节点420和叶子410可以通过诸如反射或轻量反射的方法来提供关于其自己的信息。也可以使用发现关系和结构的其他方法。图5是多级流水线的翻译系统500的系统框图。多级流水线的翻译系统500可以用来把在一个空间中被逻辑地表示的查询转换成在另一空间中被物理上表示的等效查询。例如,多级流水线的翻译系统500可以取出基于对象的查询如语义树或像图那样的另一合适的数据结构,并把该基于对象的查询转换成可以立刻被数据库使用的等效SQL语句。多级流水线的翻译系统500包括源查询510。所提到的源查询510可以是语义树、图或任何其他合适的数据结构。一个多级流水线520可以接受源查询510,并沿着其各级传送源査询510,在每一级执行某些工作,直到最终创建目标查询530。目标査询530可以是用像SQL以及其他语言那样的适当査询语言的。在这一具体例子中,多级流水线520有十(10)级。可以用更多或更少级数,这依赖于具体实现者的需要或期望。可能有这样的情况通过在多个处理器上基本同时地执行多个级的工作,多级流水线520可被并行化。此外或备选地,能够以类似的方式并行化单级的工作。也可以把一些级组合成单级,或把单级分解成多个级。而且,在这一例子中,原始查询是对象形式的,具体地说是语义树,目标查询是SQL。在级O中,对象査询节点被翻译成SQL子句。对象查询节点可以是表示被映射的查询的整个程序的一部分。为了进行翻译,级O把诸类的方法映射到那些方法的SQL对应物。SQL对应物是能够以目标语言获得的方法的元表示。元表示是协助翻译的目标语言的理想化版本中的构造,通过基于这样的理想假设目标语言可以表示用来创建对象查询节点的编程语言可以表示的任何事物来提供中间表示。对于SQL的情况,至少部分因为SQL不像大多数编程语言那样是图灵完全的,该语言不能够表示编程语言有能力表示的所有事物。在级0中,也考虑名字的辖域以避免名字冲突。级1包括创建一组查询,以使得由该查询对象表示的单个査询可以被翻译成多个SQL査询。这样做是为了避免嵌套问题,或者仅仅为了通过创建多个简单查询而不是单个负责查询来简化査询翻译。如果在正在被査询的数据库服务器上为仿真的活动结果集或多个活动结果集提供适当的支持,多个查询可以作为一批被一起执行。通过高速缓存查询结果可以仿真多个查询以供后续查询使用。在级2中,通过查阅映射表来解析成员引用。例如,对象成员Division.DivName可以被翻译成DivisionTable.DivName,如果映射表是这样指定。映射也可以为诸列而创建,并在SQL查询中的诸表之间连结。任何翻译都可以在映射表中指定。映射表可以被实现为文本文件、对象、数据库或任何其他合适的实现。在级3中建立多重集的单独查询。可以在对象模型如图2的雇员数据集例子上访问的关联或属性可以得到结果的集合。在目标语言(SQL)的理想化版本中,集合可以被认为是多重集。多重集可以是嵌套表的描述。单个结果可以得到结果的嵌套表,例如从查询获得分层结果。SQL语言的实际版本不能够支持分层结果。级3中的处理查找这些类型的结果并将其转换成可以在客户终端一起组合回来的多个査询。级4对OrderBy子句再排序以满足SQL约束。在实际的SQL实现中,只在最外面的査询块中允许OrderBy子句。OrderBy不能被用于子查询或嵌套查询。在査询的对象表示中,对于特定范围可以在任何级别定义排序。因此再排序是产生可用SQL査询所必需的。可以釆用标准查询重写规则来确保正确的OrderBy再排序。在级5,对象表达式被翻译成可以被用于SQL査询的扁平列引用。可以通过走查表示主题查询的分层的语义树来获得对象表达式。该树的叶子可以是标量表达式或列引用。这些可以被置于表示投影的列表中。可以通过移除组成物理结果即SQL查询的片段来修剪表示逻辑结果的语义树,从而简化该树的剩余部分以供进一步分析。在级6中解析对内部范围的列和表达式的引用。在SQL查询中,如果外査询使用一列,那么该列必须是在内查询投影中。在级6中,投影被调整为确保每一引用在其被使用的范围中是可见的。例如,当子查询被创建时,创建一别名。这可以用来自表别名的列的引用开始。可以注入査询的通过变换层。没有重写的情况下,将不可能引用别名,因为它将被埋在多层子查询下面。该级处理检查引用并确定该引用是否是被深层嵌套的投影的一部分。如果是,那么该列数值被穿过这些层向上投影,以便将其带到合适的或需要的范围中。这里的处理不绑定列的起源。处理组件只知道存在某种信息的一列。这允许处理器能够以任意顺序重写语义树,而无须关心该列的源的最终位置。处理器可以只确定该列在哪里被定义和该列在哪里被使用,以确保来自该列的数据流到需要该数据的地方。级7分配名字和别名。向在外查询中使用、在内查询中所定义的表达式给定名字。具有复制名字的列被分配别名。每当有子查询或表被Select语句的From子句引用时,某些相同列的再投影会引起由连结操作导致的名字冲突。级7搜索这些名字冲突的发生,并在需要或适当时分配新名字。此外,向没被命名的项分配名字。在级8,从带有程序变量的实字和表达式创建査询参数。级8处理器在查询中为对实际上是外部参数的事物的任何引用进行检査。收集这些外部参数,并用语义树片段对其评估,以获得实际数值并在进行实际查询时通过适当的API提交这些数值。剪除该树中不是可以被翻译成SQL指令但可以被翻译成SQL指令中的参数引用的事物的部分。这一方式最小化SQL注入问题并由此增加了数据安全性。至少在一些部分中,这是因为没有要级联的串。如果编程者需要表示实字数值或本地数值,他可以简单地在该査询'中使用那一数值。该数值可以在表达式树中捕捉,并在随后被使用。级9简单地汇编翻译后査询的所有查询片段,并将那些片段设置成可以作为查询被传送给数据库的文本串。文本串可以是在完成处理之后从多级流水线520形成的目标查询530。文本串可以是能被用来创建结果集的完整的SQL语句,该结果集可以被应用程序用于进一步的处理。图6是可配置流水线600的示意图。可配置流水线600可以被用来创建各种不同目标语言的翻译后查询。具体地,翻译后查询可以针对查询语言的不同版本,如SQL-92和SQL-99,或者可以针对所有不同语言。可配置流水线600包括输入阶段610。输入阶段610可以包括一个或多个处理级,如以上结合图5所公开和描述的处理级。具体地,输入阶段610可以包括要被执行而不考虑选择哪一目标语言的那些处理级。具体哪些级会被包括在内很大程度上依赖于所需要的流水线的可置配程度大小、目标语言的相似程度大小以及其他因素。输出阶段620、630、640可以被用来完成以输入阶段610开始的处理流水线。每一输出阶段620、630、640可以被设计成针对一特定语言或语言版本。因此可以通过简单地知道翻译针对哪一语言或语言版本来作出对输出阶段620、630、640的选择。具体哪些级会被包括在每一输出阶段620、630、640内很大程度上依赖于哪些级会被包括在输入阶段610内以及其他因素。图7是査询翻译系统700的系统框图。查询翻译系统700可以被用来把査询从逻辑表达式转换成物理表达式。此外,查询翻译系统700可以被用来把査询结果集翻译成对象表示,该对象表示可以由包括原始查询的应用程序使用。查询翻译系统700包括对象査询表示710。对象查询表示710可以是语义树、图或某种其他合适表示。翻译模块720可以接受对象查询表示710并把对象査询表示710转换成目标语言的等效查询,如目标查询表示730。除了先前结合其他附图所公开和描述的映射技术之外,翻译模块720还可以使用各种基于人工智能的组件来判断是否应该进行对象和SQL语句之间的映射。翻译模块720可以使用多种方法来使得如语义树的对象的至少一部分与目标语言理想化版本的适当代码相匹配。除了若干的传统匹配方法之外,翻译模块720可以使用神经网络、专家系统、基于规则的处理组件或支持向量机(SVM)。分类器是这样一个函数,它把输入属性矢量X气xl,x2,x3,x4,...xn)映射到输入属于一个类的置信度,也就是说,f(X"置信度(类)。这样的分类可以使用概率性和/或基于统计的分析(例如,分解成分析工具和成本)来诊断或推理用户需要自动执行的动作。对于翻译模块720的情况,语义树可以被看作一个模式,该模式可以被分类以判断这样的模式是否匹配SQL语句的相应模式。普通技术人员在阅读本说明书时可以容易看出,也可以使用其他模式匹配的任务。SVM是可以使用的分类器的一个例子。SVM通过査找可能的输入空间中的一个超曲面来工作,其中该超曲面试图把触发准则与非触发事件分离开来。直观地,这使得分类对于接近但不同于训练数据的测试数据来说是正确的。可采用其他有向和无向模型分类方法,例如包括朴素贝叶斯、贝叶斯网络、决策树和提供不同的独立模式的概率分类模型。在此所使用的分类也包括被用来开发优先模型的统计回归。从本主题说明中可以容易地明白,在此所公开或描述的组件可以使用显式训练(例如,由一般训练数据)以及隐式训练(例如,通过观察用户行为,接收外来信息)的分类器。例如,SVM可以由分类器构造器和功能选择模块中的学习或训练阶段来配置。因此,(诸)分类器可以被用来自动地执行若干功能,包括但不限于判断描述符是否匹配搜索对象。数据库740可用接受目标查询表示730并执行针对所包括的数据的查询以创建结果集750。在这一例子中,数据库740可以是关系数据库,结果集750可以是包括多行和多列的表。也可以使用其他类型的数据库,并对查询翻译系统700的其他组件进行适当的修改。对象转换器760可以接受结果集750并使用该结果集750来创建对象化结果集770。为了这样做,对象转换器760可以访问发送到数据库740的SQL査询,并使用该SQL查询的内部表示来构造专门化对象以读取对象、单子、列以及延期的读取器。例如,对Division对象的查询可以导致创建具有来自DivisionTable的行的DataReader。对象读取器可以把每一行转换成Division对象。Including()运算符可以使得立即载入Division.Employees集合。集合对象读取器可以把来自Division的EmployeeTable的各行转换成Division.Employees对象。对Employee.Position的查询可以得到对Position的单子读取器。对Employee.EmpId的查询可以要求用于Empld数值的列读取器。Division.Employees的延期(或延迟)载入可以由延期读取器处理。每一专门化读取器可以理解底层DataReader(列及其类型)的元数据以及目标(CLR类型、其成员、基数)的元数据。在操作时,査询翻译系统可以如下所示工作。翻译模块720可以接受对象查询表示710并处理该对象查询表示710以创建目标査询表示730。数据库740可以接受目标查询表示730并使用目标査询表示730执行查询以创建结果集750。对象转换器使用目标查询表示730来创建一组专门化读取器,该专门化读取器可以处理结果集750格式的信息以创建对象化结果集770。图8是方法800的通用处理流程的流程图,其中方法800可以结合已经参照其他附图所公开或描述的组件使用。方法800可以被用来将查询整合到应用程序。尤其,方法800可以被用来使用编写应用程序所用的编程语言将查询整合到该应用程序中,其使得编译器在编译时可以对该査询进行类型检查、句法检查以及绑定。方法800的处理从开始块810开始,进行到处理块820。在处理块820,获得用某种高级编程语言写成的应用程序的源代码。该源代码可以包括以该高级编程语言构造的至少一个査询。处理继续到处理块830,其中该高级编程语言的编译器对包括任何查询的源代码执行句法检查。方法800的处理继续到处理块840,其中编译器为源代码中的所有类型执行类型检査。在处理块850,编译器对源代码的语言执行语义检查以确保符合任何语义规则。处理继续到处理块860,其中编译器绑定源代码中的类型。在处理块870,编译器构造表示该查询的表达式树。在处理块880,构造包括该表达式树的完整的应用程序。在结束块890,处理结束。图9是方法900的通用处理流程的流程图,其中方法900可以结合已经参照其他附图所公开或描述的组件使用。方法900可以被用来翻译应用程序的查询。具体地,方法900可以被用来在运行时把查询翻译成等效SQL査询,其中该查询可以作为编写应用程序的编程语言的对象被包括在该应用程序中。方法900的处理从开始块905开始,并继续到处理块910。在处理块910,从应用程序获得诸如表达式树的查询数据结构。在处理块915,获得编码该查询的数据结构的节点。处理继续到处理块920,其中数据结构的节点被映射到理想化目标语言组件。在判定块925,作出该数据结构是否还有节点要映射的判断。如果是,处理返回到处理块915,其中获得另一节点。如果否,处理继续到处理块930,其中创建一查询集。在处理块935,解析成员引用。处理继续到判定块940,其中作出是否正在使用多重集的判断。如果在判定块940作出的判断为是,那么处理继续到处理块945,其中创建分离的査询。来自判定块940或者从处理块945的否定判断的处理继续到处理块950,其中重写被包括在查询中的任何OrderBy子句以遵守目标查询语言的限制。在处理块955,将对象表达式翻译成扁平列引用。处理继续到处理块960,其中解析对所有范围的引用。在处理块965,分配名字和别名以消除名字冲突。处理继续到处理块970,其中标识并创建查询参数。在处理块975,创建査询文本串。在结束块980,方法900的处理结束。图10是方法1000的通用处理流程的流程图,其中方法1000可以结合已经参照其他附图所公开或描述的组件使用。方法1000可以被用来翻译来自应用程序的查询。具体地,方法1000可以被用来把已通过使用编写应用程序的编程语言编译到该应用程序中的査询翻译成以可以选择的目标语言的等效査询,。方法1000的处理从开始块1010开始,并继续到处理块1020。在处理块1020,从应用程序获得诸如表达式树、图或任何其他合适数据结构的査询数据结构。在处理块1030,创建理想化目标查询。在判定块1040,作出关于两个或多个可用语言版本中的哪一个是翻译后査询的目标的判断。如果在判定块1040作出的判断是目标为语言Tl,处理继续到处理块1050。在处理块1050,执行从目标语言的理想化表示到实际语言版本表示的转换。处理继续到处理块1060,其中所转换的査询被设置成文本串,该文本串可以被传送给数据库,以便基于包括在该文本串中的查询语句执行查询。如果在判断作出块1040的判断是目标为语言T2,处理继续到处理块1070。在处理块1070,执行从目标语言的理想化表示到实际语言版本表示的转换。处理继续到处理块1080,其中所转换的査询被设置成文本串,该文本串可以被传送给数据库,以便基于包括在该文本串中的查询语句执行查询。在结束块1090,来自处理块1060或处理块1080的处理结束。为了提供用于实现本发明的各个方面的附加上下文,图11-12和下列讨论旨在提供一个适当的计算环境的简要而又一般化的描述,本发明各个方面可以在该计算环境中实现。尽管前面已经在运行在本地计算机和/或远程计算机上的计算机程序的计算机可执行指令的一般上下文中描述本发明,那些本领域内的技术人员将认识到,本发明也可以和与其他程序模块结合实现。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、对象、数据结构等等。而且,本领域内的技术人员将会明白,本发明的方法可以与其他计算机系统配置一起实践,这些其他计算机系统配置包括单处理器或多处理器计算机系统、小型计算机、大型计算机以及个人计算机、手持式计算设备、基于微处理器的和/或可编程的消费性电子产品等等,其中的每个都可以与一个或多个关联的设备有效地进行通信。本发明的示例性方面也可以在分布式计算环境中实践,在分布式计算环境中,特定任务由通过通信网络连接的远程处理设备执行。然而,本发明一些方面,如果不是全部方面,可以在单机计算机上实践。在分布式计算环境中,程序模块可以位于本地和/或远程的存储器存储设备中。图11是本发明可以与之交互的示例计算环境iioo的示意框图。系统1100包括一个或多个客户端1110。(诸)客户端1110可以是硬件和/或软件(例如,线程、进程、计算设备)。系统1100也包括一个或多个服务器1120。(诸)服务器1120可以是硬件和/或软件(例如,线程、进程、计算设备)。服务器1120可以容纳例如通过使用本发明来执行变换的线程或进程。在客户端1110和服务器1120之间的一种可能的通信方式可以是以适于在两个或多个计算机进程之间传输的数据分组的形式。系统1100包括可以用于促进(诸)客户端1110和(诸)服务器1120之间的通信的通信框架1140。(诸)客户端1110在操作上被连接到可以被用于存储(诸)客户端1110的本地信息的一个或多个客户端数据存储1150。类似地,(诸)服务器1120在操作上被连接到可以被用于存储服务器1140的本地信息的一个或多个服务器数据存储1130。参见图12,用于实现本发明的各个方面的示例性环境1200包括计算机1212。计算机1212包括处理单元1214、系统存储器1216和系统总线1218。系统总线1218把包括但不限于系统存储器1216的系统组件耦合到处理单元1214。处理单元1214可以是任何可获得的处理器。双微处理器和其他多处理器架构也可以被用作处理单元1214。系统总线1218可以是包括存储器总线或存储器控制器、外围总线或外部总线和/或局部总线在内的若干总线结构类型中的任一种,这些若干总线结构类型使用多种常规总线架构,包括但不限于工业标准体系结构(ISA)、微通道体系结构(MSA)、扩展ISA(EISA)、智能驱动电子设备(IDE)、VESA局部总线(VLB)、外围组件互连(PCI)、卡总线、通用串行总线(USB)、高级图形端口(AGP)、个人计算机存储卡国际协会总线(PCMCIA)、火线(IEEE1394)以及小型计算机系统接口(SCSI)。系统存储器1216包括易失性存储器1220和非易失性存储器1222。基本输入/输出系统(BIOS)存储在非易失性存储器1222内,它包括帮助例如在启动过程中在计算机1212内的元件之间传输信息的基本例程。作为例示而非限制,非易失性存储器1222可以包括只读存储器(ROM)、可编程只读存储器(PROM),电可编程只读存储器(EPROM)、电可擦除只读存储器(EEPROM)或闪存。易失性存储器1220包括担任外部高速缓冲存储器的随机存取存储器(RAM)。作为例示而非限制,能够以许多形式获得RAM,如同步RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍数据速率SDRAM(DDRSDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)以及直接RambusRAM(DRRAM)。计算机1212也包括可移动的/不可移动的、易失性/非易失性计算机存储介质。例如,图12例示盘存储1224。盘存储1224包括但不限于,诸如磁盘驱动器、软盘驱动器、磁带机、Jaz驱动器、ZIP驱动器、LS-100驱动器、闪存卡或记忆棒的设备。另外,盘存储1224可以包括单独的存储介质或与其他存储介质的组合,包括但不限于,诸如紧致盘ROM设备(CD-ROM)、CD可记录驱动器(CD-R驱动器)、CD可重写驱动器(CD-RW驱动器)或数字多用途盘ROM驱动器(DVD-ROM)的光盘驱动器。为便于把盘存储设备1224连接到系统总线1218,通常使用可移动的或不可移动的接口,如接口1226。应该明白,图12描述担任在用户和在合适操作环境1200中所描述的基本计算机资源之间的中介的软件。此类软件包括操作系统1228。可以存储在盘存储1224上的操作系统1228控制和分配计算机系统1212的资源。通过存储在系统存储器1216中或存储在盘存储1224上的程序模块1232和程序数据1234,系统应用程序1230利用操作系统1228的资源管理。应该明白,本发明可以与各种操作系统或操作系统的组合一起实现。用户通过(诸)输入设备1236把指令或信息输入到计算机1212中。输入设备1236包括但不限于,诸如鼠标、跟踪球、指示笔、触摸板的定位设备、键盘、话筒、操纵杆、游戏手柄、碟形卫星天线、扫描仪、电视调谐器卡、数码相机、数码摄像机、web摄像头等。这些和其他输入设备经由(诸)接口端口1238通过系统总线1218连接到处理单元1214。例如,(诸)接口端口1238包括串行端口、并行端口、游戏端口以及通用串行总线(USB)。(诸)输出设备1240使用一些与(诸)输入设备1236相同类型的端口。因此,例如,USB端口可以被用来向计算机1212提供输入,并将来自计算机1212信息输出到输出设备1240。提供输出适配器1242以例示存在一些输出设备1240如监视器、扬声器和打印机以及其他输出设备1240,这些输出设备需要特殊的适配器。作为例子而非限制,输出适配器1242包括提供输出设备1240和系统总线1218之间的一种连接装置的视频和音频卡。应该注意,其他设备和/或设备系统提供输入和输出能力两者,如远程(诸)计算机1244。计算机1212可以在使用到一个或多个远程计算机如远程计算机1244的逻辑连接的网络化环境中工作。远程计算机1244可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的装置、对等设备或其他公共网络节点等,并通常包括大部分或所有相对于计算机1212所描述的元件。为简要起见,只与远程计算机1244—起例示存储器存储设备1246。远程计算机1244通过网络接口1248在逻辑上连接到计算机1212,然后经由通信连接1250在物理上连接。网络接口1248包含有线和/或无线通信网络,如局域网(LAN)和广域网(WAN)。LAN技术包括光纤分布式数据接口(FDDI)、铜缆分布式数据接口(CDDI)、以太网、令牌环等等。WAN技术包括但不限于点对点链路、电路交换网络如综合业务数字网(ISDN)及其变型、分组交换网络和数字用户线(DSL)。通信连接1250是指被用于把网络接口1248连接到总线1218的硬件/软件。出于例示的清晰性的目的,通信连接1250被例示为是在计算机1212里,但它也可以外置于计算机1212。仅出于示例性目的,连接到网络接口1248所需要的硬件/软件包括内置和外置技术如包括普通电话等级调制解调器、线缆调制解调器和DSL调制解调器的调制解调器、ISDN适配器和以太网卡。以上所描述的内容包括特定组件和方法的例示性例子。当然,描述每一个可以想到的组件或方法的组合是不可能的,但本领域内的技术人员应该认识到,许多其他组合和排列都是可能的。因此,旨在包括落在所附权利要求书的精神和范围内的所有这样的改变、修改和变动。尤其并对于由上述组件、设备、电路、系统等执行的各种功能,除非另外指出,用来描述此类组件的术语(包括对"装置"的引用)旨在对应于执行所描述组件的指定功能(例如,功能上等效)的任何组件,即使它在结构上不等同于执行在此例示的例子中功能的公开结构。在这点上,应该认识到,所公开和描述组件和方法也可以包括具有用于执行各种所公开和描述的方法的动作或事件的的系统和计算机可执行指令计算机可读介质。另外,可能己经仅仅相对于多种实现中的一种公开特定特征,但根据需要用于或有利于任何给定或特定应用,此类特征可以与一个或多个其他实现的其他特征组合。此外,就详细描述或权利要求书中用到术语"包含"及其变体而言,这些术语是指以类似于术语"包括"的方式包含在内。权利要求1.一个系统,用于把查询从第一计算语言的表示转换成不同于所述第一计算语言的第二计算语言的表示的等效查询,所述系统包括查询模块,接受以面向对象的表示的查询,以翻译成目标查询语言的等效查询;以及翻译模块,使用所述查询的面向对象表示来创建目标查询语言的理想化版本所述查询的第一版本,并使用所述查询的第一版本来创建所述目标查询语言的实现版本的所述查询的第二版本。2.如权利要求1所述的系统,其特征在于,所述查询的面向对象表示是图。3.如权利要求1所述的系统,其特征在于,所述查询的面向对象表示是表达式树。4.如权利要求3所述的系统,其特征在于,所述目标査询语言是结构化查询语言(SQL)。5.如权利要求4所述的系统,其特征在于,所述翻译模块包括多级流水线。6.如权利要求5所述的系统,其特征在于,所述多级流水线是可配置的。7.如权利要求6所述的系统,其特征在于,所述多级流水线的配置确定多种査询语言中的哪一种被用作所述目标语言。8.如权利要求7所述的系统,其特征在于,还包括创建分层结果集的面向对象表示的对象翻译器,所述分层结果集包括从针对数据库的多于一个的查询汇编的信息。9.一种方法,用于把查询从面向对象的表示翻译成数据查询语言表示,所述方法包括使用以面向对象的格式表示的査询来创建数据查询语言的理想化格式的等效查询;以及使用所述理想化格式的等效查询来创建所述数据查询语言的实际版本的格式的第二等效査询。10.如权利要求9的方法,其特征在于,还包括使用多级流水线创建所述第二等效查询。11.如权利要求IO的方法,其特征在于,使用以面向对象的格式表示的査询包括使用语义树。12.如权利要求10的方法,其特征在于,使用多级流水线包括把所述多级流水线配置成针对一具体查询语言。13.如权利要求12的方法,其特征在于,还包括使用所述第二等效查询来从数据库获得结果集。14.如权利要求13的方法,还包括把所述结果集转换成面向对象的格式。15.—个系统,其用于把查询从面向对象的表示翻译成数据查询语言表示,所述系统包括用于使用以面向对象的格式表示的査询来创建数据査询语言的理想化格式的等效查询的装置;以及用于使用所述理想化格式的所述等效查询来创建所述数据查询语言的实际版本的格式的第二等效查询的装置。16.如权利要求15所述的系统,还包括用于使用多级流水线来创建所述第二等效査询的装置。17.如权利要求16所述的系统,其特征在于,所述用于使用以面向对象的格式表示的查询的装置包括用于使用语义树的装置。18.如权利要求17所述的系统,其特征在于,所述使用多级流水线的装置包括用于把所述多级流水线配置成针对一具体査询语言的装置。19.如权利要求18所述的系统,还包括用于使用所述第二等效查询来从数据库获得结果集的装置。20.如权利要求19所述的系统,还包括用于把所述结果集转换成面向对象格式的装置。全文摘要一个系统,该系统用于把查询从第一计算语言的表示(图1,110)转换成不同于所述第一计算语言的第二计算语言的表示(图1,130)的等效查询,它包括查询模块,该查询模块接受面向对象表示的查询,以翻译成目标查询语言的等效查询。该系统也包括翻译模块(图1,120),该翻译模块使用查询的面向对象表示来创建目标查询语言的理想化版本的该查询的第一版本,并使用该查询的第一版本来创建目标查询语言(图1)的实现版本的该查询的第二版本。也提供使用该系统的方法。文档编号G06F17/30GK101233512SQ200680027767公开日2008年7月30日申请日期2006年6月29日优先权日2005年7月29日发明者A·赫杰斯伯格,D·C·库尔卡尼,H·J·M·梅杰,J·A·费舍尔,L·伯洛格纳斯,M·J·沃伦,P·A·豪拉姆申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1