CN101606154A - 允许元素类型的类型流的查询模式 - Google Patents

允许元素类型的类型流的查询模式 Download PDF

Info

Publication number
CN101606154A
CN101606154A CNA2008800039752A CN200880003975A CN101606154A CN 101606154 A CN101606154 A CN 101606154A CN A2008800039752 A CNA2008800039752 A CN A2008800039752A CN 200880003975 A CN200880003975 A CN 200880003975A CN 101606154 A CN101606154 A CN 101606154A
Authority
CN
China
Prior art keywords
operational symbol
type
inquiry
element type
clause
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008800039752A
Other languages
English (en)
Other versions
CN101606154B (zh
Inventor
H·J·M·梅杰
A·K·西尔弗
P·A·维克
E·扎伯克利特斯基
A·V·青高兹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101606154A publication Critical patent/CN101606154A/zh
Application granted granted Critical
Publication of CN101606154B publication Critical patent/CN101606154B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/2438Embedded query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2423Interactive query statement specification based on a database schema

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

所要求保护的主题涉及运算符模式的形式化,其可方便表达式的第一子句中的运算符到表达式的下一子句中的运算符的元素类型的类型流。流到下一子句的类型以及其中现存的运算符可被组合以推断下一子句的元素类型。由此,可增量式地实现类型检查、自动完成和其它有利特征而无需在前对表达式的完全转换。

Description

允许元素类型的类型流的查询模式
发明背景
在计算机语言的领域中,传统上有许多不同的语言类别。例如,许多编程语言目的是为大多数最终用户编程目标提供一般的解决方案,但另一方面,查询语言却通常专用于基于对数据库查询的信息挖掘。多年来,已经进行了许多尝试来将查询能力添加到编程语言,但是存在很多困难。
一个这样的困难是大多数现代编程语言是基于面向对象的模型的,该模型允许分层、抽象、模块性、封装和旨在降低编程任务的复杂度的若干其它范例。另一方面,现代数据库很大一部分是关系型数据库,因此查询语言往往是基于关系模型而非面向对象的模型。
另一困难是用于编程语言的开发环境(例如,集成开发环境(IDE))已经进化成向开发者提供非常精密的协助手段,导致没有这种开发环境来编程变得很费劲。一个示例是诸如自动完成实用程序或机制等内联上下文信息。这些自动完成机制在其中类、变量名和其它构造事先定义的面向对象的领域能起很好的作用,但是通常不可用于查询语言,因为对于自动完成所必需的元素类型的类型检查在编译或转换了查询之前是不可用的。此外,查询在完成该查询之前不能被转换,这使得自动完成机制没有实际意义。再者,如果查询表达式是不良地形成的,则编译错误将是晦涩难解的且难以补救。
发明概述
以下提出了所要求保护的主题的简化概述以提供对所要求保护的主题的某些方面的基本理解。本概述并不是对所要求保护的主题的全面综述。它既不旨在标识所要求保护的主题的关键或重要的元素,也不描绘所要求保护的主题的范围。其唯一目的是以简化的形式来介绍所要求保护的主题的一些概念,作为稍后呈现的更为详细的描述的前序部分。
此处所公开并要求保护的主题的一方面包括用于方便表达式中的运算符之间的元素类型的类型流的计算机实现的技术。运算符可以是,但不限于,查询运算符,并且由此,类型可以贯穿整个查询表达式从一个查询子句流到下一查询子句。
根据所要求保护的主题的一方面,运算符可被映射到相关联的方法调用,并且方法调用可以根据运算符模式来定义。由此,可期望表达式中的任何给定运算符遵循形式化的运算符模式。相应地,算符以及整个表达式的项可以按照所期望的方法调用来表达。可以理解,方法可以是实例方法、静态方法、虚拟方法或扩展方法。
据此,通过方便类型流并约束运算符以遵循运算符模式,此处所公开的体系结构可以对表达式的每一子句递增地推断元素类型。例如,元素类型可以通过将源类型与运算符相组合来确定,并且这可以对表达式的每一连续的子句实时地完成。由此,类型信息可以本地地解析而无需完全转换整个表达式。因此,可以用较不昂贵(在资源利用方面)的方式且更快速地执行元素类型的类型检查,并且元素类型的类型检查可以在表达式的构造期间而非仅在表达式被最终化之后才实现,这可以产生附加的益处。
根据所要求保护的主题的一方面,一个这样的附加益处是可以对于表达式采用自动完成机制。例如,通过在进行中推断元素类型,可提供基于可用类型的上下文信息,这可以帮助表达式构造。
以下描述和附图详细阐明了所要求保护的主题的某些说明性方面。然而,这些方面仅指示了可采用所要求保护的主题的原理的各种方法中的几种,且所要求保护的主题旨在包括所有这些方面及其等效方面。当结合附图考虑以下所要求保护的主题的详细描述时,所要求保护的主题的其它优点和区别特征将变得显而易见。
附图简述
图1是可采用查询模式来方便元素类型的类型流的计算机实现的系统的框图。
图2A示出了对于一示例性查询表达式的非限制性代表性第一查询子句和各种非限制性代表性下一查询子句。
图2B更详细地示出了示例性查询表达式的查询子句以及元素类型的类型流。
图3描绘了具有示例性输入和输出的查询运算符模式的各种非限制性示例。
图4是实时地推断元素类型和/或基于所推断的元素类型递增地提供上下文信息的计算机实现的系统的框图。
图5描绘了定义用于方便查询表达式内的元素类型的类型流的计算机实现的方法的过程的示例性流程图。
图6是可方便可组成查询综合和/或可扩展查询表达式的计算机实现的系统的框图。
图7示出了与从示例性查询表达式的示例性查询子句得到的控制变量的范围有关的示例性描述的框图。
图8描绘了定义用于方便以组成方式构造查询综合的计算机实现的方法的过程的示例性流程图。
图9示出了可用于执行所公开的体系结构的计算机的框图。
图10示出示例性计算环境的示意性框图。
详细描述
现在参考附图来描述所要求保护的主题,所有附图中使用相同的附图标记来指代相同的要素。在以下描述中,为解释起见,阐明了众多具体细节以提供对所要求保护的主题的全面理解。然而,很明显,所要求保护的主题可以在没有这些具体细节的情况下实施。在其它情况下,以框图形式示出了公知的结构和设备以便于描述所要求保护的主题。
如在本申请中所使用的,术语“组件”、“模块”、“系统”、“接口”等一般旨在表示计算机相关的实体,其可以是硬件、硬件和软件的组合、软件、或者执行中的软件。例如,组件可以是,但不限于是,在处理器上运行的进程、处理器、对象、可执行码、执行的线程、程序和/或计算机。作为说明,运行在控制器上的应用程序和控制器都可以是组件。一个或多个组件可以驻留在进程和/或执行的线程中,并且组件可以位于一个计算机内和/或分布在两个或更多的计算机之间。作为另一示例,接口可包括I/O组件以及相关联的处理器、应用程序、和/或API组件,并且可以像命令行那样简单,或者是更复杂的集成开发环境(IDE)。
此外,所要求保护的主题可以使用产生控制计算机以实现所公开的主题的软件、固件、硬件或其任意组合的标准编程和/或工程技术而被实现为方法、装置或制品。在此使用的术语“制品”旨在涵盖可以从任何计算机可读设备、载体或介质访问的计算机程序。例如,计算机可读介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、智能卡和闪存设备(例如,卡、棒、钥匙驱动器……)。另外应该明白,可以采用载波来承载计算机可读电子数据,例如那些用于发送和接收电子邮件或用于访问如因特网或局域网(LAN)等网络的数据。当然,本领域的技术人员将会认识到,在不背离所要求保护的主题的范围或精神的前提下可以对这一配置进行许多修改。
此外,在此使用词语“示例性”意指用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其它方面或设计更优选或有利。相反,使用词语示例性旨在以具体的方式呈现各个概念。如本申请中所使用的,术语“或”意指包括性“或”而非互斥性“或”。即,除非另有指定或从上下文可以清楚,否则“X使用A或B”意指任何自然的包括性排列。即,如果X使用A;X使用B;或X使用A和B两者,则在任何以上情况下,都满足“X使用A或B”。另外,本申请中和所附权利要求书中所使用的冠词“一”和“一个”一般应被解释为是指“一个或多个”,除非另有指定或从上下文可以清楚指的是单数形式。
如在此所使用的,术语“推断”或“推论”通常是指从经由事件和/或数据捕捉的一组观察结果中推断或推理系统、环境和/或用户的状态的过程。例如,推断可用于标识特定的上下文或动作,或可生成状态的概率分布。推断可以是概率性的,即,基于对数据和事件的考虑计算所关注状态的概率分布。推断也可以指用于从一组事件和/或数据组成更高级事件的技术。这类推断导致从一组观察到的事件和/或存储的事件数据中构造新的事件或动作,而无论事件是否在相邻时间上相关,也无论事件和数据是来自一个还是若干个事件和数据源。
现在参考附图,最初参考图1,描绘了能够采用查询模式来方便元素类型的类型流的计算机实现的系统100。一般而言,系统100可包括可操作地耦合到公知的基于计算机的硬件(例如,控制器)、软件(例如,应用程序)、以及此处所描述的其它组件的用户接口102。用户接口102可接收查询表达式104,该表达式可包括第一查询子句和一个或多个下一查询子句。可以理解,第一查询子句可以包括可查询源类型(例如,类集、流等)以及可由第一查询子句作为例如关于源类型的控制变量来引入的元素类型。通常,所有查询子句包括查询运算符,然而,如所见的,查询表达式104的下一查询子句不必是完整的,而是可以按部分(例如,增量式地)接收,诸如在子句由用户输入的时候。查询表达式104和相关的子分量在下文中结合图2A和2B来更详细地描述。
系统100还可包括用于任何有效查询运算符(例如,与第一查询子句和后续的下一查询子句相关联的查询运算符)的查询运算符模式106。因此,在例如可操作地耦合到系统100的模式存储108中可以存在任何数量的查询运算符模式106。特别地,来自查询表达式104的查询子句(例如,各自具有特定的查询运算符)可以符合相关联的查询运算符模式106,该模式可以定义例如可访问实例方法。通过符合查询运算符模式106,可以实质上确保在一个查询子句和下一查询子句之间存在已知关系,并且因此存在从一个查询运算符到下一查询运算符的关系。查询运算符模式106结合图3来更详细描述。
应该理解,通过对查询表达式104施加约束以使查询表达式104的运算符符合查询运算符模式106,系统100可以确保从查询表达式104的一个查询子句/运算符到下一查询子句/运算符的元素类型的类型流。此外,通过确保此处所描述的元素类型流,可以在进行中实现某些有利的类型推断和/或上下文判定,而无需对完整查询表达式104的常规转换/编译,如参考图4更详细讨论的。此外,上述推断和/或判定可以在查询表达式104完成之前,并甚至在查询表达式104的形式错误时提供。作为进一步的解释而非限制,符合查询运算符模式106的示例查询表达式104以及与该架构化相关联的某些优点在下文中更详细描述。
仍参考图1,但也转向图2A,示出了示例性查询表达式104。一般而言,查询表达式104可以是向特定类集应用一系列查询运算符的表达式。查询运算符是可跨值的类集一次应用于该整个类集的运算符(例如,FROM、WHERE、SELECT......)。查询表达式104可包括第一查询子句202,以及任何数量的下一查询子句2041、2042等,其每一个都包含查询运算符中的一个。
尽管可存在许多其它查询运算符,并且这被认为是在所要求保护的主题的精神和范围之内,但是在下文中提供了多个具体示例以及对每一示例的简要描述。
·FROM(从)运算符可以引入一个或多个控制变量,并且或者指定要查询的类集,或者为控制变量计算值。
·RETURN(返回)和SELECT(选择)运算符可以指定输出类集的形状。在某些情况下,SELECT运算符可以引入新的控制变量。
·WHERE(其中)和DISTINCT(不同)运算符可以限制类集的值。
·ORDERBY(按……排序)运算符可以对类集施加排序。
·SKIP(跳过)、SKIPWHILE(跳过同时)、TAKE(获取)和TAKEWHILE(获取同时)运算符可以基于次序或条件返回类集的子集。
·UNION(并)、UNIONALL(并全部)、EXCEPT(除外)和INTERSECT(交)运算符可以接收两个类集并产生单个类集。
·GROUP(组)运算符可以聚集类集并可返回按照关键字来分组的类集。
·GROUPBY(按……分组)运算符可以基于一个或多个关键字来对类集分组。在某些情况下,GROUPBY运算符可以引入新的控制变量。
·AVG(平均)、SUM(求和)、COUNT(计数)、MIN(最小)和MAX(最大)运算符可以聚集类集并产生值。
·ANY(任何)和ALL(全部)运算符可以聚集类集并基于条件返回布尔(BOOLEAN)值。
·JOIN(联接)运算符可以接收两个类集,并可以基于从元素中导出的匹配关键字来产生单个类集。
·GROUPJOIN(组联接)运算符可以基于从元素中提取的匹配关键字来对两个类集执行分组联接。
查询表达式104中的查询运算符的转换可以按照运算符出现在查询表达式104中的次序从左到右来进行。通常,查询表达式104的第一个查询子句202包括FROM运算符,因为FROM运算符引入要查询的类集。另外,查询表达式104中的最后一个查询子句一般包括指定从查询所得的类集的最终形状的RETURN和SELECT运算符。然而,可以理解,最后的SELECT或RETURN运算符可被省略。例如,如果查询表达式104不是以RETURN或SELECT运算符结束,则可以假定隐含的SELECT运算符,这可将范围中的所有控制变量提升为所返回的匿名类型的属性。此外,应当理解,查询表达式104可以在应用了SELECT运算符之后继续,在该情况下,后续运算符可访问的控制变量仅限于范围中的那些控制变量。
根据所要求保护的主题的一方面,查询表达式104可如下架构化:
查询表达式::=查询运算符列表
查询运算符列表::=
   From运算符|
   查询运算符列表  查询运算符
查询运算符::=
  From运算符|
  Select运算符|
  Return运算符|
  Distinct运算符|
  Where运算符|
  OrderBy运算符|
  Partition运算符|
  Set运算符|
  GroupBy运算符|
  Join运算符|
  GroupJoin运算符
为了提供用于所要求保护的主题的附加上下文以及相关编程实现和/或语言的高级概览,考虑示例性查询表达式104的整体:
Dim names=_
From C In Customers_
Where C.State=“WA”_
Select C.Name
该查询表达式104可以取Customer(顾客)对象的类集,并返回具有华盛顿(WA)中的每一顾客的单个Name(姓名)属性的行的类集。
很容易明白,查询表达式104句法可以相当接近于标准关系型结构查询语言(SQL)句法,其意图是熟悉SQL的任何人将能够以极少的进一步指令来使用查询表达式104。然而,该句法不必受SQL约束,并且此外,查询表达式104不必是SQL到另一编程语言的转换。由于SQL是围绕纯关系型模型来设计的,因此其某些习惯用语在包含分层概念的类型系统中并不能起很好的作用。另外,SQL通常采用的某些句法和语义元素会冲突或者不能与现有的编程语言句法或语义很好地集成。由此,尽管查询表达式104对于熟悉SQL的用户而言可以是直观的,但是也可存在某些区别。
例如,在SQL以及诸如过程语言/结构化查询语言(PLSQL)等其它语言中,查询和查询的结果通过对整个查询求值来绑定。由此,不需要能够解释所应用的特定查询运算符的元素类型。此外,这一判定在输入了整个无错误的查询并且通过相对昂贵的转换过程绑定之前是不能做出的。相反,所要求保护的主题能够将查询表达式104输入和查询表达式104的结果按照特定源类型上的个别查询运算来绑定。这些和其它优点可以参考图2B来更深入地示出。
图2B更详细地示出了示例性查询表达式104的查询子句。在该示例中,第一查询子句202包括第一查询运算符(例如,FROM运算符206),其可用语引入可查询源类型(例如,Customers 208),并且可声明用于该源类型的元素类型的控制变量210(例如,C)。如图所示,第一查询子句202的结果流212到下一查询子句2041(此处统称为下一查询子句204),使得在相邻查询子句之间可存在已知关系。特别地,元素类型可流212到下一查询运算符(例如,WHERE运算符214)以用作下一查询子句2041的源类型。同样,下一查询子句2041的输出流212到下一查询子句2042,其中它与下一查询运算符(例如,SELECT运算符216)相关联,该运算符也可产生流212到后续的下一查询子句204的元素类型或描述查询表达式104的输出的最终形状。
特别地,用于下一查询子句204的每一个的查询运算可以基于一组方法(例如,查询运算符模式106),其中每一方法与一特定查询运算符相关联,并且被应用于类集或序列(例如,源类型)。这些查询运算符可以相关于类集的元素类型(或行)来定义。然而,给定具有元素类型T并应用了查询运算符的特定源类型,流212到下一查询运算符204的结果可以是具有元素类型S的类集。因此,流动212的元素类型可以根据与给定查询运算符相关联的查询运算符模式106来变换。例如,与诸如SELECT和RETURN等投影查询运算符相关联的查询运算符模式106一般返回与从流212接收到的元素类型不同的元素类型。
在本示例中,元素类型T(其可以是例如与Customer类型208相关联的所有控制变量210的聚集)流212到下一查询子句2041的WHERE运算符214。如将结合图3描述的,与WHERE运算符214相关联的查询运算符模式106可以过滤该类集的值,但是在其它方面通常不改变元素类型。此处,不在华盛顿州的顾客从类集中过滤掉,但是流212到下一查询运算符,即SELECT运算符216的结果仍是具有元素类型Customer 208的类集。
另一方面,如果假定Name属性是String(串)类型的,则SELECT运算符216的结果是具有元素类型String的类集。对查询结果同时支持SELECT和RETURN运算符的组合可提供对运算符的输入和输出的可预测语义。另外,可以促进更大的灵活性以在与关系型数据交互时精确地模仿期望的SQL语义。此外,在产生非表结果时可以促进更大的简单性,以及在迭代地形成查询表达式时可以促进对编译器错误和所需改变的改进的定位。
另外,对于可查询可扩展标记语言(XML)数据的类集的某些查询语言(例如,XQuery,其是包括某些编程语言特征的查询语言);所要求保护的主题也可结合XML文字来使用。例如,可以采用以下示例性查询表达式104来返回包括在华盛顿的所有顾客的姓名的XML元素类集,其类似于以上所讨论的示例性查询表达式104的结果。
Dim names=_
  From c In Customers_
Where c.State=“WA”_
Return<Name><%=c.Name%></Name>
还可以理解,诸如,例如FROM、SELECT和GROUPBY等某些查询运算符可以引入称为控制变量(例如,控制变量C 210)的一种特殊的局部变量。默认地,控制变量的范围可以定为从引入的运算符到可以隐藏该控制变量的运算符,并且可以表示查询所求值的类集中的个别行的属性或列。例如,在以下查询中:
Dim WACusts=_
  From C As Customer In Customers_
  Where C.State=“WA”
FROM运算符引入了类型为Customers的控制变量C。后面的WHERE查询运算符然后参考控制变量C在过滤表达式C.State=″WA″中表示每一个别顾客。
诸如DISTINCT等某些查询运算符不必使用或改变控制变量。诸如SELECT等其它查询运算符可以在范围中隐藏当前控制变量并且可引入新的控制变量。例如,在以下查询中:
Dim YourUncles=_
  From C In Customers_
  Select LastName=C.Name_
  Where LastName.StartsWith(“Bo”)
WHERE查询运算符只能访问由SELECT运算符引入的LastName(姓)控制变量。如果WHERE运算符试图引用C,则可能会导致编译时错误。
现在参考图3(同时仍参考图1),提供了查询运算符模式的众多非限制示例。查询运算符模式302-328是查询运算符模式106的具体图示,并且此处由参考标号302-328来个别地引用,或者统称为查询运算符模式106。还可以理解,若干查询运算符模式106可适用于多个查询运算符,即使多个查询运算符中涉及查询运算符模式302-328中的单个模式的每一查询运算符可具有将其与多个查询运算符中的其它运算符相区分的特性。此外,在某些情况下,特定查询运算符可以结合查询运算符模式302-328中的一个以上模式来使用(例如,重载函数)。
一般而言,查询运算符模式106可以是类型C必须实现以便可被查询的方法签名。可以回想,查询表达式104可以向特定类集应用一系列查询运算符。每一查询运算符的控制变量可以是用于应用该特定查询运算符的范围中的全部变量或全部变量的子集,而可从一个查询运算符流到下一查询运算符的元素类型T可以是作为范围中的全部控制变量的聚集的匿名类型。因此,查询运算符模式106可以特别地帮助确保类型C是可查询类型。对于任何给定查询表达式104,如果以下条件的至少一个为真,则类型C是可查询类型:
(1)类型C包括返回可查询类型的具有签名AsQuerable()的可访问实例方法。
(2)类型C包括返回IEnumerable(Of T)的具有签名AsEnumerable()的可访问实例方法。
(3)类型C实现符合查询运算符模式302-328(下文进一步详述)的一个或多个查询运算符,并且对于在类型C上定义的所有查询运算符,类型T必须匹配并且不可以是开放类型参数。
参考查询运算符模式302-328,查询运算符模式302可包括FROM运算符。在查询表达式104中,FROM运算符通常在第一查询子句中使用。由此,FROM模式302可以引入查询的源以及要使用的控制变量,并且可输出具有元素类型T的可查询类型。应当理解,在对查询表达式求值之前,如果类型C不满足设计模式(例如,不符合查询运算符模式106),则可对查询表达式104调用AsQueryable或AsEnumerable方法,并且该函数的返回值可被存储在临时位置中。
如上所述,FROM运算符可以引入可被查询的类集以及可表示该类集中的个别成员的控制变量。查询表达式:
From b As Book In Books...
可被认为等价于
For Each b As Book In Books
  ...
Next b
类集表达式运算数一般必须被分类为值并且必须是可查询类型。FROM运算符所声明的控制变量通常必须遵循用于相对于命名和定范围来声明局部变量的常规规则(如以上句法转换所暗示的)。由此,控制变量一般不能隐藏封闭方法中的局部变量或参数的名称。
应当理解,FROM运算符还可引入其值可由表达式而非类集来确定的控制变量。这一特征可用于例如计算将在稍后的查询运算符中使用多次的值(例如,计算该值一次而非在随后每次使用它时计算)。例如:
Dim TaxedBookPrices=_
 From b in Books_
 From Tax=b.Price*0.088_
 Where Tax>3.50_
 Select b.Price,Tax,Total=b.Price+Tax
可被认为等价于:
For Each b In Books
 Dim Tax=b.Price*0.088
 ...
Next b
声明表达式控制变量的FROM运算符的句法可以与FOR LOOP中的控制变量声明相同,例外是该控制变量一般通过显示初始化程序来初始化。不要求表达式控制变量引用另一控制变量,因为这样做可能是不确定值。表达式控制变量通常不能是在查询表达式104中声明的第一控制变量。
出于简短和/或方便的目的,FROM运算符的运算数可以省略AS子句,在这一情况下,控制变量的类型可以从该变量范围所在的类集或表达式来推断。如果控制变量的类型不能从查询运算符方法中导出,则将导致编译时错误。FROM运算符可以在架构上如下定义:
From运算符::=
    From From声明列表
From声明列表::=
    From声明|
    From声明列表,From声明
From声明::=
    变量标识符[As类型名]In表达式|
    变量声明函数
另外,尽管FROM运算符一般作为第一个查询子句202的查询运算符出现,但是查询表达式104可以包括一个以上FROM运算符。因此,当FROM运算符是下一查询子句204的查询运算符时,则可导致叉积(例如,简单、隐式联接)。在这一情况下,FROM运算符可以将新控制变量联接(参见下文的JOIN运算符模式324)到现有的控制变量集。结果可以是联接的类集中的所有元素的叉积。因此,例如,表达式
From b In Books_
From p In Publishers_
...
可被认为等价于嵌套的For Each循环
For Each b In Books
 For Each p In Publishers
        ...
 Next p
Next b
前一查询运算符中引入的控制变量可以在范围内,并且可在包括在下一查询运算符204中的FROM运算符内使用。按照SQL,上述特征可被认为是支持“相关子查询”。例如,在以下查询表达式中,第二个FROM运算符涉及第一个控制变量的值:
From c As Customer In Customers_
From o As Order In c.Orders_
Select c.Name,o
另外,在单个查询子句中可以出现多个FROM运算符,在这一情况下,运算数之间的逗号可以完全等价于下一查询子句204中的另一FROM运算符。由此,示例:
From b In Books,p In Publishers_
Select b,p
可以等价于
From b In Books_
From p In Publishers_
Select b,p
查询运算符模式304可以包括一查询运算符,其是名为SELECT或SELECTMANY的可访问实例方法,该方法可以接收一函数作为自变量。函数可以包括类型为T的自变量,并产生类型S。该方法可以返回具有元素类型S的可查询类型。
SELECT运算符可以描述查询表达式104的结果。SELECT运算符可以取声明列表,并构造所得类集的元素类型。例如,如果查询表达式104为:
Dim CustAndOrderNames=_
   From c In Customers,o In c.Orders_
   Select c.Name,o.Product
则所得类型可以是IEnumerable(Of{Name As String,Product As String}),因为Name的类型是String,且Product(产品)的类型是String。
后面的这一查询(例如,查询表达式104)可以等价于显示地返回匿名类型:
Dim CustAndOrders=_
From c In Customers,o In c.Orders_
Return New With{c.Name,o.Product}
如果SELECT运算符只有一个声明,则结果可以是具有一个属性的匿名类型。由此,结果类型可以是IEnumerable(Of{Name As String}),因为Name的类型是String。例如,
Dim CustNames=_
From c In Customers
Select c.Name
SELECT运算符中使用的声明内的表达式在转换成底层匿名类型之前被绑定。更具体而言,SELECT运算符中的声明内的表达式可以开始成员访问,其中点运算符不必绑定到查询中的控制变量。相反,点运算符可改为绑定到封闭的WITH块,如果存在这样的块的话。
应当理解,除了SELECT运算符之外,查询表达式104还可包括其它投影运算符。例如,查询表达式可以包括RETURN运算符,对于该运算符,可以有相关联的查询运算符模式106。类似于SELECT运算符,RETURN运算符可以描述查询表达式104的结果。RETURN运算符可以取产生所得类集的元素的表达式。例如,查询:
Dim ReducedBookPrices=_
 From b in Books_
 Return b.Price*.8
可产生被降低到其原始成本的80%的价格的类集。
以RETURN运算符结束的查询表达式104的结果可以是其元素类型是所返回的表达式的类型的类集。例如,在以下查询表达式中,结果类型是IEnumerable(OF String),因为c.Name的类型是String:
Dim CustNames=_
   From c In Customers_
  Return c.Name
如果查询表达式104在没有RETURN或SELECT运算符的情况下结束,则所得的类集的元素类型可以是具有范围中的所有控制变量的属性的匿名类型:
′结果类型是IEnumerable(Of{Name As String,Product As String})
Dim CustNames=_
   From c In Customers,O In C.Orders
即使SELECT运算符可以描述查询表达式104的结果,但任何查询表达式104可在SELECT运算符之后继续。在该情况下,由SELECT语句引入的控制变量是范围中的控制变量,但是所有先前的控制变量通常在范围外:
CustNames=_
   From c In Customers,O In C.Orders
Select Name=C.Name,Price=O.Price
Where Price>500
Return Name
在SELECT运算符之后继续的查询表达式104可以等价于嵌套查询:
Dim CustNames=_
   From X In(From c In Customers,O In C.Orders_
        Return New With{C.Name,O.Price}),_
     Name=X.Name,Price=X.Price
   Where Price>500
   Return Name
RETURN和SELECT运算符分别可基于以下示例来定义:
Return运算符::=
    Return表达式
Select运算符::=Select Select声明列表
Select声明列表::=
    Select声明|
    Select声明列表,Select声明
Select声明::=
    变量声明函数
查询运算符模式306可以包括一查询运算符,其是名为WHERE的可访问实例方法,该方法取一函数作为自变量。类型T可以是该函数的自变量,并且结果可以是可被隐式地转换成布尔类型的类型。例如,结果类型可以具有与可在IF、WHILE或DO语句中使用的表达式的类型相同的规则。因此,类型可以具有到布尔类型的隐式转换,或者需要已经定义了IsTrue和IsFalse运算符。WHERE运算符可以返回具有元素类型T的可查询类型。
WHERE运算符可以将类集中的值限于满足给定条件的那些值。WHERE运算符可以接收对每一组控制变量值求值的布尔表达式。如果表达式的值为真,则该值可出现在输出类集中,否则该值可被跳过。查询表达式:
From b In Books,p In Publishers_
Where b.PublisherID=p.PublisherID_
...
可被认为等价于嵌套循环
For Each b In Books
 For Each p In Publishers
        If b.PublisherID=p.PublisherID Then
            ...
        End If
 Next p
Next b
WHERE运算符可被定义为:
Where运算符::=Where布尔表达式
查询运算符模式308可以包括一查询运算符,其是名为ORDERBY或ORDERBYDESCENDING(按降序排序)的可访问实例方法,该方法可取一函数作为自变量,该函数进而可取类型T的自变量,并产生类型S。与模式308相关联的方法可以返回具有元素类型T的已排序类集。
ORDERBY运算符可以基于一次序对出现在控制变量中的值排序。ORDERBY运算符可以取指定应使用来对控制变量排序的值的表达式。例如,以下查询返回按照价格(Price)排序的书名(book.Title):
From book In Books_
Order By book.Price
Select book.Title
排序可以是升序的,在这一情况下较小的值可以在较大的值之前出现;或者排序可以是降序的,在这一情况下较大的值在较小的值之前出现。排序的默认值是升序。例如,以下查询返回按照价格排序的书名,且最贵的书在最前面(Descending):
From book In Books_
Order By book.Price Descending
Select book.Title
ORDERBY运算符还可指定用于排序的多个表达式,在这一情况下类集可以用嵌套方式来排序。例如,以下查询表达式按照州(State),然后按照每一州内的市(City),在按照每一市内的邮政编码(ZIP),来对作者(Author)排序:
From author In Authors_
Order By author.State,author.City,author.ZIP_
Select author.Name,author.State,author.City,author.ZIP
ORDERBY运算符可以基于以下示例来架构化:
OrderBy运算符::=Order By Order表达式列表
Order表达式列表::=
     Order表达式|
     Order表达式列表,Order表达式
Order表达式::=
     表达式[排序]
   排序::=Ascending|Descending
另外,查询运算符模式310可以包括一查询运算符,其是名为DISTINCT的为可访问实例方法。通常,该方法返回具有与源类型C相同的元素类型的可查询类型。DISTINCT运算符可以将类集中的值仅限于具有不同值的那些(例如,不返回重复值)。例如,查询:
From c In Customers,o In c.Orders_
Select c.Name,o.Price_
Distinct
将仅对每一对不同的顾客名和定单(Order)价格(Price)返回一行,即使该顾客具有价格相同的多个定单。DISTINCT运算符可被架构化为:
Distinct运算符::=Distinct
现在参考查询运算符模式312,模式312可以包括一查询运算符,其是名为CONCAT、UNION、INTERSECT或EXCEPT的可访问实例方法。该方法可以接收具有与源C相同的元素类型T的类集作为自变量,并返回具有元素类型T的可查询类型。
下一查询运算符模式,即模式314可以包括一查询运算符,其是名为TAKE或SKIP的可访问实例方法,该方法可以接收值作为自变量,并且可以返回具有与源类型C相同的元素类型的可查询类型。
TAKE运算符可以产生来自类集的给定数量的元素。当随WHILE修饰符一起使用时(参见例如查询运算符模式316),TAKE运算符可以在条件保持为真时产生一元素序列。
SKIP运算符可以忽略来自类集的给定数量的元素,然后返回该类集的其余元素。当结合WHILE修饰符一起使用时,SKIP运算符在条件保持为真时跳过元素,然后返回类集的剩余元素。TAKE和SKIP的一个示例架构如下提供。
Partition运算符::=
       Take表达式|
       Skip表达式
Take表达式::=
       Take[While]表达式|
Skip表达式::=
       Skip[While]表达式
查询运算符模式316可以包括一查询运算符,其是名为TAKEWHILE或SKIPWHILE的可访问实例方法。该方法可取一函数作为自变量,其中该函数可接收类型T的自变量,并产生布尔值。该方法可以返回具有元素类型T的可查询类型。
查询运算符模式318可以包括一查询运算符,其是名为SUM、MIN、MAZ、COUNT或AVERAGE的可访问实例方法。该方法可取一函数作为自变量,其中该函数进而接收类型T的自变量,并产生数值类型。该方法可返回数值类型。
查询运算符模式320可以包括一查询运算符,其是名为MIN或MAX的可访问实例方法,该方法可取一函数作为自变量,该函数进而可取类型T的自变量,并产生类型S。该方法可以返回具有元素类型S的可查询类型。
查询运算符模式322可以包括一查询运算符,其是名为ANY或ALL的可访问实例方法,该方法可以接收一函数作为自变量。函数可以包括类型为T的自变量,并产生可被隐式地转换成布尔值的类型。该方法可返回可被隐式地转换成布尔值的类型。
可以理解,与模式318-322相关联的查询运算符可以结合AGGREGATE(聚集)运算符来使用。在聚集查询子句内,标准AGGREGATE运算符集可被应用于范围中的分组的控制变量。AGGREGATE运算符可括但不限于:ANY、ALL、COUNT、LONGCOUNT(长计数)、SUM、MIN、MAX、AVERAGE(平均)和/或GROUP。
ANY聚集运算符可以查明在组中是否有满足给定条件的元素。ALL聚集运算符可以确定是否组中的全部元素都满足给定条件。例如,以下的示例查询表达式104可以检查是否有低于18岁的任何顾客(cust.Age<18):
From cust In Customers_
Group By cust.State_
Aggregate YoungerThan18=Any(cust.Age<18)
而以下示例查询表达式104可以返回给定州中(cus.State)具有至少5个定单的所有顾客(cust.Orders.Count()>5):
From cust In Customers_
Group By cust.State_
Aggregate AtLeast5=All(cust.Orders.Count()>5)
COUNT和LONGCOUNT聚集运算符可以取可任选布尔表达式,并对该组中满足给定条件的元素的数量计数。
From cust In Customers_
Group By cust.State_
Aggregate Seniors=Count(cust.Age>50)
SUM聚集运算符可以基于特定选择器表达式来计算组中的元素之和。例如,以下示例性查询表达式104可以计算按照类别(Category)分组的所有定单的总值:
From order In Orders_
Group By order.Category
Aggregate Total=Sum(order.Price)
MIN和MAX聚集运算符可以基于某一选择器表达式来计算组的元素的最小值(或最大值)。例如,以下示例查询表达式104可以计算每一州的最年轻(Youngest)和最年长(Oldest)的顾客:
From cust In Customers_
Group By cust.State
Aggregate Oldest=Max(cust.Age),Youngest=Min(cust.Age)
AVERAGE聚集运算符通常基于特定选择器表达式来计算组中的元素的平均值。例如,以下示例查询表达式104可以计算按照类别分组的所有产品(Products)的平均价格:
From prod In Products_
Group By prod.Category
Aggregate AveragePrice=Average(prod.Price)
特殊的GROUP聚集运算符可以基于可任选选择器表达式将组的所有元素累积成显式类集。例如,以下示例性查询表达式104可以将给定州中的所有顾客姓名收集到单个类集中。
From cust In Customers_
Group By cust.State
Aggregate Names=Group(cust.Name)
查询运算符模式324可以包括一查询运算符,其是名为JOIN的可访问实例方法。该方法可以取以下各项作为自变量:具有类型T′的元素的可查询类型S;用作内部选择器的函数,其可取类型T的自变量,并产生表示关键字的类型K;用作外部选择器的函数,其可取类型T′作为自变量,并产生表示关键字的类型K;和/或用作联接条件的函数,其可取类型分别为T和T′的两个自变量,并产生类型V的散列值。该方法可以返回具有元素类型V的可查询类型。
因此,JOIN运算符可以取两个类集,并可以基于从元素中导出的匹配关键字来产生单个类集。在指定要联接的条件时可以应用某些限制。例如,可以要求对于条件表达式的运算数可被显示地转换为布尔值。JOIN架构的一个示例如下。
Join运算符::=
Join循环控制变量[As类型名]In表达式Where Join条件表达式
Join条件表达式::=
   Relational运算符表达式|
   Like运算符表达式
查询运算符模式326可以包括一查询运算符,其是名为GROUPJOIN的可访问实例方法,该方法可以接收以下各项作为自变量:具有类型T′的元素的可查询类型S;用作外部关键字选择器的函数,其取类型T的自变量,并产生表示关键字的类型K;用作内部关键字选择器的函数,其取类型U的自变量,并产生表示关键字的类型K;和/或可产生结果的函数,其中该函数可以取类型T的自变量,以及具有元素类型U的类集的自变量,并产生所选类型V。该方法可以返回具有元素类型V的可查询类型。
GROUPJOIN运算符可以基于从元素中提取的匹配关键字来创建两个类集的分组联接。运算符可以产生分层结果(例如,与匹配的内部元素的类集配对的外部元素),并且不需要关系型数据库项中的直接等价物。以下示例查询表达式104可以执行顾客与其定单的分组联接,从而产生具有顾客姓名以及该顾客的定单总额(order.Total)的匿名类型的类集:
From cust In db.Customers_
Group Join order In db.Orders On cust.ID=order.CustID_
Aggregate TotalOrders=Sum(order.Total)_
Select cust.Name,TotalOrders
可以有对固定集合操作以计算单个值的任何数量的附加运算符。在查询的上下文中,可以认为这些运算符聚集所计算的值。为对集合进行聚集,该集合一般必须首先被引入。在查询内,可以有各种方式来指定用于聚集计算的类集。在引入了一个组后,该组可被聚集以计算单个值。因此,除了分组运算符GROUPJOIN(以及以下结合查询运算符模式328讨论的GROUPBY)之外,可存在其它分组运算符。一个这样的示例是OVER运算符。
OVER运算符可以指定一个组应被累积以便进行聚集综合。OVER运算符可用作独立表达式,或者其可用于指定应对聚集计算采用预形成的类集。例如,以下示例查询表达式104可以聚集2006年1月1日以前所有定单总额之和:
Over order In Orders_
Where order.Date<=#01/01/2006#_
Aggregate Sum(order.Total)
OVER运算符的每次应用通常必须以相应的AGGREGATE运算符关闭来基于类集内容计算单个值。查询的结果可以是对应于聚集计算的单个值,在这一情况下其是表示2006年以前的所有定单的总金额的整数。
在OVER和AGGREGATE运算符之间可以使用可能任何查询运算符。在AGGREGATE运算符内,仅可对前一OVER运算符指定的控制变量使用AGGREGATE运算符(例如,与模式318-322相关联的运算符,如上所述)。
当已经形成一个集合时,如通常是分层对象图的情形,则可使用OVER运算符来指定应对聚集计算使用一个集合。例如,以下示例性查询表达式104可以聚集2006年以前华盛顿的所有顾客发出的所有定单的总金额:
From cust In db.Customers_
Where cust.State=“WA”_
Over order In Orders_
Where order.Date<=#01/01/2006#_
Aggregate Sum(order.Total)
该查询的结果可以是其元素类型是具有以下两个属性的匿名类型的可查询类型:1)称为cust的顾客属性,和称为Sum的整数属性。
查询运算符模式328可以包括一查询运算符,其是名为GROUPBY的可访问实例方法,该方法可取以下各项作为自变量:用作关键字选择器的函数,其接收类型T的自变量,并产生表示关键字的类型K;和/或产生结果的函数,其取类型K的自变量以及作为具有元素类型T的类集的自变量,并产生所选类型V。该方法可以返回产生具有元素类型V的可查询类型。
GROUPBY运算符可以基于一个或多个共同的关键字表达式来对类集的元素分组(例如,逻辑上)。对于初始类集的这些分区的每一个,后续的AGGREGATE语句可以指定这些组的每一个如何被聚集成单个值或行。
例如,以下示例性查询表达式104可以按照州来对所有顾客分组,然后计算每一组的计数(Count)和平均年龄(AverageAge):
From cust In Customers_
Group By cust.State
Aggregate Total=Count(),AverageAge=Avg(cust.Age)
与SELECT运算符一样,GROUPBY运算符可以将在关键字选择器中声明的变量作为控制变量带入范围中,并且可隐藏先前在范围中的所有控制变量。相反,与SELECT运算符的某些方面不同,这些隐藏的控制变量可以由在后续的AGGREGATE运算符内使用的AGGREGATE运算符再次带入范围中。此外,与OVER运算符的某些实现不同,在GROUPBY和AGGREGATE运算符之间不能使用任何其它查询运算符。
From cust In Customers_
Group CustomersByState By cust.State
这一构造可以等价于通过显式聚集来构造组,但是在GROUPBY运算符子句之后立即终止查询时是有用的。由此,以上表达式可以等价于以下表达式:
From cust In Customers_
Group By cust.State_
Aggregate CustomersByState=Group(cust)
不必要求GROUPBY运算符的实际实现实际构建每一个别的组的表示。相反,该实现可使用将分组与后续的聚集成单个运算相组合的底层实现。
可以理解,控制变量的类型和名称可以从查询表达式104的目标以及所应用的查询运算符中推断(将在下文中结合图4来更详细讨论)。由此,元素类型(其是范围中的控制变量的聚集)可以用类似的方式来推断。对于以上的每一条规则,元素类型的所推断的类型可以是T,并且当可查询类型C是在例如FOR EACH...NEXT语句中使用的类集时,元素类型通常必须匹配元素类型T。
还应当理解,已排序类集可被定义为实现以下运算符的子集的类集:名为THENBY或THENBYDESCENDING的、取一函数作为自变量的可访问实例方法,该函数取类型T的自变量,并产生类型S。该方法可以返回具有元素类型T的已排序类集。
由于查询运算符模式106可以方便将查询句法绑定到实现特定查询运算的方法,因此不需要由所采用的底层语言来规定次序保留。相反,次序保留可以由运算符本身的实现来确定。这在要重载的实现方面可以类似于用户定义的运算符,例如,用于用户定义的数值类型的加法运算符不能执行类似加法的任何运算。然而,为保留所要求保护的主题内在的可预测性,实现不匹配用户期望的运算符可能不是推荐的过程。
为帮助更完整地理解所要求保护的主题,现在可进一步讨论其它特征、方面和/或实现。例如,以下的某些节详述了每一查询运算符映射到对标准查询运算符方法的调用的示例性方式。其它节描述了如上引入的元素类型信息流的方式,并且将在稍后的节中使用(例如,结合图4和以下相关联的描述)。
查询运算符转换
可以理解,各种查询运算符的每一个可以直接映射到可根据标准查询运算符模式(例如,查询运算符模式106)来定义的方法调用。由此,查询运算符(或作为整体的查询表达式)的含义可以按照要调用的查询运算符方法来表达。方法可以是所查询的对象的实例方法,或对象外部的扩展方法。例如,查询:
Dim names=_
 From c In Customers_
 Where c.State=″WA″_
 Return c.Name
可以等价于:
Dim names=Customers.Where(c=>c.State).Select(c=>c.Name)
合成控制变量
尽管控制变量可由所要求保护的主题为此处所描述的各种目的而采用,但是可以理解,控制变量一般不是对最终用户直接可访问的。诸如WHERE或SELECT等某些查询运算符取可以引用查询中在范围中的控制变量的表达式。这些表达式被表达为取控制变量并返回表达式结果的局部函数。例如,查询:
Dim WACusts=_
 From cust In Customers_
Where cust.State=″WA″
可以等价于:
Dim WACusts=Customers.Where(c=>c.State=“WA”)_
         .Select(c=>New With{c.Name})
其中控制变量cust用作用于拉姆达表达式(lambda expression)的参数。类似地,在多个控制变量在范围中的情况下,控制变量通常必须被一起分组成单个匿名类型,以使它们可被传入局部函数。例如,查询:
Dim WACustsAndOrders=_
 From cust In Customers_
 From order In cust.Orders_
 Where cust.State=″WA″AndAlso order.Price>10.50
可以等价于:
Function Filter1(it As{c As Customer,o As Order})As Boolean
 Return it.c.State=″WA″AndAlso it.o.Price>10.50
End Function
Function Join1(c As Customer)As_
    IEnumerable(Of{c As Customer,o As Order})
 Function Select1(o As Order)As{c As Customer,o As Order}
    Return New{c,o}
 End Function
 Return c.Orders.Select(AddressOf Select1)
End Function
Dim WACustsAndOrders=_
 Customers.SelectMany(AddressOf Join1).Where(AddressOf
      Filter1)
其中控制变量c和o被一起组合成称为IT的合成控制变量,其类型是匿名类型{c As Customer,o As Order}。
还可以理解,也可以提供对于拉姆达表达式的支持,并且其被认为是在所要求保护的主题的精神和范围之内。还要注意,合成控制变量通常是不嵌套的。作为一个示例:
From b In Books_
From ba In BookAuthors_
From a In Authors_
...
可以等价于:
Function Join1(b As Book)As IEnumerable(Of{b As Book,ba As
BookAuthor})
 Function Select1(ba As BookAuthor)As{b As Book,ba As
BookAuthor}
   Return New{b,ba}
 End Function
 Return BookAuthors.Select(AddressOf Select1)
End Function
Function Join2(it As{b As Book,ba As BookAuthor})As_
    IEnumerable(Of{b As Book,ba As BookAuthor,a As Author})
 Function Select2(a As Author)As_
        {b As Book,ba As BookAuthor,a As Author}
    Return New{b,ba,a}
 End Function
 Return Authors.Select(AddressOf Join2)
End Function
Books.SelectMany(AddressOf Join1).SelectMany(AddresOf Join2)
FROM运算符转换
标准FROM运算符一般仅引入查询源以及要使用的控制变量。本质上,它不转换成任何特定查询运算符调用。在JOIN的情况下,FROM运算符在与常规控制变量联接时可被转换成对SELECTMANY查询运算符方法的调用,而在与表达式控制变量联接时可被转换成对SELECT查询运算符方法的调用。因此,查询表达式:
From b In Books,p In Publishers_
Select b.Title,p.Name
可以等价于:
Function Join1(b As Book)As IEnumerable(Of{b As Book,p As
Publisher})
 Function Select2(p As Publisher)As{b As Book,p As Publisher}
    Return New With{b,p}
 End Function
 Return Publishers.Select(AddressOf Select2)
End Function
Function Select1(it As{b As Book,p As Publisher})As_
    {Title As String,Name As String}
 Return New With{it.b.Title,it.p.Name}
End Function
Books.SelectMany(AddressOf Join1).Select(AddressOf Select1)
并且查询表达式:
From b In Books,Tax=b.Price*0.088_
Select b.Title,Tax
可以等价于:
Function Select1(b As Book)As{b As Book,Tax As Double}
 Return New With{b,Tax=b.Price*0.088}
End Function
Function Select2(it As{b As Book,Tax As Double})As{Title As
String,Tax As Double}
 Return New With{it.b.Title,it.Tax}
End Function
Books.Select(AddressOf Select1).Select(AddressOf Select2)
每一查询运算符可被绑定到粘附到特定模式的源类型上的底层方法。该模式规定了运算符的结果的元素类型,并且在某些情况下对可传入底层方法的表达式施加了约束。
显式类型化的控制变量
如果FROM运算符使用As子句为控制变量指定了目标类型Object(对象),并且T的类型不能从源类型中推断,则元素类型可以使用Case(Of Object)运算符来转换。查询表达式:
Dim nums=_
 From addrNum As Object In publisher.Address_
 Where addrNum<5
等价于:
Function Filter1(addrNum As Integer)As Boolean
 Return addrNum<5
End Function
Dim names=publisher.Address.Cast(Of Object)().Where(AddressOf
Filter1)
如果FROM运算符使用As子句为控制变量指定了目标类型T(不是Object),并且T的类型不能从源类型中推断或者如果目标类型不匹配源的元素类型,则元素类型可以使用Cast(强制转换)查询运算符转换成Object,并且可利用后续的SELECT运算符来获得目标类型。例如,查询表达式:
Dim nums=_
 From addrNum As Integer In publisher.Address_
 Where addrNum<5
等价于:
Function Filter1(addrNum As Integer)As Boolean
 Return addrNum<5
End Function
Function Select1(addrNum As Integer)As String
 Return addrNum
End Function
Dim names=publisher.Address.Cast(Of Object)().Select(AddressOf
Select1).Where(AddressOf Filter1)
如果FROM运算符使用As子句为控制变量指定了目标类型T,并且T的类型匹配源的元素类型,则不需要后续应用Cast或SELECT运算符。
WHERE运算符转换
WHERE运算符可被转换成对Where查询运算符方法的调用。例如,查询表达式:
From book In Books_
Where book.PublisherID=10_
Return book.Title
可以等价于:
Books.Where(b=>b.PublisherID=10).Select(b=>b.Title)
ORDERBY运算符转换
ORDERBY运算符对于第一次排序可被转换成对ORDERBY或ORDERBYDESCENDING查询运算符方法的调用(取决于排序的类型),并且然后对于以后的排序被转换成对THENBY和THENBYDESCENDING查询运算符方法的调用。例如,查询表达式:
From a In Authors_
Order By a.State,a.City Descending_
Return a.Name
可以等价于:
Authors.OrderBy(a=>a.State).ThenByDescending(a=>a.City)._
Select(a=>a.Name)
RETURN和SELECT运算符转换
RETURN运算符可被转换成对SELECT查询运算符方法的调用。例如:
From e In Employees_
Return e.Name
可以等价于:
Employees.Select(e=>e.Name)
SELECT运算符可被转换成对SELECT查询运算符方法的调用以及匿名类型的构造。例如:
From e In Employees_
Select e.Name,e.Salary
可以等价于:
Employees.Select(e=>New With{e.Name,e.Salary})
DISTINCT运算符转换
DISTINCT运算符可被转换成对DISTINCT查询运算符方法的调用。例如:
From e In Employees_
Distinct
可以等价于:
Employees.Distinct()
TAKE或SKIP[WHILE]运算符转换
TAKE或SKIP运算符可以调用相应的TAKE或SKIP查询运算符方法。
例如:
From e In Employees_
Order By e.Salary Descending_
Return e.Name
Take 5
可以等价于:
Employees.OrderByDescending(e=>e.Salary).Select(e=>e.Name).Take(5)
并且查询:
From e In Employees_
Order By e.Salary Descending_
Return e.Name
Skip 5
可以等价于:
Employees.OrderByDescending(e=>e.Salary).Select(e=>e.Name).Skip(5)
当结合WHILE修饰符使用时,可以创建条件表达式来应用于底层的TAKEWHILE或SKIPWHILE查询运算符。例如,查询:
From e In Employees_
Order By e.Salary Descending_
Take While e.Salary>50000_
Return e.Name
可以等价于:
Employees.OrderByDescending(e=>e.Salary)._
.TakeWhile(e=>e.Salary>50000).Select(e=>e.Name)
GROUPBY和AGGREGATE运算符转换
后跟聚集SELECT或RETURN运算符的GROUPBY运算符可被转换成对后跟构造的组上的聚集的GROUPBY查询运算符方法的调用。例如,查询:
From C In Customers_
Group By C.State_
Aggregate Youngest=Min(c.Age),Oldest=Max(c.Age)
Select State,Youngest,Oldest
可以等价于:
Customers
.GroupBy(c=>New With{.State=c.State},_
(g,k)=>New With{.State=k,_
.Youngest=g.Min(c=>c.Age),
.Oldest=g.Max(c=>c.Age)})
示例对象
此处包括的所有示例使用两个单独的对象集中的一个。Company(公司)对象可以表示关于一公司的信息,并且可以分层地连接:
Class Company
Dim Name As String
Dim Employees As List(Of Employees)
Dim Customers As List(Of Customer)
End Class
Class Customer
 Dim Name As String
 Dim Orders As List(Of Order)
End Class
Class Order
 Dim Product As String
 Dim Price As Integer
End Class
Class Employee
 Dim Name As String
 Dim Birthday As Date
 Dim Position As String
 Dim Salary As Decimal
End Class
Dim Employees As List(Of Employee)
Dim Customers As List(Of Customer)
Book(书)对象可以表示关于例如书店中库存的书的信息,并且可通过关系连接:
Class Book
 Dim BookID As Long
 Dim Title As String
 Dim PublisherID As Long
 Dim Price As Double
End Class
Class Author
 Dim AuthorID As Long
 Dim Name As String
 Dim Address As String
 Dim City As String
 Dim State As String
 Dim ZIP As String
End Class
Class BookAuthor
 Dim BookID As Long
 Dim AuthorID As Long
End Class
Class Publisher
 Dim PublisherID As Long
 Dim Name As String
 Dim Address As String
 Dim State As String
End Class
Dim Books As List(Of Book)
Dim Authors As List(Of Author)
Dim BookAuthors As List(Of BookAuthor)
Dim Publishers As List(Of Publisher)
在记住了以上内容之后,现在转向图4,描绘了可以实时地推断元素类型和/或基于所推断的元素类型增量式地提供上下文信息的计算机实现的系统400。一般而言,系统400可以包括接收查询表达式104的用户接口102,如基本在上文结合图1所描述的。另外,系统400可以包括可操作地耦合(未示出)到用户接口102和/或上下文组件402的模式存储108。上下文组件402可以检查查询表达式104并实时地做出关于元素类型的推断。例如,如上所述,由于用于每一查询子句的查询运算符符合一特定模式(例如,图1的查询运算符模式106),并且此外,由于元素类型可从一个查询子句流到下一查询子句,因此这两条信息可用于为任何给定下一查询子句确定元素类型。
当查询运算符被描述为方法调用并且查询运算作为纯机制变换来应用时,一般要求类型解析在重载解析期间进行。以此方式,假定查询运算符可将类型从一个运算符流到另一个,则运算符一般必须被完全绑定以便能够将类型提供给要应用的下一运算符。结果,如果重载解析由于句法错误或某一其它问题而失败,则没有可用于向应用的下一运算符提供类型信息的常规机制。没有这一类型流机制的合成查询运算符(以下从图6开始更详细讨论)导致多余的错误消息、不同的表达式语义、缺少用于自动完成的上下文信息、以及总体上更慢的编译器吞吐量。
如所描述的,所要求保护的主题可以采用查询运算符的模式的形式化,这可允许元素类型不依赖于完全方法绑定,而是依赖于所采用的特定运算符的模式。作为进一步说明,考虑由用户接口102接收的当前示例性查询表达式104(例如,在类型化查询表达式104时):
Dim q=From cust In Customers_
  Where cust.Name=“XYZ”& errorUnresolvedVarName_
  Select cust.
第一个查询子句包括FROM运算符,其可引入可查询源类型“Customers”作为匿名元素类型“cust”,这可以是源类型的元素。如所讨论的,该元素类型可以流到下一查询子句,其中WHERE运算符可以过滤该类集,但是在其它方面不更改元素类型。最后,该元素类型流到下一查询子句,其中可找到SELECT运算符以及SELECT运算符方法期望接收的函数的一部分,但是下一查询子句的其余部分尚未完成。
流入SELECT子句的元素类型现在可用于该特定查询子句的源类型。上下文组件402因此可以基于源类型和查询运算符来实时地推断该查询子句的元素类型(例如,cust)。因此,推断可以完全是局部的,并且不需要对查询表达式104的完全转换。相反,上下文组件402可以用类似于后台编译器的方式来执行推断。
另外,上下文组件402的推断可以用多种方式来促进更大的效率。例如,推断仅需在执行转换时被执行一次。由此,如果在查询表达式104中有两个WHERE运算符,则对第二个WHERE运算符的转换不必是必需的。另外,推断可以用于完全和通常更昂贵的编译,以缩短一般必须执行的类型发现的巡回。由此,事先推断元素类型可以用各种方式来使用以加快编译时间。
此外,一旦上下文组件402推断了元素类型(此处,是“Select cust.”查询子句中的“cust”),则上下文组件402可以增量式地提供上下文信息404。例如,当点的类型是“cust.”时,则上下文信息404可以用方便且熟悉的弹出窗口的形式来动态地提供,以允许如图所示或另一形式的自动完成。可以理解,这一特征常规上对查询表达式不可用,因为查询表达式(常规上)在可确定元素类型之前必须首先被转换。并且,由于提供完整且无错误的查询表达式是常规转换/编译的先决条件,因此迄今为止阻碍了任何类似的上下文和/或自动完成机制。
尽管上下文信息404对于查询表达式有很大的效用,并且大部分在于IDE中提供上下文反馈的上下文中示出,但是没有一种情况是必需的。例如,此处所描述的可适用于不仅仅是查询表达式的查询运算符。特别地,类型从一个运算符流到下一运算符并在两者之间有关系的概念可应用于其中类型流有用的任何运算符或任何API。一个这样的示例存在于将API调用链接在一起(例如,包括在命令行中的流水线,其中目的是类型从一个命令流到下一个)。另一示例可以是后绑定,其中没有类型,但是可采用某种形式的流诸如用于后绑定的优化。
还可以理解,上下文组件402所执行的推断可以完全基于所接收到的已知信息来预定(例如,关于已知且定义的查询运算符的源类型),或者根据其它方面,推断可以是概率性的。例如,当用于不同类型的运算符时,上下文组件402可用于检查可用数据的整体或其子集,并且能够从经由事件和/或数据捕捉的一组观察结果中推出或推断系统、环境和/或用户的状态。例如,推断可用于标识特定的上下文或动作,或可生成状态的概率分布。推断可以是概率性的,即,基于数据和事件的考虑计算感兴趣的状态的概率分布。推断也可以指用于从一组事件和/或数据组成更高级事件的技术。
这类推断可导致从一组观察到的事件和/或储存的事件数据中构造新的事件或动作,而无论事件是否在相邻时间上相关,也无论事件和数据是来自一个还是若干个事件和数据源。可采用各种分类(显式和/或隐式训练的)方案和/或系统(例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎......)来执行关于所要求保护的主题的自动化和/或推断的动作。
分类器可以是将输入属性矢量x=(x1,x2,x3,x4,xn)映射到该输入属于一个类的置信度的函数,即f(x)=confidence(class)。这一分类可采用基于概率和/或基于统计的分析(例如,分解成分析效用和成本)来预测或推断用户期望自动执行的动作。支持向量机(SVM)是可采用的分类器的一个示例。SVM通过找出可能输入空间中的超曲面来操作,其中,超曲面试图将触发准则从非触发事件中分离出来。直观上,这使得分类对于接近但不等同于训练数据的测试数据正确。可采用其它定向和非定向模型分类方法,包括,例如,朴素贝叶斯、贝叶斯网络、决策树、神经网络、模糊逻辑模型以及提供不同独立性模式的概率分类模型。此处所使用的分类也包括用于开发优先级模型的统计回归。
图5示出了根据所要求保护的主题的方法。尽管出于简化解释的目的,该方法和其它方法被示出和描述为一系列动作,但应该理解和明白,所要求保护的主题不受动作的顺序限制,因为某些动作能够以与在此所示出和描述的不同的顺序发生和/或与其它动作同时发生。例如,本领域技术人员将会明白并理解,方法可被替换地表示为一系列相互关联的状态或事件,诸如以状态图的形式。而且,并非所有示出的动作都是实现根据所要求保护的主题的方法所必需的。另外还应该理解,下文以及本说明书全文中所公开的方法能够被存储在制品上,以便于把此类方法传送和转移到计算机。在此使用的术语“制品”意指包含可以从任何计算机可读设备、载体或介质访问的计算机程序。
现在参考图5,示出了用于方便元素类型的类型流的计算机实现的方法。概括地,在参考标号502处,可接收包括查询运算符的查询子句的一部分。查询运算符可被映射到相关联的方法调用,该方法调用可接收自变量(例如,函数、值、类集......)并可返回类型化的结果(例如,可查询类型、数值类型、已排序类集......)。该方法调用可以根据查询运算符模式来定义。
在参考标号504处,可利用源类型和查询运算符来确定元素类型。例如,由于查询运算符模式可被形式化,因此查询运算符的模式可结合源类型使用来推断元素类型。在参考标号506处,可采用前一查询的元素类型作为参考标号504处所讨论的利用动作的源类型。据此,元素类型可以按递归的方式从一个查询子句流到下一查询子句。
在记住了上述内容之后,可以理解和明白,某些特征和/或方面可用于以其它方式来扩展编程语言的查询能力。作为一个示例,此处所开发的方面可有效地利用来提供基于计算机和/或基于语言的构造,如与常规上与API调用相关联的合成能力的综合。这些和其它相关概念的描述可参考图6找到。
现在转向图6,提供了方便可组成查询综合和/或可扩展查询表达式的计算机实现的系统600的框图。一般而言,系统600可包括可接收初始化数据604的变换组件602。如图所示,初始化数据604可以是示例性查询表达式606中的第一个查询子句,其中该第一个查询子句通常限于是FROM子句(例如,第一个查询子句的查询运算符是FROM运算符)。初始化数据604可以包括类集(例如,如图所示的Customers)或表达式(例如,如上文结合关于图3详述的FROM运算符描述的Tax=b.Price*0.088)。在任一情况下,初始化数据还可包括控制变量,取决于应用,该控制变量与类集(例如,C是控制变量)或表达式(例如,Tax是控制变量)相关联。
变换组件602还可接收由查询表达式606表征的序列中的一组查询子句608。可以理解,该组查询子句608可以是空集,在这一情况下,查询表达式606由单个查询子句构成(例如,用作初始化数据604的FROM子句),如将在下文中更详细描述的。如可以对初始数据604所完成的那样,变换组件602还可对组608中的每一查询子句解析(例如,填充或变换)范围中的控制变量。例如,变换组件602可以进而通过向可用类型应用每一查询子句的查询运算符,来以查询表达式608所规定的次序处理组608中的每一查询子句。
可以理解,根据所要求保护的主题,该组查询子句608不需要由诸如,例如XQuery语言的各种版本所定义的FLWOR/FLWR或SQL的实现中所期望的Select-From-Where等普遍存在的语义模板来限制。相反,组608可以在本质上是合成的,使得个别查询子句可被妥当地提供、以模块化方式接合在一起、并且即使在运算符的次序是任意的情况下也产生直观结果。
据此,系统600还可包括可管理查询表达式606所引入的所有控制变量的范围的综合组件610。控制变量的范围可以基于查询子句的运算符来确定,并且范围中的控制变量可被传递到下一查询子句。例如,变换组件602可以确立可被认为是流水线的事物,使得某些信息可通过流水线从一个查询子句流到下一查询子句。由此,变换组件可以接收关于查询子句的类集,基于与该查询子句相关联的运算符来变换(例如,过滤、投影......)该类集,并将所变换的类集输出到流水线以使其可用于下一查询子句。
类似地,范围中的控制变量也可被传递到下一查询子句,并且精确而言什么控制变量在范围中可以由综合组件610基于所接收到的查询子句的类型来定义。通常,下一查询子句只能访问在范围中的变量。该特征以及其它特征可通过除了图6之外再参考图7来进一步描述。
图7是涉及如可由综合组件610所确定的示例查询表达式606的控制变量的范围的示例性图示。根据所要求保护的主题的一方面,综合组件610可以基于查询子句/运算符的类型来声明新的控制变量(并且可将该新的控制变量带入范围)。例如,某些类型的查询子句可以除了已经在范围中的控制变量之外还引入新的控制变量,即,FROM、LET、SELECT或GROUPBY查询子句可产生这一结果。由FROM子句引入的控制变量通常被累积,直到下一SELECT或GROUPBY子句,在这之后它们可由综合组件610带出范围。这一情况由FROM子句702、704(映射到初始化数据604以及包括在查询子句组608中的初始查询子句)示出,其控制变量停留在范围中,直到应用了SELECT子句710。
子句702引入Customer类集和控制变量C。因此,该信息可以通过流水线提供给下一查询子句。因此,可以使{C As Customer}对子句704可用。子句704也是FROM子句,这由于所要求保护的主题的合成本质是可能的。子句704采用了控制变量C来引入新的类集C.Orders(例如,所有顾客的所有定单)以及新的控制变量O,综合组件610可将该新的控制变量带入范围。由此,下一查询子句706能够访问范围中的两个控制变量C和O。
基本如以上所描述的,尽管某些查询子句类型可影响范围中的变量,但是其它查询子句类型(例如,WHERE、ORDERBY、DISTINCT等)却不必。由此,尽管查询子句706和708可影响类集,但范围中的变量(例如C和O)可以相同,并且因此可分别由查询子句708和710在其各自由变换组件602接收时访问。
根据所要求保护的主题的一方面,综合组件610可以基于所接收到的查询子句的类型将现有控制变量带出范围。SELECT查询子句710提供了该特征的表征图示。查询子句710被展示给控制变量C和O,但是SELECT子句的特征之一可以是隐藏范围中的当前控制变量并在范围中引入新的控制变量(例如,Name As String和Price As Int)。可以向查询子句712提供这些新的控制变量Name和Price,但是查询子句712一般不能访问综合组件610关于SELECT子句710带出范围的先前的控制变量(例如,C和O)。为完整性起见,应注意几个特征。首先,查询子句710示出了逗号分割的复合运算数的又一示例。
要注意的第二个特征是WHERE子句712在SELECT子句710之后。常规的查询语言在应用了具有诸如SELECT、RETURN等投影运算符或类似的运算符的查询子句之后终止查询。如果这一常规查询语言的用户希望在投影之后继续查询运算,则必须实现可引用前一查询的结果的新查询。然而,由于例如所要求保护的主题的合成本质,查询表达式606可以包括多个SELECT子句,并且查询表达式606可以在出现SELECT子句之后继续(例如,由子句712示出)。类似地,尽管在前一节中提到,但应指出,查询表达式606也包括两个FROM子句(例如,子句702和704),这是常规查询语言所无法提供的另一方面。
尽管未由解释示例描绘,但查询表达式606还可包括其它查询子句类型,并且特别地,这些其它查询子句类型中的许多可影响控制变量的范围。例如,在接收到RETURN子句之后,综合组件610可以将所有变量带出范围。作为另一示例,基于查询子句的类型,综合组件610可以声明新的控制变量并对其定范围(例如,带入范围),同时为特定一组后续查询子句确定现存的控制变量(例如,对于前一查询子句在范围中的控制变量)的范围。GROUPBY、AGGREGATE等可方便这一行为,由此现存控制变量的范围可被定在跨每一GROUP运算符的AGGREGATE查询子句的范围上。
根据所要求保护的主题的另一方面,综合组件610可以基于所接收到的查询子句的类型为范围中的所有控制变量的元组生成别名。例如,INTO查询子句可以方便例如由综合组件610来创建别名,即使该别名本身不需要是控制变量。
仍参考图6和7,可强调所要求保护的主题的各种附加方面。尽管有与有效查询表达式606的可扩展性有关的多个优点(例如,查询表达式606可用实际上任何数量的实际上任何类型的查询子句来扩展),但另一优点可以是查询表达式606也可以在任何点终止。由此,尽管查询表达式606有可能包括无限数量的查询子句,但整个查询表达式606也可由仅单个在引入了单个控制变量之后终止的查询子句组成。因此,完整且有效的查询表达式606的最简单的示例之一是仅包括初始化数据604的查询表达式606:
From C In Customers
而不要求查询表达式606包括显式的SELECT、RETURN或其它终止查询运算符。
作为解释,变换组件602可被配置成向接收到的每一查询子句追加隐式SELECT或RETURN。由此,只要包括在流水线中的所得类集处于期望的形状,就不需要显式语句来选择或返回这些中间结果。相反,如果查询表达式606在给定子句,例如702-708中的任一个之后结束,则流水线中的类集可以输出结果,并且可以基于范围中的控制变量的数目来推断输出的格式。
例如,如果查询表达式606在子句704-708中的任一个之后终止(其中在每一情况下范围中有两个控制变量C和O),则可以推断所需输出应作为名-值对的类集存在。因此,输出可以是对每一控制变量有一字段的元组。另一方面,在范围中仅有一个控制变量的情况下,诸如在子句702之后,则查询表达式606的实现器通常将不期望得回具有字段c的元组。相反,实现器可能期望顾客的类集。因此,在范围中仅有一个控制变量的情况下,输出可以仅仅是类集的底层值。
根据所要求保护的主题的一方面,由FROM子句引入的控制变量可以与表达式以及类集相关联。作为一个代表性示例,考虑以下如上所述的查询片段:
From b in Books_
From Tax=b.Price*0.088_
第一个FROM子句为类集Books引入控制变量b,该控制变量被带入范围并可由下一查询子句来访问。下一FROM子句引入与表达式(而非类集)b.Price*0.088相关联的控制变量Tax。对于两个FROM子句中的后者,效果可以是为表达式的结果提供了可访问名称。该名称可由控制变量tax来引用,该控制变量可保留在范围中,直到例如后续的SELECT子句。该特征可被认为类似于查询中的过程语句,这可允许表达式的值被计算一次,即使该值随后可被多次采用,也不需要重新计算该值。
根据所要求保护的主题的另一方面,可以在单个查询表达式606的上下文中采用集合运算。尽管常规查询语言通常仅提供单个类集作为输入,但是变换组件602可以接收两个类集作为输入。例如,变换组件602可被配置成接收多个类集,并可输出具有与根据查询子句的类型(例如,UNION子句、INTERSECT子句......)合并的多个类集相关联的控制变量的单个类集。合并的控制变量可被带入范围、通过相关联的集合运算符传递、并对下一查询子句可访问,因此查询表达式606可继续。控制变量一般必须是相同的类型,并且一般必须具有相同的名称,但是当然,它们可以与两个不同的类集相关联。
现在转向图8,示出了用于方便以合成方式构造查询综合的计算机实现的方法800。从参考标号802开始,可获得类集(或表达式)以及与该类集(或表达式)相关联的控制变量。一般而言,该获得的数据是查询表达式的第一个查询子句,通常是FROM子句的产物。在参考标号804处,可接收包括在查询表达式中的一组查询子句的当前查询子句。可以理解,与要求综合是整体式的常规语言不同,不需要对当前查询子句,或在很大程度上对作为整体的查询表达式施加句法排序限制。
在参考标号806处,可根据当前查询子句来修改类集。简言之,作为输入接收的类集可以基于与当前查询子句相关联的查询运算符的方针来变换。可以理解,当前查询子句可以根据与当前查询子句相关联的期望类型而非基于整体式句法模板来求值。接着,在参考标号808处,可将经修改的类集通过流水线传送到下一查询子句。因此,当前查询子句的输出可用作下一查询子句的输入。
在参考标号810处,可基于当前查询子句来确定控制变量的范围。例如,某些类型的查询子句不便于对现存控制变量进行任何改变,而其它查询子句则可方便引入新的控制变量(在某些情况下仅对于特定的一系列下一查询子句),而还有一些则可方便在(可任选地)引入新控制变量的同时将现存控制变量带出范围。在参考标号812处,可将对当前查询子句的范围中控制变量的访问提供给下一查询子句。
现在参考图9,所示是可用于执行所公开的体系结构的示例性计算机系统的框图。为了为本发明各个方面提供附加上下文,图9和下列讨论旨在提供对其中可实现本发明的各方面的合适的计算环境900的简要概括的描述。另外,尽管本发明以上是在可在一个或多个计算机上运行的计算机可执行指令的一般上下文中进行描述的,但是本领域的技术人员将认识到,本发明也可结合其它程序模块和/或作为硬件和软件的组合来实现。
一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构等等。此外,本领域的技术人员可以理解,本发明的方法可用其它计算机系统配置来实施,包括单处理器或多处理器计算机系统、小型机、大型计算机、以及个人计算机、手持式计算设备、基于微处理器的或可编程消费电子产品等,其每一个都可操作上耦合到一个或多个相关联的设备。
本发明的所示方面也可以在其中特定任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
计算机通常包括各种计算机可读介质。计算机可读介质可以是可由计算机访问的任何可用介质,并包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机访问的任何其它介质。
通信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。上述中的任意组合也应包括在计算机可读介质的范围之内。
再次参见图9,用于实现本发明的各方面的示例性环境900包括计算机902,计算机902包括处理单元904、系统存储器906和系统总线908。系统总线908将包括但不限于系统存储器906的系统组件耦合到处理单元904。处理单元904可以是市场上可购买到的各种处理器中的任意一种。双微处理器和其它多处理器体系结构也可用作处理单元904。
系统总线908可以是若干种总线结构中的任一种,这些总线结构还可互连到存储器总线(带有或没有存储器控制器)、外围总线、以及使用各类市场上可购买到的总线体系结构中的任一种的局部总线。系统存储器906包括只读存储器(ROM)910和随机存取存储器(RAM)912。基本输入/输出系统(BIOS)储存在诸如ROM、EPROM、EEPROM等非易失性存储器910中,其中BIOS包含帮助诸如在启动期间在计算机902内的元件之间传输信息的基本例程。RAM 912还可包括诸如静态RAM等高速RAM来用于高速缓存数据。
计算机902还包括内部硬盘驱动器(HDD)914(例如,EIDE、SATA),该内部硬盘驱动器914还可被配置成在合适的机壳(未示出)中外部使用;磁软盘驱动器(FDD)916(例如,从可移动磁盘918中读取或向其写入);以及光盘驱动器920(例如,从CD-ROM盘922中读取,或从诸如DVD等高容量光学介质中读取或向其写入)。硬盘驱动器914、磁盘驱动器916和光盘驱动器920可分别通过硬盘驱动器接口924、磁盘驱动器接口926和光盘驱动器接口928连接到系统总线908。用于外置驱动器实现的接口924包括通用串行总线(USB)和IEEE 1394接口技术中的至少一种或两者。其它外置驱动器连接技术也在本发明的预期中。
驱动器及其相关联的计算机可读介质提供了对数据、数据结构、计算机可执行指令等的非易失性存储。对于计算机902,驱动器和介质容纳适当的数字格式的任何数据的存储。尽管上面对计算机可读介质的描述涉及HDD、可移动磁盘和诸如CD或DVD等可移动光学介质,但本领域的技术人员应该意识到,在示例性操作环境中也可以使用可由计算机读取的其他类型的介质,如ZIP驱动器、磁带盒、闪存卡、盒式磁带等等,并且此外,任何这种介质都可以包含用于执行本发明的方法的计算机可执行指令。
多个程序模块可存储在驱动器和RAM 912中,包括操作系统930、一个或多个应用程序932、其它程序模块934和程序数据936。所有或部分操作系统、应用程序、模块和/或数据也可被高速缓存在RAM 912中。应该明白,本发明可以用各种市场上可购买到的操作系统或操作系统的组合来实现。
用户可以通过一个或多个有线/无线输入设备,例如键盘938和诸如鼠标940等定点设备将命令和信息输入到计算机902中。其它输入设备(未示出)可包括话筒、IR遥控器、操纵杆、游戏手柄、指示笔、触摸屏等等。这些和其它输入设备通常通过耦合到系统总线908的输入设备接口942连接到处理单元904,但也可通过其它接口连接,如并行端口、IEEE 1394串行端口、游戏端口、USB端口、IR接口等等。
监视器944或其它类型的显示设备也经由诸如视频适配器946等接口来连接到系统总线908。除了监视器944之外,计算机通常包括诸如扬声器、打印机等其它外围输出设备(未示出)。
计算机902可使用经由有线和/或无线通信至一个或多个远程计算机,诸如远程计算机948的逻辑连接在网络化环境中操作。远程计算机948可以是工作站、服务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐设备、对等设备或其它常见的网络节点,并且通常包括以上相对于计算机902描述的许多或所有元件,尽管为简明起见仅示出了存储器/存储设备950。所描绘的逻辑连接包括到局域网(LAN)952和/或例如广域网(WAN)954等更大的网络的有线/无线连接。这一LAN和WAN联网环境常见于办公室和公司,并且便于诸如内联网等企业范围计算机网络,所有这些都可连接到例如因特网等全球通信网络。
当在LAN网络环境中使用时,计算机902通过有线和/或无线通信网络接口或适配器956连接到局域网952。适配器956可以便于到LAN 952的有线或无线通信,并且还可包括其上设置的用于与无线适配器956通信的无线接入点。
当在WAN连网环境中使用时,计算机902可包括调制解调器958,或连接到WAN 954上的通信服务器,或具有用于通过WAN 954,诸如通过因特网建立通信的其它装置。或为内置或为外置的调制解调器958以及有线或无线设备经由串行端口接口942连接到系统总线908。在网络化环境中,相对于计算机902所描述的程序模块或其部分可以存储在远程存储器/存储设备950中。应该理解,所示网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其它手段。
计算机902可用于与操作上设置在无线通信中的任何无线设备或实体通信,这些设备或实体例如有打印机、扫描仪、台式和/或便携式计算机、便携式数据助理、通信卫星、与无线可检测标签相关联的任何一个设备或位置(例如,公用电话亭、报亭、休息室)以及电话。这至少包括Wi-Fi和蓝牙TM无线技术。由此,通信可以如对于常规网络那样是预定义结构,或者仅仅是至少两个设备之间的自组织(ad hoc)通信。
Wi-Fi,即无线保真,允许从家里沙发、酒店房间的床上或工作的会议室连接到因特网而不需要线缆。Wi-Fi是一种类似蜂窝电话中使用的无线技术,它使得诸如计算机等设备能够在室内和室外,在基站范围内的任何地方发送和接收数据。Wi-Fi网络使用称为IEEE 802.11(a、b、g等等)的无线电技术来提供安全、可靠、快速的无线连接。Wi-Fi网络可用于将计算机彼此连接、连接到因特网以及连接到有线网络(使用IEEE 802.3或以太网)。Wi-Fi网络在未许可的2.4和5GHz无线电波段内工作,例如以11Mbps(802.11a)或54Mbps(802.11b)数据速率工作,或者具有包含两个波段(双波段)的产品,因此该网络可提供类似于许多办公室中使用的基本10BaseT有线以太网的真实性能。
现在参考图10,所示是可用于执行所公开的体系结构的示例性计算机编译系统的示意性框图。系统1000包括一个或多个客户机1002。客户机1002可以是硬件和/或软件(例如,线程、进程、计算设备)。例如,客户机1002可以通过使用本发明来容纳cookie和/或相关联的上下文信息。
系统1000还包括一个或多个服务器1004。服务器1004也可以是硬件和/或软件(例如,线程、进程、计算设备)。服务器1004可以例如通过使用本发明来容纳线程以执行变换。在客户机1002和服务器1004之间的一种可能的通信能够以适合在两个或多个计算机进程之间传输的数据分组的形式进行。数据分组可包括例如cookie和/或相关联的上下文信息。系统1000包括可以用来使客户机1002和服务器1004之间通信更容易的通信框架1006(例如,诸如因特网等全球通信网络)。
通信可经由有线(包括光纤)和/或无线技术来促进。客户机1002操作上被连接到可以用来存储对客户机1002本地的信息(例如,cookie和/或相关联的上下文信息)的一个或多个客户机数据存储1008。同样地,服务器1004可在操作上连接到可以用来存储对服务器1004本地的信息的一个或多个服务器数据存储1010。
以上所描述的包括各实施例的示例。当然,出于描绘各实施例的目的而描述组件或方法的每一个可以想到的组合是不可能的,但本领域内的普通技术人员可以认识到,许多进一步的组合和排列都是可能的。因此,本详细描述旨在涵盖所有这些落入所附权利要求书的精神和范围内的更改、修改和变化。
特别地,对于由上述组件、设备、电路、系统等执行的各种功能,除非另外指明,否则用于描述这些组件的术语(包括对“装置”的引用)旨在对应于(除非另外指明)执行所描述的执行此处在各实施例的示例性方面中所示的功能的组件的指定功能(例如,功能上等效)的任何组件,即使这些组件在结构上不等效于所公开的结构。在这一点上,也可认识到各实施例包括用于执行各方法的动作和/或事件的系统以及具有用于执行这些动作和/或事件的计算机可执行指令的计算机可读介质。
另外,尽管可相对于若干实现中的仅一个来公开一个特定特征,但是这一特征可以如对任何给定或特定应用所需且有利地与其它实现的一个或多个其它特征相组合。此外,就在说明书或权利要求书中使用术语“包括”和“含有”及其变体而言,这些术语旨在以与术语“包含”相似的方式为包含性的。

Claims (20)

1.一种采用查询模式来方便表达式中的运算符之间的类型元素的类型流的计算机实现的系统,包括:
接收包括第一查询子句和至少一个下一查询子句的查询表达式的接口,所述第一查询子句包括第一查询运算符、元素类型T和源类型,所述源类型是可查询类型;以及
用于所述至少一个下一查询子句的查询运算符模式,所述查询运算符模式确保到所述至少一个下一查询子句的元素类型的类型流。
2.如权利要求1所述的系统,其特征在于,所述第一查询运算符是笛卡尔积形式,并且所述元素类型T是匿名类型,该匿名类型是关于所述源类型的范围中的全部控制变量的聚集。
3.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回具有元素类型S的可查询类型的投影或映射查询运算符,该函数包括元素类型T的自变量。
4.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回具有元素类型T的可查询类型的过滤或限制查询运算符,该函数包括元素类型T的自变量。
5.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回具有元素类型T的已排序类集的排序或定序查询运算符,该函数包括元素类型T的自变量。
6.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成返回具有元素类型T的可查询类型的重复移除查询运算符。
7.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一元素类型T为源类型的类集作为自变量,并返回具有元素类型T的可查询类型的集合查询运算符。
8.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收值作为自变量并返回具有元素类型T作为源类型的可查询类型的选择或过滤查询运算符。
9.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回具有元素类型T的可查询类型的条件选择或过滤查询运算符,该函数包括元素类型T作为自变量。
10.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回数值类型的聚集查询运算符,该函数包括元素类型T的自变量。
11.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回具有元素类型S的可查询类型的聚集查询运算符,该函数包括元素类型T的自变量。
12.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回可被隐式地转换成布尔值的类型的匹配查询运算符,该函数包括类型T的自变量。
13.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回具有元素类型V的可查询类型的联接查询运算符,该函数包括元素类型T的自变量以及元素类型T′的自变量,其中V是散列值。
14.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括被配置成接收一函数作为自变量并返回具有元素类型V的可查询类型的嵌套联接查询运算符,该函数包括元素类型T的自变量以及具有元素类型U的类集的自变量。
15.如权利要求1所述的系统,其特征在于,所述查询运算符模式包括要接收一函数作为自变量并返回具有元素类型V的可查询类型的分组查询运算符,该函数包括类型K的自变量以及具有类型T的类集的自变量,其中类型K是关键字。
16.如权利要求1所述的系统,其特征在于,还包括基于所述源类型以及与所述至少一个下一查询子句相关联的查询运算符来实时地推断元素类型的上下文组件。
17.如权利要求16所述的系统,其特征在于,所述上下文组件基于所推断的类型元素来增量式地提供上下文信息。
18.一种用于方便元素类型的类型流的计算机实现的方法,包括:
接收包括与查询运算符模式相关联的查询运算符的查询子句的一部分;
利用源类型和所述查询运算符来确定元素类型;以及
采用前一查询子句的元素类型作为用于所述利用动作的源类型。
19.如权利要求18所述的方法,其特征在于,还包括使用所述查询运算符模式来增量式地提供与所述元素类型或源类型的控制变量相关联的上下文反馈。
20.一种用于方便元素类型的类型流的计算机实现的系统,包括:
用于接收与查询运算符模式相关联的查询运算符的计算机实现的装置;
用于采用所述查询运算符模式来确定元素类型的计算机实现的装置;以及
用于使用前一查询子句的元素类型作为所述查询运算符模式的源类型的计算机实现的装置。
CN200880003975.2A 2007-02-05 2008-02-05 允许元素类型的类型流的查询模式 Expired - Fee Related CN101606154B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/671,414 2007-02-05
US11/671,414 US7805456B2 (en) 2007-02-05 2007-02-05 Query pattern to enable type flow of element types
PCT/US2008/053095 WO2008098009A1 (en) 2007-02-05 2008-02-05 Query pattern to enable type flow of element types

Publications (2)

Publication Number Publication Date
CN101606154A true CN101606154A (zh) 2009-12-16
CN101606154B CN101606154B (zh) 2016-09-28

Family

ID=39677026

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200880003975.2A Expired - Fee Related CN101606154B (zh) 2007-02-05 2008-02-05 允许元素类型的类型流的查询模式

Country Status (6)

Country Link
US (1) US7805456B2 (zh)
EP (1) EP2118780A4 (zh)
JP (1) JP5255000B2 (zh)
CN (1) CN101606154B (zh)
TW (1) TWI354908B (zh)
WO (1) WO2008098009A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102918534A (zh) * 2010-06-10 2013-02-06 惠普发展公司,有限责任合伙企业 查询管道

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9240810B2 (en) 2002-06-11 2016-01-19 Digital Fountain, Inc. Systems and processes for decoding chain reaction codes through inactivation
EP2355360B1 (en) 2002-10-05 2020-08-05 QUALCOMM Incorporated Systematic encoding and decoding of chain reaction codes
KR101292851B1 (ko) 2006-02-13 2013-08-02 디지털 파운튼, 인크. 가변적 fec 오버헤드 및 보호 구간을 이용하는 스트리밍및 버퍼링
US7971129B2 (en) 2006-05-10 2011-06-28 Digital Fountain, Inc. Code generator and decoder for communications systems operating using hybrid codes to allow for multiple efficient users of the communications systems
US9178535B2 (en) 2006-06-09 2015-11-03 Digital Fountain, Inc. Dynamic stream interleaving and sub-stream based delivery
US9380096B2 (en) 2006-06-09 2016-06-28 Qualcomm Incorporated Enhanced block-request streaming system for handling low-latency streaming
US9209934B2 (en) 2006-06-09 2015-12-08 Qualcomm Incorporated Enhanced block-request streaming using cooperative parallel HTTP and forward error correction
US9432433B2 (en) 2006-06-09 2016-08-30 Qualcomm Incorporated Enhanced block-request streaming system using signaling or block creation
US9419749B2 (en) 2009-08-19 2016-08-16 Qualcomm Incorporated Methods and apparatus employing FEC codes with permanent inactivation of symbols for encoding and decoding processes
US9386064B2 (en) 2006-06-09 2016-07-05 Qualcomm Incorporated Enhanced block-request streaming using URL templates and construction rules
US20080301135A1 (en) * 2007-05-29 2008-12-04 Bea Systems, Inc. Event processing query language using pattern matching
US20090070786A1 (en) * 2007-09-11 2009-03-12 Bea Systems, Inc. Xml-based event processing networks for event server
RU2010114256A (ru) 2007-09-12 2011-10-20 Диджитал Фаунтин, Инк. (Us) Формирование и передача исходной идентификационной информации для обеспечения надежного обмена данными
US10140196B2 (en) 2008-06-04 2018-11-27 Oracle International Corporation System and method for configuring a sliding window for testing an event processing system based on a system time
US10102091B2 (en) 2008-06-04 2018-10-16 Oracle International Corporation System and method for supporting a testing framework for an event processing system using multiple input event streams
US9281847B2 (en) 2009-02-27 2016-03-08 Qualcomm Incorporated Mobile reception of digital video broadcasting—terrestrial services
US8583603B2 (en) * 2009-04-02 2013-11-12 Microsoft Corporation Employing user-context in connection with backup or restore of data
US8266172B2 (en) * 2009-04-03 2012-09-11 Microsoft Corporation Data parallel query analysis
US9917874B2 (en) 2009-09-22 2018-03-13 Qualcomm Incorporated Enhanced block-request streaming using block partitioning or request controls for improved client-side handling
US9485546B2 (en) 2010-06-29 2016-11-01 Qualcomm Incorporated Signaling video samples for trick mode video representations
US9596447B2 (en) 2010-07-21 2017-03-14 Qualcomm Incorporated Providing frame packing type information for video coding
US9456015B2 (en) 2010-08-10 2016-09-27 Qualcomm Incorporated Representation groups for network streaming of coded multimedia data
US9270299B2 (en) 2011-02-11 2016-02-23 Qualcomm Incorporated Encoding and decoding using elastic codes with flexible source block mapping
US9843844B2 (en) 2011-10-05 2017-12-12 Qualcomm Incorporated Network streaming of media data
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
IN2014DN05723A (zh) * 2011-12-23 2015-04-10 Univ Arizona State
KR101951747B1 (ko) * 2012-01-18 2019-02-26 삼성전자 주식회사 Dsms에서 사용자 정의 연산자의 스케쥴링 장치 및 방법
US9294226B2 (en) 2012-03-26 2016-03-22 Qualcomm Incorporated Universal object delivery and template-based file delivery
RU2629001C2 (ru) * 2012-04-26 2017-08-24 Квэлкомм Инкорпорейтед Система улучшенной потоковой передачи блоков по запросу для обработки потоковой передачи с малой задержкой
TWI484800B (zh) * 2012-10-12 2015-05-11 Sonix Technology Co Ltd 監視模組
US9146984B1 (en) 2013-03-15 2015-09-29 Google Inc. Enhancing queries for data tables with nested fields
JP6044960B2 (ja) * 2013-12-26 2016-12-14 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation シリアライザを特化する方法、装置及びコンピュータプログラム
US10305985B1 (en) * 2014-12-29 2019-05-28 EMC IP Holding Company LLC Defining new properties using expressions in API calls
JP2018510445A (ja) * 2015-04-02 2018-04-12 データウェア ベンチャーズ,エルエルシー プログラム性能を向上させる領域特化システムおよび方法
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
CA3007414A1 (en) * 2015-12-14 2017-06-22 Dataware Ventures, Llc Broadening field specialization
US10733184B2 (en) 2016-11-29 2020-08-04 Sap Se Query planning and execution with source and sink operators
US11016973B2 (en) 2016-11-29 2021-05-25 Sap Se Query plan execution engine
US10372707B2 (en) 2016-11-29 2019-08-06 Sap Se Query execution pipelining with pump operators
US10558661B2 (en) 2016-11-29 2020-02-11 Sap Se Query plan generation based on table adapter
US10521426B2 (en) 2016-11-29 2019-12-31 Sap Se Query plan generation for split table query operations
US10885032B2 (en) 2016-11-29 2021-01-05 Sap Se Query execution pipelining with shared states for query operators
US10776353B2 (en) 2017-01-26 2020-09-15 Sap Se Application programming interface for database access
US10671625B2 (en) 2017-01-26 2020-06-02 Sap Se Processing a query primitive call on a value identifier set
US10860579B2 (en) * 2017-01-30 2020-12-08 Sap Se Query planning and execution with reusable memory stack
US11138230B2 (en) * 2018-03-26 2021-10-05 Mcafee, Llc Methods, apparatus, and systems to aggregate partitioned computer database data
US11275485B2 (en) 2018-06-15 2022-03-15 Sap Se Data processing pipeline engine
US10733034B2 (en) 2018-06-15 2020-08-04 Sap Se Trace messaging for distributed execution of data processing pipelines
US10949219B2 (en) 2018-06-15 2021-03-16 Sap Se Containerized runtime environments
US10866831B2 (en) 2018-06-15 2020-12-15 Sap Se Distributed execution of data processing pipelines
US11675838B2 (en) * 2021-05-11 2023-06-13 International Business Machines Corporation Automatically completing a pipeline graph in an internet of things network

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5282265A (en) * 1988-10-04 1994-01-25 Canon Kabushiki Kaisha Knowledge information processing system
US5197005A (en) 1989-05-01 1993-03-23 Intelligent Business Systems Database retrieval system having a natural language interface
EP0473864A1 (en) * 1990-09-04 1992-03-11 International Business Machines Corporation Method and apparatus for paraphrasing information contained in logical forms
SE9003004D0 (sv) 1990-09-21 1990-09-21 Ibm Icon based query system
US5265065A (en) * 1991-10-08 1993-11-23 West Publishing Company Method and apparatus for information retrieval from a database by replacing domain specific stemmed phases in a natural language to create a search query
US5428737A (en) * 1991-10-16 1995-06-27 International Business Machines Corporation Comprehensive bilateral translation between SQL and graphically depicted queries
US5418943A (en) * 1991-10-23 1995-05-23 At&T Corp. Information system with knowledge base and data base
US6263342B1 (en) * 1998-04-01 2001-07-17 International Business Machines Corp. Federated searching of heterogeneous datastores using a federated datastore object
US6341277B1 (en) 1998-11-17 2002-01-22 International Business Machines Corporation System and method for performance complex heterogeneous database queries using a single SQL expression
US7172121B2 (en) * 2000-11-03 2007-02-06 Claricom Limited System and method for applying codes onto packaged products
US20030101170A1 (en) * 2001-05-25 2003-05-29 Joseph Edelstein Data query and location through a central ontology model
US6965990B2 (en) 2001-10-23 2005-11-15 International Business Machines Corporation Method and apparatus for providing programming assistance
US6775681B1 (en) * 2002-02-26 2004-08-10 Oracle International Corporation Evaluation of grouping sets by reduction to group-by clause, with or without a rollup operator, using temporary tables
US7110991B2 (en) * 2002-03-07 2006-09-19 International Business Machines Corporation IDE integration with JDBC
US20040193575A1 (en) * 2003-03-25 2004-09-30 Chia-Hsun Chen Path expressions and SQL select statement in object oriented language
US7120898B2 (en) * 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models
US20040267690A1 (en) 2003-06-26 2004-12-30 International Business Machines Corporation Integrated development environment with context sensitive database connectivity assistance
US7086041B2 (en) * 2003-06-27 2006-08-01 Microsoft Corporation Extensible type system for representing and checking consistency of program components during the process of compilation
US7149731B2 (en) * 2003-11-26 2006-12-12 International Business Machines Corporation Methods, systems and articles of manufacture for abstract query building with selectability of aggregation operations and grouping
US20050177556A1 (en) * 2004-02-10 2005-08-11 Microsoft Corporation Systems and methods for transforming SQL syntax trees into relational algebra representations
JP4153883B2 (ja) * 2004-03-02 2008-09-24 株式会社東芝 階層型データベース装置および階層型データベース装置における製品選定方法およびプログラム
US7624097B2 (en) * 2005-01-14 2009-11-24 International Business Machines Corporation Abstract records
US7567968B2 (en) * 2005-01-31 2009-07-28 Microsoft Corporation Integration of a non-relational query language with a relational data store
US7305414B2 (en) * 2005-04-05 2007-12-04 Oracle International Corporation Techniques for efficient integration of text searching with queries over XML data
US8458201B2 (en) * 2005-04-08 2013-06-04 International Business Machines Corporation Method and apparatus for mapping structured query language schema to application specific business objects in an integrated application environment
US20060235834A1 (en) * 2005-04-14 2006-10-19 Microsoft Corporation Path expression in structured query language
US7606829B2 (en) * 2005-04-14 2009-10-20 International Business Machines Corporation Model entity operations in query results
CN100464329C (zh) * 2005-06-14 2009-02-25 联想(北京)有限公司 动态结构化查询语言语句的构造方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102918534A (zh) * 2010-06-10 2013-02-06 惠普发展公司,有限责任合伙企业 查询管道
CN102918534B (zh) * 2010-06-10 2016-05-04 惠普发展公司,有限责任合伙企业 查询管道

Also Published As

Publication number Publication date
US7805456B2 (en) 2010-09-28
TWI354908B (en) 2011-12-21
EP2118780A1 (en) 2009-11-18
JP2010518516A (ja) 2010-05-27
WO2008098009A1 (en) 2008-08-14
EP2118780A4 (en) 2011-01-26
TW200842625A (en) 2008-11-01
JP5255000B2 (ja) 2013-08-07
CN101606154B (zh) 2016-09-28
US20080189277A1 (en) 2008-08-07

Similar Documents

Publication Publication Date Title
CN101606154A (zh) 允许元素类型的类型流的查询模式
EP3435257B1 (en) Metadata-based general request translator for distributed computer systems
CN108701254B (zh) 用于动态族系跟踪、重建和生命周期管理的系统和方法
Dave et al. Graphframes: an integrated api for mixing graph and relational queries
US7730079B2 (en) Query comprehensions
US8055650B2 (en) System and method for accessing data in disparate information sources
CN101208695B (zh) 基于图形计算的元数据管理
US7630956B2 (en) System and method for analyzing and reporting extensible data from multiple sources in multiple formats
US9355145B2 (en) User defined function classification in analytical data processing systems
CN101971165B (zh) 数据关系的图形表示
CN101233487B (zh) 拉姆达表达式
US7809678B2 (en) Fact dimensions in multidimensional databases
US20050228803A1 (en) Adapter framework for line-of-business application integration
US20060010058A1 (en) Multidimensional database currency conversion systems and methods
CN1987861A (zh) 处理数据库查询的系统和方法
EP2932412A2 (en) Graph query processing using plurality of engines
WO2010042238A1 (en) System and method for data warehousing and analytics on a distributed file system
CN102541631A (zh) 以多线程不同驱动源执行计划处理查询的方法和系统
CN110019314A (zh) 基于数据项分析的动态数据封装方法、客户端和服务端
CN1790323B (zh) 用于对依存关系所给出的映射关系进行合成的系统和方法
Ordonez et al. An er-flow diagram for big data
Dotan et al. HyperFlow: An integrated visual query and dataflow language for end-user information analysis
Katasonov et al. A semantic approach to enterprise information integration
Zepeda et al. A model driven approach for data warehouse conceptual design
Bloedorn et al. Relational graph analysis with real-world constraints: An application in irs tax fraud detection

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150805

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150805

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160928

Termination date: 20190205

CF01 Termination of patent right due to non-payment of annual fee