Schemaの設定について1 #03B!

こんにちわ!nekokakです!

三日目はDBIx::Skinnyで使うschemaクラスの細かい設定方法などについてです。

二日目で作ったProj::DB::Schemaを振り返ってみましょう。

package Proj::DB::Schema;
use DBIx::Skinny::Schema;

install_table user => schema {
    pk 'id';
    columns qw/id name birth_on/;
};
1;

まず、DBIx::Skinny::Schemaをuseしています。

DBIx::Skinny::Schemaをuseすることで、schemaの定義を行うための各種関数が

Proj::DB::Schemaにexportされます。

また、use strict/use warningsされた状態と同じ状態になるので、

特別Proj::DB::Schemaでuse strict/use warningsを各必要はありません。

exportされたinstall_tableを使ってtableの定義を行います。

この例の場合は、userというテーブルのスキーマを定義しています。

pkというキーワードを使ってこのuserテーブルのプライマリキーを指定します。

DBIx::Skinnyは1つだけプライマリキーを必ず設定する必要があります。

columnsというキーワードでuserテーブルに存在するカラム名を指定します。

この例の場合、id/name/birth_onというカラムが存在する事を示しています。

次にinstall_utf8_columnsについて説明します。

例えばnameカラムにマルチバイトな文字列が含まれる場合、

プログラム側ではutf8flagがonな状態で扱いたい事でしょう。

その場合にinstall_utf8_columnsを使って定義します。

package Proj::DB::Schema;
use DBIx::Skinny::Schema;

install_table user => schema {
    pk 'id';
    columns qw/id name birth_on/;
};
install_utf8_columns qw/name/;
1;

install_utf8_columnsはテーブル毎カラム毎に定義するのではなく、

定義したスキーマ全てに対して有効に動作します。

ですので、

userテーブル以外にfooというテーブルが存在し、fooテーブルにnameカラムが存在する場合は

この一度の設定でfoo.nameに対してもutf8flagをon/offする処理が行われます。

このinstall_utf8_columnsは最新のDBD::*を使っていれば特に必要が無いようです。

例えばMySQLの場合はmysql_enable_utf8というオプションを有効にしてコネクションするだけです。

これはid:typesterさんに教えていただきました。

ありがとうございます。

ただ、常に最新のDBD::*を使えるとも限らないので、install_utf8_columnsは

DBIx::Skinnyで使える機能として残してあります。

明日は引き続きschemaの細かい設定についてです

have a nice skinny days!:)