6.2.6 クラスの定義の変更(オブジェクトが存在する場合)
オブジェクトが存在するクラスの定義の変更は,プロパティを追加することで実現します。ここでは,プロパティの追加について説明します。
- <この項の構成>
- (1) プロパティの追加
- (2) プロパティの追加手順
- (3) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL
(1) プロパティの追加
オブジェクトが存在するクラスにプロパティを追加するには,追加するプロパティの定義を記述した定義情報ファイルを作成します。そして,作成した定義情報ファイルをメタ情報の追加コマンド(EDMAddMeta)で指定して,プロパティの定義の追加,およびプロパティに対応する列を追加するデータベース定義文の生成を実行します。追加するプロパティとプロパティに対応する表の列の並びについては,「6.2.8 追加するプロパティと列の並び」を参照してください。
プロパティの追加の手順を次に示します。
(2) プロパティの追加手順
プロパティの追加の手順では次のことに注意する必要があります。
- 抽象データ型
全文検索機能を使用していない定義済みのdmaClass_DocVersionクラスのサブクラスは,HiRDBの抽象データ型で定義する列を使用するため,全文検索機能を使用する場合に必要な次のプロパティを追加できません。
- edmProp_TextIndexプロパティ
- edmProp_StIndexプロパティ
- edmProp_ConceptTextIndexプロパティ
- edmProp_ConceptStIndexプロパティ
- edmProp_Contentプロパティ
- edmProp_Scoreプロパティ
- edmProp_RawScoreプロパティ
- edmProp_DocLengthプロパティ
- 全文検索機能付き文字列型プロパティ
なお,全文検索機能を使用している定義済みのdmaClass_DocVersionクラスのサブクラスには,データ型がBoolean型,Integer32型,およびString型のプロパティを追加できます。
オブジェクトが存在するクラスの定義を変更する手順を次に示します。
- 定義情報ファイルを作成します。
追加するプロパティの定義を記述する定義情報ファイルを作成します。
定義情報ファイルの作成については,「4.7 定義情報ファイル」を参照してください。
- インデクス情報ファイルを作成します。
追加するプロパティに対応する列の値は,手順5.で示すようにNULL値になります。これによって,追加するプロパティにインデクスを定義する定義系SQL「CREATE INDEX」で「除外値指定」はできません。インデクス情報ファイルの作成については,「6.2.2(1) クラスの追加手順」のインデクス情報ファイルの作成に関する記述を参照してください。
- メタ情報のバックアップを取得します。
「6.2.2(1) クラスの追加手順」のメタ情報のバックアップの取得に関する記述を参照してください。
- データベースのバックアップを取得します。
表に列を追加するので,データベースのバックアップを取得します。バックアップを取得する必要があるRDエリアについては,マニュアル「HiRDB システム運用ガイド」の,障害発生に備えた運用に関する説明での,定義系SQL「ALTER TABLE」の実行についての記述を参照してください。
- メタ情報の追加コマンド(EDMAddMeta)を実行します。
手順1.,および手順2.で作成した定義情報ファイル,およびインデクス情報ファイルを指定して,メタ情報の追加コマンド(EDMAddMeta)を実行して,プロパティを追加します。
メタ情報の追加コマンド(EDMAddMeta)の-oオプションで,列を追加する定義系SQL「ALTER TABLE」を格納するデータベース定義文格納ファイルを指定します。メタ情報の追加コマンド(EDMAddMeta)は,データベース定義文格納ファイルへ定義系SQL「ALTER TABLE」の「ADD」句のすべてのオプションを出力しません。このため,必要なオプションは,データベース定義文格納ファイルをテキストエディタなどで修正して追加してください。メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQLについては,「(3) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL」を参照してください。
次に,追加したプロパティの値について説明します。ここでは,例として,C++ クラスライブラリのメソッドを使用して説明します。
定義系SQL「ALTER TABLE」の「ADD」句で追加する列の値は,NULL値が設定されます。このため,追加するプロパティの値の基本単位が「Single」で,追加するプロパティのデータ型が「Boolean型」,「Integer32型」,または「String型」の場合,追加した列の値は「NULL値」となっているので,追加したプロパティの値を参照するメソッドであるCdbrDMA::GetPropertyValuesメソッドで取得する構造体SDBR_PROPのメンバuniValueの値は「NULL」となります。なお,CdbrDMA::GetPropertyValuesAndLockメソッドの場合も同様です。
また,追加するプロパティの基本単位がVariableArray型の場合,CdbrVariableArray::GetCountメソッドで取得する要素数は0となります。
メタ情報の追加コマンド(EDMAddMeta)で追加するプロパティ定義に指定する初期値は,UAPでオブジェクトを新規に作成する場合の初期値であり,追加するプロパティには値を設定しません。
- データベース定義ユティリティを実行します。
手順5.で作成したデータベース定義文を入力ファイルとして指定し,HiRDBのデータベース定義ユティリティ(pddef)を実行して,追加するプロパティに対応する列を追加します。詳細については,「6.2.2(1) クラスの追加手順」のデータベース定義ユティリティの実行に関する記述を参照してください。
- クラス定義情報ファイルを作成します。
追加したプロパティの定義を反映したクラス定義情報ファイルをDocumentBroker オブジェクト操作ツールの動作環境に配置します。詳細については,「6.2.2(1) クラスの追加手順」のクラス定義情報ファイルの作成に関する記述を参照してください。
- DocumentBroker Object Loaderの入力データを作成します。
追加したプロパティの定義を反映したDocumentBroker Object Loaderの入力データを作成します。入力データは,DocumentBroker Object Loaderを使用している場合に,クラス定義と入力ファイルを一致させるために作成します。詳細については,「6.2.2(1) クラスの追加手順」のDocumentBroker Object Loaderの入力データに関する記述を参照してください。
(3) メタ情報の追加コマンド(EDMAddMeta)が出力する定義系SQL
メタ情報の追加コマンド(EDMAddMeta)が出力するHiRDBのデータベース定義ユティリティ(pddef)の入力となる定義系SQLを次に示します。下線が付いている個所は,メタ情報の追加コマンド(EDMAddMeta)が出力しない定義系SQLを示します。
ALTER TABLE 〔認可識別子.〕表識別子
{ADD{列名 データ型〔ARRAY [最大要素数]〕
{{〔NULL|NOT NULL〔WITH DEFAULT〕〕
|〔〔NOT NULL〕 WITH DEFAULT〕}
〔WITH PROGRAM〕