Reverse モジュール

Reverse モジュール -- データベースの構造を管理するためのモジュール

説明

Reverse モジュールは、 Common モジュールドライバ を拡張したもので、次のような構成になっています。

使用法

MDB2 の Reverse ドライバを使用するには、まず Reverse ドライバを MDB2 のインスタンスに読み込む必要があります。 まずは MDB2 のインスタンスを作成し、接続を確立しましょう。
上の例では、既存のデータベースへの有効な接続を作成するために、 データベースサーバへの有効なユーザ名とパスワードを使用しています。 これで、サンプルアプリケーション内で MDB2 Reverse 機能のすべてを使用できるようになりました。 このドキュメントで使用するためのテーブルを、このように作成します。

getTableFieldDefinition() メソッド

getTableFieldDefinition() メソッドの目的は、 テーブルのフィールド定義情報を配列で取得することです。 この配列を使用すると、別の場所で同じテーブルを作成したり その他必要に応じて使用できます。先ほど定義した MDB2 インスタンスを用いてデータベースに接続し、 対象となるテーブルを作成し、調べたい特定のフィールドをリバースエンジニアリングします。 まず、対象となるテーブルとフィールドを定義する必要があります。 そうすれば、たった一行コードを書くだけでテーブル定義を配列として取得できるようになります。 それから、var_dump で結果を表示しています。
フィールド定義に依存しますが、返される結果は次のようになるでしょう。
array(1) {
  [0] => array(5) {
    ['notnull'] => bool(false)
    ['nativetype'] => string(4) "date"
    ['default'] => NULL
    ['type'] => string(4) "date"
    ['mdb2type'] => string(4) "date"
  }
}

テーブルの付加情報

これ以外にもさまざまなメソッドがあり、選択したテーブルについての情報を取得することができます。 以下のメソッドのいずれかを、ほしい情報に応じて使用しましょう。

tableInfo() メソッド

このメソッドは、テーブルに関する多くの情報を返します。 さまざま場面で使用することができます。 返される情報の内容は RDBMS によって微妙に異なり、結果の形式も変わってきます。 このメソッドは、テーブル定義のほかに結果セットに対して使用することもできます。 これは、最適化されたテーブルを作る際に便利です。 tableInfo() メソッドのパラメータには、 結果をどのように表すかを指定するためのモードを渡すことができます。 結果がどのようになるのかをよりわかりやすくするため、 同じクエリを使用して結果を異なるモードで出力する一連の例をごらんいただきます。 注意: 最初のパラメータには、テーブルあるいは結果セットのいずれかを指定して情報を取得することができます。 これらの例では、先ほど定義したテーブルを使用します。
これ以降の例では、最初のテーブルフィールドの定義のみを含めます。 モードごとの違いを示すには、それで十分だからです。 さあ、ではモードを MDB2_TABLEINFO_ORDER に変更してみましょう。 デフォルトの出力で得られた情報に加えて、カラム数についての情報が num_fields 要素で返されます。また、order 要素の配列の構造は、キーがカラム名、値がそのカラムのインデックス (デフォルトの出力のキーに対応します) となります。
モードを MDB2_TABLEINFO_ORDERTABLE に変更すると、 さらに情報が追加されます。返り値の配列の次元数がひとつ多くなり、 テーブル名をキー、そのフィールド名をサブキーとする構成になります。 この型のクエリが有用なのは、たとえば複雑な結合を行っており、 同名のフィールドが複数ある場合などです。

注意: flags 要素には、フィールドに関する付加情報が スペース区切りの一覧で含まれます。この内容には、DBMS 間での一貫性はありません。 それぞれの DBMS に依存し、次のような内容になります。

大半の DBMS では、結果がテーブル名の場合は table および flags しか返しません。 オプション portabilityMDB2_PORTABILITY_FIX_CASE に設定されている場合は、テーブルおよびフィールドの名前は小文字あるいは大文字に変換されます。 CASE_UPPER の場合は、すべてのテーブルおよびフィールドは大文字に変換されます。 これは Oracle や Firebird/Interbase と同じ挙動です。一方、 CASE_LOWER の場合はすべてのテーブルおよびフィールドを小文字に変換します。 これがデフォルトの設定です。