JP5255000B2 - 要素型の型フローを可能にするためのクエリパターン - Google Patents

要素型の型フローを可能にするためのクエリパターン Download PDF

Info

Publication number
JP5255000B2
JP5255000B2 JP2009549210A JP2009549210A JP5255000B2 JP 5255000 B2 JP5255000 B2 JP 5255000B2 JP 2009549210 A JP2009549210 A JP 2009549210A JP 2009549210 A JP2009549210 A JP 2009549210A JP 5255000 B2 JP5255000 B2 JP 5255000B2
Authority
JP
Japan
Prior art keywords
query
type
operator
element type
phrase
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.)
Expired - Fee Related
Application number
JP2009549210A
Other languages
English (en)
Other versions
JP2010518516A (ja
JP2010518516A5 (ja
Inventor
ヨハネス マリア マイヤー ヘンリクス
ケー.シルバー アマンダ
エー.ヴィック ポール
ザボクリトスキ エブゲニ
ブイ.ツインガウス アレクセイ
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 Corp
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 JP2010518516A publication Critical patent/JP2010518516A/ja
Publication of JP2010518516A5 publication Critical patent/JP2010518516A5/ja
Application granted granted Critical
Publication of JP5255000B2 publication Critical patent/JP5255000B2/ja
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)

Description

本発明は、式の第1の句中の演算子から式の次の句中の演算子への要素型の型フローを容易にすることのできる演算子パターンの形式化に関する。
コンピュータ言語の領域では、従来、多くの異なる言語種類が存在してきた。例えば、多くのプログラミング言語は、ほとんどのエンドユーザプログラミング目標に対する一般的な解決法を提供することを目指すが、一方、クエリ言語は、データベースに対するクエリに基づく情報マイニングを専ら対象とすることが多い。何年もの間、プログラミング言語にクエリ機能を追加するための多くの試みがなされてきたが、非常に多くの困難が存在する。
そのような困難の1つは、現代のほとんどのプログラミング言語がオブジェクト指向モデルに基づくことであり、オブジェクト指向モデルは、プログラミング作業の複雑さを低減するように意図された階層、抽象化、モジュール性、カプセル化、および他のいくつかのパラダイムを可能にする。一方、現代のデータベースは主として関係データベースであり、したがって、クエリ言語はオブジェクト指向モデルよりも関係モデルに基づく傾向がある。
もう1つの困難は、プログラミング言語に対する開発環境(例えば、統合開発環境(IDE))が進化して、非常に精巧な補助手段が開発者にもたらされ、それなしでプログラミングするのが難しくなったことである。一例は、オートコンプリートユーティリティまたは機構などの、インラインコンテキスト情報である。これらのオートコンプリート機構は、クラス、変数名、およびその他の構造があらかじめ定義されるオブジェクト指向の世界ではうまく働くが、クエリ言語には利用できないことが多い。というのは、クエリがコンパイルまたは変換され終えるまでは、オートコンプリートに必要な要素型の型チェックが利用可能でないからである。さらに、クエリが完了するまではクエリを変換することができず、それによりオートコンプリート機構は無意味になる。さらに、クエリ式が不適切に形成されている場合、コンパイルエラーは難解で修復が難しい可能性がある。
本発明は、上述したような問題に鑑みてなされたものであり、その目的とするところは、要素型の型フローを可能にするシステム及び方法を提供することにある。
本発明のいくつかの態様に関する基本的な理解を提供するために、本発明の単純化した概要を以下に提示する。この概要は、本発明の広範な概観ではない。この概要は、本発明の鍵となる要素またはクリティカルな要素を識別するものとはせず、本発明の範囲を線引きするものともしない。この概要の唯一の目的は、本発明のいくつかの概念を、後で提示するより詳細な説明の前置きとして単純化した形で提示することである。
本発明は、その一態様では、式中の演算子間における要素型の型フローを容易にするための、コンピュータによって実施される技法を含む。演算子はクエリ演算子とすることができ(ただしこれに限定されない)、したがって型は、クエリ式全体を通して、あるクエリ句から次のクエリ句にフローすることができる。
本発明の一態様によれば、演算子を、関連するメソッド呼出しにマッピングすることができ、メソッド呼出しは演算子パターンに従って定義することができる。したがって、式中のいずれか所与の演算子は、形式化された演算子パターンに従うものと予想することができる。よって、演算子の項ならびに式全体を、予想されるメソッド呼出しの点から表現することができる。メソッドは、インスタンスメソッド、静的メソッド、仮想メソッド、または拡張メソッドとすることができることを理解されたい。
これにより、型フローを容易にし、演算子が演算子パターンに準拠するように制約することによって、本明細書に開示するアーキテクチャは、式の各句につき要素型をインクリメンタルに推論することができる。例えば、ソース型を演算子と組み合わせることによって要素型を決定することができ、これは、式の連続的な句ごとにリアルタイムで達成することができる。このように、式全体を完全に変換する必要なしに、型情報をローカルに解決することができる。したがって、要素型の型チェックを、(リソース利用の点で)より安価な方式で、より素早く実施することができ、また、式が仕上げられた後のみではなく式の構築中に達成することができ、このことは追加の利益を生むことができる。
このような追加の利益の1つは、また本発明の一態様によれば、式と共にオートコンプリート機構を利用できることである。例えば、実行中に要素型を推論することによって、利用可能な型に基づくコンテキスト情報を提供することができ、このことは式構築を助けることができる。
以下の説明および添付の図面で、本発明の例示的ないくつかの態様について詳細に述べる。しかし、これらの態様は、本発明の原理を利用できる様々な方式のうちの少数を示すに過ぎず、本発明は、そのような態様およびそれらの均等物を全て含むものとする。他の利点および顕著な特徴は、本発明に関する以下の詳細な説明を図面と共に考えることから明らかになるであろう。
クエリパターンを利用して要素型の型フローを容易にすることのできる、コンピュータによって実現されるシステムのブロック図である。 例示的なクエリ式に関する、限定でない代表的な第1のクエリ句および限定でない様々な代表的な次のクエリ句を示す図である。 例示的なクエリ式のクエリ句、ならびに要素型の型フローをより詳細に示す図である。 例示的な入力と出力を伴うクエリ演算子パターンの限定でない様々な例を示す図である。 要素型をリアルタイムで推論することができ、かつ/または、推論された要素型に基づいてコンテキスト情報をインクリメンタルに提供することができる、コンピュータによって実現されるシステムのブロック図である。 クエリ式内における要素型の型フローを容易にするための、コンピュータによって実施される方法を定義する手順の例示的なフローチャートを示す図である。 構成可能なクエリコンプリヘンションおよび/または拡張可能なクエリ式を容易にすることのできる、コンピュータによって実現されるシステムのブロック図である。 例示的なクエリ式の例示的なクエリ句の結果として生じる制御変数のスコープに関する例示のブロック図である。 クエリコンプリヘンションの構築を合成的方式で容易にするための、コンピュータによって実施される方法を定義する手順の例示的なフローチャートである。 開示したアーキテクチャを実行するように動作可能なコンピュータのブロック図である。 例示的なコンピューティング環境の概略ブロック図である。
次に、本発明について図面を参照しながら述べるが、図面全体を通して、同じ要素を指すのには同じ参照番号を使用する。以下の説明では、説明上、本発明の完全な理解を提供するために多くの具体的な詳細を述べる。しかし、本発明は、これらの具体的な詳細がなくても実施できることは明白であろう。他の場合では、本発明の説明を容易にするために、周知の構造およびデバイスはブロック図の形で示す。
本出願においては、用語「コンポーネント」、「モジュール」、「システム」、「インタフェース」などは一般に、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中ソフトウェアのいずれかである、コンピュータ関連エンティティを指すものとする。例えば、コンポーネントは、プロセッサ上で稼動するプロセス、プロセッサ、オブジェクト、実行ファイル、実行のスレッド、プログラム、および/またはコンピュータであってよいが、これらに限定されない。例示として、コントローラ上で稼動するアプリケーションもコントローラも両方とも、コンポーネントとすることができる。1つまたは複数のコンポーネントが1つのプロセスおよび/または実行のスレッド内にあってよく、コンポーネントは、1つのコンピュータ上に局所化されてもよく、かつ/または2つ以上のコンピュータ間で分散されてもよい。別の例として、インタフェースは、入出力コンポーネントならびに関連するプロセッサ、アプリケーション、および/またはAPIコンポーネントを含むことができ、インタフェースは、コマンドラインのように単純であってもよく、またははより複雑な統合開発環境(IDE)であってもよい。
さらに、本発明は、開示する主題を実施するようにコンピュータを制御するために標準的なプログラミングおよび/またはエンジニアリング技法を用いてソフトウェア、ファームウェア、ハードウェア、またはこれらの任意の組合せを生み出す方法、装置、または製品として実現することができる。用語「製品」は、本明細書においては、任意のコンピュータ可読デバイス、キャリア、または媒体からアクセス可能な、コンピュータプログラムを包含するものとする。例えば、コンピュータ可読媒体は、磁気記憶デバイス(例えばハードディスク、フロッピーディスク、磁気ストリップなど)、光学ディスク(例えばコンパクトディスク(CD)、ディジタル多用途ディスク(DVD)など)、スマートカード、およびフラッシュメモリデバイス(例えばカード、スティック、キードライブなど)を含むことができるが、これらに限定されない。加えて、搬送波を利用して、電子メールの送受信で使用されるものや、インターネットまたはローカルエリアネットワーク(LAN)などのネットワークへのアクセスで使用されるものなどのコンピュータ可読電子データを搬送できることを理解されたい。当然、本発明の範囲または趣旨を逸脱することなく、この構成に多くの修正を加えてよいことは、当業者なら理解するであろう。
さらに、単語「例示的(exemplary)」は、本明細書では、例、事例、または例証としての役割を果たすことを意味するのに使用される。本明細書で「例示的」として述べるどんな態様または設計も、他の態様または設計よりも好まれるか有利であると必ずしも解釈すべきではない。そうではなく、単語「例示的」の使用は、概念を具体的に提示するものとする。本出願においては、用語「または、もしくは、あるいは(or)」は、排他的な「または、もしくは、あるいは」ではなく包含的な「または、もしくは、あるいは」を意味するものとする。すなわち、特に指定がない限り、または文脈から明らかでない限り、「XはAまたはBを利用する」は、自然な包含的順列のいずれかを意味するものとする。すなわち、XがAを利用する場合、XがBを利用する場合、またはXがAとBの両方を利用する場合は、「XはAまたはBを利用する」は前記のいずれの場合でも満たされる。加えて、冠詞「a」および「an」は、本出願および添付の特許請求の範囲においては、特に指定がない限り、または文脈から単数形を対象とすることが明らかでない限り、「1つまたは複数」を意味するものと一般に解釈すべきである。
本明細書においては、用語「推論する(infer)」または「推論(inference)」は、イベントおよび/またはデータを介して取り込まれた1組の観察から、システム、環境、および/またはユーザの状態について推理するプロセス、あるいはこれらの状態を推論するプロセスを一般に指す。推論は、特定のコンテキストまたはアクションを識別するのに利用することができ、あるいは、例えば複数の状態にわたる確率分布を生成することができる。推論は確率的とすることができる。すなわち、データおよびイベントの考慮に基づいた、当該の状態にわたる確率分布の計算とすることができる。推論はまた、1組のイベントおよび/またはデータから、より高レベルのイベントを構成するのに利用される技法を指すこともできる。このような推論の結果、イベントが時間的に近接して相関していようがいまいが、またイベントおよびデータの出所であるイベントおよびデータソースが1つであろうが複数であろうが、1組の観察されたイベントおよび/または記憶されたイベントデータから、新しいイベントまたはアクションが構築される。
次に図面を参照するが、最初に図1を参照すると、クエリパターンを利用して要素型の型フローを容易にすることのできる、コンピュータによって実現されるシステム100が示されている。一般に、システム100はユーザインタフェース102を備えることができ、ユーザインタフェース102は、周知のコンピュータベースのハードウェア(例えばコントローラ)、ソフトウェア(例えばアプリケーション)、ならびに本明細書に開示する他のコンポーネントに、動作可能に結合させることができる。ユーザインタフェース102はクエリ式104を受け取ることができ、クエリ式104は、第1のクエリ句および1つまたは複数の次のクエリ句を含むことができる。第1のクエリ句は、照会可能ソース型(例えばコレクション、ストリームなど)、ならびに、第1のクエリ句によって例えばソース型に関連する制御変数として導入できる要素型を含むことができることを理解されたい。通常、全てのクエリ句はクエリ演算子を含むが、後でわかるように、クエリ式104の次のクエリ句は、完全である必要はなく、句がユーザによって入力されている間などに一部分ずつ(例えばインクリメンタルに)受け取ることができる。クエリ式104および関連するサブコンポーネントについては、図2Aおよび2Bに関してより詳細に後述する。
システム100はまた、任意の有効なクエリ演算子(例えば、第1のクエリ句および後続の次のクエリ句に関連するクエリ演算子)に対するクエリ演算子パターン106を含むことができる。したがって、例えばシステム100に動作可能に結合させることのできるパターンストア108中に、任意の数のクエリ演算子パターン106が存在することができる。特に、クエリ式104からのクエリ句(例えばそれぞれ特定のクエリ演算子を含む)は、関連するクエリ演算子パターン106に準拠することができ、クエリ演算子パターン106は、例えばアクセス可能なインスタンスメソッドを定義することができる。クエリ演算子パターン106に準拠することによって、あるクエリ句と次のクエリ句との間に既知の関係があること、したがってあるクエリ演算子から次のクエリ演算子への関係があることを本質的に保証することができる。クエリ演算子パターン106については、図3に関してより詳細に述べる。
クエリ式104の演算子がクエリ演算子パターン106に準拠するという制約をクエリ式104に課すことによって、システム100は、クエリ式104のあるクエリ句/演算子から次のクエリ句/演算子への、要素型の型フローを確実にすることができることを理解されたい。さらに、本明細書に述べるように要素型がフローするのを確実にすることによって、従来のように完全なクエリ式104を変換/コンパイルする必要なしに、実行中にいくつかの有利な型推論および/またはコンテキスト決定を実施することができる。これについては図4に関してより詳細に論じる。さらに、前述の推論および/または決定は、クエリ式104が完了する前に、さらにはクエリ式104が不適切に形成されているときでさえ提供することができる。限定ではないがさらに別の説明として、クエリ演算子パターン106に準拠する例示的なクエリ式104、およびこのスキーマ化に関連する利点のいくつかについて、以下により詳細に述べる。
引き続き図1を参照しながら、しかし図2Aにも目を向けて、例示的なクエリ式104を示す。一般に、クエリ式104は、一連のクエリ演算子を特定のコレクションに適用する式とすることができる。クエリ演算子は、値のコレクション全体にわたって一度にコレクションに適用することのできる演算子(例えばFROM、WHERE、SELECTなど)である。クエリ式104は、第1のクエリ句202および任意の数の次のクエリ句2041、2042などを含むことができ、各クエリ句は、クエリ演算子のうちの1つを含む。
他にも多くのクエリ演算子が存在することができ、それらは本発明の趣旨および範囲の内にあるものとして企図されるが、以下に、いくつかの具体例をそれぞれの簡単な説明と共に提供する。
−FROM演算子は、1つまたは複数の制御変数を導入することができ、照会するコレクションを指定するか、または制御変数の値を計算する。
−RETURNおよびSELECT演算子は、出力されるコレクションの形状を指定することができる。場合によっては、SELECT演算子は、新しい制御変数を導入することができる。
−WHEREおよびDISTINCT演算子は、コレクションの値を制限することができる。
−ORDERBY演算子は、コレクションに順序付けを課すことができる。
−SKIP、SKIPWHILE、TAKE、およびTAKEWHILE演算子は、順序または条件に基づいてコレクションのサブセットを返すことができる。
−UNION、UNIONALL、EXCEPT、およびINTERSECT演算子は、2つのコレクションを受け取って単一のコレクションを生み出すことができる。
−GROUP演算子は、コレクションを集約することができ、キーでグループ化されたコレクションを返すことができる。
−GROUPBY演算子は、1つまたは複数のキーに基づいてコレクションをグループ化することができる。場合によっては、GROUPBY演算子は、新しい制御変数を導入することができる。
−AVG、SUM、COUNT、MIN、およびMAX演算子は、コレクションを集約して値を生み出すことができる。
−ANYおよびALL演算子は、コレクションを集約し、条件に基づいてブール値を返すことができる。
−JOIN演算子は、2つのコレクションを受け取ることができ、要素から導出されたマッチングキーに基づいて単一のコレクションを生み出すことができる。
−GROUPJOIN演算子は、要素から抽出されたマッチングキーに基づいて、2つのコレクションのグループ化結合を実施することができる。
クエリ式104中のクエリ演算子の変換は、演算子がクエリ式104中で発生する順序で、左から右に行うことができる。通常、クエリ式104の第1のクエリ句202は、FROM演算子を含む。というのは、FROM演算子は、照会するコレクションを導入するからである。加えて、クエリ式104中の最後のクエリ句は一般に、クエリの結果として生じるコレクションの最終形状を指定するRETURNおよびSELECT演算子を含む。しかし、最後のSELECTまたはRETURN演算子は省いてもよいことを理解されたい。例えば、クエリ式104がRETURNまたはSELECT演算子で終わらない場合、暗黙的なSELECT演算子を想定することができ、この暗黙的なSELECT演算子は、全てのスコープ内制御変数を、返される匿名型のプロパティにリフトすることができる。さらに、クエリ式104は、SELECT演算子が適用された後も継続できることを理解されたい。その場合、後続の演算子からアクセス可能な制御変数は、スコープ内制御変数のみに限定することができる。
本発明の一態様によれば、クエリ式104は、以下のようにスキーマ化することができる。
Figure 0005255000
本発明に関する追加の文脈、ならびに関連するプログラム実装形態および/または言語の高レベルの概観を提供するために、例示的なクエリ式104全体を考えてみる。
Figure 0005255000
このクエリ式104は、Customerオブジェクトのコレクションを取り、ワシントンの各顧客につき単一のNameプロパティを含む行のコレクションを返すことができる。
クエリ式104の構文は、標準的な関係型の構造化クエリ言語(SQL)構文に適度に近いものであり得ることはすぐに明らかであり、SQLに馴染みのある者なら誰でも、これ以上の指示がほとんどなくてもクエリ式104を使用できるようになることが意図されている。しかし、構文はSQLによって制約される必要はなく、さらに、クエリ式104は、SQLを別のプログラミング言語に変換したものである必要はない。SQLは純粋に関係型のモデルに基づいて設計されたので、そのイディオムのいくつかは、階層の概念を含む型システムでは同様に働かない。加えて、SQLによってしばしば利用される構文要素およびセマンティクス要素のいくつかは、既存のプログラミング言語の構文またはセマンティクスと相容れないか、あるいはうまく融和しない。したがって、クエリ式104は、SQLに馴染みのあるユーザにとって直感的である可能性があるが、いくつかの相違点もある。
例えば、SQL、および手続き型言語/構造化クエリ言語(PLSQL)など他の言語では、クエリおよびクエリ結果は、クエリ全体を評価することによってバインドされる。したがって、適用される特定のクエリ演算子に対する要素型を解釈できることは必要でない。さらに、このような決定は、エラーのないクエリ全体が入力されて比較的高価な変換プロセスによってバインドされるまで、行うことができない。対照的に、本発明は、特定のソース型に対する個々のクエリ演算の点から、クエリ式104の入力およびクエリ式104の結果をバインドするのを可能にすることができる。これらおよび他の利点について、図2Bを参照しながらより深く例示することができる。
図2Bに、例示的なクエリ式104のクエリ句をより詳細に示す。この例では、第1のクエリ句202は第1のクエリ演算子(例えばFROM演算子206)を含み、この第1のクエリ演算子は、照会可能ソース型(例えばCustomers208)を導入する働きをすることができ、ソース型の要素型に対する制御変数210(例えばC)を宣言することができる。図示のように、第1のクエリ句202の結果は、次のクエリ句2041(本明細書では次のクエリ句204と総称する)にフローし(212)、それにより、隣接するクエリ句間に既知の関係が存在することができる。特に、要素型は、次のクエリ演算子(例えばWHERE演算子214)にフローして(212)、次のクエリ句2041に対するソース型としての働きをすることができる。同様に、次のクエリ句2041の出力は、次のクエリ句2042にフローし(212)、ここで次のクエリ演算子(例えばSELECT演算子216)に関連付けられる。この次のクエリ演算子もまた、後続の次のクエリ句204にフローする(212)かまたはクエリ式104の出力の最終形状を記述する、要素型を生み出すことができる。
特に、次の各クエリ句204のクエリ演算は、特定のクエリ演算子にそれぞれ関連しコレクションまたはシーケンス(例えばソース型)に適用される、1組のメソッド(例えばクエリ演算子パターン106)に基づくことができる。これらのクエリ演算子は、コレクションの要素型(または行)との関係で定義することができる。しかし、要素型Tである特定のソース型とクエリ演算子の適用とが与えられれば、次のクエリ演算子204にフローする(212)結果は、要素型Sであるコレクションとすることができる。したがって、フローする(212)要素型は、所与のクエリ演算子に関連するクエリ演算子パターン106に従って変形させることができる。例えば、SELECTおよびRETURNなどの射影クエリ演算子に関連するクエリ演算子パターン106は、一般に、フロー212から受け取った要素型とは異なる要素型を返す。
この例では、要素型T(例えば、Customer型208に関連する全ての制御変数210の集約とすることができる)が、次のクエリ句2041のWHERE演算子214にフローする(212)。図3に関して述べるように、WHERE演算子214に関連するクエリ演算子パターン106は、コレクションの値をフィルタにかけることはできるが、他の点では、通常は要素型を変更することはない。ここでは、ワシントン州にいないCustomersがコレクションからフィルタにかけられるが、次のクエリ演算子であるSELECT演算子216にフローする(212)結果は、依然として、要素型がCustomer208であるコレクションである。
一方、Nameプロパティが型Stringであると仮定した場合、SELECT演算子216の結果は、要素型がStringであるコレクションである。クエリ結果に対してSELECTとRETURNの両方の演算子をサポートする組合せは、演算子への入力と出力の予測可能なセマンティクスを提供することができる。加えて、関係型データと対話するとき、より多くのフレキシビリティを容易にして、予想されるSQLセマンティクスをそっくりに模倣することができる。さらに、非テーブル形式の結果を生み出すとき、より高い単純さを容易にすることができ、さらに、クエリ式を反復的に開発するとき、コンパイラエラーおよび必要とされる変更の局所性の改善を容易にすることができる。
加えて、拡張可能マークアップ言語(XML)データのコレクションを照会することのできるいくつかのクエリ言語(例えば、いくつかのプログラミング言語機能を含むクエリ言語であるXQuery)と同様、本発明は、XMLリテラルと共に利用することもできる。例えば、以下の例示的なクエリ式104を利用して、上に論じた例示的なクエリ式104の結果と同様の、ワシントンの全ての顧客の名前を含むXML要素のコレクションを返すことができる。
Figure 0005255000
いくつかのクエリ演算子、例えばFROM、SELECT、およびGROUPBYなどは、制御変数と呼ばれる特別な種類のローカル変数(例えば制御変数C210)を導入できることを、さらに理解されたい。デフォルトでは、制御変数は、導入する演算子から、その制御変数を隠蔽することができる演算子であってクエリが評価するときにコレクション中の個別の行のプロパティまたは列を表すことができる演算子まで、スコープすることができる。例えば、以下のクエリでは、
Figure 0005255000
FROM演算子は、Customerとして型付けされる制御変数Cを導入する。次いで、後続のWHEREクエリ演算子は、制御変数Cを参照して、フィルタ式C.State=”WA”中で個々の顧客を表す。
DISTINCTなどいくつかのクエリ演算子は、制御変数を使用または変更する必要がない。SELECTなど他の演算子は、現在のスコープ内制御変数を隠蔽することができ、新しい制御変数を導入することができる。例えば、以下のクエリでは、
Figure 0005255000
WHEREクエリ演算子は、SELECT演算子によって導入されたLastName制御変数へのアクセスしか有さない。WHERE演算子がCを参照しようとした場合、可能性の高い結果としてコンパイルタイムエラーが生じることがある。
次に図3を参照して(図1も引き続き参照しながら)、クエリ演算子パターンの多くの非限定的な例を提供する。クエリ演算子パターン302〜328は、クエリ演算子パターン106の具体的な例示であり、本明細書では、参照番号302〜328で個別に参照することもでき、あるいはクエリ演算子パターン106として包括的に参照することもできる。クエリ演算子パターン302〜328のうちの単一のクエリ演算子パターンに関係する複数のクエリ演算子のそれぞれが、それ自体を複数のクエリ演算子のうちの他のクエリ演算子と区別する特性を持ち得るにしても、クエリ演算子パターン106のいくつかは複数のクエリ演算子に適用可能とすることができることを、さらに理解されたい。さらに、場合によっては、1つの特定のクエリ演算子を、クエリ演算子パターン302〜328のうちの複数と共に利用することもできる(例えばオーバーロード機能)。
一般に、クエリ演算子パターン106は、照会可能となるために型Cが実装しなければならないメソッドシグネチャとすることができる。クエリ式104は一連のクエリ演算子を特定のコレクションに適用できることを想起されたい。各クエリ演算子の制御変数は、その特定のクエリ演算子の適用についての全てのスコープ内制御変数の全部またはサブセットとすることができ、それに対して、あるクエリ演算子から次のクエリ演算子にフローすることのできる要素型Tは、全てのスコープ内制御変数の集約である匿名型とすることができる。したがって、クエリ演算子パターン106はとりわけ、型Cが確実に照会可能型であるようにするのに役立つことができる。いずれか所与のクエリ式104で、型Cは、以下の少なくとも1つが当てはまる場合に、照会可能型である。
(1)型Cは、照会可能型を返すシグネチャAsQuerable()を伴うアクセス可能インスタンスメソッドを含む。
(2)型Cは、IEnumerable(Of T)を返すシグネチャAsEnumerable()を伴うアクセス可能インスタンスメソッドを含む。
(3)型Cは、クエリ演算子パターン302〜328(以下にさらに詳述する)に準拠する1つまたは複数のクエリ演算子を実装し、型Cに対して定義される全てのクエリ演算子について、型Tが合致しなければならずオープン型パラメータであってはならない。
クエリ演算子パターン302〜328を参照すると、クエリ演算子パターン302は、FROM演算子を含むことができる。クエリ式104内で、FROM演算子は通常、第1のクエリ句で利用される。したがって、FROMパターン302は、クエリのソースならびに使用される制御変数を導入することができ、要素型Tの照会可能型を出力することができる。クエリ式の評価の前に、型Cが設計パターンを満たさない場合(例えばクエリ演算子パターン106に準拠しない場合)は、AsQueryableまたはAsEnumerableメソッドをクエリ式104上で呼び出し、関数の戻り値を一時的な場所に記憶することができることを理解されたい。
上述したように、FROM演算子は、照会できるコレクションと、コレクションの個々のメンバを表すことのできる制御変数とを導入することができる。クエリ式
Figure 0005255000
は、
Figure 0005255000
と等価であると考えることができる。
コレクション式オペランドは、一般に、値として分類されなければならず、照会可能型でなければならない。FROM演算子によって宣言される制御変数は、通常、名前付けおよびスコーピングに関してローカル変数を宣言するための通常規則に従わなければならない(上記の構文変換によって暗示されるように)。したがって、制御変数は通常、囲んでいるメソッド中のローカル変数またはパラメータの名前を隠蔽することはできない。
FROM演算子はまた、コレクションではなく式によってその値を決定できる制御変数を導入できることを理解されたい。このような特徴は、例えば、後のクエリ演算子で複数回使用されることになる値を計算する(例えば、後で使用される度に値を計算するのではなく1回だけ値を計算する)のに有用である可能性がある。例えば、
Figure 0005255000
は、
Figure 0005255000
と等価であると考えることができる。
式制御変数を宣言するFROM演算子の構文は、FOR LOOP中の制御変数宣言と同じとすることができるが、例外として、制御変数は一般に、明示的なイニシャライザを介して初期化される。式制御変数は、別の制御変数を参照することが必要とされない。というのは、そうすることの価値が疑わしいからである。式制御変数は普通、クエリ式104中で宣言される第1の制御変数となることはできない。
簡潔にするために、かつ/または便利なように、FROM演算子のオペランドはAS句を省略することができ、その場合、制御変数の型は、変数の範囲が及ぶコレクションまたは式から推論することができる。制御変数の型をクエリ演算子メソッドから導出できない場合、結果としてコンパイルタイムエラーとなる。FROM演算子は、以下のようにスキーマ的に定義することができる。
Figure 0005255000
加えて、FROM演算子は一般に、第1のクエリ句202のクエリ演算子として現れるが、クエリ式104は複数のFROM演算子を含むことができる。したがって、FROM演算子が次のクエリ句204のクエリ演算子であるときは、クロス積(例えば単純で暗黙的な結合)が結果として得られる。この場合、FROM演算子は、新しい制御変数を既存の制御変数のセットに結合する(後述のJOIN演算子パターン324参照)ことができる。この結果、結合されたコレクション中の全ての要素のクロス積が得られる。したがって例えば、式
Figure 0005255000
は、以下のネストされたFor Eachループと等価であると考えることができる。
Figure 0005255000
前のクエリ演算子中で導入された制御変数は、スコープ内とすることができ、次のクエリ演算子204に含まれるFROM演算子内で使用することができる。SQLから見ると、前述の特徴は、「相関サブクエリ」をサポートするものとして考えることができる。例えば、以下のクエリ式では、第2のFROM演算子が、第1の制御変数の値を参照する。
Figure 0005255000
加えて、単一のクエリ句中で複数のFROM演算子が現れることができ、その場合は、オペランド間のコンマが、次のクエリ句204中の別のFROM演算子とちょうど等価であるものとすることができる。したがって、以下の例
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
クエリ演算子パターン304は、関数を引数として受け取ることのできるSELECTまたはSELECTMANYという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。この関数は、型Tの引数を含むことができ、型Sとなる。このメソッドは、要素型Sの照会可能型を返すことができる。
SELECT演算子は、クエリ式104の結果を記述することができる。SELECT演算子は、宣言のリストを取り、結果として生じるコレクションの要素型を構築することができる。例えば、クエリ式104が
Figure 0005255000
である場合は、Nameは型StringでありProductは型Stringなので、結果の型はIEnumerable(Of{Name As String,Product As String})とすることができる。
以下のクエリ(例えばクエリ式104)は、匿名型を明示的に返すことと等価とすることができる。
Figure 0005255000
SELECT演算子が1つの宣言のみを有する場合、結果は、1つのプロパティを伴う匿名型とすることができる。したがって、Nameは型Stringなので、結果の型はIEnumerable(Of{Name As String})とすることができる。例えば以下のとおりである。
Figure 0005255000
SELECT演算子内で使用される宣言内の式は、基礎の匿名型への変換前にバインドされる。より具体的には、SELECT演算子中の宣言内の式は、メンバアクセスを開始することができ、このメンバアクセスでは、ドット演算子はクエリ中の制御変数にバインドする必要はない。そうではなく、ドット演算子はその代わり、囲んでいるWITHブロックがあればそれにバインドすることができる。
SELECT演算子に加えて、クエリ式104は他の射影演算子を含んでもよいことを理解されたい。例えば、クエリ式は、関連するクエリ演算子パターン106が存在することのできるRETURN演算子を含むことができる。SELECT演算子と同様、RETURN演算子は、クエリ式104の結果を記述することができる。RETURN演算子は、結果として生じるコレクションの要素を生み出す式を取ることができる。例えば、式
Figure 0005255000
は、元のコストの80%に割り引かれた価格のコレクションを結果としてもたらすことができる。
RETURN演算子で終わるクエリ式104の結果は、返された式の型がその要素型であるコレクションとすることができる。例えば、以下のクエリ式では、c.Nameは型Stringなので、結果の型はIEnumerable(OF String)である。
Figure 0005255000
クエリ式104がRETURNまたはSELECT演算子なしで終わる場合は、コレクションの結果的な要素型は、全てのスコープ内制御変数についてのプロパティを伴う匿名型とすることができる。
Figure 0005255000
SELECT演算子がクエリ式104の結果を記述することができるにしても、任意のクエリ式104が、SELECT演算子の後で継続することができる。その場合、SELECTステートメントによって導入された制御変数はスコープ内制御変数だが、全ての前の制御変数は、通常はスコープ外である。
Figure 0005255000
SELECT演算子の後で継続するクエリ式104は、以下のようなネストされたクエリと等価とすることができる。
Figure 0005255000
RETURNおよびSELECT演算子はそれぞれ、以下の例に基づいて定義することができる。
Figure 0005255000
クエリ演算子パターン306は、関数を引数として取ることのできるWHEREという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。型Tをこの関数の引数とすることができ、結果は、ブール型に暗黙的に変換可能とすることのできる型のものとすることができる。例えば、結果の型は、IF、WHILE、またはDOステートメント中で使用できる式の型と同じ規則を有することができる。したがって、型は、ブール型への暗黙的な変換を有することができるか、あるいは、IsTrueおよびIsFalse演算子が定義されている必要があるものとすることができる。WHERE演算子は、要素型Tの照会可能型を返すことができる。
WHERE演算子は、コレクション中の値を、所与の条件を満たす値に制限することができる。WHERE演算子は、制御変数値のセットごとに評価されるブール式を受け取ることができる。式の値がTrueである場合は、値は出力コレクション中に現れることができ、そうでない場合は、値はスキップすることができる。クエリ式
Figure 0005255000
は、以下のネストされたループと等価であると考えることができる。
Figure 0005255000
WHERE演算子は、以下のように定義することができる。
Figure 0005255000
クエリ演算子パターン308は、関数を引数として取ることのできるORDERBYまたはORDERBYDESCENDINGという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができ、この関数は、型Tの引数を取り込むことができ、型Sとなる。パターン308に関連するメソッドは、要素型Tの順序付けされたコレクションを返すことができる。
ORDERBY演算子は、制御変数中に現れる値を順序に基づいて順序付けすることができる。ORDERBY演算子は、制御変数を順序付けするのに使用すべき値を指定する式を取ることができる。例えば、以下のクエリは、価格でソートされた本の題名を返す。
Figure 0005255000
順序付けは昇順とすることができ、その場合、より小さい値がより大きい値の前にくる。あるいは順序付けは降順とすることができ、その場合、より大きい値がより小さい値の前にくる。順序付けのデフォルトは昇順である。例えば、以下のクエリは、最も高価な本を最初にして、価格でソートされた本の題名を返す。
Figure 0005255000
ORDERBY演算子はまた、順序付けのために複数の式を指定することもでき、その場合、ネストされた方式でコレクションを順序付けすることができる。例えば、以下のクエリ式は、州、次いで各州内の都市、次いで各都市内のZIPコードで、著者を順序付けする。
Figure 0005255000
ORDERBY演算子は、以下の例に基づいてスキーマ化することができる。
Figure 0005255000
加えて、クエリ演算子パターン310は、DISTINCTという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。通常、このメソッドは、ソース型Cと同じ要素型の照会可能型を返す。DISTINCT演算子は、コレクション中の値を、異なる値を伴う(例えば、繰り返される値を返さない)値のみに制限することができる。例えば、クエリ
Figure 0005255000
は、顧客が同価格の注文を複数有する場合であっても、顧客名と注文価格との異なる対合ごとに1つの行のみを返すことになる。DISTINCT演算子は、以下のようにスキーマ化することができる。
Figure 0005255000
次にクエリ演算子パターン312を参照するが、パターン312は、CONCAT、UNION、INTERSECT、またはEXCEPTという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。このメソッドは、ソースCと同じ要素型Tのコレクションを引数として受け取ることができ、要素型Tの照会可能型を返すことができる。
次のクエリ演算子パターンであるパターン314は、TAKEまたはSKIPという名前のアクセス可能インスタンスメソッドとすることのできるクエリ演算子を含むことができ、このメソッドは、値を引数として受け取ることができ、ソース型Cと同じ要素型の照会可能型を返すことができる。
TAKE演算子は、コレクションからの所与の数の要素を結果としてもたらすことができる。WHILE修正子と共に使用されるとき(例えばクエリ演算子パターン316参照)、TAKE演算子は、条件が当てはまる間は要素のシーケンスを結果としてもたらすことができる。
SKIP演算子は、コレクションからの所与の数の要素を無視することができ、次いでコレクションの残りを返す。WHILE修正子と共に使用されるとき、SKIP演算子は、条件が当てはまる間は要素をスキップし、次いでコレクションの残りを返す。TAKEおよびSKIPに関する例示的なスキーマを以下に提供する。
Figure 0005255000
クエリ演算子パターン316は、TAKEWHILEまたはSKIPWHILEという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。このメソッドは、関数を引数として取ることができ、この関数は、型Tの引数を受け取ることができ、ブールとなる。このメソッドは、要素型Tの照会可能型を返すことができる。
クエリ演算子パターン318は、SUM、MIN、MAX、COUNT、またはAVERAGEという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。このメソッドは、関数を引数として受け取ることができ、この関数は、型Tの引数を受け取り、数値型となる。このメソッドは、数値型を返すことができる。
クエリ演算子パターン320は、MINまたはMAXという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができ、このメソッドは、型Tの引数を含む関数を引数として取ることができ、型Sとなる。このメソッドは、要素型Sの照会可能型を返すことができる。
クエリ演算子パターン322は、関数を引数として受け取ることのできるANYまたはALLという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。この関数は、型Tの引数を含むことができ、ブールに暗黙的に変換可能とすることのできる型となる。このメソッドは、ブールに暗黙的に変換可能とすることのできる型を返すことができる。
パターン318〜322に関連するクエリ演算子は、AGGREGATE演算子との関連で利用できることを理解されたい。集約(aggregate)クエリ句内では、標準的な1組のAGGREGATE演算子を、グループ化されたスコープ内制御変数に適用することができる。AGGREGATE演算子は、ANY、ALL、COUNT、LONGCOUNT、SUM、MIN、MAX、AVERAGE、および/またはGROUPを含むことができるが、これらに限定されない。
ANY集約演算子は、所与の条件を満たす要素がグループ中にあるかどうか確認することができる。ALL集約演算子は、グループ中の全ての要素が所与の条件を満たすかどうか判定することができる。例えば、以下の例示的なクエリ式104は、18歳未満の顧客がいるかどうかチェックすることができる。
Figure 0005255000
一方、以下の例示的なクエリ式104は、所与の州における、少なくとも5つの注文を有する全ての顧客を返すことができる。
Figure 0005255000
COUNTおよびLONGCOUNT集約演算子は、オプションのブール式を取り、グループ中の、所与の条件を満たす要素の数をカウントすることができる。
Figure 0005255000
SUM集約演算子は、特定のセレクタ式に基づいて、グループの要素の合計を計算することができる。例えば、以下の例示的なクエリ式104は、カテゴリでグループ化された全ての注文の総額を計算することができる。
Figure 0005255000
MINおよびMAX集約演算子は、何らかのセレクタ式に基づいて、グループの要素の最小(または最大)を計算することができる。例えば、以下の例示的なクエリ式104は、各州の最年少および最年長の顧客を計算することができる。
Figure 0005255000
AVERAGE集約演算子は、通常、特定のセレクタ式に基づいて、グループの要素の平均を計算する。例えば、以下の例示的なクエリ式104は、カテゴリでグループ化された全ての製品の平均価格を計算することができる。
Figure 0005255000
特別なGROUP集約演算子は、オプションのセレクタ式に基づいて、グループの全ての要素を明示的なコレクションに蓄積することができる。例えば、以下の例示的なクエリ式104は、所与の州の全ての顧客名を単一のコレクションにまとめることができる。
Figure 0005255000
クエリ演算子パターン324は、JOINという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができる。このメソッドは、型T’の要素を伴う照会可能型S;型Tの引数を取ることができ、キーKを表す型となる、内側セレクタとしての働きをする関数;型T’の引数を取ることができ、キーKを表す型となる、外側セレクタとしての働きをする関数;ならびに/または、それぞれ型TおよびT’である2つの引数を取り、型Vのハッシュ値となる、結合条件としての働きをする関数を、引数として取ることができる。このメソッドは、要素型Vの照会可能型を返すことができる。
したがって、JOIN演算子は、2つのコレクションを取り、要素から導出されたマッチングキーに基づいて単一のコレクションを生み出すことができる。どれを結合するかに関する条件を指定するとき、いくつかの制限を適用することができる。例えば、条件式に対するオペランドは、暗黙的にブールに変換可能であることが必要とされてよい。JOINスキーマの一例は以下のとおりである。
Figure 0005255000
クエリ演算子パターン326は、GROUPJOINという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができ、このメソッドは、型T’の要素を伴う照会可能型S;型Tの引数を取り、キーKを表す型となる、外側キーセレクタとしての働きをする関数;型Uの引数を取り、キーKを表す型となる、内側キーセレクタとしての働きをする関数;および/または、結果を生むことのできる関数であって、型Tの引数と、要素型Uのコレクションである引数とをとることができ、選択された型Vとなる関数を、引数として受け取ることができる。このメソッドは、要素型Vの照会可能型を返すことができる。
GROUPJOIN演算子は、要素から抽出されたマッチングキーに基づいて、2つのコレクションのグループ化結合を生み出すことができる。この演算子は、階層型の結果(例えば、外側要素が、合致する内側要素のコレクションと対合されている)を生み出すことができ、関係データベースから見た直接の等価物を必要としない。以下の例示的なクエリ式104は、顧客とその注文とのグループ化結合を実施することができ、顧客名およびその顧客の注文の総計を含む匿名型のコレクションを生み出す。
Figure 0005255000
固定されたセットに作用して単一の値を計算する、任意の数の追加の演算子があってよい。クエリの文脈では、これらの演算子は、計算された値を集約すると言うことができる。セットにわたって集約するには、一般にそのセットを最初に導入しなければならない。クエリ内では、集約計算のためのコレクションを指定する様々な方法があり得る。グループが導入された後、このグループにわたって集約して単一の値を計算することができる。したがって、グループ化演算子GROUPJOIN(ならびに、クエリ演算子パターン328に関して後で論じるGROUPBY)に加えて、他のグループ化演算子が存在することもできる。そのような一例はOVER演算子である。
OVER演算子は、集約コンプリヘンションのためにグループを蓄積するよう指定することができる。OVER演算子はスタンドアロンの式として使用することもでき、あるいは、OVER演算子を使用して、事前形成済みコレクションを集約計算に利用するよう指定することもできる。例えば、以下の例示的なクエリ式104は、2006年1月1日よりも前の全ての注文総計の合計を集約することができる。
Figure 0005255000
OVER演算子の各適用は、通常、対応するAGGREATE演算子によって閉じられて、コレクションの内容に基づいて単一の値が計算されなければならない。クエリの結果は、集約計算に対応する単一の値とすることができ、この単一の値は、この場合、2006年よりも前の全ての注文の合計を表す整数である。
OVER演算子とAGGREGATE演算子との間では、どんなクエリ演算子を使用することもできる可能性がある。AGGREGATE演算子内では、前のOVER演算子によって指定される制御変数に対して、AGGREGATE演算子(例えば、前述のパターン318〜322に関連する演算子)のみを使用することができる。
階層型オブジェクトグラフでしばしばそうであるようにセットがすでに形成されているときは、OVER演算子を使用して、セットを集約計算に使用するよう指定することができる。例えば、以下の例示的なクエリ式104は、2006年よりも前にワシントンの顧客によって行われた全ての注文の合計を集約することができる。
Figure 0005255000
このクエリの結果は、1)custと呼ばれるCustomerプロパティと、Sumと呼ばれるIntegerプロパティとの2つのプロパティを伴う匿名型がその要素型である照会可能型とすることができる。
クエリ演算子パターン328は、GROUPBYという名前のアクセス可能インスタンスメソッドであるクエリ演算子を含むことができ、このメソッドは、型Tの引数を受け取り、キーKを表す型となる、キーセレクタとしての働きをする関数;および/または、結果を生む関数であって、型Kの引数と、要素型Tのコレクションである引数とを取り、選択された型Vとなる関数を、引数として取る。このメソッドは、要素型Vの照会可能型で結果を返すことができる。
GROUPBY演算子は、1つまたは複数の共通キー式に基づいて、コレクションの要素をグループ化する(例えばローカルに)ことができる。最初のコレクションのこれらの各区分に対して、後続のAGGREGATEステートメントが、これらの各グループがどのように単一の値または行に集約されるかを指定することができる。
例えば、以下の例示的なクエリ式104は、全ての顧客をStateでグループ化し、次いで各グループのカウントおよび平均年齢を計算することができる。
Figure 0005255000
SELECT演算子と同様、GROUPBY演算子は、キーセレクタ中で宣言される変数を制御変数としてスコープ内にすることができ、前にスコープ内であった全ての変数を隠蔽することができる。対照的に、SELECT演算子のいくつかの態様とは異なり、これらの隠蔽された制御変数は、後続のAGGREGATE演算子の内部で使用されるAGGREGATE演算子によって再びスコープ内にすることができる。さらに、OVER演算子のいくつかの実装形態とは異なり、GROUPBY演算子とAGGREGATE演算子との間では、他のクエリ演算子を使用することはできない。
Figure 0005255000
この構造は、明示的な集約によってグループを構築することと等価とすることができるが、GROUPBY演算子句の直後にクエリを終了するときに有用とすることができる。したがって、上の式は、以下の式と等価とすることができる。
Figure 0005255000
個別の各グループの表現を実際に構築するために、GROUPBY演算子を実際に実装することは必ずしも必要とされない。そうではなく、実装は、グループ化を後続の集約と結合して単一の演算にする、基礎の実装を使用することができる。
クエリ式104のターゲットおよび適用されているクエリ演算子から、制御変数の型および名前を推論できることを理解されたい(これについては図4に関してより詳細に後述する)。したがって、要素型(スコープ内制御変数の集約である)を同様にして推論することができる。前述の各規則では、要素型の推論された型をTとすることができ、照会可能型Cが例えばFOR EACH...NEXTステートメント中で使用されるコレクションであるとき、要素型は通常、要素型Tと合致しなければならない。
以下の演算子のサブセットを実装するコレクションとして、順序付けされたコレクションを定義することができることも、さらに理解されたい。すなわち、型Tの引数を取り込み型Sとなる関数を引数として取るTHENBYまたはTHENBYDESCENDINGという名前のアクセス可能インスタンスメソッドである。
クエリ演算子パターン106は、特定のクエリ演算を実装するメソッドにクエリ構文をバインドするのを容易にすることができるので、利用される基礎の言語によって順序保存を指示する必要はない。そうではなく、順序保存は、演算子自体の実装によって決定することができる。このことは、例えばユーザ定義の数値型について加算演算子をオーバーロードするための実装が、加算に似たどんなものも実施しない場合があるという点で、ユーザ定義の演算子に類似する可能性がある。しかし、本発明に内在する予測可能性を維持するためには、ユーザ予想に合致しない演算子を実装することは、推奨される方針ではない場合がある。
本発明のより完全な理解を助けるために、次に、追加の特徴、態様、および/または実装形態についてさらに論じることができる。例えば、以下のセクションのいくつかでは、各クエリ演算子が標準的なクエリ演算子メソッドへの呼出しにマッピングする例示的な方式について詳述する。他のセクションでは、上に紹介したように、また後のセクションで利用されるように(例えば図4および以下の関連する記述に関して)要素型情報がフローする方式について述べる。
(クエリ演算子の変換)
様々なクエリ演算子のそれぞれは、標準的なクエリ演算子パターン(例えばクエリ演算子パターン106)に従って定義できるメソッド呼出しに直接にマッピングすることができることを理解されたい。したがって、クエリ演算子(またはクエリ式全体)の意味は、呼び出されることになるクエリ演算子メソッドの点から表現することができる。メソッドは、照会されているオブジェクトのインスタンスメソッド、またはオブジェクト外部の拡張メソッドとすることができる。例えば、クエリ
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(複合制御変数)
本発明によって、本明細書に述べる様々な目的に制御変数を利用することができるが、制御変数は一般にエンドユーザから直接にアクセス可能ではないことを理解されたい。WHEREまたはSELECTなど、いくつかのクエリ演算子は、クエリ中でスコープ内である制御変数を参照することのできる式を取る。これらの式は、制御変数を取って式の結果を返すローカル関数として表現される。例えば、クエリ
Figure 0005255000
は、
Figure 0005255000
と等価とすることができ、制御変数custは、ラムダ式に対するパラメータとして使用される。同様に、複数の制御変数がスコープ内である場合、これらの制御変数は通常、ローカル関数中に渡すことができるように、単一の匿名型に共にグループ化しなければならない。例えば、クエリ
Figure 0005255000
は、
Figure 0005255000
と等価とすることができ、制御変数cおよびoは、型が匿名型{c As Customer,o As Order}であるITと呼ばれる複合制御変数に、共に結合される。
ラムダ式に対するサポートも提供することができ、これは本発明の趣旨および範囲の内にあるものと考えるべきであることを、さらに理解されたい。さらなる留意として、複合制御変数は、普通はネストされない。例として、
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(FROM演算子の変換)
標準的なFROM演算子は、一般に、クエリのソースおよび使用される制御変数を導入するのみである。本質的に、この演算子は、どんな特定のクエリ演算子呼出しにも変換しない。JOINの場合、FROM演算子は、通常の制御変数と結合するときにはSELECTMANYクエリ演算子メソッドへの呼出しに変換することができ、式制御変数と結合するときにはSELECTクエリ演算子メソッドへの呼出しに変換することができる。したがって、クエリ式
Figure 0005255000
は、
Figure 0005255000
と等価とすることができ、クエリ式
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
各クエリ演算子は、特定のパターンに従うソース型に対する基礎のメソッドにバインドすることができる。このパターンは、演算子の結果の要素型を指示し、場合によっては、基礎のメソッド中に渡すことのできる式に対する制約を課す。
(明示的に型付けされた制御変数)
FROM演算子がAs句を使用して制御変数に対するターゲット型Objectを指定し、Tの型をソース型から推論することができない場合は、Cast(Of Object)演算子を使用して要素型を変換することができる。クエリ式
Figure 0005255000
は、
Figure 0005255000
と等価である。
FROM演算子がAs句を使用して制御変数に対するターゲット型T(Objectではない)を指定し、Tの型をソース型から推論することができない場合、またはターゲット型がソースの要素型と合致しない場合は、Castクエリ演算子を使用して要素型をObjectに変換することができ、後続のSELECT演算子を利用してターゲット型を得ることができる。例えば、クエリ式
Figure 0005255000
は、
Figure 0005255000
と等価である。
FROM演算子がAs句を使用して制御変数に対するターゲット型Tを指定し、Tの型がソースの要素型と合致する場合は、後でCastまたはSELECT演算子を適用する必要はない。
(WHERE演算子の変換)
WHERE演算子は、Whereクエリ演算子メソッドへの呼出しに変換することができる。例えば、クエリ式
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(ORDERBY演算子の変換)
ORDERBY演算子は、第1のソートについてORDERBYまたはORDERBYDESCENDINGクエリ演算子メソッドへの呼出しに変換することができ(ソートのタイプに応じて)、次いで、後続のソートについてTHENBYおよびTHENBYDESCENDINGクエリ演算子メソッドへの呼出しに変換することができる。例えば、クエリ式
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(RETURNおよびSELECT演算子の変換)
RETURN演算子は、SELECTクエリ演算子メソッドへの呼出しに変換することができる。例えば、
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
SELECT演算子は、SELECTクエリ演算子メソッドへの呼出しおよび匿名型の構造に変換することができる。例えば、
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(DISTINCT演算子の変換)
DISTINCT演算子は、DISTINTクエリ演算子メソッドへの呼出しに変換することができる。例えば、
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(TAKEまたはSKIP[WHILE]演算子の変換)
TAKEまたはSKIP演算子は、それぞれのTAKEまたはSKIPクエリ演算子メソッドを呼び出すことができる。例えば、
Figure 0005255000
は、
Figure 0005255000
と等価とすることができ、クエリ
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
WHILE修正子と共に使用されるときは、条件式を生み出して、基礎のTAKEWHILEまたはSKIPWHILEクエリ演算子に適用することができる。例えば、クエリ
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(GROUPBYおよびAGGREGATE演算子の変換)
GROUPBY演算子、およびそれに続く集約するSELECTまたはRETURN演算子は、GROUPBYクエリ演算子メソッドへの呼出し、およびそれに続く、構築されたグループにわたる集約に変換することができる。例えば、クエリ
Figure 0005255000
は、
Figure 0005255000
と等価とすることができる。
(例示的なオブジェクト)
本明細書に含まれる全ての例は、2つの別々のオブジェクトセットのうちの一方を使用する。Companyオブジェクトは、会社に関する情報を表すことができ、階層型に接続することができる。
Figure 0005255000
Bookオブジェクトは、例えば書店に蓄えられた本に関する情報を表すことができ、関係型に接続することができる。
Figure 0005255000
上記を念頭に置いて、次に図4に移ると、要素型をリアルタイムで推論することができ、かつ/または、推論された要素型に基づいてコンテキスト情報をインクリメンタルに提供することができる、コンピュータによって実現されるシステム400が示されている。一般に、システム400は、図1に関しておおむね上述したようにクエリ式104を受け取ることのできるユーザインタフェース102を備えることができる。加えて、システム400は、ユーザインタフェース102および/またはコンテキストコンポーネント402に動作可能に結合(図示せず)させることのできるパターンストア108を備えることができる。コンテキストコンポーネント402は、クエリ式104を調べ、要素型に関係する推論をリアルタイムで行うことができる。例えば、前述のように、各クエリ句のクエリ演算子が特定のパターン(例えば図1からのクエリ演算子パターン106)に準拠するので、またさらに、要素型があるクエリ句から次のクエリ句にフローすることができるので、この2つの情報を利用して、いずれか所与の次のクエリ句に対する要素型を決定することができる。
クエリ演算子がメソッド呼出しとして記述され、クエリ演算が純粋な機械的変形として適用されるときは、一般に、型解決がオーバーロード解決の間に行われることが必要とされる。このようにすると、クエリ演算子が型をある演算子から別の演算子にフローできると仮定した場合に、演算子は一般に、適用される次の演算子に型を提供できるように完全にバインドされなければならない。この結果、構文エラーまたは他の何らかの問題のせいでオーバーロード解決が失敗した場合、適用される次の演算子に型情報を提供するための従来の機構はない。この型フロー機構のない合成的クエリ演算子(後で図6からより詳細に論じる)は、結果として、妙なエラーメッセージ、異なる式セマンティクス、オートコンプリートのためのコンテキスト情報の不足、および全体的により遅いコンパイラスループットを引き起こす。
述べたように、本発明は、要素型が完全なメソッドバインディングに依拠するのではなく、利用されている特定の演算子のパターンに依拠するようにすることのできる、クエリ演算子のパターンの形式化を採用することができる。さらに別の例示として、ユーザインタフェース102によって(例えばクエリ式104がタイプ入力されているときに)受け取られる、以下の例示的なクエリ式104を考えてみる。
Figure 0005255000
第1のクエリ句はFROM演算子を含むが、このFROM演算子は、ソース型の要素とすることのできる匿名要素型「cust」として、照会可能ソース型「Customers」を導入することができる。論じたように、要素型は次のクエリ句にフローすることができ、この次のクエリ句で、WHERE演算子は、コレクションをフィルタにかけることができるが、他の点では要素型を改変しない。最後に、要素型は次のクエリ句にフローし、この次のクエリ句では、SELECT演算子、およびSELECT演算子メソッドが受け取ると予想する関数の一部が見られるが、この次のクエリ句の残りはまだ不完全である。
SELECT句中にフローする要素型は、今やこの特定のクエリ句に対するソース型としての働きをすることができる。このように、コンテキストコンポーネント402は、ソース型およびクエリ演算子に基づいて、このクエリ句に対する要素型(例えばcust)をリアルタイムで推論することができる。したがって、推論は完全にローカルとすることができ、クエリ式104を完全に変換する必要はない。そうではなく、コンテキストコンポーネント402は、バックグラウンドコンパイラと同様にして推論を実施することができる。
加えて、コンテキストコンポーネント402の推論は、いくつかの方法でより大きい効率を促進することができる。例えば、推論は、変換が実施されるときに1回だけ実施すれば済む。したがって、クエリ式104中に2つのWHERE演算子がある場合は、第2のWHERE演算子についての変換は必要とせずに済む。加えて、推論は、一般に実施しなければならない型発見を避けるために、完全な、かつ通例はより高価なコンパイルと共に利用することもできる。したがって、要素型を前もって推論することを様々な方法で利用して、コンパイル時間を速くすることができる。
さらに、コンテキストコンポーネント402が要素型(ここでは「Select cust.」クエリ句中の「cust」)を推論すると、コンテキストコンポーネント402は、コンテキスト情報404をインクリメンタルに提供することができる。例えば、「cust.」中でドットがタイプ入力されたとき、コンテキスト情報404を、図示のようなオートコンプリートを可能にするための便利で馴染みのあるポップアップウィンドウの形で、または別の形で、動的に提供することができる。このような特徴は、従来はクエリ式に利用可能でないことを理解されたい。というのは、クエリ式は(従来)、要素型を決定できるようになる前にまず変換しなければならないからである。また、完全でエラーのないクエリ式を供給することが従来の変換/コンパイルの前提であるため、これまではどんな同様のコンテキストおよび/またはオートコンプリート機構も排除されてきた。
コンテキスト情報404は、クエリ式に対して非常に有用である可能性があり、また主としてIDEにおいてコンテキスト上のフィードバックを提供する文脈で例示されているが、いずれの場合も必須ではない。例えば、本明細書に述べることは、クエリ式のクエリ演算子だけでなくそれ以外にも適用可能とすることができる。特に、ある演算子から次の演算子への型フローの概念、および、ある演算子と次の演算子との間の関係の概念は、型フローを使用できる場合のどんな演算子またはどんなAPIにも適用することができる。そのような一例は、API呼出しを共に連鎖させる際に存在する(例えば、型があるコマンドから次のコマンドにフローすることが意図される場合のコマンドラインに含まれるパイプライン)。別の例は、型はないが、遅延バインドされる最適化などのために何らかの形のフローを利用できる場合の、遅延バインドとすることができる。
コンテキストコンポーネント402によって実施される推論は、受け取った既知の情報(例えば、既知かつ定義済みのクエリ演算子に関連するソース型)に基づいて完全に事前定義済みとすることができ、あるいは、他の態様によれば、推論は確率的とすることができることをさらに理解されたい。例えば、種々の型の演算子と共に利用されるとき、コンテキストコンポーネント402を利用して、利用可能なデータの全体またはサブセットを調べることができ、イベントおよび/またはデータを介して取り込まれた1組の観察から、システム、環境、および/またはユーザの状態についての推理を可能にするかまたはこれらの状態を推論することができる。推論は、特定のコンテキストまたはアクションを識別するのに利用することができ、あるいは、例えば複数の状態にわたる確率分布を生成することができる。推論は確率的とすることができる。すなわち、データおよびイベントの考慮に基づいた、当該の状態にわたる確率分布の計算とすることができる。推論はまた、1組のイベントおよび/またはデータから、より高レベルのイベントを構成するのに利用される技法を指すこともできる。
このような推論の結果、イベントが時間的に近接して相関していようがいまいが、またイベントおよびデータの出所であるイベントおよびデータソースが1つであろうが複数であろうが、1組の観察されたイベントおよび/または記憶されたイベントデータから、新しいイベントまたはアクションを構築することができる。様々な分類(明示的および/または暗黙的に訓練された)手法および/またはシステム(例えばサポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイズ信念ネットワーク、ファジィ論理、データ融合エンジンなど)を、本発明に関連する自動的なおよび/または推論されたアクションの実施と共に利用することができる。
分類器は、入力属性ベクトルx=(x1,x2,x3,x4,xn)を、あるクラスにこの入力が属する信頼度にマッピングする関数とすることができ、すなわちf(x)=confidence(class)である。このような分類は、確率ベースおよび/または統計ベースの分析(例えば分析の効用およびコストを考慮に入れる)を利用して、自動的に実施されるようユーザが望むアクションを予測または推論することができる。サポートベクターマシン(SVM)は、利用できる分類器の例である。SVMは、可能性のある入力の空間における超曲面を見つけることによって動作し、超曲面は、トリガ基準を非トリガイベントから分離することを試みる。直感的に、これによって分類は、訓練データと近いが同一ではないテスト用データに対して正しいものになる。他の有向および無向モデル分類手法は、例えばナイーブベイズ、ベイズネットワーク、決定樹、ニューラルネットワーク、ファジィ論理モデルを含み、また、種々の独立パターンを提供する確率分類モデルを利用することができる。分類は、本明細書においては、優先順位のモデルを開発するのに利用される統計的回帰も含む。
図5に、本発明による方法を示す。説明を簡単にするために、本明細書におけるこの方法および他の方法を一連の動作として図示および記述するが、いくつかの動作は本明細書に図示および記述するのとは異なる順序で、かつ/または他の動作と同時に実施することができるので、本発明は動作の順序によって限定されないことを理解および認識されたい。例えば、別法として方法は、状態図などで、相互に関係付けられる一連の状態またはイベントとして表すこともできることは、当業者なら理解および認識するであろう。さらに、本発明により方法を実施するのに、例示する全ての動作が必要とはされない場合もある。加えて、以下におよび本明細書全体を通して開示する方法は、そのような方法をコンピュータに搬送および転送するのを容易にするために、製品に記憶することができることもさらに理解されたい。用語「製品」は、本明細書においては、任意のコンピュータ可読デバイス、キャリア、または媒体からアクセス可能な、コンピュータプログラムを包含するものとする。
次に図5を参照すると、要素型の型フローを容易にするための、コンピュータによって実施される方法が示されている。一般に参照番号502で、クエリ演算子を含むクエリ句の一部を受け取ることができる。クエリ演算子は、関連するメソッド呼出しにマッピングすることができ、メソッド呼出しは、引数(例えば関数、値、コレクションなど)を受け取ることができ、型付けされた結果(例えば照会可能型、数値型、順序付けされたコレクションなど)を返すことができる。メソッド呼出しは、クエリ演算子パターンに従って定義することができる。
参照番号504で、要素型を決定するためにソース型およびクエリ演算子を利用することができる。例えば、クエリ演算子パターンを形式化することができるので、クエリ演算子のパターンをソース型と共に利用して要素型を推論することができる。参照番号506で、前のクエリの要素型を、参照番号504で論じた利用する動作のためのソース型として採用することができる。これにより、要素型は、あるクエリ句から次のクエリ句に再帰的にフローすることができる。
前述のことを念頭に置けば、他の方法でプログラミング言語のクエリ機能を拡張するためにいくつかの特徴および/または態様を利用できることは認識および理解されるであろう。一例として、従来はAPI呼出しに関連していた合成的能力によってコンプリヘンションなどコンピュータベースおよび/または言語ベースの構造を提供するために、本明細書に展開する態様を効果的に利用することができる。これらおよび他の関連する概念についての記述を、図6に関して見ることができる。
次に図6に移ると、構成可能なクエリコンプリヘンションおよび/または拡張可能なクエリ式を容易にすることのできる、コンピュータによって実現されるシステム600のブロック図が提供されている。一般に、システム600は、初期化データ604を受け取ることのできる変形(transformation)コンポーネント602を含むことができる。図示のように、初期化データ604は、例示的なクエリ式606中の第1のクエリ句とすることができ、第1のクエリ句は通常、FROM句であるように制限される(例えば、第1のクエリ句のクエリ演算子がFROM演算子である)。初期化データ604は、コレクション(例えば図示のCustomers)、または式(例えば、図3に関して詳述したFROM演算子に関連する前述のTax=b.Price*0.088)を含むことができる。いずれの場合も、初期化データは制御変数を含むこともでき、制御変数は、適用例に応じて、コレクションに関連するか(例えばCが制御変数)、あるいは式に関連する(例えばTaxが制御変数)。
変形コンポーネント602はまた、クエリ式606によって特徴付けられるシーケンス中のクエリ句のセット608を受け取ることができる。クエリ句のセット608は空集合とすることができ、その場合は、後でより詳細に述べるように、クエリ式606は単一のクエリ句(例えば、初期化データ604として利用されるFROM句)からなることを理解されたい。初期化データ604で行えると同様に、変形コンポーネント602はまた、セット608中の各クエリ句につき、スコープ内制御変数を解決する(例えばポピュレートまたは変形する)ことができる。例えば、変形コンポーネント602は、利用可能な型に各クエリ句のクエリ演算子を適用することによって、セット608中の各クエリ句を、クエリ式606によって指示される順序で順番に処理することができる。
本発明によれば、クエリ句のセット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を導入し、この制御変数Oは、コンプリヘンションコンポーネント610がスコープ内にすることができる。したがって、次のクエリ句706は、スコープ内制御変数CとOの両方へのアクセスを有する。
おおむね上述したように、いくつかのクエリ句型はスコープ内変数に影響を及ぼすことができるが、他のクエリ句型(例えば、WHERE、ORDERBY、DISTINCTなど)は必ずしもそうではない。このため、クエリ句706および708はコレクションに影響を及ぼすことはできるが、スコープ内変数(例えばCおよびO)は変わらないものとすることができ、したがって、クエリ句708および710それぞれが変形コンポーネント602によって受け取られたとき、各句によってそれぞれこれらのスコープ内変数にアクセス可能とすることができる。
本発明の一態様によれば、コンプリヘンションコンポーネント610は、受け取ったクエリ句のタイプに基づいて、既存の制御変数をスコープ外にすることができる。SELECTクエリ句710は、この特徴の特質的な例示を提供する。クエリ句710は、制御変数CおよびOにエクスポーズされるが、SELECT句の特徴の1つは、現在のスコープ内制御変数を隠蔽し、新しいスコープ内制御変数(例えばName As StringおよびPrice As Int)を導入することとすることができる。クエリ句712には、これらの新しい制御変数NameおよびPriceを供給することができるが、クエリ句712は一般に、コンプリヘンションコンポーネント610がSELECT句710との関連でスコープ外にした前の制御変数(例えばCおよびO)にはアクセスできない。完全を期すために、少数の特徴に留意されたい。第1に、クエリ句710は、コンマで境界を定められた複合オペランドのもう1つの例を示している。
留意すべき第2の特徴は、WHERE句712がSELECT句710に続くことである。従来のクエリ言語は、SELECT、RETURN、または同様の演算子などの射影演算子を含むクエリ句が適用されると、クエリを終了する。このような従来のクエリ言語のユーザが射影後もクエリ演算を継続したい場合は、前のクエリの結果を参照できる新しいクエリを実装しなければならない。しかし、例えば本発明の合成的性質により、クエリ式606は複数のSELECT句を含むことができ、クエリ式606は、SELECT句が発生した後も継続することができる(例えば句712で示すように)。同様の趣旨で、前の章で触れたが、クエリ式606は2つのFROM句(例えば句702および704)も含むことを指摘しておくべきであり、これは従来のクエリ言語が可能にすることのできないさらに別の態様である。
明確な例によって示されてはいないが、クエリ式606はまた、他のクエリ句タイプを含むこともでき、特に、これらの他のクエリ句タイプの多くは、制御変数のスコープに影響を及ぼすことができる。例えば、RETURN句を受け取ると、コンプリヘンションコンポーネント610は、全ての制御変数をスコープ外にすることができる。別の例として、クエリ句のタイプに基づいて、コンプリヘンションコンポーネント610は、新しい制御変数を宣言およびスコープし(例えばスコープ内にし)、後続のクエリ句の特定のセットについて、既存の制御変数(例えば前のクエリ句のスコープ内制御変数)をスコープすることができる。GROUPBY、AGGREATE、その他は、このような挙動を容易にすることができ、それにより、既存の制御変数を、各GROUP演算子に及ぶAGGREGATEクエリ句の範囲にわたってスコープすることができる。
本発明の別の態様によれば、コンプリヘンションコンポーネント610は、受け取ったクエリ句のタイプに基づいて、全てのスコープ内制御変数のタプルに対するエイリアスを生成することができる。例えば、INTOクエリ句は、例えばコンプリヘンションコンポーネント610による、エイリアスの作成を容易にすることができるが、エイリアスはそれ自体が制御変数である必要はない。
引き続き図6および7を参照して、本発明の様々な追加の態様を強調することができる。いくつかの利点は、有効なクエリ式606の拡張可能性に関係する(例えば、ほぼ任意のタイプのほぼ任意の数のクエリ句を使用してクエリ式606を拡張することができる)が、別の利点は、クエリ式606がどんな時点でも終了できることとすることができる。したがって、クエリ式606は不定数のクエリ句を含む可能性を有するが、クエリ式606全体が、単一の制御変数を導入した後で終了する単一のクエリ句のみで構成されてもよい。したがって、完全かつ有効なクエリ式606の最も単純な例の1つは、以下のような初期化データ604のみを含むクエリ式606であり、クエリ式606が明示的なSELECT、RETURN、または他の最終クエリ演算子を含むことは必要とされない。
Figure 0005255000
説明として、変形コンポーネント602は、受け取った各クエリ句に暗黙的なSELECTまたはRETURNを付加するように構成されてよい。したがって、パイプラインに含まれる結果的なコレクションが所望の形状である限り、明示的なステートメントがこれらの中間結果を選択または返却する必要はない。そうではなく、クエリ式606が所与の句、例えば702〜708のいずれか1つの後で終了する場合、パイプライン中のコレクションを結果として出力することができ、出力のフォーマットは、スコープ内制御変数の数に基づいて推論することができる。
例えば、クエリ式606が句704〜708のいずれかの後で終了した場合(それぞれの場合に、2つのスコープ内制御変数CおよびOがある)、所望の出力が名前−値の対のコレクションとして存在するはずであると推論することができる。したがって、出力は、各制御変数のフィールドを有するタプルとすることができる。一方、句702の後など、スコープ内の制御変数が1つしかない場合は、クエリ式606の実施者は、フィールドcを有するタプルを返されることを通常は予想しないであろう。そうではなく、実施者は、顧客のコレクションを望む可能性が高いであろう。したがって、スコープ内制御変数が1つしかない場合は、出力は単に、コレクションの基礎の値とすることができる。
本発明の一態様によれば、FROM句によって導入される制御変数は、式ならびにコレクションに関連することができる。代表例として、上に紹介した以下のクエリ部分を考えてみる。
Figure 0005255000
第1のFROM句は、コレクションBooksに対する制御変数bを導入するが、制御変数bは、スコープ内にされ、次のクエリ句によってアクセス可能である。次のFROM句は、式(コレクションではなく)b.Price*0.088に関連する制御変数Taxを導入する。2つのFROM句のうちの後者により、式の結果として、アクセス可能な名前が提供される効果が得られる。この名前は、例えば後続のSELECT句までスコープ内に留まることのできる、制御変数taxによって参照することができる。この特徴は、クエリ内のプロシージャステートメントに類似すると考えることができ、クエリ内のプロシージャステートメントは、式の値が後で何回も利用されるかもしれないにもかかわらず値が1回計算されれば済むようにすることができ、値を再計算する必要はない。
本発明の別の態様によれば、単一のクエリ式606のコンテキスト内で、集合演算を利用することができる。従来のクエリ言語は通常、入力として単一のコレクションだけしか可能にしないが、変形コンポーネント602は、入力として2つのコレクションを受け取ることができる。例えば、変形コンポーネント602は、複数のコレクションを受け取るように構成されてよく、複数のコレクションに関連する制御変数がクエリ句のタイプ(例えばUNION句、INTERSECT句など)に従ってマージされた単一のコレクションを出力することができる。マージされた制御変数は、スコープ内にされ、関連する集合演算子の中を通り、次のクエリ句からアクセス可能にされてよく、したがってクエリ式606は継続することができる。制御変数は、一般に同じ型でなければならず、一般に同じ名前を有さなければならないが、当然、2つの異なるコレクションに関連するものとすることができる。
次に図8に移ると、クエリコンプリヘンションの構築を合成的方式で容易にするための、コンピュータによって実施される方法800が示されている。参照番号802で開始し、コレクション(または式)、およびコレクション(または式)に関連する制御変数を得ることができる。一般に、この得られたデータは、クエリ式の第1のクエリ句の産物であり、第1のクエリ句は、普通はFROM句である。参照番号804で、クエリ式に含まれるクエリ句のセットからの現在のクエリ句を受け取ることができる。コンプリヘンションがモノリシックであることを必要とする従来の言語とは異なり、現在のクエリ句に対して、あるいは大抵はクエリ式全体に対して、構文上の順序付け制限を課す必要はないことを理解されたい。
参照番号806で、現在のクエリ句に従ってコレクションを修正することができる。単純に言えば、入力として受け取ったコレクションを、現在のクエリ句に関連するクエリ演算子のガイドラインに基づいて変形することができる。現在のクエリ句は、モノリシックな構文テンプレートに基づいてではなく、現在のクエリ句に関連する予想される型に従って評価できることを理解されたい。次に、参照番号808で、修正されたコレクションを次のクエリ句に渡すことができる。したがって、現在のクエリ句の出力を、次のクエリ句の入力として利用することができる。
参照番号810で、現在のクエリ句に基づいて制御変数のスコープを決定することができる。例えば、いくつかの型のクエリ句は、既存の制御変数に対するどんな変更も容易にしないが、他のクエリ句は、新しい制御変数の導入を容易にすることができ(場合によっては、次のクエリ句の特定の連続に対してのみ)、さらに他のクエリ句は、既存の制御変数をスコープ外にするとともに新しい制御変数を導入(オプションで)するのを容易にすることができる。参照番号812で、現在のクエリ句に対するスコープ内制御変数へのアクセスを、次のクエリ句に提供することができる。
次に図9を参照すると、開示したアーキテクチャを実行するように動作可能な例示的なコンピュータシステムのブロック図が示されている。本発明の様々な態様に関する追加の文脈を提供するために、図9および後続の考察では、本発明の様々な態様を実施できる適切なコンピューティング環境900の簡単かつ一般的な記述を提供するものとする。加えて、1つまたは複数のコンピュータ上で稼動することのできるコンピュータ実行可能命令の一般的な文脈で本発明を上述したが、本発明を他のプログラムモジュールと共に、かつ/またはハードウェアとソフトウェアの組合せとして実施することもできることは、当業者なら理解するであろう。
一般に、プログラムモジュールは、特定のタスクを実施するか特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造などを含む。さらに、本発明の方法は他のコンピュータシステム構成で実施することもできることは、当業者なら理解するであろう。これら他のコンピュータシステム構成は、シングルプロセッサまたはマルチプロセッサのコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、ならびにパーソナルコンピュータ、ハンドヘルドコンピューティングデバイス、マイクロプロセッサベースのまたはプログラム可能な消費者電子機器などを含み、これらはそれぞれ、1つまたは複数の関連するデバイスに動作可能に結合させることができる。
例示した本発明の態様はまた、通信ネットワークを介してリンクされたリモート処理デバイスによっていくつかのタスクが実施される分散コンピューティング環境で実施してもよい。分散コンピューティング環境では、プログラムモジュールは、ローカルとリモートの両方のメモリ記憶デバイス中に位置することができる。
コンピュータは通常、様々なコンピュータ可読媒体を備える。コンピュータ可読媒体は、コンピュータによってアクセスできる任意の利用可能な媒体とすることができ、揮発性と不揮発性の媒体、取外し可能と取外し不可能の媒体の両方を含む。限定ではなく例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実現された、揮発性と不揮発性、取外し可能と取外し不可能の両方の媒体を含むことができる。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリ、または他のメモリ技術、CD−ROM、ディジタル多用途ディスク(DVD)、または他の光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶デバイス、あるいは、所望の情報を記憶するのに使用できコンピュータによってアクセスできる他の任意の媒体を含むが、これらに限定されない。
通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他のトランスポート機構などの被変調データ信号に組み入れるものであり、任意の情報送達媒体を含む。用語「被変調データ信号」は、信号中の情報を符号化するようにしてその特性の1つまたは複数が設定または変更される信号を意味する。限定ではなく例として、通信媒体は、配線式ネットワークや直接配線式接続などの配線式媒体と、音響、無線周波数、赤外線などのワイヤレス媒体および他のワイヤレス媒体とを含む。以上のいずれかの組合せも、コンピュータ可読媒体の範囲に含めるべきである。
再び図9を参照すると、本発明の様々な態様を実施するための例示的な環境900はコンピュータ902を含み、コンピュータ902は、処理装置904、システムメモリ906、およびシステムバス908を備える。システムバス908は、限定しないがシステムメモリ906を含めたシステムコンポーネントを、処理装置904に結合する。処理装置904は、様々な市販のプロセッサのいずれかとすることができる。デュアルマイクロプロセッサおよび他のマルチマイクロプロセッサアーキテクチャを、処理装置904として利用してもよい。
システムバス908は、いくつかのタイプのバス構造のいずれかとすることができ、これらのバス構造は、様々な市販のバスアーキテクチャのいずれかを使用してメモリバス(メモリコントローラありまたはなし)、周辺バス、およびローカルバスにさらに相互接続することができる。システムメモリ906は、読取専用メモリ(ROM)912およびランダムアクセスメモリ(RAM)910を含む。ROM、EPROM、EEPROMなどの不揮発性メモリ912にはBIOS(basic input/output system)が記憶され、このBIOSは、起動中などにコンピュータ902内の要素間で情報を転送するのを助ける基本ルーチンを含む。RAM910は、データをキャッシュするためのスタティックRAMなどの高速RAMを含むこともできる。
コンピュータ902はさらに、内部ハードディスクドライブ(HDD)914(例えばEIDE、SATA)を備え、この内部ハードディスクドライブ914はまた、適切なシャーシ(図示せず)中で外部使用されるように構成されてもよい。コンピュータ902はさらに、磁気フロッピーディスクドライブ(FDD)916(例えば取外し可能ディスケット918に対して読取りまたは書込みを行うため)、および光学ディスクドライブ920(例えばCD−ROM922の読取り、またはDVDなど他の大容量光学媒体に対して読取りまたは書込みを行うため)を備える。ハードディスクドライブ914、磁気ディスクドライブ916、および光学ディスクドライブ920は、ハードディスクドライブインタフェース924、磁気ディスクドライブインタフェース926、および光学ドライブインタフェース928によってそれぞれシステムバス908に接続することができる。外部ドライブ実装形態の場合のインタフェース924は、ユニバーサルシリアルバス(USB)とIEEE1394インタフェースとのうちの少なくとも一方または両方の技術を含む。他の外部ドライブ接続技術も、本発明の企図の内にある。
ドライブおよびそれらに関連するコンピュータ記憶媒体は、データ、データ構造、コンピュータ実行可能命令などの不揮発性記憶を提供する。コンピュータ902の場合、ドライブおよび媒体は、適切なディジタルフォーマットの任意のデータの記憶に対応する。上記のコンピュータ可読媒体の記述では、HDD、取外し可能磁気ディスケット、およびCDやDVDなどの取外し可能光学媒体に言及しているが、zipドライブ、磁気カセット、フラッシュメモリカード、カートリッジなど、コンピュータによって読取り可能な他のタイプの媒体を例示的な動作環境で使用してもよいこと、さらに、このような媒体はどれも、本発明の方法を実施するためのコンピュータ実行可能命令を含んでよいことは、当業者には理解されるはずである。
ドライブおよびRAM910には、オペレーティングシステム930、1つまたは複数のアプリケーションプログラム932、他のプログラムモジュール934、およびプログラムデータ936を含めて、いくつかのプログラムモジュールを記憶することができる。RAM910には、オペレーティングシステム、アプリケーション、モジュール、および/またはデータの全部または一部をキャッシュすることもできる。本発明は、様々な市販のオペレーティングシステム、またはオペレーティングシステムの組合せを使用して実施できることを理解されたい。
ユーザは、1つまたは複数の配線式/ワイヤレス入力デバイス、例えばキーボード938や、マウス940などのポインティングデバイスを介して、コンピュータ902にコマンドおよび情報を入力することができる。他の入力デバイス(図示せず)は、マイクロホン、赤外線リモートコントロール、ジョイスティック、ゲームパッド、スタイラスペン、タッチスクリーンなどを含んでよい。これらおよび他の入力デバイスは、システムバス908に結合される入力デバイスインタフェース942を介して処理装置904に接続されることが多いが、パラレルポート、IEEE1394シリアルポート、ゲームポート、USBポート、赤外線インタフェースなど、他のインタフェースで接続することもできる。
モニタ944または他のタイプの表示デバイスも、ビデオアダプタ946などのインタフェースを介してシステムバス908に接続される。モニタ944に加えて、コンピュータは通常、スピーカやプリンタなど、他の周辺出力デバイス(図示せず)も備える。
コンピュータ902は、リモートコンピュータ948など1つまたは複数のリモートコンピュータへの配線式および/またはワイヤレス通信を介した論理接続を用いて、ネットワーク化された環境で動作することができる。リモートコンピュータ948は、ワークステーション、サーバコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサベースの娯楽機器、ピアデバイス、または他の一般的なネットワークノードとすることができ、通常は、コンピュータ902に関して述べた要素の多くまたは全てを備えるが、簡単にするためにメモリ/記憶デバイス950のみが示してある。図示の論理接続は、ローカルエリアネットワーク(LAN)952、および/またはより大きいネットワーク、例えばワイドエリアネットワーク(WAN)954への、配線式/ワイヤレス接続性を含む。このようなLANおよびWANネットワーキング環境は、オフィスおよび会社で一般的であり、イントラネットなど企業全体のコンピュータネットワークを容易にするが、これらのネットワークは全て、大域的な通信ネットワーク、例えばインターネットに接続することができる。
LANネットワーキング環境で使用されるときは、コンピュータ902は、配線式および/またはワイヤレス通信ネットワークインタフェースあるいはアダプタ956を介して、ローカルネットワーク952に接続される。アダプタ956は、LAN952への配線式またはワイヤレス通信を容易にすることができ、LAN952上には、ワイヤレスアダプタ956と通信するためのワイヤレスアクセスポイントが配置されてもよい。
WANネットワーキング環境で使用される場合、コンピュータ902は、モデム958を備えることができ、あるいは、WAN954上の通信サーバに接続され、あるいは、インターネットなどによってWAN954を介した通信を確立するための他の手段を有する。モデム958は内蔵または外付けとすることができ、また配線式またはワイヤレスデバイスとすることができ、シリアルポートインタフェース942を介してシステムバス908に接続される。ネットワーク化された環境では、コンピュータ902に関して示したプログラムモジュールまたはその一部をリモートのメモリ/記憶デバイス950に記憶することができる。図示のネットワーク接続は例であり、コンピュータ間で通信リンクを確立する他の手段を使用してもよいことは理解されるであろう。
コンピュータ902は、ワイヤレス通信において動作可能に配置された任意のワイヤレスデバイスまたはエンティティ、例えばプリンタ、スキャナ、デスクトップおよび/またはポータブルコンピュータ、ポータブルデータアシスタント、通信衛星、ワイヤレスに検出可能なタグに関連する任意の機器または場所(例えばキオスク、新聞売店、手洗所)、ならびに電話機と通信するように動作可能である。これは、少なくともWi−FiおよびBluetooth(商標)ワイヤレス技術を含む。したがって、通信は、従来のネットワークと同様に事前定義済みの構造とすることもでき、あるいは単に、少なくとも2つのデバイス間のその場限りの通信とすることもできる。
Wi−Fiまたはワイヤレスフィデリティ(Wireless Fidelity)は、家庭のソファ、ホテルの部屋のベッド、または職場の会議室からワイヤなしでインターネットに接続するのを可能にする。Wi−Fiは、例えばコンピュータなどのデバイスが室内でも室外でも、すなわち基地局の範囲内のどこででもデータを送受信できるようにする、セルホン中で使用される技術に類似するワイヤレス技術である。Wi−Fiネットワークは、IEEE802.11(a、b、cなど)と呼ばれる無線技術を使用して、安全かつ信頼性があり高速なワイヤレス接続性を提供する。Wi−Fiネットワークを使用して、コンピュータを相互に、インターネットに、および配線式ネットワーク(IEEE802.3またはEthernetを使用する)に接続することができる。Wi−Fiネットワークは、免許不要の2.4および5GHz無線帯域で、例えば11Mbps(802.11a)または54Mbps(802.11b)のデータレートで、あるいは、両方の帯域を含む製品と共に(デュアルバンド)動作し、したがって、ネットワークは、多くの職場で使用される基本的な9BaseT配線式Ethernetネットワークと同様の実世界性能を提供することができる。
次に図10を参照すると、開示したアーキテクチャを実行するように動作可能な例示的なコンピュータコンパイルシステムの概略ブロック図が示されている。システム1000は、1つまたは複数のクライアント1002を含む。クライアント1002は、ハードウェアおよび/またはソフトウェア(例えばスレッド、プロセス、コンピューティングデバイス)とすることができる。クライアント1002は、例えば、本発明を利用することによって、クッキー(複数可)および/または関連するコンテキスト情報を収容することができる。
システム1000は、1つまたは複数のサーバ1004も含む。サーバ1004もまた、ハードウェアおよび/またはソフトウェア(例えばスレッド、プロセス、コンピューティングデバイス)とすることができる。サーバ1004は、例えば、本発明を利用することによって、変形を実施するためのスレッドを収容することができる。クライアント1002とサーバ1004との間の可能な通信の1つは、2つ以上のコンピュータプロセス間で伝送されるように適合されたデータパケットの形とすることができる。データパケットは、例えば、クッキーおよび/または関連するコンテキスト情報を含むことができる。システム1000は、クライアント1002とサーバ1004との間の通信を容易にするために利用することのできる通信フレームワーク1006(例えば、インターネットなどの大域的な通信ネットワーク)を含む。
通信は、配線式(光ファイバを含む)および/またはワイヤレス技術を介して容易にすることができる。クライアント1002は、クライアント1002にとってローカルな情報(例えばクッキー(複数可)および/または関連するコンテキスト情報)を記憶するのに利用することのできる1つまたは複数のクライアントデータストア1008に動作可能に接続される。同様に、サーバ1004は、サーバ1004にとってローカルな情報を記憶するのに利用することのできる1つまたは複数のサーバデータストア1010に動作可能に接続される。
上述したことは、様々な実施形態の例を含む。当然、実施形態について述べるために、コンポーネントまたは方法の考えられるあらゆる組合せを記述することは不可能だが、さらに多くの組合せおよび置換が可能であることは当業者なら理解するであろう。したがって、この詳細な説明は、添付の特許請求の趣旨および範囲の内に入るあらゆる改変、修正、および変形を包含するものとする。
特に、前述のコンポーネント、デバイス、回路、システムなどによって実施される様々な機能に関して、このようなコンポーネントを記述するのに使用される用語(「手段」への言及を含む)は、開示した構造に対して構造的に等価でなくても、本明細書に例示した実施形態の例示的な態様における機能を実施する述べたコンポーネントの指定の機能を実施する任意のコンポーネント(例えば機能的均等物)に、特に指示がない限り対応するものとする。これに関して、実施形態は、システム、ならびに、様々な方法の動作および/またはイベントを実施するためのコンピュータ実行可能命令を有するコンピュータ可読媒体を含むこともまた理解されるであろう。
加えて、特定の特徴をいくつかの実装形態のうちの1つのみに関して開示した場合もあるが、このような特徴は、いずれか所与のまたは特定の適用例に望まれ有利であろうように、他の実装形態の他の1つまたは複数の特徴と組み合わせてもよい。さらに、詳細な説明または特許請求の範囲で用語「include(含む、備える)」および「including」ならびにその異形が使用される限り、これらの用語は、用語「comprising(含む、備える)」と同様にして包含的とする。

Claims (18)

  1. コンピュータシステムにおいてクエリ式を処理する方法であって、該方法は、前記コンピュータシステムに記憶されたコンピュータ実行可能命令を前記コンピュータシステムが実行することによって実施され、
    前記クエリ式にアクセスすることであって、前記クエリ式は複数のクエリ句を含み、前記複数のクエリ句は、次のクエリ句にリンクした少なくとも第1のクエリ句を含み、前記複数のクエリ句の順序は、該順序がクエリコンプリヘンションの基礎のコンピューティング言語とは独立するように、該クエリコンプリヘンション内で定義され、
    前記第1のクエリ句は、照会可能ソース型、第1のクエリ演算子、および前記ソース型の要素型を含み、前記要素型は制御変数に関連し、前記制御変数は前記クエリ演算子によって決定される関連するスコープを有し、前記照会可能ソース型は、照会されるソースデータのタイプを示し、前記要素型は、前記第1のクエリ句の結果の要素型を示し、前記クエリ演算子は、クエリ演算子パターンに従って定義されたメソッドにマッピングし、
    前記次のクエリ句は、前記第1のクエリ句の結果に適用される次の要素型および次のクエリ演算子を含み、前記次の要素型は前記次のクエリ句の結果の要素型を示し、前記次のクエリ演算子は次のクエリ演算子パターンに従って定義された次のメソッドにマッピングすること、
    前記照会可能ソース型に基づいて前記ソースデータ内から前記要素型の1組の要素を得るために、前記第1のクエリ句を評価することであって、前記ソースデータ上の前記クエリ演算子を実装するためのメソッドを呼び出すことを含むこと、
    前記次のクエリ句の次のソース型が前記要素型であることを推論することであって、前記推論は、前記クエリ演算子を考慮した前記ソース型に基づき、前記クエリコンプリヘンション全体を変換する必要なしに、リアルタイムで実施されること、
    前記1組の要素を前記次のクエリへ渡すことであって、前記関連する制御変数は、前記次のクエリ句が前記制御変数の前記スコープをサポートする場合に渡されること、
    前記次のクエリ句への前記推論した要素型に基づいて、インクリメンタルにコンテキスト情報を提供すること、および、
    前記次のソース型および前記コンテキスト情報に基づいて前記1組の要素内から前記次の要素型の次の1組の要素を得るために、前記次のクエリ句を評価することであって、前記1組の要素上の前記次のクエリ演算子を実装するために前記次のメソッドを呼び出すことを含むこと
    を含むことを特徴とする方法。
  2. 前記第1のクエリ演算子はカルテシアン積構造であり、前記要素型は、前記ソース型に関する全てのスコープ内制御変数の集約である匿名型であることを特徴とする請求項1に記載の方法。
  3. 前記次のクエリ演算子パターンは、前記ソースデータの引数を含み、前記要素型の照会可能型を返す関数を引数として受け取るように構成された、射影またはマッピングクエリ演算子を含むことを特徴とする請求項1に記載の方法。
  4. 前記のクエリ演算子パターンは、前記要素型の引数を含み、前記要素型の照会可能型を返す関数を引数として受け取るように構成された、フィルタリングまたは制限クエリ演算子を含むことを特徴とする請求項1に記載の方法。
  5. 前記のクエリ演算子パターンは、前記要素型の引数を含み、前記要素型の順序付けされたコレクションを返す関数を引数として受け取るように構成された、ソートまたは順序付けクエリ演算子を含むことを特徴とする請求項1に記載の方法。
  6. 前記次のクエリ演算子パターンは、前記要素型の照会可能型を返すように構成された重複除去クエリ演算子を含むことを特徴とする請求項1に記載の方法。
  7. 前記次のクエリ演算子パターンは、前記ソース型としての前記要素型のコレクションを引数として受け取るように構成され、前記要素型の照会可能型を返す、集合クエリ演算子を含むことを特徴とする請求項1に記載の方法。
  8. 前記次のクエリ演算子パターンは、前記要素型の引数を含み、前記要素型の照会可能型を返す関数を引数として受け取るように構成された、条件付き選択またはフィルタリングクエリ演算子を含むことを特徴とする請求項1に記載の方法。
  9. 前記次のクエリ演算子パターンは、前記要素型の引数を含み、数値型を返す関数を引数として受け取るように構成された、集約クエリ演算子を含むことを特徴とする請求項1に記載の方法。
  10. 前記次のクエリ演算子パターンは、前記要素型の引数を含み、前記次の要素型の照会可能型を返す関数を引数として受け取るように構成された、集約クエリ演算子を含むことを特徴とする請求項1に記載の方法。
  11. 前記次のクエリ演算子パターンは、前記要素型の引数を含み、ブールに暗黙的に変換可能な型を返す関数を引数として受け取るように構成された、マッチングクエリ演算子を含むことを特徴とする請求項1に記載の方法。
  12. 前記次のクエリ演算子パターンは、前記要素型の引数と追加の要素型の引数とを含み、前記次の要素型の照会可能型を返す関数を引数として受け取るように構成された、結合クエリ演算子を含むことを特徴とする請求項1に記載の方法。
  13. 前記次のクエリ演算子パターンは、前記要素型の引数と追加の要素型のコレクションである引数とを含み、前記次の要素型の照会可能型を返す関数を引数として受け取るように構成された、ネストされた結合クエリ演算子を含むことを特徴とする請求項1に記載の方法。
  14. 前記次のクエリ演算子パターンは、型Kの引数と前記要素型のコレクションである引数とを含み、前記次の要素型の照会可能型を返す関数を引数として受け取るグループ化クエリ演算子を含み、型Kはキーであることを特徴とする請求項1に記載の方法。
  15. 前記クエリ演算子を考慮した前記ソース型に基づき、前記次のクエリ句の次のソース型が前記要素型であることを推論することは、コンテキストコンポーネントが、前記次のソース型が前記要素型であることをリアルタイムで推論することを含むことを特徴とする請求項1に記載の方法。
  16. 前記コンテキストコンポーネントは、前記推論した要素型に基づいてインクリメンタルにコンテキスト情報を提供することを特徴とする請求項15に記載の方法。
  17. クエリ式を処理する方法をコンピュータシステムに実行させるコンピュータプログラムであって、前記方法は、
    前記クエリ式にアクセスすることであって、前記クエリ式は複数のクエリ句を含み、前記複数のクエリ句は、次のクエリ句にリンクした少なくとも第1のクエリ句を含み、前記複数のクエリ句の順序は、該順序がクエリコンプリヘンションの基礎のコンピューティング言語とは独立するように、該クエリコンプリヘンション内で定義され、
    前記第1のクエリ句は、照会可能ソース型、第1のクエリ演算子、および前記ソース型の要素型を含み、前記要素型は制御変数に関連し、前記制御変数は前記クエリ演算子によって決定される関連するスコープを有し、前記照会可能ソース型は、照会されるソースデータのタイプを示し、前記要素型は、前記第1のクエリ句の結果の要素型を示し、前記クエリ演算子は、クエリ演算子パターンに従って定義されたメソッドにマッピングし、
    前記次のクエリ句は、前記第1のクエリ句の結果に適用される次の要素型および次のクエリ演算子を含み、前記次の要素型は前記次のクエリ句の結果の要素型を示し、前記次のクエリ演算子は次のクエリ演算子パターンに従って定義された次のメソッドにマッピングすること、
    前記照会可能ソース型に基づいて前記ソースデータ内から前記要素型の1組の要素を得るために、前記第1のクエリ句を評価することであって、前記ソースデータ上の前記クエリ演算子を実装するためのメソッドを呼び出すことを含むこと、
    前記次のクエリ句の次のソース型が前記要素型であることを推論することであって、前記推論は、前記クエリ演算子を考慮した前記ソース型に基づき、前記クエリコンプリヘンション全体を変換する必要なしに、リアルタイムで実施されること、
    前記1組の要素を前記次のクエリへ渡すことであって、前記関連する制御変数は、前記次のクエリ句が前記制御変数の前記スコープをサポートする場合に渡されること、
    前記次のクエリ句への前記推論した要素型に基づいて、インクリメンタルにコンテキスト情報を提供すること、および、
    前記次のソース型および前記コンテキスト情報に基づいて前記1組の要素内から前記次の要素型の次の1組の要素を得るために、前記次のクエリ句を評価することであって、前記1組の要素上の前記次のクエリ演算子を実装するために前記次のメソッドを呼び出すことを含むこと、
    を含むことを特徴とするコンピュータプログラム。
  18. クエリ式を処理するユーザインタフェースを備えたコンピュータシステムであって、前記ユーザインターフェースは、
    関係データベースをクエリする前記クエリ式にアクセスすることであって、前記クエリ式は複数のクエリ句を含み、前記複数のクエリ句は、次のクエリ句が続く少なくとも第1のクエリ句を含み、前記複数のクエリ句の順序は、該順序がクエリコンプリヘンションの基礎のコンピューティング言語とは独立するように、該クエリコンプリヘンション内で定義され、
    前記第1のクエリ句は、照会可能ソース型、第1のクエリ演算子、および前記ソース型の要素型を含み、前記要素型は制御変数に関連し、前記制御変数は前記クエリ演算子によって決定される関連するスコープを有し、前記照会可能ソース型は、照会されるソースデータのタイプを示し、前記要素型は、前記第1のクエリ句の結果の要素型を示し、前記クエリ演算子は、クエリ演算子パターンに従って定義されたメソッドにマッピングし、
    前記次のクエリ句は、前記第1のクエリ句の結果に適用される次の要素型および次のクエリ演算子を含み、前記次の要素型は前記次のクエリ句の結果の要素型を示し、前記次のクエリ演算子は次のクエリ演算子パターンに従って定義された次のメソッドにマッピングし、
    前記照会可能ソース型に基づいて前記ソースデータ内から前記要素型の1組の要素を得るために、前記第1のクエリ句を評価することであって、前記ソースデータ上の前記クエリ演算子を実装するためのメソッドを呼び出すことを含み、
    前記次のクエリ句の次のソース型が前記要素型であることを推論することであって、前記推論は、前記クエリ演算子を考慮した前記ソース型に基づき、前記クエリコンプリヘンション全体を変換する必要なしに、リアルタイムで実施され、
    前記1組の要素を前記次のクエリへ渡すことであって、前記関連する制御変数は、前記次のクエリ句が前記制御変数の前記スコープをサポートする場合に渡され、
    前記次のクエリ句への前記推論した要素型に基づいて、インクリメンタルにコンテキスト情報を提供し、
    前記次のソース型および前記コンテキスト情報に基づいて前記1組の要素内から前記次の要素型の次の1組の要素を得るために、前記次のクエリ句を評価することであって、前記1組の要素上の前記次のクエリ演算子を実装するために前記次のメソッドを呼び出すことを含む
    ように構成されたことを特徴とするコンピュータシステム。
JP2009549210A 2007-02-05 2008-02-05 要素型の型フローを可能にするためのクエリパターン Expired - Fee Related JP5255000B2 (ja)

Applications Claiming Priority (3)

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

Publications (3)

Publication Number Publication Date
JP2010518516A JP2010518516A (ja) 2010-05-27
JP2010518516A5 JP2010518516A5 (ja) 2011-03-24
JP5255000B2 true JP5255000B2 (ja) 2013-08-07

Family

ID=39677026

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009549210A Expired - Fee Related JP5255000B2 (ja) 2007-02-05 2008-02-05 要素型の型フローを可能にするためのクエリパターン

Country Status (6)

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

Families Citing this family (53)

* 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
JP4546246B2 (ja) 2002-10-05 2010-09-15 デジタル ファウンテン, インコーポレイテッド 連鎖的暗号化反応の系統的記号化および復号化
CN101686107B (zh) 2006-02-13 2014-08-13 数字方敦股份有限公司 使用可变fec开销和保护周期的流送和缓冲
WO2007134196A2 (en) 2006-05-10 2007-11-22 Digital Fountain, Inc. Code generator and decoder using hybrid codes
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
US9380096B2 (en) 2006-06-09 2016-06-28 Qualcomm Incorporated Enhanced block-request streaming system for handling low-latency streaming
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
US9178535B2 (en) 2006-06-09 2015-11-03 Digital Fountain, Inc. Dynamic stream interleaving and sub-stream based delivery
US8122006B2 (en) * 2007-05-29 2012-02-21 Oracle International Corporation Event processing query language including retain clause
US20090070786A1 (en) * 2007-09-11 2009-03-12 Bea Systems, Inc. Xml-based event processing networks for event server
EP2203836A4 (en) 2007-09-12 2014-11-05 Digital Fountain Inc GENERATING AND COMMUNICATING SOURCE IDENTIFICATION INFORMATION TO ENABLE RELIABLE COMMUNICATIONS
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
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
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
EP2580692B1 (en) * 2010-06-10 2019-02-13 EntIT Software LLC Query pipeline
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
US8806050B2 (en) 2010-08-10 2014-08-12 Qualcomm Incorporated Manifest file updates 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
EP2795484A4 (en) * 2011-12-23 2015-11-11 Univ Arizona State METHOD OF MICRO-SPECIALIZATION IN DATABASE MANAGEMENT SYSTEMS
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
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
KR101741484B1 (ko) * 2012-04-26 2017-05-30 퀄컴 인코포레이티드 저-레이턴시 스트림을 처리하기 위한 개선된 블록-요청 스트리밍 시스템
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
WO2016161130A1 (en) * 2015-04-02 2016-10-06 Dataware Ventures, Llc Field specialization systems and methods for improving program performance
CN108369500A (zh) * 2015-12-14 2018-08-03 数据仓库投资有限公司 扩展字段专业化
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
US10733184B2 (en) 2016-11-29 2020-08-04 Sap Se Query planning and execution with source and sink operators
US10885032B2 (en) 2016-11-29 2021-01-05 Sap Se Query execution pipelining with shared states for query operators
US10372707B2 (en) 2016-11-29 2019-08-06 Sap Se Query execution pipelining with pump operators
US10521426B2 (en) 2016-11-29 2019-12-31 Sap Se Query plan generation for split table query operations
US11016973B2 (en) 2016-11-29 2021-05-25 Sap Se Query plan execution engine
US10558661B2 (en) 2016-11-29 2020-02-11 Sap Se Query plan generation based on table adapter
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
US12045653B2 (en) 2017-06-22 2024-07-23 Dataware Ventures, Llc Field specialization to reduce memory-access stalls and allocation requests in data-intensive applications
US11138230B2 (en) * 2018-03-26 2021-10-05 Mcafee, Llc Methods, apparatus, and systems to aggregate partitioned computer database data
US10866831B2 (en) 2018-06-15 2020-12-15 Sap Se Distributed execution of data processing pipelines
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
US11275485B2 (en) 2018-06-15 2022-03-15 Sap Se Data processing pipeline engine
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 联想(北京)有限公司 动态结构化查询语言语句的构造方法

Also Published As

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

Similar Documents

Publication Publication Date Title
JP5255000B2 (ja) 要素型の型フローを可能にするためのクエリパターン
Armbrust et al. Spark sql: Relational data processing in spark
US9767147B2 (en) Method of converting query plans to native code
US8239847B2 (en) General distributed reduction for data parallel computing
US7865533B2 (en) Compositional query comprehensions
US11693856B2 (en) Query processing in a polystore
Syme et al. Expert F♯ 3.0
US20080183725A1 (en) Metadata service employing common data model
US20100088672A1 (en) Compact syntax for data scripting language
JP2005018767A (ja) クエリオプティマイザのシステムおよび方法
BRPI0708827A2 (pt) linguagem de consulta extensÍvel com suporte para tipos de dados ricos
He et al. Query processing on tensor computation runtimes
JP2015062109A (ja) データをモデリングするためのシステム及び方法
EP2622513A1 (en) Query constraint encoding with type-based state machine
JP5113157B2 (ja) データの記憶及び検索を行うためのシステム及び方法
US9098546B2 (en) Advanced business query language
Sevenich et al. Using domain-specific languages for analytic graph databases
US11941001B2 (en) Optimizing cursor loops in relational database systems using custom aggregates
Alonso et al. Towards a polyglot data access layer for a low-code application development platform
Dörre et al. Modeling and optimizing MapReduce programs
WO2010151759A2 (en) Incremental query evaluation
Rompf et al. A SQL to C compiler in 500 lines of code
Paszke et al. Infix-Extensible Record Types for Tabular Data
Veinhardt Latták Schema Inference for NoSQL Databases
Vernoux Design of an intermediate representation for query languages

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110204

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121108

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121116

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20121221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130218

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130319

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130418

R150 Certificate of patent or registration of utility model

Ref document number: 5255000

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160426

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees