それぞれのデータベース管理システム (DBMS) には固有のクセがあります。 例えば、出力時にフィールド名を大文字に変換するものもあれば、 逆に小文字に変換するものもあります。 また変換せずにそのまま出力するものもあります。これらの違いのせいで、 作成したスクリプトを他のサーバで実行することが難しくなっています。 PEAR MDB2 はこれらの違いを乗りこえることに力を入れているので、 あなたが作成したプログラムは何の変更もなしで他の DBMS に移行できることでしょう。
可搬性に関するモードのうち、どれを有効にするかについては 設定オプション portability で制御します。オプションは factory() および setOption() で設定します。
可搬性に関するモードはビット単位で指定するので、組み合わせる場合には |、取り除く場合には ^ を使用します。 実際の方法については、以下の例を参照ください。
注意: MDB2 の可搬性モードは、返り値にのみ影響を及ぼします。 クエリ自体にはかかわりません。たとえば、識別子を含む名前のテーブルを作成した場合は、 すべてのクエリで quoteIdentifier() を使用する必要があります。 そうしないと "not found" や "not exists" といったエラーが発生します。 また、quote_identifier オプションも確認しましょう。 これが false の場合は、check_option を使用してもクォートは適用されません。
MDB2_PORTABILITY_ALL (デフォルト)
すべての可搬性機能を有効にします。デフォルト設定です。
MDB2_PORTABILITY_DELETE_COUNT
削除された行数を強制的に取得します。 単純な DELETE FROM tablename クエリを実行した場合に、削除された行数を返さない DBMS があります。 このモードは、そんな DBMS から削除された行数を取得するために、 DELETE クエリの最後に WHERE 1=1 を追加します。
MDB2_PORTABILITY_EMPTY_TO_NULL
入出力データの空文字列を null に変換します。 Oracle は空の文字列を null と判断するため、これが必要になります。 一方、他の大半の DBMS は空の文字列と null を区別します。
MDB2_PORTABILITY_ERRORS
特定のドライバのエラーメッセージを、他の DBMS と互換性のあるものに変換します。
表 39-1エラーコードの対応表
ドライバ | 説明 | 変更前の定数 | 変更後の定数 |
---|---|---|---|
mysql, mysqli | ユニークキーおよび主キー制約 | MDB2_ERROR_ALREADY_EXISTS | MDB2_ERROR_CONSTRAINT |
mysql, mysqli | NOT NULL 制約 | MDB2_ERROR_CONSTRAINT | MDB2_ERROR_CONSTRAINT_NOT_NULL |
MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES
これは、連想配列のキーからすべての修飾子を取り除きます。 例えば SQLite のデフォルト設定では、修飾子つきのクエリで結果を取得すると カラム名の修飾子が付加されます。
MDB2_PORTABILITY_FIX_CASE
すべてのメソッドにおいて、テーブルやフィールドの名前を 小文字あるいは大文字に変換します。どちらに変換するのかは、 オプション field_case の設定に依存します。このオプションは CASE_LOWER (デフォルト) あるいは CASE_UPPER を指定します。 注意: この変換は、返り値に対してのみ適用されます。 クエリ内のフィールド名やテーブル名には適用されません。
MDB2_PORTABILITY_NONE
すべての可搬性に関する機能を無効にします。
MDB2_PORTABILITY_NUMROWS
numRows() を Oracle で動作させるハックを有効にします。
MDB2_PORTABILITY_RTRIM
取得したデータの右側にある空白をすべて取り除きます。 これは、固定長文字列の右側を自動的にトリムするような RDBMS には適用されません。たとえ可変長文字列で右側がトリムされていなくても同じです。
例 39-1接続の際に、可搬性に関する機能をすべて無効にする
|
例 39-2 setOption() を使用して、 小文字変換と空白除去の機能を有効にする
|
例 39-3 setOption() を使用して、 空白除去以外のすべての可搬性機能を有効にする
|