(57)【要約】  本発明では、リレーショナルデータベースサーバにテーブル値関数（ＴＶＦ）を実装するための効率的で高速なフレームワークについて説明する。このフレームワークは、望ましい拡張特性を備え、クエリプロセッサにおける最適化のインフラと緊密に統合することによりパフォーマンス低下を最小限に抑えることができる。本発明では、さらに、共通言語ランタイム（ＣＬＲ）などの管理実行環境（ＭＥＥ）はデータベースエンジンのロジックをユーザ提供コードで効率よく動的に拡張することができる。
2007529820.tif 000002
【特許請求の範囲】
【請求項１】
テーブル値関数を呼び出して結果を供給するクエリを処理する方法であって、
前記テーブル値関数の機能を記述する情報クラスを生成することと、
１組の少なくとも１つのバインディング質問により前記情報クラスにクエリを実行することと、
１組の少なくとも１つの最適化質問により前記情報クラスにクエリを実行することと、
前記１組のバインディング質問および前記１組の最適化質問に対する応答として供給される情報に従って前記クエリを実行することとを含むことを特徴とする方法。
【請求項２】
前記クエリを実行することは、
前記テーブル値関数に対応する実行クラスを生成することと、
前記実行クラスから出力として１組のデータテーブル行を要求することと、
前記実行クラスから前記要求され行を受け取ることとを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記テーブル値関数により返された列の数、前記テーブル値関数により返された列の名前、および前記テーブル値関数により返された列の型のうちの１つを含む１組のバインディング質問により前記情報クラスにクエリを実行することを含むことを特徴とする請求項１に記載の方法。
【請求項４】
１組の列について行がソートされた順序でグループ化されるかどうか、列が一意的なキー列であるかどうか、前記テーブル値関数が決定論的かどうか、および前記テーブル値関数が外部データソースにアクセスするかどうかのうちの１つを含む１組の最適化質問により前記情報クラスにクエリを実行することを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記テーブル値関数の結果に関する統計情報の要求を含む１組の最適化質問により前記情報クラスにクエリを実行することを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記テーブル値関数の呼び出し毎に返される行の数、ある範囲のパラメータ値について返される行の数、１組の列について返される重複値の数、および前記テーブル値関数から返される値の分布を記述するヒストグラムのうちの１つを含む統計情報の要求を含む１組の最適化質問により前記情報クラスにクエリを実行することを含むことを特徴とする請求項５に記載の方法。
【請求項７】
さらに、管理実行環境内で生成されたユーザ定義クラスから前記情報クラスを生成することを含むことを特徴とする請求項１に記載の方法。
【請求項８】
さらに、前記１組のバインディング質問に対する応答として供給される情報に従って前記クエリをバインドすることを含むことを特徴とする請求項１に記載の方法。
【請求項９】
さらに、前記１組の最適化質問に対する応答として供給される情報に従って前記クエリを最適化することを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記クエリを実行することは、
前記テーブル値関数の前記機能の前記有効性を検証することと、
前記テーブル値関数の前記機能が無効である場合、エラーメッセージを生成し、前記テーブル値関数が予期された出力を供給しないことを示すことを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
さらに、前記テーブル値関数の前記機能が無効である場合、前記クエリの前記実行を中止することを含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
さらに、前記テーブル値関数を呼び出して、階層型クエリ演算をサポートする計算結果を供給することを含むことを特徴とする請求項１に記載の方法。
【請求項１３】
さらに、前記テーブル値関数を呼び出して、データベースシステム内のファイルシステムをモデル化するためディレクトリパスの変換を行うことを含むことを特徴とする請求項１に記載の方法。
【請求項１４】
さらに、前記テーブル値関数を呼び出して、リモートデータソースからの結果を供給することを含むことを特徴とする請求項１に記載の方法。
【請求項１５】
テーブル値関数の拡張可能生成のための方法であって、
前記テーブル値関数の機能を記述するクラスをユーザが定義できるようにするインターフェースを提供すること、
前記ユーザ定義クラスをバイナリデータファイルにコンパイルすることと、
前記バイナリデータファイルに従ってテーブル値関数を生成するデータベースサーバに前記バイナリデータファイルをサブミットすることとを含むことを特徴とする方法。
【請求項１６】
管理実行環境内で前記インターフェースを提供することを含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
さらに、前記テーブル値関数を呼び出して結果を供給するクエリを実行することを含むことを特徴とする請求項１５に記載の方法。
【請求項１８】
前記テーブル値関数のクエリバインディングおよびクエリ最適化の機能を記述するクラスをユーザが定義できるようにするインターフェースを提供することを含むことを特徴とする請求項１５に記載の方法。
【請求項１９】
テーブル値関数を呼び出して結果を供給するクエリを効率的に処理する方法であって、
前記クエリを実行するために使用される関係演算を識別することと、
前記関係演算の前記実行を前記テーブル値関数の前記実行にプッシュすることと、
前記プッシュされた関係演算を含む前記テーブル値関数を呼び出すことにより前記クエリを実行することとを含むことを特徴とする方法。
【請求項２０】
前記関係演算の前記実行を前記テーブル値関数の前記実行にプッシュすることは、前記関係演算を前記テーブル値関数への暗黙の引数として符号化することを含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記関係演算の前記実行を前記テーブル値関数の前記実行にプッシュすることは、クエリ実行時に１組の出力行を生成する一意的なクラスを通じて前記関係演算を実装することを含むことを特徴とする請求項１９に記載の方法。
【請求項２２】
テーブル値関数を呼び出して結果を供給するクエリを処理するシステムであって、
前記テーブル値関数の前記機能を記述する情報クラスを生成する情報クラス生成器と、
バインディング質問および最適化質問により前記情報クラスにクエリを実行し、前記バインディング質問および前記最適化質問への応答として供給された情報に従い前記クエリを実行するクエリプロセッサとを備えることを特徴とするシステム。
【請求項２３】
さらに、前記情報クラスが生成される元になるユーザ定義クラスをユーザが定義できるようにするインターフェースを備える管理実行環境を備えることを特徴とする請求項２２に記載のシステム。
【請求項２４】
前記１組のバインディング質問は、前記テーブル値関数により返された列の数、前記テーブル値関数により返された列の名前、および前記テーブル値関数により返された列の型のうちの１つを含むことを含むことを特徴とする請求項２２に記載のシステム。
【請求項２５】
前記１組の最適化質問は、１組の列について行がソートされた順序でグループ化されるかどうか、列が一意的なキー列であるかどうか、前記テーブル値関数が決定論的かどうか、および前記テーブル値関数が外部データソースにアクセスするかどうかのうちの１つを含むことを特徴とする請求項２２に記載のシステム。
【請求項２６】
前記１組の最適化質問は、前記テーブル値関数の結果に関する統計情報の要求を含むことを特徴とする請求項２２に記載のシステム。
【請求項２７】
前記統計情報は、前記テーブル値関数の呼び出し毎に返される行の数、ある範囲のパラメータ値について返される行の数、１組の列について返される重複値の数、および前記テーブル値関数から返される値の分布を記述するヒストグラムのうちの１つを含むことを特徴とする請求項２６に記載のシステム。
【請求項２８】
前記クエリを実行するために使用される関係演算は、前記テーブル値関数にプッシュされることを特徴とする請求項２２に記載のシステム。
【請求項２９】
前記関係演算は、フィルタ、射影、およびグループ化演算のうちの１つであることを特徴とする請求項２８に記載のシステム。
【請求項３０】
コンピュータ可読媒体であって、
テーブル値関数の機能を記述する情報クラスを生成するステップと、
１組の少なくとも１つのバインディング質問により前記情報クラスにクエリを実行するステップと、
１組の少なくとも１つの最適化質問により前記情報クラスにクエリを実行するステップと、
前記１組のバインディング質問および前記１組の最適化質問に対する応答として供給される情報に従ってクエリを実行するステップとを実行するコンピュータ実行可能命令を格納していることを特徴とするコンピュータ可読媒体。
【請求項３１】
前記クエリを実行する前記コンピュータ実行可能命令は、
前記テーブル値関数に対応する実行クラスを生成するコンピュータ実行可能命令と、
前記実行クラスから出力として１組のデータテーブル行を要求するコンピュータ実行可能命令と、
前記実行クラスから前記要求され行を受け取るコンピュータ実行可能命令とを含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３２】
前記１組のバインディング質問は、前記テーブル値関数により返された列の数、前記テーブル値関数により返された列の名前、および前記テーブル値関数により返された列の型のうちの１つを含むことを含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３３】
前記１組の最適化質問は、１組の列について行がソートされた順序でグループ化されるかどうか、列が一意的なキー列であるかどうか、前記テーブル値関数が決定論的かどうか、および前記テーブル値関数が外部データソースにアクセスするかどうかのうちの１つを含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３４】
前記１組の最適化質問は、前記テーブル値関数の結果に関する統計情報の要求を含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３５】
前記統計情報は、前記テーブル値関数の呼び出し毎に返される行の数、ある範囲のパラメータ値について返される行の数、１組の列について返される重複値の数、および前記テーブル値関数から返される値の分布を記述するヒストグラムのうちの１つを含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３６】
前記情報クラスを生成する前記コンピュータ実行可能命令は、管理実行環境内で生成されるユーザ定義クラスから前記情報クラスを生成するコンピュータ実行可能命令を含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３７】
さらに、前記１組のバインディング質問に対する応答として供給される情報に従って前記クエリをバインドするコンピュータ実行可能命令を含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３８】
さらに、前記１組の最適化質問に対する応答として供給される情報に従って前記クエリを最適化するコンピュータ実行可能命令を含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項３９】
前記クエリを実行する前記コンピュータ実行可能命令は、
前記テーブル値関数の前記機能の前記有効性を検証するコンピュータ実行可能命令と、
前記テーブル値関数の前記機能が無効である場合、エラーメッセージを生成し、前記テーブル値関数が予期された出力を供給しないことを示すコンピュータ実行可能命令とを含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【請求項４０】
さらに、前記クエリを実行するために使用される関係演算を前記テーブル値関数にプッシュするコンピュータ実行可能命令を含むことを特徴とする請求項３０に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、参照によりその開示全体が本明細書に組み込まれている、２００４年３月１９日に出願した米国特許出願第６０／５５４，６３９号明細書の利益を主張する、２００４年６月３０日に出願した米国特許出願第（まだ割り当てられていない）号明細書（整理番号ＭＳＦＴ−３３５０）の優先権を主張するものである。
【０００２】
本発明は、データ取り出しおよび操作の分野、より具体的には、テーブル値関数を呼び出して結果を供給するクエリに関する。
【背景技術】
【０００３】
例えば、ワシントン州レドモンドのＭＩＣＲＯＳＯＦＴ社のＳＱＬ（商標）Ｓｅｒｖｅｒなどのリレーショナルデータベースサーバは、さまざまな複雑な計算を実行して、データを取り出し操作する。このような複雑な計算は、従来の構造化照会言語（ＳＱＬ）またはＧＲＯＵＰ  ＢＹ、ＷＨＥＲＥなどの他の関係演算子を使用したのでは可能でない場合が多い。テーブル値関数（ＴＶＦ）は、このような問題を解くことができ、そのために、特別なロジックをクエリ演算ツリー（ｑｕｅｒｙ  ｏｐｅｒａｔｉｏｎ  ｔｒｅｅ）に導入するメカニズムを用意する。ＴＶＦ関数クラスでは、スカラー引数を入力として受け入れ、一連の行を出力として生成する。特別なロジックをＴＶＦ関数内に挿入することで、従来の関係演算子ではサポートしていない特別な変換を実行することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ＴＶＦの効率的な評価は難しい。これらの関数は、任意の手続きコードを含むことができるため、予測可能なパフォーマンス挙動を持たないことが多い。このコードは、場合によってはリモートマシン上の外部コンポーネントを呼び出す複雑なロジックを含むことができる。クエリオイプティマイザは効率的な実行戦略を選ぶためにコスト見積もりモデルを使用することが多いため、パフォーマンスが予測しにくいのでＴＶＦは最適化に関して困難な問題を引き起こすことがある。さらに、ＴＶＦはデータベースシステムを任意に拡張するために使用されるので、可能なあらゆる形態のＴＶＦの拡張性に対応する単一のコスト見積もりを作成することは困難である。さらに、ＴＶＦを実装するユーザが持つクエリプロセッサの内部の詳細について知識は限られていることが多い。そのように限られた知識だと、既存の内部オペレーションと比較した関数の相対的実行コストに関する正確で信頼できる情報を供給することは困難である。
【０００５】
ＴＶＦの評価に関するもう１つの難しさは、一部のＴＶＦ実装は、クエリの残り部分を実行する前に、例えば、一時テーブル内にＴＶＦの結果を事前実体化（ｐｒｅ−ｍａｔｅｒｉａｌｉｚｅｄ）しておく必要があるという点である。この事前実体化には、クエリ結果の遅いスプーリングが必要であり、またクエリの他の部分が実行される前にＴＶＦへの入力が知られていなければならないためＴＶＦの柔軟性も制限される。例えば、テーブル内の列などのクエリの一部をＴＶＦ呼び出しのパラメータとして供給すると都合がよい場合が多いため、このような制約は望ましくない。
【０００６】
上述の難しさがあるため、従来のリレーショナルデータベースシステムＴＶＦのユーザは、ＴＶＦ拡張性の価格として標準以下のパフォーマンスおよび制限された機能を受け入れなければならなかった。したがって、当業では、ＴＶＦを呼び出すクエリを効率的に評価するためのシステムおよび方法が必要である。本発明は、これらのニーズおよびその他の要求条件を満たす。
【課題を解決するための手段】
【０００７】
本発明では、リレーショナルデータベースサーバにテーブル値関数（ＴＶＦ）を実装するための効率的で高速なフレームワークについて説明する。このフレームワークは、望ましい拡張特性を備え、クエリプロセッサにおける最適化のインフラと緊密に統合することによりパフォーマンス低下を最小限に抑えることができる。本発明では、さらに、共通言語ランタイム（ＣＬＲ）などの管理実行環境はデータベースエンジンのロジックをユーザ提供コードで効率よく動的に拡張することができる。
【０００８】
本発明の一態様によれば、ＴＶＦフレームワークは、クエリプロセッサからあるレベルの抽象化を行う。ＴＶＦを呼び出す着信クエリがクエリプロセッサで受信されると、ＴＶＦの機能を説明する情報クラスに対する要求が生成される。その後、クエリバインディングに使用される情報を与えるため情報クラスに対し１組のバインディング質問（ｂｉｎｄｉｎｇ  ｑｕｅｓｔｉｏｎ）によりクエリが実行される。また、クエリ最適化に使用される情報を与えるため情報クラスに対し１組の最適化質問によりクエリが実行される。クエリ実行中、情報クラスは、ＴＶＦに従ってクエリプロセッサに１組の出力行を返す、実行クラスを生成するために使用される。
【０００９】
本発明の他の態様によれば、上述のＴＶＦフレームワークは、管理実行環境（ＭＥＥ）に拡張することができる。テキストエディタなどのインターフェースが、ＭＥＥ内に設けられ、これにより、ユーザはＴＶＦの機能を定義するクラスを作成することができる。その後、このクラスは、バイナリファイルにコンパイルされ、データベースサーバにサブミットされる。データベースサーバでは、バイナリファイルを使用することで、ＴＶＦフレームワーク内に実装されうる情報クラスを生成できる。
【００１０】
本発明の他の態様によれば、例えば、フィルタ、射影、およびグループ化などの関係演算をＴＶＦの実行にプッシュすることができる。このような関係演算の「プッシュダウン」では、ＴＶＦを関係演算のスコープに応じて評価できるようにすることにより効率を高める。
【００１１】
本発明の追加特徴および利点は、付属の図面を参照しつつ進行する実施例の以下の詳細な説明から明白になる。
【００１２】
例示されている実施形態は、付属の図面を参照しつつ以下の詳細な説明を読んだ後、よく理解されるであろう。
【発明を実施するための最良の形態】
【００１３】
本発明の主題は、法的要件を満たすように特異性とともに説明されている。しかし、説明自体は、本発明のスコープを制限することを意図されていない。むしろ、発明者は、主張されている主題は、他の現在または将来の技術とともに、本明細書で説明されている活動または要素と類似しているが異なる活動または要素を含むように、他の方法でも具現化されうることを考察した。
【００１４】
本発明によるデータ取り出しおよび操作システム例のブロック図が図１に示されている。一般的に、クライアントアプリケーション１０８では、クエリを生成し、データベースサーバ１０４にサブミットし、データベースサーバ１０４で実行するようにできる。データベースサーバ１０４は、行と列に構成されたテーブルなどの関係形式でデータを格納する１つまたは複数の基本的なデータストアにアクセスする。データベースサーバ１０４は、基礎のデータストア上の受け取ったクエリを一般的に実行するクエリプロセッサ１０６を備える。受け取ったクエリを受け取ると、クエリプロセッサ１０６は、通常、実行前にクエリに対しクエリバインディングおよびクエリ最適化プロシージャを実行する。
【００１５】
図１にも示されているように、データベースサーバ１０４は、（必ずしも必要というわけではないが）管理実行環境（ＭＥＥ）１０２に関して動作することができる。ＭＥＥ  １０２は、例えば、共通言語ランタイム（ＣＬＲ）環境とすることができる。ＭＥＥ  １０２は、一般的に、マネージドコードの実行環境を提供する。したがって、ＭＥＥ  １０２は、例えば、ジャストインタイム（ＪＩＴ）コンパイル、メモリ割り当ておよび管理、型安全性の強制、例外処理、スレッド管理およびセキュリティを含む、プログラム実行に必要なさまざまな機能およびサービスを提供することができる。さらに、構造化照会言語（ＳＱＬ）などの従来の関係照会言語に加えて、ＭＥＥ  １０２では、例えば、Ｖｉｓｕａｌ  ＢａｓｉｃおよびＣ＃などの本格的なプログラミング言語でタスクを実行できる。このような本格的なプログラミング言語では、ループ、ビットシフト、およびクラス毎に配列、コレクションなどの機能をサポートすることができる。したがって、開発者は、ＭＥＥ  １０２とデータベースサーバ１０４との統合を利用して、より複雑なロジックを持ち、従来の関係照会言語に比べて計算タスクに好適なコードを作成することができる。
【００１６】
データベースサーバ１０４でクエリを実行するには、既存の関係照会言語演算子によってサポートされていない複雑な演算を必要とすることが多い。そのような演算を実行するために、クエリプロセッサ１０６は、１つまたは複数のテーブル値関数（ＴＶＦ）を呼び出すことができる。一般的に、ＴＶＦは、特別なロジックをクエリ演算ツリーに持ち込むためのメカニズムを備える。ＴＶＦでは、通常、スカラー引数を入力として受け取り、一連の行を出力として生成する。特別なロジックをＴＶＦ内に挿入することで、従来の関係演算子ではサポートしていない特別な変換を実行することができる。
【００１７】
本発明は、ＴＶＦを呼び出すクエリを実行するフレームワークを実現する。重要なことは、フレームワークはクエリプロセッサ１０６からのユーザコードを抽象化することである。フレームワークは、例えば、ＭＥＥベースのＴＶＦなど個別のＴＶＦまたはＴＶＦのクラスとともに使用することができる。それぞれのそのようなＴＶＦまたはＴＶＦクラスは、出力列のバインディング、パラメータの理解、およびランタイムロジックのインスタンス化などの演算をサポートするロジックを実装する。さらに、ＴＶＦの機能に関する抽象的質問も、フレームワークを通じて供給され、クエリプロセッサ１０６は、フレームワーク内のそれらの抽象機能により記述される挙動特性と整合する代替選択肢を探索する。例えば、ＴＶＦは、常に、ソートされている順序でいくつかの行を返すことができる。これがフレームワークに対する記述であれば、クエリプロセッサ１０６は、プラン生成時にこの情報を活用することができる。例えば、クエリツリーの他の部分のソート演算を避けることができる。
【００１８】
本発明によるＴＶＦフレームワーク例のブロック図が図２に示されている。一般に、入ってくるクエリ１０５を受け取ったときに、クエリプロセッサ１０６は、クエリバインディングプロセス１１２およびクエリ最適化プロセス１１４を実行する。クエリプロセッサ１０６は、その後、バインディング１１２および最適化１１４により、クエリ１１６を実行する。入ってくるクエリ１０５がＴＶＦを呼び出す場合、情報クラスファクトリ１３２は、ＴＶＦの機能を記述している情報クラス１３４を生成する。バインディング１１２の情報を供給するために、情報クラス１３４に対し、多数のバインディング質問１２２によりクエリが実行される。さらに、最適化１１４の情報を供給するために、情報クラス１３４に対し、多数の最適化質問１２４によりクエリが実行される。最後に、実行中１１６、情報クラス１３４は、呼び出されたＴＶＦに従ってクエリプロセッサに出力行を送る、実行クラス１３６を生成するために使用される。
【００１９】
図２に示されているフレームワークは、次に詳しく説明される、図３に表されているクエリ評価方法例を使用して実装することができる。活動３１０で、入ってくるクエリ１０５は、クエリプロセッサ１０６で受信される。入ってくるクエリ１０５がＴＶＦを呼び出す場合、活動３１２で、クエリプロセッサ１０６は、要求１１５を対応する情報クラス１３に対する情報クラスファクトリ１３２に送信する。活動３１４で、情報クラスファクトリ１３２は、要求された情報クラス１３４を生成する。情報クラス１３４は、汎用基本クラスまたは他の言語の等価な構成要素から派生する、例えば、Ｃ＋＋のクラスとして実装することができる。鍵となる特性は、情報クラス１３４は、プリプロセッサ１０６が呼び出そうとしているオブジェクトの特定のインスタンスへのあるレベルの指示を含む抽象化点として生成されることである。
【００２０】
活動３１６で、バインディング１１２の一部として、プリプロセッサ１０６は、情報クラス１３４に対し１組のバインディング質問１２２によりクエリを実行する。バインディング質問１２２の例では、例えば、クエリ実行中に返される列の数、列の型、および列の名前などの情報を要求することができる。バインディング質問１２２の例では、さらに、ＴＶＦが決定論的であるか、または外部データソースにアクセスするかを問い合わせることができる。
【００２１】
活動３１８で、最適化１１４の一部として、プリプロセッサ１０６は、情報クラス１３４に対し１組の最適化質問１２４によりクエリを実行する。最適化質問１２４の例は、例えば、列の集合に対し行をグループ化するかどうか、列が一意的キーを構成するかどうか、ＴＶＦが決定論的であるかまたは外部データソースにアクセスするかといったことも含むことができる。最適化質問１２４の例は、さらに、関数の結果に関する統計情報も要求することができる。このような統計情報は、例えば、呼び出し毎に、またはパラメータ値の範囲毎に返される行の数、列毎に、または列の集まり毎に返される重複値の個数、および関数から返される値の分布を記述するヒストグラムを含むことができる。
【００２２】
活動３２０で、実行１１６の一部として、情報クラス１３４は、実行クラス１３６を生成するために使用される。活動３２２で、クエリプロセッサは、実行クラス１３６に、その１組のＴＶＦ出力行１２８の要求１２６を送信し、活動２３４で、実行クラス１３６は、要求された出力行１２８を返す。したがって、本発明のフレームワークは、ＴＶＦが呼び出されたときに、ＴＶＦに関する情報をクエリプロセッサ１０６に供給し、バインディング１１２および最適化１１４を補助し、ＴＶＦに従って出力行を送ることができるあるレベルの抽象化を実現する。
【００２３】
本発明により考察されているいくつかのＴＶＦ演算例は、限定はしないが、ＸＱｕｅｒｙなどの階層型クエリ演算、オブジェクトリレーショナルデータベースシステムにおける型階層を管理するための演算、データベースシステム内のファイルシステムをモデル化するためディレクトリパスを内部パスにまたはその逆に変換する操作を効率よく実行する演算、およびＷｅｂサービスなどのリモートデータソースの結果について関係ビューを出力するための演算などの階層型クエリ演算をサポートする計算を含むことができる。
【００２４】
本発明のフレームワークにより実現される抽象化のレベルでは、任意のユーザ定義拡張機能を管理実行環境（ＭＥＥ）１０２で動的に作成し、フレームワーク内に統合することができる。この統合により、ユーザ定義拡張機能は、ローカルの拡張機能と同様にして、プリプロセッサ１０６により評価することができる。さらに、ユーザ定義拡張機能は、能力を落とすことなく、データベースサーバ１０４に動的に追加することができる。
【００２５】
上述の情報クラス１３４により指定された要求条件を満たすために使用することができるＭＥＥ  １０２のネイティブの管理言語でメソッドを実装できる。これらのメソッドは、オプションにより、明示的に指定されないプロパティに対する既定の値を使って実装することができる。これにより、新しいメソッドを実装しない既に実装されているユーザ定義拡張機能との下位互換性を維持しながら任意の新しいメソッドを長期間にわたり追加することができる。
【００２６】
ＭＥＥに関係する他のアプリケーションは、フラットファイル、テープデバイス、またはデータベースサーバ１０４の外部のその他の二次記憶メカニズムなどの永続的記憶メカニズムから複合ユーザ定義型（ＵＤＴ）のインポートを含むことも可能である。ＴＶＦは、さらに、データベースサーバ１０４の外部からインポートされたときにＵＤＴが構造上正しいかどうかを検証するために使用することもできる。さらに、ＴＶＦを使用してＵＤＴの構造の中まで動的に掘り下げて任意の構造のデータを表示することができるため、ＴＶＦは、ＭＥＥ内のＵＤＴに関する複合メタデータを公開する場合にも使用できる。
【００２７】
ＴＶＦの拡張性のさらに他の利点、ＴＶＦが関係モデルにおいてより複雑なプログラミング概念を公開する機能を備えることである。このような複雑なプログラミング概念としては、例えば、リスト、辞書、配列、コレクション、プロパティバッグがある。このような概念は、一般に、複数のオブジェクトを単一のコンテナにグループ化し、ＭＥＥ拡張機能によって利用可能になるようなプログラミング言語での使いやすさを高めることを伴う。
【００２８】
本発明によるＴＶＦフレームワーク拡張のための方法例の流れ図が図４に示されている。活動４１０で、ＭＥＥ  １０２は、ＴＶＦの機能を記述するクラスを定義するためにユーザが使用するインターフェースを提供する。ＭＥＥ  １０２は、例えば、ユーザがクラスを定義するために使用するテキストエディタインターフェースを提供することができる。ＭＥＥクラスオブジェクトの例を以下に示す。
【００２９】
【表１】
2007529820.tif 000003
【００３０】
上記のクラスオブジェクト例はＣ＃で定義されているが、本発明によるクラスオブジェクトは、ＭＥＥ  １０２によってサポートされている言語であればどのような言語でも定義できる。
【００３１】
活動４１２で、クラスはバイナリファイルにコンパイルされ、活動４１４で、コンパイルされたバイナリファイルは、データベースサーバ１０４にサブミットされる。活動４１６で、ＴＶＦは、コンパイルされたバイナリファイルに従って生成される。特に、図２のＴＶＦフレームワークに関連して実装された場合、情報クラスファクトリ１３２は、コンパイルされたバイナリファイルを使用して、入ってくるクエリ１０５により呼び出されたＴＶＦの機能を記述する情報クラス１３４を生成することができる。
【００３２】
これはＭＥＥオブジェクトとして実装されているため、ユーザ定義クラスのオブジェクトコードはデータベースサーバ１０４により解釈され、ＴＶＦフレームワークでのインストールまたは使用の一部として関連するメタデータについてのクエリをコンパイルされたオブジェクトコードに対し実行することができる。そのため、例えば、管理者はユーザ定義拡張機能について追加情報を供給する必要はない。さらに、データベースサーバ１０４は、その結果得られた情報クラス１３４で使用される機能に関する追加メタデータを格納する必要はない。フレームワークで必要になったら、コンパイルされたマネージドバイナリオブジェクトファイルを検査することによりメタデータについて動的にクエリを実行することができる。この概念の拡張は、例えば、アクセス効率を高めるため関連するメタデータをデータベースサーバ１０４内の一時的保管場所にコピーする方法も含むことができる。さらに、クエリプランの存続期間にわたってメタデータを一貫した状態に保つ手法として、マネージドコードを、例えば、．ＥＸＥまたは．ＤＬＬファイルの形で、データストア６１０内にコピーすることができる。
【００３３】
単純な誤りまたは悪意により、ユーザ定義拡張は、ＴＶＦのプロパティを正しく記述していないメタデータを含むことができる。データベースサーバ１０４は、さまざまな手法を通じてそのような不正なメタデータのリスクを解消することができる。そのような手法の１つでは、与えられたメタデータは、信頼できる情報であると証明できない場合に無視される。他の手法では、データベースサーバ１０４は、ＴＶＦを呼び出すクエリに対する実行プランに、追加検証ロジックを付加することができる。実行中、ＴＶＦが指示された通りに振る舞わない場合、エラーメッセージが生成されることがある。例えば、ＴＶＦがソートされた結果を返すことをユーザ定義クラスが示している場合、クエリプロセッサ１０６は特別な処理ロジックを追加して、ＴＶＦ出力が本当にソートされているかどうかを検証することができる。ＴＶＦが指示された通りに実行できない場合、エラーが投げられ、クエリはアボートまたは再コンパイルされ、新しいユーザ供給メタデータを無視して再起動される。
【００３４】
ユーザ定義拡張の統合を使用可能である他に、このフレームワークでは、最適化１１４の際に多数の関係演算の実行をＴＶＦの実行にプッシュすることができる。このような関係演算として、例えば、Ｆｉｌｔｅｒ、Ｐｒｏｊｅｃｔｉｏｎ、およびＧｒｏｕｐｉｎｇ演算、および他の適切に定義された関係演算がありうる。関係演算の実行をＴＶＦの実行にプッシュすると、クエリ実行の効率が高まる。例えば、ＴＶＦがハッシュテーブル内の要素のすべてを返すように定義されている場合、ＴＶＦの既定の実装は、各ハッシュバケットについて反復し、対応するテーブル内のすべての要素を返す可能性がある。しかし、クエリがハッシュテーブルのキー列を単一値に制約した場合、この制約をＴＶＦに符号化するほうがより効率的であると考えられ、それによってすべてのハッシュテーブルエントリを列挙する作業を避けることができる。
【００３５】
図５は、関係演算のプッシュダウンの概念を例示している。従来のクエリプラン５１０は、データテーブルの第１列をフィルタ処理して５のエントリに絞り込むＦｉｌｔｅｒ演算５１０ａを含む。従来のクエリプラン５１０は、さらに、ＴＶＦ  ５１０ｂも含む。図に示されているように、Ｆｉｌｔｅｒ演算５１０ａは、ＴＶＦ  ５１０ｂから全く独立して実行される。それと対照的に、クエリプラン５１２では、フィルタ演算はＴＶＦ  ５１２ａ内に効率よくプッシュダウンされ、それによって、データテーブルのすべてのエントリを列挙する必要がなくなる。
【００３６】
関係演算のプッシュダウンは、付加的な暗黙の引数をＴＶＦに符号化することにより実現できる。このような引数により、「ｆｉｌｔｅｒ  ｏｎ  ｔｈｉｓ  ｃｏｌｕｍｎ  ｔｏ  ｔｈｉｓ  ｖａｌｕｅ」または「ｆｏｒ  ｔｈｉｓ  ｃｏｌｕｍｎ，  ｓｃａｎ  ｔｈｅ  ｒａｎｇｅ  ｆｒｏｍ  １０  ｔｏ  ２０」などの追加命令をＴＶＦに受け渡す。この手法は、どの列に制約が強制されるのかをＴＶＦが解釈できるように適切に定義された順序で供給することにより、任意の数の列に制約を受け渡すために使用することができる。
【００３７】
関係演算のプッシュダウンは、さらに、それぞれのプッシュされた関係演算（またはプッシュされた関係演算の集まり）に対し別々のランタイム実装を生成することにより実現することもできる。例えば、プッシュされたフィルタは、実行時に行を取り出すために一意的なクラスを通じて実装することも可能であろう。
【００３８】
上述の内容から明らかなように、本発明のさまざまなシステム、方法、および態様の全部または一部は、ハードウェア、ソフトウェア、またはそれらの組合せで具現化できる。ソフトウェアで具現化された場合、本発明の方法および装置、またはいくつかの態様またはその一部分は、プログラムコード（つまり、命令）の形で具現化することができる。このプログラムコードは、限定はしないが、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、磁気テープ、フラッシュメモリ、ハードディスクドライブ、またはその他のマシン可読記憶媒体を含む、磁気、電気、または光記憶媒体などのコンピュータ可読媒体上に格納することができ、プログラムコードがコンピュータまたはサーバなどのマシン内にロードされ実行されると、マシンは本発明を実践するための装置となる。プログラムコードが実行されるコンピュータは、一般に、プロセッサ、プロセッサにより読み取り可能な記憶媒体（揮発性および不揮発性メモリおよび／または記憶素子を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含む。プログラムコードは、高水準手続きプログラミング言語またはオブジェクト指向プログラミング言語で実装することができ。代替として、プログラムコードは、アセンブリまたはマシン語で実装することもできる。いずれの場合も、言語は、コンパイル型言語またはインタプリタ型言語とすることができる。
【００３９】
本発明は、さらに、電気配線またはケーブル配線、光ファイバの使用、ローカルエリアネットワーク、ワイドエリアネットワーク、インターネットまたはイントラネットを含むネットワークなどの何らかの伝送媒体で、または他の形態の伝送を介して、伝送されるプログラムコードの形態で具現化されることも可能であり、プログラムコードがコンピュータなどのマシンにより受信され、読み込まれ、実行されると、マシンは本発明を実施するための装置となる。
【００４０】
汎用プロセッサ上に実装された場合、プログラムコードがプロセッサと組み合わさり、特定のロジック回路と類似の動作をする独自の装置を実現するようにできる。
【００４１】
さらに、本発明は、コンピュータネットワークの一部として、または分散コンピューティング環境内に展開することができる、任意のコンピュータまたはその他のクライアントまたはサーバデバイスと関連して実装することもできる。この点に関して、本発明は、任意の数のメモリまたは記憶ユニット、および任意の数の記憶ユニットまたはボリュームにまたがって実行される任意の数のアプリケーションおよびプロセスを含む、任意のコンピュータシステムまたは環境に関係し、これらは、本発明によるデータベースストア内でオブジェクトを永続させるためにプロセスに関して使用することができる。本発明は、リモートまたはローカル記憶装置を備える、サーバコンピュータおよびクライアントコンピュータがネットワーク環境または分散コンピューティング環境内に配備されている環境に適用することが可能である。本発明は、さらに、プログラミング言語機能、リモートまたはローカルサービスに関して情報の生成、受信、および送信を行うための解釈および実行機能を備える、スタンドアロンのコンピューティングデバイスにも適用可能である。
【００４２】
分散コンピューティングにより、コンピューティングデバイスとシステムとの間のやり取りによるコンピュータ資源およびサービスの共有が円滑になる。これらの資源およびサービスは、限定はしないが、情報の交換、キャッシュ記憶、およびファイルのディスクへの格納を含む。分散コンピューティングでは、ネットワーク接続を利用しており、これにより、クライアントは全体のパワーを活かすことができ、企業全体にとって有益である。この点に関して、さまざまなデバイスが、本発明のオブジェクト永続性の方法に関して実行される処理を伴う可能性のあるアプリケーション、オブジェクト、または資源を有する場合がある。
【００４３】
図７は、ネットワーク接続または分散コンピューティング環境例の概略図である。分散コンピューティング環境は、コンピューティングオブジェクト１０ａ、１０ｂなど、およびコンピューティングオブジェクトまたはデバイス１１０ａ、１１０ｂ、１１０ｃなどを含む。これらのオブジェクトは、プログラム、メソッド、データストア、プログラム可能ロジックなどを含むことができる。これらのオブジェクトは、ＰＤＡ、テレビ、ＭＰ３プレーヤー、パーソナルコンピュータなどの同じまたは異なるデバイスの一部を含むことができる。それぞれのオブジェクトは、通信ネットワーク１４により他のオブジェクトと通信することができる。このネットワークは、それ自体、サービスを図７のシステムに提供する他のコンピューティングオブジェクトおよびコンピューティングデバイスを備えることができ、またそれ自体複数の相互接続ネットワークを表すこともできる。本発明の一態様によれば、それぞれのオブジェクト１０ａ、１０ｂなど、または１１０ａ、１１０ｂ、１１０ｃなどは、ＡＰＩ、または他のオブジェクト、ソフトウェア、ファームウェア、および／またはハードウェアを利用して、本発明のオブジェクト永続性の方法を実装するために使用されるプロセスの使用を要求することが可能なアプリケーションを含むことができる。
【００４４】
さらに、１１０ｃなどのオブジェクトが他のコンピューティングデバイス１０ａ、１０ｂなど、または１１０ａ、１１０ｂなどでホストされうることも理解できるであろう。したがって、表されている物理的環境は、接続デバイスをコンピュータとして示している場合があるが、そのような例示は単に例にすぎず、物理的環境は、代替として、ＰＤＡ、テレビ、ＭＰ３プレーヤーなどのさまざまなデジタルデバイス、インターフェース、ＣＯＭオブジェクトなどのソフトウェアオブジェクトを含むものとして表すか、または説明することができる。
【００４５】
分散コンピューティング環境をサポートするシステム、コンポーネント、およびネットワーク構成はさまざまなものがある。例えば、コンピューティングシステムは、有線または無線システムにより、ローカルネットワークまたは広域分散ネットワークにより接続して一体とすることができる。今のところ、ネットワークの多くは、広域分散コンピューティングのインフラストラクチャを提供し、多数の異なるネットワークを包含するインターネットに結合されている。インフラストラクチャは、どれも、本発明から生じる通信例に使用できる。
【００４６】
インターネットとは、一般に、ＴＣＰ／ＩＰプロトコル群を利用するネットワークおよびゲートウェイの集合体のことであり、コンピュータネットワーキングの技術ではよく知られている。ＴＣＰ／ＩＰは、「Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ」の頭字語である。インターネットは、ユーザ同士が情報をやり取りし、（複数の）ネットワーク上で情報を共有するためのネットワーキングプロトコルを実行するコンピュータにより相互接続された地理的に分散し離れている複数のコンピュータネットワークからなる１つのシステムとして説明することができる。このような広域分散情報共有であるため、インターネットなどのリモートネットワークは、これまでに、一般的にいって、開発者が本質的に制約なしで専用のオペレーションまたはサービスを実行するソフトウェアアプリケーションを設計できるオープンシステムに発展してきたのである。
【００４７】
したがって、ネットワークインフラストラクチャにより、クライアント／サーバ、ピアツーピア、またはハイブリッドアーキテクチャなどの多数のネットワークトポロジが使用可能である。「クライアント」は、関係しない他のクラスまたはグループのサービスを使用するクラスまたはグループのメンバである。そのため、計算技術では、１つのクライアントは、他のプログラムによって提供されるサービスを要求する、１つのプロセス、つまり、おおまかにいうと、１組の命令またはタスクである。クライアントプロセスは、他のプログラムまたはサービス自体について仕組み面の詳細を「知る」ことなしで、要求されたサービスを利用する。クライアント／サーバアーキテクチャ、特にネットワーク接続システムでは、クライアントは、通常、他のコンピュータ、例えば、サーバによって提供される共有ネットワーク資源にアクセスするコンピュータである。図７の例では、コンピュータ１１０ａ、１１０ｂなどは、クライアントと考えることができ、コンピュータ１０ａ、１０ｂなどは、サーバと考えることができるが、どのようなコンピュータも、状況に応じて、クライアント、サーバ、またはその両方とみなすことが可能である。これらのコンピューティングデバイスは、どれも、本発明のオブジェクト永続性手法に関係する方法でデータを処理している可能性がある。
【００４８】
サーバは、通常、インターネットなどのリモートまたはローカルネットワーク上でアクセス可能なリモートコンピュータシステムである。クライアントプロセスは、第１のコンピュータシステム内でアクティブであり、サーバプロセスは、第２のコンピュータシステム内でアクティブであって、通信媒体を介して互いに通信し、それにより、分散機能を実現して、複数のクライアントがサーバの情報収集機能を利用できるようにする。本発明の永続性メカニズムに従って利用されるソフトウェアオブジェクトは、複数のコンピューティングデバイス上に分散することができる。
【００４９】
（複数の）クライアントおよび（複数の）サーバは、プロトコルレイヤによって提供される機能を利用して互いに通信することができる。例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）は、Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ  （ＷＷＷ）つまり「Ｗｅｂ」に関して使用される共通プロトコルである。通常、インターネットプロトコル（ＩＰ）アドレスなどのコンピュータネットワークアドレスまたはＵｎｉｖｅｒｓａｌ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ（ＵＲＬ）などのその他の参照を使用して、サーバまたはクライアントコンピュータ同士を識別することができる。ネットワークアドレスを、ＵＲＬアドレスと呼ぶことができる。通信は、利用可能な通信媒体上で実現できる。
【００５０】
そこで、図７は、本発明を採用できる、ネットワーク／バスを介してクライアントコンピュータと通信するサーバを備えるネットワーク接続または分散環境の例を示している。ネットワーク／バス１４は、ＬＡＮ、ＷＡＮ、イントラネット、インターネット、またはその他の何らかのネットワーク媒体とすることができ、本発明によるポータブルコンピュータ、ハンドヘルドコンピュータ、シンクライアント、ネットワーク接続アプライアンス、またはＶＣＲ、ＴＶ、オーブン、ライト、ヒーターなどのその他のデバイスなど、多数のクライアントまたはリモートコンピューティングデバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどを備える。したがって、本発明は、永続的なオブジェクトを維持することが望ましいことに関連してコンピューティングデバイスに適用できることが考えられる。
【００５１】
通信ネットワーク／バス１４がインターネットであるネットワーク環境で、例えば、サーバ１０ａ、１０ｂなどは、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどがＨＴＴＴＰなどの多数の知られているプロトコルのどれかを介して通信する相手となるサーバとすることができる。分散コンピューティング環境の特徴を示しているように、サーバ１０ａ、１０ｂなどは、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどとして使用することができる。
【００５２】
通信は、適切であれば、有線でも無線でもよい。クライアントデバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどは、通信ネットワーク／バス１４を介して通信することができる場合もできない場合もあり、また独立の通信が関連している場合もある。例えば、ＴＶまたはＶＣＲの場合、その制御のネットワーク接続に対応する態様がある場合もない場合もある。それぞれのクライアントコンピュータ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなど、および  サーバコンピュータ１０ａ、１０ｂなどは、さまざまなアプリケーションプログラムモジュールまたはオブジェクト１３５を備えることができ、またさまざまなタイプの記憶素子またはオブジェクトとの接続またはアクセスが行え、それらにファイルまたはデータストリームを格納したり、ファイルまたはデータストリームの一部をそこにダウンロード、送信、または移行することができる。コンピュータ１０ａ、１０ｂ、１１０ａ、１１０ｂなどは、本発明により処理されたデータを格納するためのデータベース、メモリ、またはその他の記憶素子２０の維持および更新を受け持つことができる。したがって、本発明は、コンピュータネットワーク／バス１４にアクセスしやり取りすることができるクライアントコンピュータ１１０ａ、１１０ｂなど、およびクライアントコンピュータ１１０ａ、１１０ｂなどおよび他の同様のデバイスとやり取りすることができるサーバコンピュータ１０ａ、１０ｂなどおよびデータベース２０を備えるコンピュータネットワーク環境で使用することができる。
【００５３】
図７および以下の説明は、本発明を実施できることに関連して適当なコンピューティング環境について簡潔に概要を述べることを意図している。例えば、図７に例示されているクライアントおよびサーバコンピュータまたはデバイスはどれも、この形態をとることができる。しかし、あらゆる種類のハンドヘルド、ポータルおよびその他のコンピューティングデバイスおよびコンピューティングオブジェクトは本発明に関連した使用について考察されている、つまり、コンピューティング環境においてどこからでもデータを生成し、処理し、受信し、および／または送信することができることは理解されるであろう。以下では汎用コンピュータについて説明しているが、これは一例にすぎず、本発明は、ネットワーク／バス相互運用性および相互作用を持つシンクライアントにより実装することができる。したがって、本発明は、非常に小さなまたは最小限のクライアント資源が関連するネットワーク接続されホスティングされたサービスの環境、例えば、クライアントデバイスがアプライアンス内に置かれたオブジェクトなどのネットワーク／バスとの単なるインターフェースとして使用されるネットワーク接続環境で実装することができる。本質的に、データの格納先、またはデータの取り出し元、または他のコンピュータに送信する送信元は、本発明のオブジェクト永続性の方法を運用するための望ましい、または好適な環境である。
【００５４】
必要ではないけれど、本発明は、デバイスまたはオブジェクトに対するサービスの開発者が使用するためオペレーティングシステムを介して実装することができ、および／または本発明に従って動作するアプリケーションまたはサーバソフトウェア内に含まれるようにできる。ソフトウェアは、クライアントワークステーションなどの１つまたは複数のコンピュータ、サーバ、またはその他のデバイスにより実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的状況において説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、さまざまな実施形態で望まれているように組み合わせるか、または分散させることができる。さらに、本発明は、他のコンピュータシステム構成およびプロトコルにより実施することができる。本発明とともに使用するのに好適であると思われる他のよく知られているコンピューティングシステム、環境、および／または構成は、限定はしないが、パーソナルコンピュータ（ＰＣ）、現金自動預け払い機、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能な家電製品、ネットワークＰＣ、アプライアンス、ライト、環境制御要素、ミニコンピュータ、メインフレームコンピュータなどを含む。
【００５５】
そこで、図８は、本発明を実装できる好適なコンピューティングシステム環境１００の一例を示しているが、上記の説明から明らかなように、コンピューティングシステム環境１００は、好適なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲に関して制限を示唆する意図はない。コンピューティング環境１００は、動作環境例１００に例示されている１つのコンポーネントまたはその組合せに関係する何らかの依存関係または要求条件がその環境にあるものと解釈すべきでない。
【００５６】
図８では、本発明を実装する例示されているシステムは、コンピュータ１１０の形態の汎用コンピューティングデバイスを備える。コンピュータ１１０が備えるコンポーネントとしては、限定はしないが、処理ユニット１２０、システムメモリ１３０、およびシステムメモリを備えるさまざまなシステムコンポーネントを処理ユニット１２０に結合するシステムバス１２１などがある。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺機器バス、およびさまざまなバスアーキテクチャを使用するローカルバスを含む数種類のバス構造のうちのいずれでもよい。例えば、限定はしないが、このようなアーキテクチャとしては、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、およびＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス（Ｍｅｚｚａｎｉｎｅバスとも呼ばれる）がある。
【００５７】
コンピュータ１１０は、通常、さまざまなコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセスされることができる媒体であればどのような媒体でも使用可能であり、揮発性および不揮発性媒体、取り外し可能および取り外し不可能媒体を含む。例えば、限定はしないが、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータなどの情報を格納する方法または技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可能媒体を含む。コンピュータ記憶媒体としては、限定はしないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたはその他のメモリ技術、ＣＤＲＯＭ、デジタル多目的ディスク（ＤＶＤ）またはその他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置またはその他の磁気記憶デバイス、または所望の情報を格納するために使用することができ、しかもコンピュータ１１０によりアクセスできるその他の媒体がある。通信媒体は、通常、コンピュータ可読命令、データ構造体、プログラムモジュール、または搬送波もしくはその他のトランスポートメカニズムなどの変調データ信号によるその他のデータを具現するものであり、任意の情報配信媒体を含む。「変調データ信号」という用語は、信号内の情報を符号化する方法によりその特性のうち１つまたは複数が設定または変更された信号を意味する。例えば、通信媒体としては、有線ネットワークまたは直接配線接続などの有線媒体、ならびに、音響、ＲＦ、赤外線、およびその他の無線媒体などの無線媒体がある。上記のいずれの組合せもコンピュータ可読媒体の範囲に収まらなければならない。
【００５８】
システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２などの揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を備える。起動時などにコンピュータ１１０内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）は、通常、ＲＯＭ  １３１に格納される。通常、ＲＡＭ  １３２は、処理ユニット１２０に直接アクセス可能な、および／または処理ユニット１２０によって現在操作されているデータおよび／またはプログラムモジュールを格納する。例えば、図８は、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７を例示している。
【００５９】
コンピュータ１１０はさらに、その他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ記憶媒体を備えることもできる。例えば、図７は、取り外し不可能な不揮発性磁気媒体の読み出しまたは書き込みを行うハードディスクドライブ１４１、取り外し可能な不揮発性磁気ディスク１５２の読み出しまたは書き込みを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＷ、ＤＶＤ−ＲＷ、またはその他の光媒体などの取り外し可能な不揮発性光ディスク１５６の読み出しまたは書き込みを行う光ディスクドライブ１５６を例示している。動作環境の実施例で使用できる他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ記憶媒体としては、限定はしないが、磁気テープカセット、フラッシュメモリカード、デジタル多目的ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどがある。ハードディスクドライブ１４１は、通常、インターフェース１４０などの取り外し不可能なメモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通常、インターフェース１５０などの取り外し可能なメモリインターフェースによりシステムバス１２１に接続される。
【００６０】
図８に例示されている上記のドライブおよび関連コンピュータ記憶媒体は、コンピュータ１１０用のコンピュータ可読命令、データ構造体、プログラムモジュール、およびその他のデータを格納する機能を備える。例えば、図８では、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして例示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７と同じである場合もあれば異なる場合もあることに留意されたい。異なるコピーであることを最低でも例示するため、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７は、ここで異なる番号を与えられている。ユーザは、キーボード１６２、およびマウス、トラックボール、またはタッチパッドなどのポインティングデバイス１６１などの入力デバイスを介してコンピュータ１１０にコマンドおよび情報を入力できる。他の入力デバイス（図に示されていない）としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらの入力デバイスやその他の入力デバイスは、システムバス１２０に結合されているユーザ入力インターフェース１６０を介して処理ユニット１２１に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースおよびバス構造により接続されることも可能である。グラフィックスインターフェース１８２は、さらに、システムバス１２１に接続することもできる。１つまたは複数のグラフィックスプロセッシングユニット（ＧＰＵ）１８４は、グラフィックスインターフェース１８２と通信することができる。モニタ１９１またはその他のタイプの表示デバイスも、ビデオメモリ１８６とさらに通信することができる、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。モニタ１９１の他に、コンピュータはさらにスピーカ１９７およびプリンタ１９６などの他の周辺出力デバイスも備えることができ、これらは出力周辺機器インターフェース１９５を介して接続することができる。
【００６１】
コンピュータ１１０は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続または分散環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の共通ネットワークノードでもよく、通常は、コンピュータ１１０に関係する上述の要素の多くまたはすべてを含むが、メモリ記憶デバイス１８１だけが図８に例示されている。図８に示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１とワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワーク／バスを含むこともできる。このようなネットワーキング環境は、家庭、オフィス、企業全体にわたるコンピュータネットワーク、イントラネット、およびインターネットでは一般的である。
【００６２】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ  １７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、通常、インターネットなどのＷＡＮ  １７３上で通信を確立するためモデム１７２またはその他の手段を備える。モデム１７２は、内蔵でも外付けでもよいが、ユーザ入力インターフェース１６０またはその他の適切なメカニズムを介してシステムバス１２１に接続されうる。ネットワーク接続環境では、コンピュータ１１０またはその一部に関して示されているプログラムモジュールは、リモートメモリ記憶デバイスに格納されうる。例えば、限定はしないが、図８はリモートアプリケーションプログラム１８５をメモリデバイス１８１に置かれているものとして例示している。図に示されているネットワーク接続は実施例であり、コンピュータ間の通信リンクを確立するのに他の手段が使用可能であることは理解されるであろう。
【００６３】
結論
こうして、テーブル値関数（ＴＶＦ）を呼び出すクエリの効率的な評価を行うためのシステムおよび方法が開示された。本発明は、望ましい拡張特性を備え、クエリプロセッサにおける最適化のインフラストラクチャと緊密に統合することによりパフォーマンス低下を最小限に抑えられるフレームワークを実現する。本発明では、さらに、共通言語ランタイム（ＣＬＲ）などの管理実行環境はデータベースエンジンのロジックをユーザ提供コードで効率よく動的に拡張することができる。
【００６４】
本発明は、さまざまな図の好ましい実施形態に関連して説明されたが、他の類似の実施形態を使用するか、または説明されている実施形態に修正および追加を行って、本発明から逸脱することなく本発明の同じ機能を実行するようにできることは理解されるであろう。したがって、本発明は、単一の実施形態に限定すべきではなく、むしろ、付属の請求項の定める範囲内で解釈すべきである。
【図面の簡単な説明】
【００６５】
【図１】本発明によるデータ取り出しおよび操作システムのブロック図である。
【図２】本発明によるＴＶＦフレームワーク例のブロック図である。
【図３】本発明によるクエリ評価の方法例の流れ図である。
【図４】本発明によるＴＶＦフレームワーク拡張のための方法例の流れ図である。
【図５】本発明による関係演算のプッシュダウンの例を示すブロック図である。
【図６】本発明が実装可能であるさまざまなコンピューティングデバイスを備えるネットワーク環境例を表すブロック図である。
【図７】本発明が実装可能であるコンピューティングデバイス例を表すブロック図である。
【図１】
2007529820.tif 000004
【図２】
2007529820.tif 000005
【図３】
2007529820.tif 000006
【図４】
2007529820.tif 000007
【図５】
2007529820.tif 000008
【図６】
2007529820.tif 000009
【図７】
2007529820.tif 000010
【国際調査報告】
2007529820.tif 000011