(57)【特許請求の範囲】
【請求項１】
データベースに対するユーザからの問合せを解析して対応する実行手順指示を作成するプリプロセス処理部と、当該実行手順指示に従って処理を行う実行処理部とからなるデータベース処理システムにおけるデータベース処理方法であって、
ユーザ定義データ型の操作を実行するモジュールを実行する契機に関する情報を含むモジュール定義情報が前記データベース処理システムに格納されており、
前記プリプロセス処理部は、ユーザからの問合わせを解析し、前記モジュール定義情報から、前記解析した問い合わせの内容に関連する契機に実行する前記モジュールを抽出し、前記抽出したモジュールに関するモジュール起動情報を付加した実行手順指示を作成し、
前記実行処理部は、
処理がデータ操作系処理であるかどうかを判定し、
前記判定結果がデータ操作系処理である場合には、操作対象にユーザ定義データ型が含まれているか判定し、含まれている場合には、操作対象のユーザ定義データ型に応じて、前記実行手順指示に付加されているモジュール起動情報を取得し、前記モジュール起動情報により指示された契機に対応するモジュールを実行し、
前記判定結果がデータ操作系処理でない場合には、前記モジュール起動情報を取得し、前記モジュール起動情報により指示された契機に対応するモジュールを実行する
ことを特徴とするデータベース処理方法。
【請求項２】
請求項１に記載のデータベース処理方法であって、
前記実行処理部は、前記対応モジュールを実行し、専用インデクスから情報を得ることを特徴とするデータベース処理方法。
【請求項３】
請求項１又は２に記載のデータベース処理方法であって、
前記判定結果がデータ操作系処理である場合の、操作対象のユーザ定義データ型に応じて取得されたモジュール起動情報は、複数のモジュール起動情報であり、前記複数のモジュール起動情報により、各モジュールを起動することを特徴とするデータベース処理方法。
【請求項４】
請求項１乃至３のいずれか１に記載のデータベース処理方法であって、
前記データ操作系処理とは、データベースに対する挿入、削除、更新の処理のうちの少なくとも１であることを特徴とするデータベース処理方法。
【請求項５】
データベースに対するユーザからの問合せを解析して対応する実行手順指示を作成し、当該実行手順指示に従って処理を行うデータベース処理システムであって、
ユーザ定義データ型の操作を実行するモジュールを実行する契機に関する情報を含むモジュール定義情報を格納する格納部と、
ユーザからの問合わせを解析し、前記モジュール定義情報から、前記解析した問い合わせの内容に関連する契機に実行する前記モジュールを抽出し、前記抽出したモジュールに関するモジュール起動情報を付加した実行手順指示を作成するプリプロセス処理部と、
前記実行手順指示に付加されたモジュールに関する前記モジュール起動情報により、指示された契機に対応するモジュールを実行する実行処理部と、を有し、
前記実行処理部は、
処理がデータ操作系処理であるかどうかを判定し、
前記判定結果がデータ操作系処理である場合には、操作対象にユーザ定義データ型が含まれているか判定し、含まれている場合には、操作対象のユーザ定義データ型に応じて、前記実行手順指示に付加されているモジュール起動情報を取得し、前記モジュール起動情報により指示された契機に対応するモジュールを実行し、
前記判定結果がデータ操作系処理でない場合には、モジュール起動情報を取得し、前記モジュール起動情報により指示された契機に対応するモジュールを実行する
ことを特徴とするデータベース処理システム。
【請求項６】
請求項５に記載のデータベース処理システムであって、
前記モジュール定義情報は、モジュールを実行する契機に関する情報と、問い合わせに記述されるユーザ定義データ型を実行するモジュールであるかどうかを示す情報と、関連するユーザ定義データ型関数名とを各モジュールと対応づけて格納した情報であることを特徴とするデータベース処理システム。
【請求項７】
請求項５又は６に記載のデータベース処理システムであって、
前記実行処理部は、前記対応モジュールを実行し、専用インデクスから情報を得ることを特徴とするデータベース処理システム。
【請求項８】
請求項５乃至７のいずれか１に記載のデータベース処理システムであって、
前記判定結果がデータ操作系処理である場合の、操作対象のユーザ定義データ型に応じて取得されたモジュール起動情報は、複数のモジュール起動情報であり、前記対応モジュールを実行する手段は、前記複数のモジュール起動情報により、各モジュールを起動することを特徴とするデータベース処理システム。
【請求項９】
請求項５乃至８のいずれか１に記載のデータベース処理システムであって、
前記データ操作系処理とは、データベースに対する挿入、削除、更新の処理のうちの少なくとも１であることを特徴とするデータベース処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベース処理システムに関し、特にユーザがデータ型およびその振る舞いを定義することが可能なデータベース処理方法に関する。
【０００２】
【従来の技術】
現在、データベース言語SQLではSQL3(ISO,ANSI)の規格が進められている。ADT(Abstract Data Type、抽象データ型)は、SQL3の主要機能の１つである。ADTとは、ユーザ定義のデータ型であり、オブジェクト指向の概念を取り入れ、ADTに対する操作もメソッド(関数、手続き)としてユーザが定義する。ADTは、複雑な構造を持つことができ、自分自身の振る舞い(付随する機能)をADT関数として定義の中に含んでいる。ADTの定義では、値を表現するための属性（群）の仕様と、その振る舞いを規定する一群の操作を規定する。
【０００３】
ADTの新しいインスタンス（実現値）を生成するADT関数が、コンストラクタ関数である。また、ADTの属性へのアクセスは、observer関数によって行い、変更は、mutator関数によって行う。こうした関数の定義には、SQL自身を用いることができる。またさらに、この関数の定義には、C言語などの一般プログラミング言語で記述しコンパイルしたモジュール（外部）を指定することもできる。これらモジュールとADT関数との関連は、ADTを定義するためのADT定義文に記述される。すなわち、モジュールとは、ADT関数の内部的実現形態である。そして、それらADT定義情報は、表定義などと同様にディクショナリ情報としてデータベース管理システムにおいて管理されるのが実装として一般的である。
【０００４】
図１２に、ADT関数に関連するモジュールの起動の仕掛けを有したデータベース管理システムの構成例を示す。
リレーショナルデータベース管理システムにおいて、SQLは非手続き言語であるため、まずユーザ問合わせを解析し内部処理手順を決定し実行する。問合わせ実行前に、問合わせ解析と内部処理手順を決定するのが、プリプロセス処理１０である。ここで、内部処理手順の一実現形態として、実行手順指示３０を用いている。ユーザ問合わせ２にADT関数が記述されている場合、解析時にディクショナリに格納されているADT定義情報２００を参照して、そのADT関数を実現するための関連モジュールの情報４０を実行手順指示３０に付加する。
【０００５】
問合わせ実行時に、実行制御５０は実行手順指示３０にしたがって実際のDBアクセス処理を担当するDBアクセス機能７０を用いて問合わせ処理を行う。その際、実行手順指示に、ADT関数の実行が指示されている場合、対応するモジュール９０を起動する（８０）。起動はモジュール起動情報４０を基に行う。
【０００６】
ここで例として、次のSQL文の処理を説明する。
SELECT NAME,AGE(MOTHER) FROM CLASS_A WHERE AGE(MOTHER)<25
このSQL文は、テーブルCLASS_Aで、母(MOTHER列属性)の年齢が２５未満である行の名前(NAME列)とその母の年齢を取出す要求を示している。MOTHER列のデータ型はPERSON型であり、年齢を返すADT関数AGEが定義されているものとする。AGE関数は、モジュール_p_person_calculate_ageを起動することにより実現されるものとする。
【０００７】
このSQL文に対して問合わせ実行処理では、行データを一件取出して、そのMOTHER列データに対してAGE関数を適用し（モジュール_p_person_calculate_age起動）、WHERE句の評価を行い、その結果によってNAME列等を取出す。その後次の行データの処理に移る。上記の説明のように、従来ADT関数は、SQL文において一行のADTデータに対する評価関数という位置付けなので、データベース管理システム内部でも一件ずつ処理されていた。
【０００８】
【発明が解決しようとする課題】
以上説明したように、ユーザが定義した振る舞いは、その振る舞いのためのADT関数をSQL文中に記述することにのみ、実現することができる。SQL文でのADT関数記述がその振る舞いを実行する契機である。例えば、SELECT句の後に記述されるメソッドの場合、WHERE句により限定された行一つ一つに対してADT関数が適用される。また、WHERE句の後に記述されるADT関数の場合、条件判定のタイミングでADT関数が適用される。見方を変えると、SQL文における明示的なADT関数記述以外に、ユーザが定義したADT関数を実行する契機は存在しない。
【０００９】
一方、あるADT特有の評価（検索）や高速な評価（検索）のために、そのADT専用のインデクスを利用することが考えられる。ここで言う専用インデクスとは、通常データベース管理システムにて一般的に検索高速化手段として用いられるＢ木インデクスに限定するものではない。ADT関数を実現するために必要な種々の情報群等も含まれる。
【００１０】
この専用インデクスをADT関数にて利用するためには、ADTデータに対する変更が生じた際に、それに応じてこの専用インデクスを更新しなければならない。SQL文でのADT関数記述だけではなく、ADT関数を通さないADTデータに対する操作(INSERT,DELETEなど)や、システム開始/終了、トランザクション開始/完了などの契機にて、専用インデクスに対する操作の必要が生じてくる。また、その専用インデクスを用いて特有の検索（評価）機能を実現するモジュールの実行は、必ずしも従来のADT関数に対する内部処理が前提となるような一件ずつのデータを対象とする処理ではない。ある検索（評価）条件に対して、その条件を満足するデータをまとめて（集合として）返すような専用インデクスも考えられる。その場合、データベース中の評価（条件判定）対象データ数分、対応モジュールを実行しなくとも１回だけの実行で済む。実行すなわちモジュール起動のためのオーバヘッドも抑えられる。
【００１１】
現状のADTの枠組みで、専用インデクスを利用するような機能を実現しようとすると、
(1)専用インデクスを保持する契機が、ADT関数実行しかないため不十分
(2)ADT関数の内部処理が一件データに対する処理に限定
という問題があった。
【００１２】
本発明は、これらの問題を解決するため、以下の項目が課題である。
(1)SQL文でのADT関数実行以外の契機で、ユーザ定義関数（モジュール）を実行する仕掛けを提供すること
(2)ADT関数を実現するモジュールの実行結果が集合で返るような仕様においても、適切な実行手順指示を作成し実行できる仕掛けを提供すること。
【００１３】
【課題を解決するための手段】
上記課題を解決するために、本発明におけるデータベース管理方法は、
ユーザが固有のデータ型を定義する際に、そのデータ型の振る舞いを実現するモジュールの評価形態に関する情報および起動契機に関する情報をデータベース管理システムに登録する手段と、
ユーザからの問合わせを解析し実行手順指示を作成する際に、上記評価形態に関する情報から、一つ一つの行に対してモジュール起動による評価を行う手順か、モジュール起動により複数の評価結果を取得する手順かを選定する手段と、
ユーザからの問合わせを解析し実行手順を作成する際に、上記起動契機に関する情報から、対応する契機に起動するモジュールに関する情報を実行手順指示に付加する手順と、
実行手順指示にしたかってデータベース処理を実行する際に、実行手順指示に付加されたモジュールに関する情報により、指示された契機に対応モジュールを起動する手順とを備える。
【００１４】
【発明の実施の形態】
以下、図を用いて本発明の実施の一形態を詳細に説明する。
まず、本発明の概念を図１を用いて簡単に説明する。本発明が適応されたデータベース管理システム１では、プリプロセス処理１０において、ユーザ問合わせ２に含まれるADT関数を実現するための組込みモジュールに関する「評価形態」に応じて、組込みモジュールの評価結果（集合）の一つずつに処理をするか、データ一件一件に対して組込みモジュールによる評価をするかという実行手順を選定し、選定結果を基に実行手順指示を作成する。そして、問合わせ実行処理１１において、実行手順指示にしたがって組込みモジュールを起動することによりADT関数を実行する。また、モジュール定義情報２０に指定されている契機６０において、対応する組込みモジュールを起動する（８０）。ここで、「評価形態」とは、モジュールにて行う処理が１件データに対するものなのか？複数データに対するものでその結果を集合として返すものなのか？という属性のことを言う。
【００１５】
次に図１を用い、本発明が適応されたデータベース管理システムの構成について詳細に説明する。
【００１６】
本発明が適応されたデータベース管理システム１は、問合わせ実行前に行われるプリプロセス処理１０と問合わせ実行を実現する問合わせ実行処理１１から構成される。プリプロセス処理１０は、ユーザからの問合わせ２を受け付けて解析し実行のための実行手順指示を作成する。そのプリプロセス処理１０は、入力された問合わせ２の構文解析、意味解析を行う問合わせ解析１１０と、 ADT関数解析１２０と、 ADT関数外起動型モジュール解析１３０と、実行手順指示作成１４０とから成る。
【００１７】
ADT関数解析１２０では、問合わせ解析１１０の結果明らかになった問合わせ２に記述されたADT関数に関して、モジュール定義情報２０に含まれる評価形態を基に対応するモジュールの起動手順を選定する。選定結果は、実行手順指示作成１４０にて加味される。
【００１８】
ADT関数外起動型モジュール解析１３０では、問合わせを実現するデータ操作の種別（検索操、挿入、削除、更新など）により、モジュール定義情報２０に含まれる起動契機にて起動される組込みモジュール９０に関する情報（モジュール起動情報４０）を準備する。モジュール起動情報４０は、実行手順指示３０に付加される。実行手順指示作成１４０では、上記解析結果を基にモジュール起動情報４０を付加した実行手順指示３０を生成する。
【００１９】
組込みモジュールに関する起動契機、評価形態などを含んだモジュール定義情報２０は、ユーザがADTを定義する際に、ユーザによりデータベース管理システム１に登録される。登録場所の一つとして各種定義情報を格納保持しているディクショナリが挙げられる。
【００２０】
問合わせ実行処理１１は、表データやインデクスなどが格納されているデータベース４を参照したり更新したりするためのDBアクセス機能７０と、上記過程１４０で生成された実行手順指示３０に指示されている実行手順指示にしたがって随時対応するDBアクセス機能７０を呼出すことによりデータベース処理を実現する実行制御５０と、ユーザがADT定義の際に組込んだ組込みモジュール９０と、実行手順指示３０およびモジュール起動情報４０にて指示された起動契機に組込みモジュール９０を起動するための組込みモジュール起動部８０とから成る。
【００２１】
組込みモジュール９０は、専用インデクスなどの専用リソースをアクセスする機能を有するものもある。実行制御５０およびDBアクセス機能７０は、それぞれ組込みモジュールを起動するための起動口６０を有する。
【００２２】
データベース処理が行われている中、DBアクセス機能内の起動口がモジュール起動情報４０の起動契機に指定されている場合、対応するモジュール９０を組込みモジュール起動部８０を通じて起動する。以上の仕掛けにより、ユーザ問合わせ２にADT関数として陽に記述されない場合でも、モジュール定義情報２０により指定された起動契機により、その契機にて対応するモジュールを起動することが可能なる。
【００２３】
図２は、モジュール定義情報２０の構成の一形態を示す図である。モジュール定義情報２０は、組込みモジュール９０がどの契機で起動されるか、その評価結果はどのような形態で返されるのかを示すものである。
【００２４】
モジュール定義情報２０は、組込みモジュール９０数分のモジュール定義情報レコード２１から成る。モジュール定義情報レコード２１は、それぞれある組込みモジュール９０に関連するモジュール名２２、ADT名２３、モジュール種別２４、起動ADT関数名２５、評価形態２６、起動契機２７より構成される。
【００２５】
ADT名２３は、その関連するモジュール(モジュール名２２により識別される)が、どのADTの振る舞いを実現するために起動されるか、またはどのADTに対する操作を行った際に起動されるかを示している。もし、その関連するモジュールがADTの振る舞いを実現するためのもの、すなわち問合わせ２に明示的に記述されるADT関数を実現するためにのものである場合、モジュール種別２４には、“ADT関数起動型”をユーザは登録時に指定する。その場合、起動ADT関数名２５に、モジュール名２２に関連するADT関数名を指定する。
【００２６】
さらに、その関連するモジュールを起動した結果が集合として返される場合、評価形態２６に“集合評価”と指定する。その関連するモジュールを起動することにより評価する対象が一つ行内の一つのADTデータである場合、評価形態２６に“逐次評価”と指定する。これら評価形態２６は、ユーザ問合わせ２をプリプロセス処理１０にて解析し実行手順指示３０を作成する際の重要な実行手順指示の雛形の選定基準になる。
【００２７】
モジュール種別２４に、“ADT関数起動型”を指定する場合、起動契機２７には、問合わせ２に記述される「ADT関数実行時に」モジュール名２２により識別される組込みモジュール９０が起動されるという意味で、“AS_FUNCTION”を指定する。また、モジュール名２２により識別される組込みモジュール９０がADT関数実行以外の契機で起動される場合、モジュール種別２４に“ADT関数外起動型”をユーザは指定する。そして、そのモジュールの起動契機に関する情報を起動契機２７に指定する。またその場合、起動ADT関数名２５および評価形態２６には何も指定しない。
【００２８】
以下に、ユーザによるモジュール定義情報の登録の際のユーザインタフェースの一例を上げる。本例は、図２におけるモジュール定義情報の例に対応している。
【００２９】
0003777666.tif 000002
図２における例では、組込みモジュール"_p_text_contains"は、ADT関数"CONTAINS"を実現するために起動され、評価結果として集合を返すことを示している。組込みモジュール"_p_text_at_insert"は、TEXT型データの挿入時（“AS_INSERT_TRIGGER”が挿入時が起動契機であることを示す）に起動されることを示している。また、組込みモジュール"_p_text_at_delete"は、TEXT型データを含む行の削除時（“AS_DELETE_TRIGGER”が削除時が起動契機であることを示す）に起動されることを示している。
【００３０】
起動契機は、上記例“AS_FUNCTION”、“AS_INSERT_TRIGGER”、“AS_DELETE_TRIGGER”以外に一例として以下に示すものが挙げられる。
【００３１】
(1) AS_FUNCTION：ADT関数起動時
(2)AS_INSERT_TRIGGER：ADTデータ挿入時
(3)AS_DELETE_TRIGGER：ADTデータ削除時
(4)AS_UPDATE_TRIGGER：ADTデータ更新時
(5)AS_DROP_TABLE_TRIGGER：テーブル削除時
(6)AS_BEGIN_TRANSACTION：トランザクション開始時
(7)AS_PREPARE_COMMIT：プリペアコミット時
(8)AS_COMMIT：コミット時
(9)AS_START_ROLLBACK_TRIGGER：トランザクションロールバック処理開始時
(10)AS_TERMINATE_ROLLBACK_TRIGGER：トランザクションロールバック処理終了時
(11)AS_START_SYSTEM_TRIGGER：システム開始時
(12)AS_TERMINATE_SYSTEM_TRIGGER：システム終了時
(13)AS_START_RECOVERY_TRIGGER：全面回復処理開始時
(14)AS_TERMINATE_RECOVERY_TRIGGER：全面回復処理終了時
(15)AS_START_PROCESS_TRIGGER：プロセス開始時
(16)AS_TERMINATE_PROCESS_TRIGGER：プロセス終了時
(17)AS_BEGIN_SESSION_TRIGGER：セッション開始時
(19)AS_CLOSE_SESSION_TRIGGER：セッション終了時
(20)AS_CURSOR_OPEN_TRIGGER：カーソルオープン時
(21)AS_CURSOR_CLOSE_TRIGGER：カーソルクローズ時
図３は、ADT関数解析１２０におけるWHERE句以降に出てくるADT関数に関する解析処理の流れの一例を示すフローチャートである。ADT関数解析１２０の一部であるADT解析（WHERE句  以降）１２１では、モジュール定義情報２０で指定されている評価形態２６により、WHERE句以降の実行手順指示の雛形を選定する。雛形には二種類存在する。まず一つ目は、組込みモジュールを実行してからその結果を一つずつ取出しデータ操作を施す手順を示す雛形。もう一つは、一つずつデータを取出しその各々に対して組込みモジュールを実行する手順を示す雛形である。
【００３２】
まず、ステップ１２２において、図１の問合わせ解析１１０の結果から得られた問合わせ２のWHERE以降に出現したADT関数に関するモジュール定義情報２０を取得する。これは、モジュール定義情報２０を構成するエントリ２１の起動ADT関数名２５に対して、出現ADT関数名をキーに検索をかけることにより実現する。
【００３３】
次にステップ１２３に進み、モジュール定義情報内の評価形態の判定を行う。評価形態が集合評価である場合（判定結果Yesの場合）、「集合評価の後一つ一つにデータ操作」の手順雛形を選定する（ステップ１２４）。この手順雛形は、集合として得られるモジュールの評価結果一つ一つを取出し、そのSELECT句後に記述されているデータ操作を適用する手順を提供する。
【００３４】
また、判定１２３において評価形態が逐次評価であると判断された場合（判定結果Noの場合）、「一行データに対する逐次評価後データ操作」の手順雛形を選定する（ステップ１２５）。この手順雛形は、表データの逐次アクセスまたはＢ木インデクスなどの索引をアクセスして得られた一つの行データに対してモジュールの評価を適用する手順を提供する。従来は常にステップ１２５のパスを踏んでいたが、本発明では評価形態からステップ１２４の集合評価型モジュールの組込みも可能になった。
【００３５】
ステップ１２４、ステップ１２５の後、作成される実行手順指示に付加するモジュール起動情報をメモリ上に保持する（スキップ１２７）。
【００３６】
図４は、ADT関数外起動型モジュール解析１３０における処理の流れの一例を示すフローチャートである。ADT関数外起動型モジュール解析１３０では、問合せ２の内容によってモジュール定義情報２０に指示されている起動契機を基に、ADT関数実行以外の起動契機のモジュールを起動するための情報をメモリ上に保持する。
【００３７】
まず、ステップ１３１において、図１の問合せ解析１１０の結果からユーザからの問合せ２がデータ更新操作要求かどうかを判定する。データ更新操作要求ではない場合（判定結果Noの場合）、ステップ１３５に進み本問合せの契機において、起動される組込みモジュールが存在するかの判定を行う。具体的には、関連起動契機でモジュール定義情報を取得（検索）する。ここでなにも起動モジュールがなければ、ステップ１３６に進み処理を終了する。  起動モジュールがある場合、ステップ１３４に進み、取得したモジュール定義情報を基に組込みモジュールを起動するための情報をメモリ上に保持する。
【００３８】
戻ってステップ１３１において、データ更新操作用であると判定した場合（判定結果Yes）、ステップ１３２に進み、操作対象データにADTが含まれているかどうかを判定する。含まれていない場合は、組込みモジュールの起動はないと判断して、ステップ１３６に進み処理を終了する。ADTが含まれている場合、ステップ１３３に進む。ステップ１３３では、データ更新操作に関連する起動契機およびADT名でモジュール定義情報を取得する。そして、取得したモジュール定義情報を基に組込みモジュールを起動するための情報をメモリ上に保持する（ステップ１３４）。
【００３９】
図５は、実行手順指示作成１４０における処理の流れの一例を示すフローチャートである。まず、ステップ１４１において、選定した雛形を準備する。そして、ステップ１４２で、雛形を基に問い合わせ解析結果から実行手順指示を作成する。次にステップ１４３にて、ADT関数解析（WHERE句以降）１２１およびADT関数外起動型モジュール解析１３０においてメモリ上に保持しておいたモジュールを起動するための情報を基にモジュール起動情報を作成し、ステップ１４２にて作成した実行手順指示に付加する（ステップ１４４）。
【００４０】
図６は、実行手順指示およびそれに付加されたモジュール起動情報の一具体例を示す図である。図１の実行制御１１は、この実行手順指示を参照しながら、実行手順指示に示されている処理３１２を処理Ｎｏ３１１の順に実行する。実行にあたっては、その処理を担当するDBアクセス機能（図１の７０）により実現する。３１３の付加情報は、処理３１２の処理対象等に関する情報である。その中には、関連するモジュール起動情報を指し示す情報（図６の例：モジュール起動情報１）や、アクセス対象のテーブル、カラムに関する情報などが設定されている。もちろん、あくまで本実行手順指示例は、具体例の一つにすぎない。本例のようにテーブル構造ではなく、例えば木構造を持ったバイナリ形式でも構わない。モジュール情報との関連も付加情報３１３を用いて実現することを制限するものではない。
【００４１】
図７は、組込みモジュール起動処理部８０における処理の流れの一例を示すフローチャートである。実行制御１１において、実行手順指示の付加情報（図６の３１３）にモジュール情報への関連が出てきた場合、あるいはＤＢアクセス機能７０内の起動口６０にきた場合、本組込みモジュール起動処理８０を以下のように行う。
【００４２】
まず、ステップ８００において今行っている処理がデータ操作系処理であるかを判定する。データ操作系（挿入、削除、更新）である場合（判定結果Yesの場合）、ステップ８１０に進みその操作対象ADT型名の取得を行う。ステップ８１０の次に、操作対象データにADTが含まれているかを判定する（ステップ８１１）、ADTが含まれていない場合、ステップ８２０に進み処理を終了する。すなわち組込みモジュールの起動はなかった。
【００４３】
また、ステップ８１１においてADTが含まれている（複数の場合も有り）と判定した場合、そのADT型名の一つを取出す（ステップ８１２）。そして、今行っている処理における起動契機および取出したADT型名で実行手順指示３０に付加されているモジュール起動情報４０を取得し（ステップ８１４）、対応するモジュール起動情報４０が存在するならば（ステップ８１４）、モジュール起動情報４０を用いて組込みモジュールの起動を行う（ステップ８１５）。もし、モジュール起動情報がなければ、次のADTに関する処理として、ステップ８１１のADT型名の取出しへ戻る（ステップ８１４の判定結果Noの場合）。
【００４４】
ステップ８００において今行っている処理がデータ操作系処理ではない場合（判定結果Noの場合）、ステップ８１６に進み現処理における起動契機でモジュール起動情報４０を取得する。取得したモジュール起動情報は複数の場合もありうる。各モジュール起動情報を用い対応する組込みモジュールの起動を行う。フローチャートでは、まずステップ８１７でモジュール起動情報の存在判定を行う。存在しない場合は、ステップ８２０へ進み処理を終了する。存在する場合、ステップ８１８にてモジュール起動情報の一つを取出し、ステップ８１９にて対応する組込みモジュールの起動を行う。そして、次のモジュール起動のため、ステップ８１７へ戻る。
【００４５】
以上の仕掛けで、モジュール起動情報４０を基に、関連起動契機およびADT操作において、ADT関数には関連しない組込みモジュール（ADT関数外起動型モジュール）の起動が行われる。
【００４６】
次に図１で説明した一構成形態のもとで、図８から図１１にてユーザ組込みモジュールについて具体的なコマンド例を用いて詳細に説明する。
【００４７】
図８は、一検索操作の処理例を説明する図である。ユーザ問合せ２として、SQL文「SELECT C1 FROM T1 WHERE CONTAINS(TEXT_C,"オリンピック")」は、「テーブルT1からTEXT_C列のデータ内に"オリンピック"という文字列を含む行のC1列値を取出す」という要求を示している。ここで、TEXT_C列はデータ型が、TEXT型(ADT型)で定義されているものとする。TEXT型データの値としては文書が格納されている。CONTAINSは、このADT型であるTEXT型のADT関数であり、その振る舞いは、指定TEXT型列データに指定文字列が含まれるかどうかを評価するものとする。
【００４８】
モジュール定義情報20から分かるように、このADT関数を実現する組込みモジュールは、_p_text_containsであり、その評価結果は集合として返される（評価形態=集合評価より）。ここでは、_p_text_contains組込みモジュールは、指定TEXT列に定義される専用の文書インデクス５をアクセスすることにより上記機能を実現しているものとする。
【００４９】
モジュール定義情報２０の評価形態＝集合評価より、実行手順指示作成１０において、「集合評価の後一つ一つにデータ操作」の手順雛形が選定され（図３のステップ１２４に対応）、図に示すような実行手順指示３０およびモジュール起動情報４０が作成される。ここで、図の矢印７は、モジュール定義情報の情報が関係している箇所を指し示している。
【００５０】
そして、実行制御５０にて以下のように問合せを実行する。まず、実行手順指示３０の「(1)組込みモジュールコール」指示および関連するモジュール起動情報４０に従って組込みモジュール９０_p_text_containsを起動する（５１１）。モジュール_p_text_containsでは、TEXT_C列に対応する文書インデクス５をアクセスすることにより、評価結果として行に関する情報（行識別子）を集合の形態で返す（図８中の評価結果集合９１）。その評価結果が空でない場合（判定５１２の結果「有り」の場合）、実行手順指示３０の「(2)評価結果一件取出し」に従い、その評価結果集合から一つ行識別子を取出す（５１３）。
【００５１】
そして次に実行手順指示３０の「(3)列値取出し」に従い、その行識別子を用いて指定データ（列C1）の値を取出す（５１４）。その実現は、DBアクセス機能７０にて表データ４をアクセスすることにより実現する。この図７ではデータ値をして「文書m」（７１）が取出されている様子を示している。そして、取出し結果をユーザに出力する（５１５）。さらに、他の評価結果に対しても同様の処理を行うため、処理は５１２へ戻る。最終的に結果出力として６がユーザに出力される。
【００５２】
以上説明したように、評価結果を集合をして返すようなモジュールもADT関数実現のために用いることができ、適切な実行手順指示を作成しADT関数として実行することができる。
【００５３】
図９は、別の一検索操作の処理例を説明する図である。ユーザ問合せ２として、SQL文「SELECT C1 FROM T1 WHERE WCG(TEXT_C,1000)」は、「テーブルT1からTEXT_C列のデータの単語数が１０００より大きい行のC1列を取出す」という要求を示している。ここで、TEXT_C列は図７同様データ型が、TEXT型(ADT型)で定義されているものとする。WCGは、指定TEXT列データに含まれる単語数が指定数よりも大きいかどうかを評価するものとする。
【００５４】
モジュール定義情報20から分かるように、このADT関数を実現する組込みモジュールは、_p_text_wordcount_greaterであり、その処理対象は一つのADT型データである（評価形態＝逐次評価より）。ここでは、_p_text_wordcount_greater組込みモジュールは、TEXT型データを読み込んで単語数をカウントすることにより上記機能を実現しているものとする。
【００５５】
モジュール定義情報２０の評価形態＝逐次評価より、プリプロセス処理１０において、「一行データに対する逐次評価後データ操作」の手順雛形が選定され（図３のステップ１２５に対応）、図に示すような実行手順指示３０およびモジュール起動情報４０が作成される。ここで、矢印７は、モジュール定義情報の情報が関係している箇所を指し示している。そして、実行制御５０にて以下のように問合せを実行する。まず、実行手順指示３０の「(1)一行取出し」指示に従って未評価の行を一行取出す（５２１および５２２）。
【００５６】
次に実行手順指示３０の「(2)組込みモジュール起動」指示および関連するモジュール起動情報に従って組込みモジュール９０_p_text_wordcount_greaterを起動する（５２３）。その行の指定ADT列データに対して評価を行い結果として、TRUEまたはFALSEを返す。その評価結果がFALSEである場合、次の未評価行の評価のために５２１へ戻る。評価結果がTRUEである場合、実行手順指示３０の「(370)列値取出し」指示に従って指定データ（列C1）の値を取出す（５２５）。その実現は図８での例と同様DBアクセス機能７０にて表データ４をアクセスすることにより実現する。この図９ではデータ値をして「文書m」（７１）が取出されている様子を示している。そして、取出し結果をユーザに出力する（５２６）。最終的に出力結果として６がユーザに出力される。
【００５７】
以上説明したように、一件ずつのADTデータに対する評価を行うモジュールに関しても、適切な実行手順指示を作成しADT関数として実行することができる。
【００５８】
図１０は、一挿入操作の処理例を説明する図である。ユーザ問合せ２として、SQL文「INSERT INTO T1 VALUES(100,TEXT("…"))」は、「テーブルT1への新規データの登録（挿入）」を示している。ADT関数TEXTは、TEXT型データのコンストラクタ関数であり、TEXTインスタンス（データ値）を生成するものである。モジュール定義情報20から分かるように、TEXT型カラムを含む行が挿入された契機にて組込みモジュール９０_p_text_at_insertが起動されることを指示している（起動契機＝AS_INSERT_TRIGGERによる）。
【００５９】
プリプロセス処理１０において、図に示すような実行手順指示３０およびモジュール起動情報４０が作成される。ここで、矢印７は、モジュール定義情報の情報が関係している箇所を指し示している。そして、実行制御５０にて以下のように問合せを実行する。実行手順３０の「(1)行挿入」指示に従って表データの挿入を行う（５３１）。実現は、DBアクセス機能７０（表データ（行）挿入機能）により実現する。このDBアクセス機能７０では、表データ４に対してデータの追加を行うが、挿入における組込みモジュール起動口６０において、モジュール起動情報４０を基に組込みモジュール９０_p_text_at_insertを起動する。ここでのモジュール_p_text_at_insertでは、TEXT型列に対応する文書インデクス５に対する追加文書データに関する情報の追加を行う。この、ADT関数外起動型モジュール_p_text_at_insertによる文書インデクスの維持、すなわちデータ操作に伴う文書インデクス情報の追加、削除によって図７で説明したCONTAINS関数の機能が実現可能となる。
【００６０】
図１１は、コミット処理例を説明する図である。ユーザ問合せ２として、SQL文「COMMIT」は、それまでのトランザクションのコミットすなわち確定の要求を示している。モジュール定義情報20から分かるように、コミットの契機にて組込みモジュール９０_p_text_at_commitが起動されることを示している（起動契機＝AS_COMMITによる）。
【００６１】
プリプロセス処理１０において、図に示すような実行手順指示３０およびモジュール起動情報４０が作成される。ここで、矢印７は、モジュール定義情報の情報が関係している箇所を指し示している。そして、実行制御５０にて以下のように問合せを実行する。実行手順３０の「(1)コミット処理」指示に従ってコミット処理を行う（５４１）。実現は、トランザクション処理７０により実現する。このトランザクション処理７０における組込みモジュール起動口６０において、モジュール起動情報４０を基に組込みモジュール９０_p_text_at_commitを起動する。ここでのモジュール_p_text_at_commitでは、TEXT型列に対応する文書インデクス５に対する排他の解除などを行う。
【００６２】
もちろん、文書インデクス排他解除は一具体例であり、組込みモジュール９０の機能を規定するものではない。これらコミット契機等のAS_FUNCTION以外の契機では、関連するADT関数の振る舞いを支援するような特殊インデクス（例えば文書インデクス）、データリソースなどの保持をする機能を有するモジュールを起動するのが機能上望ましい。組込みモジュール９０の機能および起動契機等は、ADT定義を行うユーザに委ねるものとする。
【００６３】
【発明の効果】
以上説明したように、本発明によれば、組込みモジュールの評価形態をデータベース管理システムに登録しておき、実行手順指示を作成する時に、評価形態によって雛形を選定することにより、評価結果を集合の形態で返す組込みモジュールの場合、適切な処理手順指示を作成し実行することができる。
【００６４】
また、組込みモジュールの起動契機をデータベース管理システムの登録しておき、実行手順指示に対応する起動契機に関連するモジュール情報を付加することにより、ADT関数起動以外の契機でも組込みモジュールを起動することができる。  さらに以上のことから、専用インデクスなどを実現手段とするADT関数の定義が可能になる。これは、従来より多彩な機能を持ったADT定義が可能なデータベース管理方法の提供を意味する。
【図面の簡単な説明】
【図１】本発明が適用されたデータベース管理システムの処理例を示す機能図である。
【図２】本発明におけるモジュール定義情報の一形態を示す図である。
【図３】本発明におけるADT関数解析の処理の流れの一例を示すフローチャートである。
【図４】本発明におけるADT関数外起動型モジュール解析の流れの一例を示すフローチャートである。
【図５】本発明における実行手順指示作成の流れの一例を示すフローチャートである。
【図６】実行手順指示の一例を示す図である。
【図７】組込みモジュール起動の処理の流れの一例を示すフローチャートである。
【図８】本発明が適用された一検索操作の処理例を説明する図である。
【図９】本発明が適用された別の一検索操作の処理例を説明する図である。
【図１０】本発明が適用された一挿入操作の処理例を説明する図である。
【図１１】本発明が適用されたコミット処理例を説明する図である。
【図１２】従来ADT機能を有したデータベース処理方法の一構成例を示す図である。
【符号の説明】
２０：モジュール定義情報
３０：実行手順指示
４０：モジュール起動情報
１２０：ADT関数解析
１３０：ADT関数外起動型モジュール解析
６０：起動契機
８０：組込みモジュール起動
【図１】
0003777666.tif 000003
【図２】
0003777666.tif 000004
【図３】
0003777666.tif 000005
【図４】
0003777666.tif 000006
【図５】
0003777666.tif 000007
【図６】
0003777666.tif 000008
【図７】
0003777666.tif 000009
【図８】
0003777666.tif 000010
【図９】
0003777666.tif 000011
【図１０】
0003777666.tif 000012
【図１１】
0003777666.tif 000013
【図１２】
0003777666.tif 000014