JP5108309B2 - ユーザ定義タイプの継承をサポートするためのシステムおよび方法 - Google Patents

ユーザ定義タイプの継承をサポートするためのシステムおよび方法 Download PDF

Info

Publication number
JP5108309B2
JP5108309B2 JP2006552092A JP2006552092A JP5108309B2 JP 5108309 B2 JP5108309 B2 JP 5108309B2 JP 2006552092 A JP2006552092 A JP 2006552092A JP 2006552092 A JP2006552092 A JP 2006552092A JP 5108309 B2 JP5108309 B2 JP 5108309B2
Authority
JP
Japan
Prior art keywords
type
user
database
defined type
processor
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
JP2006552092A
Other languages
English (en)
Other versions
JP2007522558A (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
Priority claimed from US10/775,282 external-priority patent/US6976029B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2007522558A publication Critical patent/JP2007522558A/ja
Application granted granted Critical
Publication of JP5108309B2 publication Critical patent/JP5108309B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
    • G06Q50/10Services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Tourism & Hospitality (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Economics (AREA)
  • Mathematical Physics (AREA)
  • Human Resources & Organizations (AREA)
  • Marketing (AREA)
  • Primary Health Care (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本願は、2004年5月3日出願の米国特許出願第10/837,929号明細書(整理番号3843)の優先権を主張するものであり、この特許出願は、2004年2月10日出願の米国特許出願第10/775,282号明細書(整理番号MSFT−3029)の一部継続出願の優先権を主張するものであり、これらの開示全体が参照により本明細書に組み込まれる。
本願は、主題により、以下の同一出願人による出願で開示される発明に関連し、その内容全体が本願に組み込まれる。「SYSTEMS AND METHODS FOR REPRESENTING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM BUT INDEPENDENT OF PHYSICAL REPRESENTATION」という名称の2003年8月21日出願の米国特許出願第10/647,058号明細書(整理番号MSFT−1748)、「SYSTEMS AND METHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICAL ORGANIZATION」という名称の2003年8月21日出願の米国特許出願第10/646,941号明細書(整理番号MSFT−1749)、「SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という名称の2003年8月21日出願の米国特許出願第10/646,940号明細書(整理番号MSFT−1750)、「SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A CORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という名称の2003年8月21日出願の米国特許出願第10/646,632号明細書(整理番号MSFT−1751)、「SYSTEMS AND METHOD FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という名称の2003年8月21日出願の米国特許出願第10/646,645号明細書(整理番号MSFT−1752)、「SYSTEMS AND METHODS FOR INTERFACING APPLICATION PROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM」という名称の2003年8月21日出願の米国特許出願第10/646,575号明細書(整理番号MSFT−2733)、「STORAGE PLATFORM FOR ORGANIZING, SEARCHING, AND SHARING DATA」という名称の2003年8月21日出願の米国特許出願第10/646,646号明細書(整理番号MSFT−2734)、「SYSTEMS AND METHODS FOR DATA MODELING IN AN ITEM-BASED STORAGE PLATFORM」という名称の2003年8月21日出願の米国特許出願10/646,580号明細書(整理番号MSFT−2735)。
本発明は、コンピュータシステムのデータストレージに関し、より詳細には、データベースシステムで継承をユーザ定義タイプ(UDT)に提供するためのシステムおよび方法であって、UDTが、特定のコントラクトを実施するマネージドタイプを登録することによってデータストアのスカラタイプシステムを拡張するための、リレーショナルデータベースエンジンおよびファイルシステムに関連して用いられる拡張性メカニズムであるシステムおよび方法に関する。
MICROSOFT SQL SERVERは、広範な管理および開発ツール、強力な抽出、変換、およびローディング(ETL)ツール、ビジネスインテリジェンスおよび分析サービス、ならびにその他の機能を提供する包括的なデータベース管理プラットフォームである。その他の改良のなかでもとりわけ、MICROSOFT WINDOWS(登録商標) .NETフレームワーク共通言語ランタイム(CLR)が近ごろSQL SERVERデータベースに統合された。
CLRは、MICROSOFT .NETフレームワークの中核であり、すべての.NETコードのための実行環境を提供する。したがって、CLR内で動作するコードは「マネージドコード」と呼ばれる。CLRは、ジャストインタイム(JIT)コンパイル、メモリの割振りおよび管理、タイプセーフティの施行、例外処理、スレッド管理およびセキュリティを含む、プログラム実行に必要な様々な機能およびサービスを提供する。CLRは、.NETルーチンの最初の呼出し時にSQL SERVERによってロードされる。
以前のバージョンのSQL SERVERでは、データベースプログラマは、サーバ側でコードを書くときにTransact−SQLを使用することに制限されていた。Transact−SQLは、国際標準化機構(ISO)および米国規格協会(ANSI)によって定義された構造化クエリ言語(「SQL」)の拡張である。Transact−SQLを使用すると、データベース開発者は、データベースおよびテーブルを作成、修正、および削除することができ、データベースに格納されたデータを挿入、検索、修正、および削除することができる。Transact−SQLは、特に直接構造化データアクセスおよび操作のために設計されている。Transact−SQLは構造化データアクセスおよび管理に秀でているが、VISUAL BASIC .NETやC#のような本格的なプログラミング言語ではない。例えば、Transact−SQLは、配列、コレクション、for each loops、ビットシフト、またはクラスをサポートしていない。
SQL SERVERデータベースに統合されたCLRでは、データベース開発者は、Transact−SQL単独では達成が不可能または困難であった作業を実施することができるようになった。VISUAL BASIC .NETとC#はどちらも、配列、構造化された例外処理、およびコレクションを完全にサポートする現代のプログラミング言語である。開発者は、CLR統合を活用して、より複雑なロジックを有し、VISUAL BASIC.NETやC#などの言語を使用する計算タスクにより適したコードを書くことができる。こうしたプログラミング言語は、カプセル化、継承、ポリモアフィズムなどのオブジェクト指向機能を提供する。関連するコードは、クラスおよびネームスペースとして容易に統合することができる。
マネージドコードは、計算量が多く複雑な実行ロジックについてTransact−SQLよりも適しており、ストリング操作および正規表現を含む多くの複雑なタスクを広くサポートすることを特徴とする。.NETフレームワークベースクラスライブラリ(BCL)に見出される機能を用いると、データベース開発者は、任意のストアドプロシージャ、トリガ、またはユーザ定義関数から容易にアクセスすることのできる数千の事前ビルドされたクラスおよびルーチンへのアクセスを有する。
マネージドコードの別の利点はタイプセーフティである。マネージドコードの実行前に、CLRは、コードが安全であることを検証する。このプロセスは「検証」と呼ばれる。検証の間、CLRはいくつかのチェックを実施して、コードが安全に実行されることを保証する。例えば、書き込まれていないメモリを読み取らないことを保証するようにコードがチェックされる。CLRはまた、バッファオーバーフローを防止する。
マネージドコードを書くとき、配置単位をアセンブリと呼ぶ。アセンブリはダイナミックリンクライブラリ(DLL)としてパッケージ化される。マネージドDLLアセンブリをSQL SERVERにロードし、SQL SERVERでホストすることができる。サーバ内のアセンブリを登録するためにCREATE ASSEMBLYステートメントが使用される。一例を以下に示す。
Figure 0005108309
この例では、FROM節が、ロードするアセンブリのパス名を指定する。
SQL SERVERは、整数、浮動小数点数、日付、時間、文字ストリングなどの「組込み」スカラタイプを伝統的にサポートしている。こうした組込みタイプにはまた、+、−、*、/などの1組の組込み演算子、ならびにこれらのタイプに対する組込み関数を伴う。こうしたタイプ、演算子、および関数は、製品によって実装およびパッケージ化され、ユーザがそれ自体のタイプを定義できないという意味で「組込み」である。
SQL SERVERなどのデータベースシステムについて、データベースシステムでスカラタイプとして働くが、例えばX座標およびY座標からなる「ポイント」タイプを作成するためのより複雑な構造および振る舞いを含む新しいタイプをユーザが作成できるように、ユーザにデータベースシステムのタイプシステムを拡張できるようにすることが望ましい。この点で、SQL標準および一部のデータベース管理システム(DBMS)製品は、いくつかの形態のタイプ拡張性を記述するのに「ユーザ定義タイプ」という用語を使用している。例えば、SQL−99標準は、既存のSQL組込みデータタイプの値である内部表現を有するようにユーザによって定義することのできるタイプである「特殊タイプ」を記載している。任意選択で、特殊タイプは、比較演算子および算術演算子、タイプ変換、集約(列)関数(例えば最大、最小、平均)を既存のスカラタイプと共有することができる。特殊タイプは、その値に対して制約を定義することができる。加えて、特殊タイプは、ユーザ定義関数を介して特殊タイプに特有な新しい関数を定義することにより、既存のスカラタイプの振る舞いを超えて振る舞いを公開することができる。タイプチェックに関して、特殊タイプと既存のスカラタイプは異なるタイプとみなされる。
特殊タイプの主な利点は、定義の容易さである。新しいタイプの内部表現が既存の組込みタイプで記述することのできる単一のデータメンバを有し、組込みタイプがその新しいタイプに対して必要な振る舞いの大部分を既に実装している場合、特殊タイプが魅力的な代替方法である。ユーザは、タイプ、コンストラクタ、比較演算子(順序付けおよび索引付けに使用される)、算術演算子、およびタイプ変換(キャスティング)オペレータのディスクストレージを管理するのに必要な振る舞いを実施することに気を使う必要はない。ユーザは、基礎となる組込みタイプのどの機能を特殊タイプに関して公開するかを選び、任意選択で、値に関する制約または新しいタイプに関する追加の関数を追加する必要があるだけである。特殊タイプの別の利点は、ヒストグラムの計算などの、組込みタイプに関して利用可能なクエリ処理のすべてを、特殊タイプの列に対して容易に使用できることである。しかし、特殊タイプの欠点は、より複雑なタイプを作成するのに容易に使用できないことである。
SQL−99標準は「構造化タイプ」も記述する。構造化タイプは、ユーザが定義することができ、それぞれが異なるSQL組込みタイプまたはユーザ定義タイプとすることができるデータメンバのコレクションである内部表現を有するタイプである。これは、CおよびC++でのstructの概念と似ている。SQL−99は構造化タイプを定義するスタイルを記述し、これにより、ユーザはタイプをその内部構造によって定義する必要があるだけである。システムは、そのデータメンバ、構成子、および機能に対するアクセサ機能およびミューテータ機能を自動的に生成し、タイプのインスタンスのオンディスク表現を管理するように機能する。
SQLで定義される構造化タイプの主な利点は、(a)タイプの基本的な振る舞いの定義が簡単なことと、(b)より複雑なタイプを定義する柔軟性である。しかし、構造タイプの重大な欠点は、CまたはC++のような汎用プログラミング言語で書かれた外部関数を介して通常は定義されるタイプ特有のメソッドの定義の複雑さである。構造化タイプを完全に定義するためには、タイプの定義者は、SQLと何らかのその他のプログラミング言語との間の線をまたぐ必要がある。
SQL99の特殊タイプ機能および構造化タイプ機能は、SQLデータベースの既存のスカラタイプシステムをユーザが拡張することを可能にするという点でユーザにいくつかの利点をもたらすものの、スカラタイプとして働くが、より複雑な構造および振る舞いを含むユーザ定義タイプを介してデータベースシステムのスカラタイプシステムをユーザが拡張することを可能にする改善されたシステムおよび方法が求められていた。
UDT特許出願で開示される発明は、スカラタイプとして働くが、より複雑な構造および振る舞いを含むユーザ定義タイプを作成することにより、データベースシステムのスカラタイプシステムをユーザが拡張することを可能にするシステムおよび方法を対象とする。その発明によれば、ユーザは、ユーザ定義タイプのインスタンスに対して起動することのできるユーザ定義タイプおよびメソッドの構造を定義するクラスを実装する高レベルプログラミング言語でプログラムコードを書く。UDT特許出願では(そして本明細書では)、「構造」という用語は、ユーザ定義タイプに言及する際には、そのタイプを実装するフィールドまたはプロパティのセットを包含する。UDT特許出願での各フィールドのタイプは、スカラSQLタイプまたは以前に定義したユーザ定義タイプとすることができよう。次いで、ユーザ定義タイプを定義するクラスがコンパイルされ、データベースシステムに登録される。具体的には、ユーザ定義タイプを定義するCLRクラスをアセンブリとしてコンパイルすることができ、次いで、アセンブリをCREATE ASSEMBLYデータ定義ステートメントを介してデータベースシステムに登録する。アセンブリを登録した後、ユーザは、CREATE TYPEデータ定義ステートメントを使用して、ユーザ定義タイプを定義するアセンブリ内のクラスを登録することができる。
UDT特許出願の発明では、データベースシステムは、ユーザ定義タイプがSQLタイプシステムでスカラとして働くことを可能にするためにクラスが実装しなければならない特定のコントラクトを施行する。UDT特許出願では(そして本明細書では)、「コントラクト」という用語は、オブジェクト指向プログラミング環境で実行時に使用され、実行すべきコードが適切に実行されるように保証するために一定の事前条件または要件を満たすことをチェックする技法を指す。その発明によれば、ユーザ定義タイプを定義するクラスが比較するコントラクトは、いくつかの要件を備える。第1に、クラスは、データベースストア中のユーザ定義タイプのインスタンスを永続するための複数の異なるフォーマットのうちの1つを指定しなければならない。第2に、クラスは、ユーザ定義タイプについてヌル値を返すことができなければならない。第3に、クラスは、ユーザ定義タイプをストリングタイプなどの別のタイプとの間で変換するためのメソッドを提供しなければならない。こうした要件が満たされると、データベースシステムは、ユーザ定義タイプのインスタンスを作成することを可能にする。その応用例の一実施形態では、ユーザ定義タイプをテーブル中の列値、変数、ルーチンのパラメータ、またはルーチンの戻り値としてインスタンス化することができる。データベースシステムは、ユーザ定義タイプを定義するクラスについてのメタデータを、その後でそのタイプのインスタンスを作成する際に使用するために格納する。その発明の別の実施形態では、ユーザ定義タイプコントラクトの検証が、そのタイプを定義するクラスを記述するメタデータを使用して実施される。
ユーザ定義タイプのインスタンスを永続するための複数の異なるフォーマットは、ユーザ定義タイプのインスタンスがデータベースシステムのネイティブフォーマットに従って自動的にシリアライズされる第1フォーマットと、ユーザ定義タイプのインスタンスがユーザ作成のクラスで定義される形でシリアライズされる第2フォーマットとを備える。さらに、MICROSOFT .NET CLRがその中に統合されるMICROSOFT SQL SERVER内でUDT特許出願の発明が具体化されたとき、ユーザ定義タイプのインスタンスがMICROSOFT .NETフレームワークによって与えられる方法に従ってシリアライズされる第3フォーマットが利用可能である。
UDT特許出願の発明では、データベースシステムのクエリ言語中の式は、式の評価がユーザ定義タイプのインスタンスに関するメソッドの呼出しを必要とするように、ユーザ定義タイプのインスタンスに対する1つまたは複数の参照を含むことができる。データベースシステムがそのようなクエリ言語式を受け取ったとき、データベースシステムは、その表現を、実行されたときにユーザ定義タイプのインスタンスに関する必要なメソッドを起動する一連のプログラムコード命令に変換する。次いでデータベースシステムは、クエリ言語式の評価の結果としてメソッド呼出しの結果を返す。一実施形態では、ユーザ定義タイプのインスタンスが、インスタンスに関するメソッドを起動する前にデシリアライズされる。
その発明の別の特徴は、ミューテータメソッドの呼出しを介してユーザ定義タイプのインスタンスの値を変更できることである。具体的には、ユーザ定義タイプを定義するクラスの作成者が、クラスの一部としてミューテータメソッドを含める。ユーザ定義タイプのインスタンスに対して起動されたとき、ミューテータメソッドは、ユーザ定義タイプの値を変更することを可能にする。このプロセスは、ユーザ定義タイプのインスタンスをデシリアライズし、ミューテータメソッドを起動してインスタンスのデシリアライズされたデータの値を変更し、そしてユーザ定義タイプの修正されたインスタンスをシリアライズしてその変更を永続することを備えることができる。
その発明のさらに別の特徴によれば、ユーザ定義タイプを定義するクラスは、ユーザ定義タイプのインスタンスのシリアライズしたバイナリ表現がバイナリ順になることを指定する属性をさらに含むことができる。これにより、そのタイプのインスタンスに対するバイナリ比較を行うことが可能となり、そのタイプのインスタンスに対して索引付けすることも可能となる。具体的には、バイナリ順のユーザ定義タイプのインスタンスでは、そのタイプの2つのインスタンスの何らかの比較を必要とするクエリ言語式がデータベースシステムで受領されたとき(例えば、>、<、または=)、どちらのインスタンスもデシリアライズすることなく、その2つのインスタンスのシリアライズされたバイナリ表現を使用して式を評価することができる。さらに、バイナリ順であるユーザ定義タイプでは、ユーザ定義タイプとして定義された列を有するテーブルをデータベースストア内に作成することができる。次いでその列に対して索引を作成することができる。ユーザ定義タイプを参照するクエリ言語表現を介して索引を作成することもできる。この場合、まずその表現を介して算出された列が生成され、次いで算出された列を介して索引が作成される。
本発明の様々な実施形態は、UDTフレームワークを拡張して継承をサポートすることを対象とする。継承は、オブジェクト指向プログラミングの主要な教義の1つであり、ほとんどの現代のタイプシステム(CLRタイプシステムやXSDタイプシステムなど)にとって基本的構成単位である。この拡張を用いると、ストアのオブジェクトデータモデリング機能が大きく改善される。この拡張により、厄介で低速なオブジェクト−リレーショナルマッピング技術を必要とすることなく、共通言語ランタイム(CLR)タイプシステムからデータベースタイプシステムへの自然なマッピングが可能となる。クエリ言語で継承に関する概念をサポートすることにより、継承のためのSQLプログラミングモデルが著しく単純化される。
ユーザ定義タイプに関する継承が他のデータベース製品で実装されているが、本発明の様々な実施形態は、既存の技術で提示されていない以下の機能のうち1つまたは複数を有するUDT継承ソリューションを対象とする。
・CLRタイプシステムとのシームレスな統合。本発明のいくつかの実施形態は、基本UDTコントラクトがマネージドタイプに対する1組の必要なカスタム属性およびインターフェースとして指定されるUDT継承システムおよび方法を対象とし、継承がこの同じ概念を拡張し、マネージドタイプ定義を使用してSQLタイプシステムに対して継承の仕様を駆動する。この解決策により、開発者は、限定はしないがC#、C++、およびVB.NETを含む、開発者が選ぶ任意のCLS準拠プログラミング言語で、継承されるタイプを作成することが可能となる。
・置換可能性の完全サポート。本発明のいくつかの実施形態では、サイト(変数、パラメータ、列定義など)が特定のUDTであると宣言された場合、そのUDTの任意のサブタイプの値をそのサイトに格納することができる。この置換可能性の概念は、キャスティング、変換、割当て、およびメソッド呼出し、ならびにクライアントアプリケーションが結果セットを処理する方式を含むすべてのタイプ使用法に拡張される。
・索引付けおよびクエリサブシステムとの深い統合。本発明の多数の実施形態では、継承が、宣言済みタイプとは異なる可能性のある、値の厳密なランタイムタイプの概念を追加する。例えば、SQLサーバは、この種の情報にわたる索引の作成をサポートし、値のタイプに基づく述部の索引も使用する。継承は、サブタイプで再定義(オーバーライド)することのできる仮想的な振る舞いの概念も追加し、この概念は、特定のUDT機能の索引付け可能性の計算に折り込むことができ、タイプ作成時に検証することができる。
・クエリ可能なメタデータおよびカタログサービス。本発明の様々な実施形態では、タイプとそのスーパータイプの間の関係がタイプ作成時にメタデータに記録され、クエリ可能カタログビューを介して利用可能である。これにより、アプリケーションがクエリを構成し、特定のタイプの置換可能範囲を決定することが可能となる。
この点で、本発明の一実施形態は、ユーザ定義タイプの構造を記述する情報ならびにユーザ定義タイプ自体と別のユーザ定義タイプ(サブタイプまたはスーパータイプ/ベースタイプ)の間の継承関係を記述する情報を含む少なくとも1つのユーザ定義タイプについての拡張可能タイプシステムを有するデータベースを対象とする。ある実施形態では、ユーザ定義タイプは、例えば共通言語ランタイム(CLR)ステートメント、C、C++、およびC#(「Cシャープ」)のステートメント、ならびに/あるいはビジュアルベーシックステートメントなどの、シーケンシャルクエリ言語(SQL)ステートメント以外の何らかで定義される。いずれにしても、いくつかの実施形態はさらに、データベースが2つのユーザ定義タイプ間の継承関係を(一方をサブタイプとして、他方をスーパータイプ/ベースタイプとして)認識するシステムを対象とする。
ある実施形態では、データベースは、前記データベースへのユーザ定義タイプの明示的登録によって2つのユーザ定義タイプ間の前記継承関係を認識する。この点で、いくつかの実施形態に関する、本発明の1つの包括的方法は、(a)タイプをアセンブリとしてコンパイルすること、(b)前記アセンブリを前記データベースに登録すること、(c)前記アセンブリの前記タイプを前記データベースに登録すること、および(d)前記タイプを使用することを含む。
上記の概要、ならびに好ましい実施形態の以下の詳細な説明は、添付の図面と一緒に読むときにより良く理解することができる。本発明を例示するために、図面には本発明の例示的構成を示す。しかし、本発明は開示の特定の方法および手段に限定されない。
本発明の対象を、法定の要件を満たすように具体的に説明する。しかし、この説明自体は本特許の範囲を限定するものではない。むしろ、特許請求の範囲に記載された対象を、現在の技術または将来の技術と共に、この文書で説明するものと同様の異なるステップまたは要素を含むように他の方式でも具体化できることを発明者は意図している。さらに、本明細書では「ステップ」という用語を、使用する方法の異なる諸態様を含むように使用することがあるが、個々のステップの順序を明示的に述べるときを除いて、この用語を、本明細書で開示する様々なステップ間の特定の順序を示唆するものと解釈すべきではない。
以下で説明する実施形態では、本発明の上記の特徴を、MICROSOFT SQL SERVERデータベースシステムで実装されたものとして説明する。上述のように、SQL SERVERは、MICROSOFT .NET共通言語ランタイム(CLR)を組み込んで、SQL SERVERデータベースのデータストアに関してマネージドコードを書いて実行することを可能にする。以下で説明する実施形態はこのコンテキストで動作するが、本発明は決してSQL SERVER製品での実装に限定されないことを理解されたい。むしろ、本発明は、オブジェクト指向データベースシステムや、オブジェクトリレーショナル拡張を有するリレーショナルデータベースシステムなどの、データベースストアに対して動作するようにオブジェクト指向プログラミングコードの実行をサポートする任意のデータベースシステムで実装することができる。したがって、本発明が以下で説明する特定の実施形態に限定されず、添付の特許請求の範囲で定義される本発明の精神および範囲内のすべての修正を包含することを理解されたい。
(コンピュータ環境)
本発明の多数の実施形態はコンピュータ上で実行することができる。図1および以下の議論は、本発明を実施することができる適切なコンピューティング環境の簡潔で一般的な説明を与えるものである。必須ではないが、クライアントワークステーションまたはサーバなどのコンピュータで実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的コンテキストで本発明を説明する。一般に、プログラムモジュールには、特定のタスクを実行し、あるいは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらに、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの、またはプログラム可能な消費者向け電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどを含むその他のコンピュータシステム構成を用いて本発明を実施できることを当業者は理解されよう。本発明はまた、通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールは、ローカルメモリ記憶デバイスとリモートメモリ記憶デバイスのどちらにも位置することができる。
図1に示すように、例示的汎用コンピューティングシステムは、処理装置21と、システムメモリ22と、システムメモリを含む様々なシステム構成要素を処理装置21に結合するシステムバス23とを含む従来型パーソナルコンピュータ20などを含む。システムバス23は、様々なバスアーキテクチャのうちのいずれかを用いる、メモリバスまたはメモリコントローラと、周辺バスと、ローカルバスとを含むいくつかのタイプのバス構造のうちのいずれでもよい。システムメモリは、読取り専用メモリ(ROM)24およびランダムアクセスメモリ(RAM)25を含む。始動中などにパーソナルコンピュータ20内の要素間で情報を転送する助けになる基本ルーチンを含む基本入出力システム(BIOS)26がROM24内に格納される。パーソナルコンピュータ20は、ハードディスクを読み書きするハードディスクドライブ27と、リムーバブル磁気ディスク29を読み書きする磁気ディスクドライブ28と、CD−ROMまたはその他の光媒体などのリムーバブル光ディスク31を読み書きする光ディスクドライブ30とをさらに含むことができる。ハードディスクドライブ27はハードディスクドライブインターフェース32、磁気ディスクドライブ28は磁気ディスクドライブインターフェース33、および光ディスクドライブ30は光ドライブインターフェース34によって、それぞれシステムバス23に接続される。ドライブおよびその関連するコンピュータ可読媒体は、コンピュータ20に対してコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性記憶を実現する。本明細書で説明する例示的環境は、ハードディスク、リムーバブル磁気ディスク29、およびリムーバブル光ディスク31を利用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)などのコンピュータでアクセス可能なデータを格納することができるその他のタイプのコンピュータ可読媒体も例示的動作環境で使用できることを当業者は理解されたい。
オペレーティングシステム35、1つまたは複数のアプリケーションプログラム36、他のプログラムモジュール37、およびプログラムデータ38を含むいくつかのプログラムモジュールを、ハードディスク、磁気ディスク29、光ディスク31、ROM24、またはRAM25上に格納することができる。ユーザは、キーボード40やポインティングデバイス42などの入力デバイスを介してパーソナルコンピュータ20コマンドおよび情報を入力することができる。その他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディスク、スキャナなどを含めることができる。上記およびその他の入力デバイスはしばしば、システムバスに結合されたシリアルポートインターフェース46を介して処理装置21に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などのその他のインターフェースによって接続することもできる。モニタ47またはその他のタイプのディスプレイデバイスも、ビデオアダプタ48などのインターフェースを介してシステムバス23に接続される。モニタ47に加えて、パーソナルコンピュータは通常、スピーカやプリンタなどのその他の周辺出力デバイス(図示せず)を含む。図1の例示的システムはまた、ホストアダプタ55、SCSI(Small Computer System Interface)バス56、およびSCSIバス56に接続された外部記憶デバイス62も含む。
パーソナルコンピュータ20は、リモートコンピュータ49などの1つまたは複数のリモートコンピュータに対する論理接続を使用して、ネットワーク環境で動作することができる。リモートコンピュータ49は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、またはその他の共通ネットワークノードでよく、一般にはコンピュータ20に関して上記で説明した要素のうちの多数またはすべてを含むが、図1にはメモリ記憶デバイス50だけを示してある。図1に示す論理接続は、ローカルエリアネットワーク(LAN)51および広域ネットワーク(WAN)52を含む。このようなネットワーキング環境は、オフィス全体または企業全体のコンピュータネットワーク、イントラネット、およびインターネットで一般的なものである。
LANネットワーキング環境で使用されるとき、コンピュータ20は、ネットワークインターフェースまたはアダプタ53を介してLAN51に接続される。WANネットワーキング環境で使用されるとき、コンピュータ20は一般に、インターネットなどの広域ネットワーク52を介して通信を確立するモデム54またはその他の手段を含む。モデム54は内蔵でも外付けでもよく、シリアルポートインターフェース46を介してシステムバス23に接続される。ネットワーク環境では、パーソナルコンピュータ20に関して示したプログラムモジュールまたはその一部を、リモートメモリ記憶デバイス内に格納することができる。図示したネットワーク接続は例示的なものであって、コンピュータ間の通信リンクを確立する他の手段も使用できることを理解されよう。
本発明の多数の実施形態はコンピュータ化システムに非常に適していると考えられるが、この文書では本発明をそのような実施形態に限定するものではない。逆に、本明細書では、「コンピュータシステム」という用語は、デバイスが電子的、機械的、論理的、または仮想的なものであるかに関わらず、情報を格納および処理することができ、かつ/または格納した情報を使用してデバイス自体の振る舞いまたは実行を制御することができる任意かつすべてのデバイスを包含するものとする。
(ネットワーク環境)
図2は、例示的なネットワーク型コンピューティング環境または分散コンピューティング環境の概念図である。この分散コンピューティング環境は、コンピューティングオブジェクト10a、10bなど、およびコンピューティングオブジェクトまたはデバイス110a、110b、110cなどを含む。こうしたオブジェクトは、プログラム、メソッド、データストア、プログラマブルロジックなどを含むことができる。オブジェクトは、PDA、テレビジョン、MP3プレーヤ、パーソナルコンピュータなどの同一のデバイスまたは異なるデバイスの各部分を含むことができる。各オブジェクトは、通信ネットワーク14によって他のオブジェクトと通信することができる。このネットワークは、それ自体が図2のシステムにサービスを提供する他のコンピューティングオブジェクトおよびコンピューティングデバイスを含むことができ、それ自体が複数の相互接続されたネットワークを表すことができる。本発明の一態様によれば、各オブジェクト10a、10bなど、または110a、110b、110cなどは、APIを利用する可能性のあるアプリケーション、あるいは他のオブジェクト、ソフトウェア、ファームウェア、および/またはハードウェアを含むことができ、本発明の方法を実施するのに使用されるプロセスの使用を要求する。
110cなどのオブジェクトを他のコンピューティングデバイス10a、10b上など、または110a、110b上などでホストできることも理解されよう。したがって、図示する物理的環境は、接続されるデバイスをコンピュータとして示すが、そのような図示は単なる例であり、別法として、PDA、テレビジョン、MP3プレーヤなどの様々なデジタルデバイス、インターフェース、COMオブジェクトなどのソフトウェアオブジェクトを含む物理的環境を図示し、説明することができる。
分散コンピューティング環境をサポートする様々なシステム、構成要素、およびネットワーク構成が存在する。例えば、コンピューティングシステムを、有線システムまたはワイヤレスシステムで、ローカルネットワークで、あるいは広域分散ネットワークで接続することができる。現在では、ネットワークの多くはインターネットに結合されている。インターネットは、広域分散コンピューティングのためのインフラストラクチャを提供し、多数の異なるネットワークを包含する。本発明に伴って行われる例示的通信のために任意のインフラストラクチャを使用することができる。
インターネットは一般に、コンピュータネットワーキングの技術分野で周知のTCP/IPプロトコル群を使用するネットワークおよびゲートウェイの集合を指す。TCP/IPは、「Transmission Control Protocol/Internet Protocol」の頭字語である。インターネットは、ユーザがネットワークを介して対話し、情報を共有することを可能にするネットワーキングプロトコルを実行するコンピュータによって相互接続された、地理的に分散したリモートコンピュータネットワークのシステムと述べることができる。このような広範囲の情報の共有のために、インターネットなどのリモートネットワークは、これまでのところ一般には、開発者が専用のオペレーションまたはサービスを実行するために本質的に無制限にソフトウェアアプリケーションを設計することができるオープンシステムとして発展してきた。
したがって、このネットワークインフラストラクチャにより、クライアント/サーバ、ピアツーピア、またはハイブリッドアーキテクチャなどのネットワークトポロジのホストが可能となる。「クライアント」とは、無関係の別のクラスまたはグループのサービスを使用するクラスまたはグループのメンバである。したがって、コンピューティングにおいて、クライアントは、別のプログラムによって提供されるサービスを要求するプロセス、すなわち大雑把に言えば1組の命令またはタスクである。クライアントプロセスは、他のプログラムまたはサービス自体についての動作詳細を「認識」する必要なしに、要求したサービスを利用する。クライアント/サーバアーキテクチャ、特にネットワークシステムでは、クライアントは通常、別のコンピュータ、例えばサーバによって提供される共有ネットワーク資源にアクセスするコンピュータである。図2の例では、コンピュータ110a、110bなどをクライアントとみなすことができ、コンピュータ10a、10bなどをサーバとみなすことができるが、環境に応じて、任意のコンピュータをクライアント、サーバ、またはその両方とみなすことができる。こうしたコンピューティングデバイスのいずれも、本発明のユーザ定義タイプ技法を含む方式でデータを処理している可能性がある。
サーバは一般に、インターネットなどのリモートまたはローカルのネットワークを介してアクセス可能なリモートコンピュータシステムである。クライアントプロセスは第1のコンピュータシステムでアクティブにすることができ、サーバプロセスは第2のコンピュータシステムでアクティブにすることができ、それらが通信を介して互いに通信し、したがって分散機能が提供され、複数のクライアントがサーバの情報収集機能を利用することが可能となる。本発明に従って利用されるどんなソフトウェアオブジェクトも複数のコンピューティングデバイス間に分散させることができる。
クライアントとサーバは、プロトコル層で提供される機能を利用して互いに通信することができる。例えば、HTTP(HyperText Transfer Protocol)は、ワールドワイドウェブ(WWW)すなわち「ウェブ」に関連して使用される一般的なプロトコルである。通常、インターネットプロトコル(IP)アドレスなどのコンピュータネットワークアドレス、またはURL(Universal Resource Locator)などのその他の参照を使用して、サーバまたはクライアントコンピュータを互いに識別することができる。ネットワークアドレスをURLアドレスと呼ぶことができる。利用可能な任意の通信媒体を介して通信を実現することができる。
したがって、図2は、本発明を利用することのできる、サーバがネットワーク/バスを介してクライアントコンピュータと通信する例示的なネットワーク環境または分散環境を示す。ネットワーク/バス14は、ポータブルコンピュータ、ハンドヘルドコンピュータ、シンクライアント、ネットワーク式アプライアンスなどのいくつかのクライアントまたはリモートコンピューティングデバイス110a、110b、110c、110d、110eなど、または本発明によるVCR、TV、オーブン、ライト、ヒータなどのその他のデバイスを有するLAN、WAN、イントラネット、インターネット、またはその他のネットワーク媒体でよい。したがって、データベースストア内にユーザ定義タイプを作成することがそれに関連して望ましい任意のコンピューティングデバイスに本発明を適用できることが企図される。
例えば通信ネットワーク/バス14がインターネットであるネットワーク環境では、サーバ10a、10bなどは、クライアント110a、110b、110c、110d、110eなどがHTTPなどのいくつかの周知のプロトコルのいずれかを介して通信することができるサーバでよい。分散コンピューティング環境の特徴として、サーバ10a、10bなどは、クライアント110a、110b、110c、110d、110eなどとしても働くことができる。
通信は適宜、有線またはワイヤレスでよい。クライアントデバイス110a、110b、110c、110d、110eなどは、通信ネットワーク/バス14を介して通信することがあり、または通信しないことがあり、それらに関連する独立な通信を有することがある。例えば、TVまたはVCRの場合、その制御に対するネットワーク態様が存在することがあり、または存在しないことがある。各クライアントコンピュータ110a、110b、110c、110d、110eなど、およびサーバコンピュータ10a、10bなどは、様々なアプリケーションプログラムモジュールまたはオブジェクト135を備えることがあり、様々なタイプの記憶素子またはオブジェクトに対する接続またはアクセスを備えることがあり、それらにわたってファイルまたはデータストリームを格納することができ、またはそれらに対してファイルまたはデータストリームの部分をダウンロードし、送信し、または移動することができる。任意のコンピュータ10a、10b、110a、110bなどは、本発明に従って処理されるデータを格納するデータベース、メモリ、またはその他の記憶素子20の保守および更新の任を担うことができる。したがって、本発明は、クライアントコンピュータ110a、110bなど、およびその他の類似のデバイス、ならびにデータベース20と対話することのできるコンピュータネットワーク/バス14およびサーバコンピュータ10a、10bなどにアクセスすることができ、対話することができるクライアントコンピュータ110a、110bなどを有するコンピュータネットワーク環境で使用することができる。
UDTおよびマネージドコード
図3は、ユーザ定義タイプのインスタンスのシリアライゼーションおよびデシリアライゼーションを示すブロック図である。図示するように、ユーザ定義タイプのインスタンスは、メモリ内のインスタンスを表すオブジェクトのシリアライゼーションによってディスク上に存続する。UDTのインスタンスのメソッドを参照する述部または表現を含むクエリをアプリケーションが生成するとき、インスタンスの存続形式がデシリアライズされ(「ハイドレーション」とも呼ばれるプロセス)、CLRは、格納された値を受け取るために、全オブジェクトに対してメモリを割り振る。次いでCLRは、アプリケーションまたはユーザの望む振る舞いを実施するオブジェクトに対する適切なメソッドを起動する。
(UDT継承)
本明細書では、以下の用語は以下に示す意味を有する。
・ベースタイプ:所与のタイプによって継承されるタイプであり、様々な継承モデルではスーパータイプ、スーパークラス、または固有のアンセスタ(proper ancestor)とも呼ばれる。
・サブタイプ:そのベースタイプとして、直接または別のサブタイプを介して、現タイプを有するタイプ。
・サイト:関連のタイプ定義を有するプログラミング言語での任意のコンテキスト。その例には変数宣言、パラメータ定義、列定義などが含まれる。
・宣言済みタイプ:テーブル中の列のタイプ、または関数パラメータなどのサイトの「コンパイル時」タイプ。
・厳密なタイプ:特定の値の「実行時」タイプ。強く型付けされたシステムでは、厳密なタイプは宣言済みタイプまたは宣言済みタイプのサブタイプでなければならない。
・置換可能性:ベースタイプの値がサブタイプの値で置き換えられるサイトのプロパティ。例えば、パラメータ置換可能性は、関数が特定のタイプのパラメータを取るように宣言された場合、サブタイプの値で関数に渡すことが可能であるべきであること意味する。
本発明の様々な実施形態では、UDTは、SQLサーバに登録されたアセンブリとして実装されたマネージドタイプである。UDTは、テーブル定義変数およびパラメータを含む、ネイティブタイプを使用することのできるほとんどのコンテキストで使用することができる。UDTコントラクトに準拠するUDTで定義されたメソッド、プロパティ、およびフィールドをT−SQLから起動することができる。
いくつかの実施形態では、UDTは、振る舞いを有する単純なスカラであると想定される。この想定は、UDTでサポートされる単純なプログラミングモデルおよびシリアライゼーションレイアウトに反映される。例えば、ファイルシステムは、UDTアブストラクションを使用して、単純なスカラではなく、複雑な構造および振る舞いを有するタイプである可能性のある「構造化タイプ」を作成することができる。
以下の擬似コードは、本発明のいくつかの実施形態についてのサブタイプの作成を記述する。
Figure 0005108309
継承コントラクトを確立するために、本発明のいくつかの実施形態では、UDT作成者は、タイプ階層内のベースタイプに例えばSqlUserDefinedTypeカスタム属性で注釈を付けなければならず、この属性に関するプロパティは、タイプファミリ(タイプまたはそのサブタイプのすべて)全体に適用されるインバリアントを指定する。SqlUserDefinedTypeに関するプロパティの非網羅的なリストを図4に示す。次いで、タイプ登録時に、ユーザは特定のタイプをその下に登録しなければならないベースSQLタイプを示すために「UNDER」節を追加しなければならない。例えば、
Figure 0005108309
本発明のいくつかの実施形態では、base−type−nameを指定のスキーマで有効なUDTとして登録しなければならない。さらに、CLRタイプは、base−type−nameがその上で定義されるCLRタイプの直接のサブタイプでなければならない。サブタイプは、SqlUserDefinedTypeAttributeを定義すべきはなく、その親から属性を継承すべきである。さらに、ベースタイプはバイナリ順であってはならない。同様に、ベースタイプで指定されるすべてのアウトオブバンドルーチンプロパティ(SqlMethodAttribute注釈)は、サブタイプ定義に適合しなければならず(具体的には、ベースタイプで定義されるすべての索引付け可能メソッドは、サブタイプでオーバライドされるルーチンについて引き続き索引付け可能でなければならない)、この情報はベースタイプから収集することができ、CREATE TYPEチェックの一部としてサブタイプ中のすべてのルーチンを列挙することによって検証することができる。
本発明の様々な実施形態では、UDT継承のためのフレームワークを、機能およびその基礎となる実装の外面エリアによって記述することができる。さらに、サブタイプの値が、列定義で、バッチ、ストアドプロシージャ、および関数でのローカル変数およびパラメータ宣言で、ならびに結果列が列の宣言済みタイプまたはそのサブタイプである値を含むことのできるクエリ結果セットで置換可能とみなされる。
本発明のいくつかの実施形態では、サブタイプのインスタンスを、スーパータイプとなるように宣言される列に格納することを可能にすることは、以下の含意を有する。(a)シリアライゼーションフォーマットはベースタイプおよびサブタイプについて同じであるべきであり、(b)親のMaxByteSize値は、サブタイプのインスタンスを格納することが可能となるように十分大きくなければならない。実行時に非効率なスペースが存在する場合、ベースタイプの列内にサブタイプの値を格納する試みは失敗し、したがってこのエラーを防止するために、ベースタイプを無制限で定義することができる。
本発明の様々な実施形態では、すべての割当ては値の厳密なタイプを保持することができ、サブタイプの値をベースタイプの変数に割り当てることは常に成功するが、ベースタイプの宣言済みタイプを有する値をサブタイプの変数に割り当てることは、値の厳密なタイプがターゲットタイプに割当て可能である場合にのみ成功する明示的変換を必要とする。例えば、Addressがタイプであり、かつUSAddressがアドレスのサブタイプである場合、図5に示すように、Addressesは、タイプAddressの列addrcolを有するテーブルとすることができる。
本発明のいくつかの実施形態についての実装では、2つのタイプ間の継承関係についての情報は、データベースのスカラタイプシステムの第1クラス部分であり、この情報を使用して、値間の割当て可能性および変換が決定される。ある実施形態では、IS OFおよびTREATと呼ばれる2つの新しい演算子がスカラタイプシステムに導入され、こうした演算子を使用して、スカラ式評価中にタイプ述部およびインプレース変換をモデル化するのに使用することができる。適切なセマンティック推理および共通の演算(クエリのプロジェクトリスト中のIS OF述部およびTREAT)の結合を可能にするために、TREAT演算子がクエリコンパイル中に変換される。さらなる最適化として、IS OF演算子をhierarchical_type_idの点で再書込みして、利用可能な何らかのタイプ特有の索引を利用することができる。UDT式に遭遇したとき、UDT式コンパイルプロセスが修正され、ディスパッチの性質(仮想と静的)が反映され、パラメータタイプを含むメソッドの全シグニチャに基づいてメソッドが明確にされる。この情報が、外部コンパイルプロセスから渡され、メソッド位置で使用される。メソッドが見つかった後、適切なIL命令が使用されて、静的ディスパッチまたは仮想メソッドが起動される。次いで実行時に、UDTデシリアライゼーションコードが値の厳密なタイプを使用して、正しいタイプのオブジェクトを作成し、それを永続化された状態で追加する。このオブジェクトが実行スタック上にプッシュされ、メソッドが起動する。
いくつかの実施形態では、クライアント/サーバデシリアライザも、デシリアライズされる値の厳密なタイプを使用して、それがデシリアライズすべきCLRタイプを決定する。クライアントが以前にそのタイプに遭遇していない場合、クライアントは、クローン接続上でアウトオブバンド要求を作成して、オンデマンドでCLRタイプについてのメタデータをダウンロードし、この情報を使用してCLRタイプの位置を突き止める(図6参照)。
いくつかの実施形態では、T−SQLから起動されたすべてのメソッド、プロパティ、およびフィールドが、呼出しサイトの宣言済みタイプではなくインスタンスの厳密なタイプを使用して動的に解決されるということが仮定されることがある。さらに、スーパータイプで定義され、T−SQLから直接呼出し可能である、すべての継承されるメソッド、プロパティ、フィールドが許容されることになる。したがって、宣言済みのメソッドと継承されるメソッドを起動することについてシンタックス上の差はない。
本発明のいくつかの実施形態では、ターゲット呼出しの位置を突き止める方法を以下のような擬似コードで特徴付けることができる。Dが呼出しサイトの宣言済みタイプであり、Mがメソッド名、P1...Pnがメソッドに対するパラメータ、T1..Tnがパラメータのタイプである場合で、クエリが「select<タイプDのサイト>.M(P1...Pn)」である場合、呼出しメソッドは以下を備えるであろう。
Figure 0005108309
本発明のいくつかの実施形態で使用されるメソッド呼出しに関して、メソッド名マッチングがバイナリ照合を使用する。さらに、パラメータタイプチェックにより、各パラメータについてのCLRタイプが暗黙的にSQLパラメータタイプから変換可能である。さらに、2つの適切なメソッドが存在する場合、メソッドオーバーローディングが許可されないが、2つのメソッドが異なる数のパラメータを取る場合、または階層内の異なるタイプで定義される場合、メソッドオーバーローディングが許可される。同様に、メソッドまたはプロパティがSQLに登録されていないCLRサブタイプのインスタンスを返す場合、システムは実行時にエラーを生成する。さらに、使用される実際のディスパッチ命令は、解決されたメソッドに依存する。すなわち、見つかったメソッドが仮想メソッドまたはオーバライドされたメソッドとして定義される場合、仮想ディスパッチが使用され、そうでない場合、静的ディスパッチが使用される。
本発明の様々な実施形態では、タイプからそのスーパータイプへの変換(アップキャスト)は常に成功するが、タイプからそのサブタイプ(ダウンキャスト)への変換は、値が正しいタイプである場合に成功し、値が正しいタイプでない場合は失敗する。厳密な失敗モードは、使用する変換演算子に依存する。
そのような実施形態では、以下のようなCONVERT、CAST、TREATという3つの変換演算子が存在する。
・CONVERT([schema.]type,target_type)→[schema.]typeの値、あるいは変換が失敗した場合はエラー。
・CAST(value as [schema.]target_type)→[schema.]typeの値、あるいは変換が失敗した場合はエラー。
・TREAT(value as [schema.]target_type)→schema.]typeの値、あるいは変換が失敗した場合はNULL。
こうした実施形態では、CASTおよびCONVERTは、継承および置換可能性を理解するように修正された既存の演算子とすることができる。一方TREATは、SQL99順応シンタックス(SQL標準の§6.25)であり、スーパータイプの式がそのサブタイプの1つの式として処理されるときにダウンキャスティングまたはナローイングシナリオで使用するためのものである(この標準は、このサブタイプ処理を呼び出す)。この演算子は2つの状況で有効である。(a)サブタイプで定義されるプロパティにアクセスする、(b)サブタイプで定義されるプロパティを更新する。コンパイル時に、値の宣言済みタイプがtarget_typeのスーパータイプでない場合、エラーがレポートされ、TREATは失敗する。例えば、
Figure 0005108309
一方、この標準は、NULLインスタンスに対するミューテータメソッドの起動をサポートせず、SQL SERVERも、TREAT演算子の結果に対してこの制限を施行するであろう。TREATがNULL値を生成した場合、システムは、NULL値を更新しようと試みてエラーを生成することになる。言い換えれば、本発明のいくつかの実施形態では、図7に示すテーブルで表されるように、論理的TREAT(value as type_x)をIF(value IS OF type_x)THEN value else NULLに変換することができる。図7は一般に、CONVERT、CAST、TREATコマンドに関する振る舞いおよびセマンティクスを示す。
いくつかの実施形態では、UDT拡張の一部として、SqlUserDefinedTypeAttributeおよびSqlMethodAttributeに関する新しいプロパティを使用して、受け取ったもの(これ)がヌル値である場合にタイプに対するメソッドを起動すべきかどうかを制御することができるが、SqlMethodAttributeを使用して真をセットすることにより、特定のメソッドについてこれをオーバライドすることができる。こうした実施形態では、デフォルト値はFALSEである。さらに、メソッドの戻りタイプがヌル可能タイプである場合、そのタイプについての識別されたヌル値が返される。戻りタイプがヌル可能でない場合、そのタイプについてのデフォルトclr値が返される。参照タイプについてのデフォルト値がヌルである場合、値タイプについてのデフォルト値は、そのタイプについてのデフォルトコンストラクタの呼出し結果である。
様々な実施形態では、システム内のすべてのヌル値が型付けされる。しかし、標準で指定されるタイプ述部は、値がヌルである場合にunknownを返し、SQLから特定のタイプのヌル値を決定する方法はない。したがって、こうした実施形態は、すべてのヌル値を呼出しサイトの宣言済みタイプであるとして処理し、サイトに挿入された値の厳密なタイプとしては処理しない。例えば、
Figure 0005108309
様々な実施形態では、タイプ述部は、(a)列中のタイプのすべておよびそのサブタイプのすべてのすべてのインスタンスの戻りと、(b)(SQL99標準の§8.14に記載の)列中の特定のタイプのすべてのインスタンスの戻りのどちらもサポートする。以下について検討する。
Figure 0005108309
udtColumnOrValueがヌルである場合、結果はunknownであり、そうでない場合、述部はブール結果を返す。
例えばタイプだけのインスタンスなど、ブールを生成する式が許可されるすべてのスカラコンテキストでタイプ述部を使用することができる。
Figure 0005108309
これは、タイプおよびそのサブタイプのすべてのインスタンスとは対照的である。
Figure 0005108309
さらに、本発明のいくつかの実施形態では、sys.assembly_typesカタログビューが、以下のように1つの追加の列を有することになる。
Figure 0005108309
さらに、本発明の多数の実施形態では、仮想メソッドがサブタイプでオーバライドされるとき、オーバライドされる実装は、ベースメソッドで指定されるルーチンプロパティに対して置換可能でなければならない。このマトリックスがタイプ登録時にチェックされ、無効な組合せが検出された場合にエラーが生成される。ここでの指針原理は、サブタイプ実装はベースメソッドの索引付け可能性を破るべきではないことである。したがって、ベースメソッド定義が索引付け可能である場合、オーバライドされた実装も索引付け可能であるべきである。さらに、サブタイプ実装は、ベースメソッド定義(ヌルレシーバおよび引数、sqlファセット、データアクセス、ミューテータメソッド呼出し)のためにコンパイルされた式を無効にすべきではない。一方、サブタイプ実装は、ベースと競合しない振る舞いを追加することができるが、キャストが必要であり、またはアクティブ化されるように処理される(索引付け可能性)。「N」が「新しいサブタイプ」を表す場合、すなわち、ベースタイプが偽にセットされた値を有し、または定義されていない場合であってもサブタイプがプロパティを真にセットすることができる場合で、「S」が「ベース定義と同一」を表す場合、すなわち、サブタイプ中の定義がベースタイプと同一である場合、UDT方法は、図8に示すルーチンプロパティを含むことができる。
上記に加えて、本発明のいくつかの実施形態では、あらゆるUDT値は、その特定のtype_idを有さなければならず、これは、UDTが作成された後は決して変化すべきではない。UDT継承ではバイナリ順序付けがサポートされないので、この手法は、タイプに関するバイナリ比較に影響を及ぼさない(バイナリ比較されるすべてのインスタンスが同一のtype_idを有するため)。さらに、DROPタイプは、サブタイプの値を含むスーパータイプのいずれかの定義された列が存在しない(すなわち、結果としてDROPタイプは費用がかかる可能性がある)ことをチェックすべきである。同様に、addサブタイプは、チェーン中のあらゆるタイプについてのスーパータイプを参照する既存のcomp planを無効にする。
(まとめ)
本明細書で説明した様々なシステム、方法、および技法を、ハードウェアまたはソフトウェアで、あるいは適切ならそれらの組合せで実装することができる。したがって、本発明の方法および装置、またはその何らかの態様または部分は、フロッピィディスケット、CD−ROM、ハードドライブ、またはその他の任意の機械可読記憶媒体などの有形媒体として具体化されたプログラムコード(すなわち命令)の形を取ることができ、プログラムコードがコンピュータなどのマシンにロードされて実行されたとき、そのマシンは本発明を実施する装置になる。プログラム可能コンピュータ上でプログラムコードを実行する場合、コンピュータは一般に、プロセッサ、プロセッサによって読取り可能な記憶媒体(揮発性および不揮発性メモリおよび/または記憶素子を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含む。1つまたは複数のプログラムは、コンピュータシステムと通信するように高レベル手続き型またはオブジェクト指向プログラミング言語で実装することが好ましい。しかし、望むならアセンブリ言語または機械語でプログラムを実装することもできる。いずれの場合も、言語はコンパイルまたはインタプリタされた言語とすることができ、ハードウェア実装と組み合わせることができる。
本発明の方法および装置は、電気配線またはケーブリング、光ファイバ、あるいは他の任意の形態の伝送などの、何らかの伝送媒体を介して伝送されるプログラムコードの形態で具体化することもでき、プログラムコードが、EPROM、ゲートアレイ、プログラマブルロジックデバイス(PLD)、クライアントコンピュータ、ビデオレコーダなどのマシンで受信され、ロードされ、実行されると、そのマシンが本発明を実施する装置になる。汎用プロセッサ上に実装されるとき、このプログラムコードは、プロセッサと組み合わされ、本発明の索引付け機能を実行するように動作する固有の装置を提供する。
様々な図の好ましい実施形態と共に本発明の実施形態を説明したが、他の類似の実施形態も使用することができ、あるいは本発明から逸脱することなく本発明と同じ機能を実行するために記載の実施形態に修正や追加を行うことができることを理解されたい。例えば、パーソナルコンピュータの機能をエミュレートするデジタルデバイスの状況で本発明の例示的実施形態を説明したが、本発明がそのようなデジタルデバイスに限定されず、本願で説明したように、有線かそれともワイヤレスかに関わらず、ゲーミングコンソール、ハンドヘルドコンピュータ、ポータブルコンピュータなどの任意の数の既存または新しいコンピューティングデバイスまたは環境に適用でき、通信ネットワークを介して接続され、ネットワークを介して対話する任意の数のそのようなコンピューティングデバイスに適用できることを当業者は理解されよう。さらに、特にワイヤレスネットワークデバイスの数が増加し続けているので、本明細書ではハンドヘルドデバイスオペレーティングシステム、およびその他のアプリケーション特有のハードウェア/ソフトウェアインターフェースシステムを含む様々なコンピュータプラットフォームが企図されることを強調しておく。したがって、本発明はどの単一の実施形態にも限定されず、添付の特許請求の範囲による幅と範囲において解釈すべきである。
本発明の諸態様を組み込むことができるコンピュータシステムを表すブロック図である。 本発明を実施できる様々なコンピューティングデバイスを有する例示的ネットワーク環境を表すブロック図である。 マネージドコードでインスタンス化されているユーザ定義タイプのインスタンスのシリアライゼーションおよびデシリアライゼーションを示すブロック図である。 SqlUserDefinedTypeについてのプロパティの非網羅的リストを示す表である。 Addressがタイプであり、かつUSAddressがアドレスのサブタイプである場合、Addressesは、タイプAddressの列addrcolを有するテーブルとすることができることを示す擬似コードである。 デシリアライズされる値の厳密なタイプを使用して、それがデシリアライズすべきCLRタイプを判定するクライアント/サーバデシリアライザを示す擬似コードである。 CONVERT、CAST、TREATコマンドについての振る舞いおよびセマンティクスを示す表である。 UDTメソッドが備えることのできるルーチンプロパティを示す表である。

Claims (24)

  1. 少なくとも1つのプロセッサであって、マネージドコードにより作成されたクラスによって定義された少なくとも1つのユーザ定義タイプを取り扱えるように構成されたプロセッサと、
    前記プロセッサと通信可能に結合され、前記クラスを格納したメモリであって、前記クラスは前記少なくとも1つのユーザ定義タイプの構造を記述するための情報と、前記少なくとも1つのユーザ定義タイプと第2のユーザ定義タイプとの間の継承関係を記述するための情報とを備えた、メモリと、
    前記プロセッサと通信可能に結合されたデータベースであって、前記クラスのアセンブリを明示的に登録することによって、前記少なくとも1つのユーザ定義タイプがSQLタイプシステムのスカラタイプとして機能し、前記継承関係が認識されるように構成されたデータベースと
    を備えたことを特徴とするシステム。
  2. 前記第2のユーザ定義タイプは、前記少なくとも1つのユーザ定義タイプのサブタイプであることを特徴とする請求項1に記載のシステム。
  3. 前記第2のユーザ定義タイプは、前記少なくとも1つのユーザ定義タイプのスーパータイプであることを特徴とする請求項1に記載のシステム。
  4. 前記少なくとも1つのユーザ定義タイプのインスタンスは、前記データベースにシリアライズされることを特徴とする請求項1に記載のシステム。
  5. 前記少なくとも1つのユーザ定義タイプのインスタンスは、メソッドが呼び出されると、前記データベースからデシリアライズされることを特徴とする請求項4に記載のシステム。
  6. 前記少なくとも1つのユーザ定義タイプは、C、C++、およびC#(「Cシャープ」)のプログラミング言語のグループからのプログラミング言語中のステートメントによって定義されることを特徴とする請求項に記載のシステム。
  7. 前記少なくとも1つのユーザ定義タイプは、ビジュアルベーシックステートメントによって定義されることを特徴とする請求項に記載のシステム。
  8. 前記クラスをアセンブリにコンパイルするためのサブシステムと
    記アセンブリの前記タイプを前記データベースに登録するためのサブシステムと
    をさらに備えたことを特徴とする請求項に記載のシステム。
  9. プロセッサ、メモリ、およびデータベースを備えたシステムにおいて、少なくとも1つのユーザ定義タイプについての拡張可能タイプシステムを提供するための方法であって、
    前記プロセッサが、マネージドコードにより作成されたクラスを前記メモリに格納することであって、前記クラスは、前記少なくとも1つのユーザ定義タイプの構造を記述するための情報と、前記少なくとも1つのユーザ定義タイプと第2のユーザ定義タイプとの間の継承関係を記述するための情報を含むことと
    前記プロセッサが、前記クラスをアセンブリにコンパイルすることと、
    前記プロセッサが、前記少なくとも1つのユーザ定義タイプが前記データベースのSQLタイプシステムのスカラタイプとして機能し、前記継承関係が前記データベースに認識されるように、前記アセンブリを前記データベースに明示的に登録することと
    を備えることを特徴とする方法。
  10. 前記第2のユーザ定義タイプは、前記少なくとも1つのユーザ定義タイプのサブタイプであることを特徴とする請求項9に記載の方法。
  11. 前記少なくとも1つのユーザ定義タイプは、前記第2のユーザ定義タイプのサブタイプであることを特徴とする請求項9に記載の方法。
  12. 前記プロセッサが、前記少なくとも1つのユーザ定義タイプのインスタンスを前記データベースにシリアライズすることをさらに備えることを特徴とする請求項に記載の方法。
  13. 前記プロセッサが、前記少なくとも1つのユーザ定義タイプのインスタンスを、メソッドが呼び出されると、前記データベースからデシリアライズすることをさらに備えることを特徴とする請求項12に記載の方法。
  14. 前記少なくとも1つのユーザ定義タイプは、C、C++、およびC#(「Cシャープ」)のプログラミング言語のグループからのプログラミング言語を使用して定義されることを特徴とする請求項に記載の方法。
  15. 前記少なくとも1つのユーザ定義タイプは、ビジュアルベーシックステートメントを使用して定義されることを特徴とする請求項に記載の方法。
  16. 前記プロセッサが、前記アセンブリの前記タイプを前記データベースに登録することをさらに備えることを特徴とする請求項に記載の方法。
  17. プロセッサ、メモリ、およびデータベースを備えたシステムにおける、少なくとも1つのユーザ定義タイプについての拡張可能タイプシステムを有するデータベースについてのコンピュータプログラムであって、
    前記プロセッサに、マネージドコードにより作成されたクラスを前記メモリに格納させる命令であって、前記クラスは、前記少なくとも1つのユーザ定義タイプの構造を記述する情報と、前記少なくとも1つのユーザ定義タイプと第2のユーザ定義タイプとの間の継承関係を記述するための情報を含む、命令と
    前記プロセッサに、前記クラスをアセンブリにコンパイルさせる命令と、
    前記プロセッサに、前記少なくとも1つのユーザ定義タイプが前記データベースのSQLタイプシステムのスカラタイプとして機能し、前記継承関係が前記データベースに認識されるように、前記アセンブリを前記データベースに明示的に登録させる命令と
    を備えたことを特徴とするコンピュータプログラム
  18. 前記第2のユーザ定義タイプは、前記少なくとも1つのユーザ定義タイプのサブタイプであることを特徴とする請求項17に記載のコンピュータプログラム
  19. 前記第2のユーザ定義タイプは、前記少なくとも1つのユーザ定義タイプのスーパータイプであることを特徴とする請求項17に記載のコンピュータプログラム
  20. 前記プロセッサに、前記少なくとも1つのユーザ定義タイプのインスタンスを前記データベースにシリアライズさせる命令をさらに備えたことを特徴とする請求項17に記載のコンピュータプログラム
  21. 前記プロセッサに、前記少なくとも1つのユーザ定義タイプのインスタンスを、メソッドが呼び出されると、前記データベースからデシリアライズさせる命令をさらに備えたことを特徴とする請求項20に記載のコンピュータプログラム
  22. 前記少なくとも1つのユーザ定義タイプは、C、C++、およびC#(「Cシャープ」)のプログラミング言語のグループからのプログラミング言語でのステートメントで定義されることを特徴とする請求項17に記載のコンピュータプログラム
  23. 前記少なくとも1つのユーザ定義タイプは、ビジュアルベーシックステートメントで定義されることを特徴とする請求項17に記載のコンピュータプログラム
  24. 前記プロセッサに、前記アセンブリの前記タイプを前記データベースに登録させる令をさらに備えたことを特徴とする請求項17に記載のコンピュータプログラム
JP2006552092A 2004-02-10 2004-07-29 ユーザ定義タイプの継承をサポートするためのシステムおよび方法 Expired - Fee Related JP5108309B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US10/775,282 US6976029B2 (en) 2004-02-10 2004-02-10 System and method for providing user defined types in a database system
US10/775,282 2004-02-10
US10/837,929 2004-05-03
US10/837,929 US7539688B2 (en) 2004-02-10 2004-05-03 Systems and methods for supporting inheritance for user-defined types
PCT/US2004/024442 WO2005081668A2 (en) 2004-02-10 2004-07-29 Systems and methods for supporting inheritance for user-defined types

Publications (2)

Publication Number Publication Date
JP2007522558A JP2007522558A (ja) 2007-08-09
JP5108309B2 true JP5108309B2 (ja) 2012-12-26

Family

ID=34915771

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006552092A Expired - Fee Related JP5108309B2 (ja) 2004-02-10 2004-07-29 ユーザ定義タイプの継承をサポートするためのシステムおよび方法

Country Status (4)

Country Link
EP (1) EP1683046A4 (ja)
JP (1) JP5108309B2 (ja)
KR (1) KR101440615B1 (ja)
WO (1) WO2005081668A2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8615730B2 (en) 2006-07-14 2013-12-24 Microsoft Corporation Modeled types-attributes, aliases and context-awareness
US10705802B2 (en) 2013-03-20 2020-07-07 Microsoft Technology Licensing, Llc Extensible and queryable strong types
JP6044960B2 (ja) 2013-12-26 2016-12-14 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation シリアライザを特化する方法、装置及びコンピュータプログラム
WO2016175858A1 (en) * 2015-04-30 2016-11-03 Hewlett Packard Enterprise Development Lp Dynamic function invocation

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761493A (en) * 1990-04-30 1998-06-02 Texas Instruments Incorporated Apparatus and method for adding an associative query capability to a programming language
US5864862A (en) * 1996-09-30 1999-01-26 Telefonaktiebolaget Lm Ericsson (Publ) System and method for creating reusable components in an object-oriented programming environment
US5696961A (en) * 1996-05-22 1997-12-09 Wang Laboratories, Inc. Multiple database access server for application programs
JP3747525B2 (ja) * 1996-08-28 2006-02-22 株式会社日立製作所 並列データベースシステム検索方法
US6108659A (en) * 1998-12-22 2000-08-22 Computer Associates Think, Inc. Method and apparatus for executing stored code objects in a database

Also Published As

Publication number Publication date
EP1683046A4 (en) 2009-07-08
EP1683046A2 (en) 2006-07-26
JP2007522558A (ja) 2007-08-09
WO2005081668A3 (en) 2006-05-18
WO2005081668A2 (en) 2005-09-09
KR20060130480A (ko) 2006-12-19
KR101440615B1 (ko) 2014-09-16

Similar Documents

Publication Publication Date Title
US7539688B2 (en) Systems and methods for supporting inheritance for user-defined types
US7376656B2 (en) System and method for providing user defined aggregates in a database system
US7356546B2 (en) System and method for object persistence in a database store
US7421680B2 (en) Persisted specifications of method pre-and post-conditions for static checking
CN106415495B (zh) 用于应用开发的编程系统和语言
EP1603057A2 (en) Systems and methods for the implementation of unordered and ordered collections in data store
US20060225053A1 (en) Programming language improvements
JPH0644128A (ja) オブジェクト指向プログラミングを支援するデータベース管理システム及び方法
WO2002093430A1 (en) Method and apparatus for implementing a data management system using a metadata specification
DeLine et al. The Fugue protocol checker: Is your software baroque
US10387142B2 (en) Using annotation processors defined by modules with annotation processors defined by non-module code
JP5108309B2 (ja) ユーザ定義タイプの継承をサポートするためのシステムおよび方法
KR101030368B1 (ko) 데이터 저장소 내의 비순서화 및 순서화 컬렉션의 구현을 위한 시스템 및 방법
US8001523B1 (en) System and methods for implementing an explicit interface member in a computer programming language
Martin Ephedra: a C to Java migration environment

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100518

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100818

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101217

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20110418

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110418

RD15 Notification of revocation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7435

Effective date: 20120126

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121005

R150 Certificate of patent or registration of utility model

Ref document number: 5108309

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: 20151012

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

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