db.xmlの作成と挙動について
db.xmlは、データを保存するブロック、またはパッケージの必須ファイルの1つで、1つまたは複数のデータベーステーブルを定義しています。
ブロックまたはパッケージのインストール時にこの db.xml を参考にブロック、もしくはパッケージ用のテーブルが作成されます。このファイルはAXMLS formatで書かれています。
db.xml の勉強方法でオススメの方法の1つとして、マーケットプレイス場の他のアドオンを参考にされるのもいいでしょう。
このガイドはAdoDB XMLスキーマを理解する方向けに、利用できるタイプとキーワードを解説しています。
STEP 1: ベースの作成
基本的なブロックのサンプルをダウンロードして下さい。
次のコードをベースとしてファイルを作り始めましょう。
<?xml version="1.0"?>
<schema version="0.3">
<table name="btBasicTest">
<field name="bID" type="I">
<key ></key>
<unsigned ></unsigned>
</field>
......
......
</table>
</schema>
※ このサンプルでは、データベーステーブルが "bBasicTest"として定義されています。自作ブロックのコントローラー(controller)ファイルで定義されているハンドル (handle) に従って名前を変更する必要があります。
※ コントローラーの btTable プロパティーで指定されているテーブルはbIDをプライマリキーとして持つ必要があります。型は整数(integer)に設定します(オートインクリメントは設定してはいけません)。このキーはconcrete5のコアのBlocksテーブルとマッピングされ、あなたのブロックに固有のデータとconcrete5がブロックについて持っているデータ(メタデータ、位置、バージョン等)と関連づけるのに使われます。
STEP2: 自分のブロック用にカスタマイズ
次に、この外殻に中身を入れていきます。あなたのブロックで必要なフィールドを追加します。例えば、"Name"(名前)を取得、保存、表示したい場合は、次のようなXML構造を追加するとよいでしょう。
<field name="name" type="C" size="255"> </field>
※ 例に示されているように、XMLファイルの各レベルはインデントするのが適切です。
下記の表は使用できるデータベース構造を定義するのに使えるフィールドタイプとキーワード一覧です。
参考:フィールドタイプ一覧
| タイププリフィクス | 説明 |
|---|---|
| C | 可変長文字列。255文字までの制限。 |
| X | 大きな可変長文字列。4000文字までの制限(Oracleとの互換性のため)。 |
| XL | Oracleのための最も長い可変長文字列型。キャラクタ・ラージ・オブジェクトを返す。 |
| C2 | マルチバイト可変長文字列 |
| X2 | 大きなマルチバイト可変長文字列 |
| B | BLOB(バイナリ・ラージ・オブジェクト) |
| D | 日付(いくつかのデータベースはこの型をサポートしていないので、其の場合はdatetime型を返す) |
| T | 日付またはタイムスタンプ |
| L | 真偽値(0または1)を格納するための整数フィールド |
| I | 整数(I4にマップされる) |
| I1 | 1バイト整数 |
| I2 | 2バイト整数 |
| I4 | 4バイト整数 |
| I8 | 8バイト整数 |
| F | 浮動小数点数 |
| N | アンパック浮動小数点数 |
参考:MySQLと対応した db.xml フィールドタイプ一覧
| db.xml | MySQL |
| C | VARCHAR |
| XL | LONGTEXT |
| X | TEXT |
| C2 | VARCHAR |
| X2 | LONGTEXT |
| B | LONGBLOB |
| D | DATE |
| TS | DATETIME |
| T | DATETIME |
| I4 | INTEGER |
| I | INTEGER |
| I1 | TINYINT |
| I2 | SMALLINT |
| I8 | BIGINT |
| F | DOUBLE |
| N | NUMERIC |
参考:フィールドタイプ修飾子
| キーワード | 説明 |
|---|---|
| AUTOINCREMENT | オートインクリメント数値。利用できない場合はトリガーをエミュレートします。NOTNULLを同時に指定してください。 |
| KEY | プライマリキーフィールド。NOTNULLを同時に指定してください。複合キーをサポートしています。 |
| PRIMARY | KEYと同じ。 |
| DEF | DEFAULTの略語。 |
| DEFAULT | デフォルト値。' SYSDATE 'のように前後がスペースが付いていない場合は自動的に引用符で囲まれます。 |
| NOTNULL | NULLを許可しない |
| DEFDATE | 現在の日付を取得しデフォルト値として設定する。 |
| DEFTIMESTAMP | 現在の日付時刻を取得しデフォルト値として設定する。 |
| NOQUOTE | デフォルトの文字列の値が自動で引用符で囲まれないようにします。 |
| CONSTRAINTS | フィールド定義の最後に追加の制約条件を指定することが可能。 |
サンプルコード
db.xmlファイルの作例が下記となります。サンプルを参考に自作ブロック開発をしてみてください。
<?xml version="1.0"?>
<schema version="0.3">
<table name="btBasicTest">
<field name="bID" type="I">
<key ></key>
<unsigned ></unsigned>
<default value="0"/>
</field>
<field name="content" type="X2">
</field>
</table>
</schema>