DBIx::Class vs mysql vs UTF-8
それ、0.7以降(多分)ならconnectionやconnect上書きしなくてもこうかけるよ。
__PACKAGE__->connection(
'dbi:mysql:foo',
'root',
{
on_connect_do => ['SET NAMES utf8'],
},
);
MySQLのダブルクオートとsqlt
MySQLのsqlにダブルクオートが含まれてるとsqltがこける。
なんだろう。シングルクオートに置換すると通る。
とはいえ、便利すなぁ。sqlt。
DBIC+SQLiteでイテレータループ内でupdateが出来ない件
すっかり忘れててまたはまってしまった。
検索したら自分のメールが出てきてびびる罠。
ここにもメモしてた
Schema::Loader::make_schema_at 便利
Schemaクラスの雛形つくるスクリプトを書こうと思って、sqltの出力ベースにしてやるかとか思ったらなんかcolinuxだとtestにこけたので、Schema::Loaderのdebug出力を基に作るかとか思ってSchema::Loaderのぞいてたら、なんかmake_schema_atとかいうのでやりたいことができた。
いつのまに。coolすぎるぜ。
すこし出力ファイルいじりたいからラッパスクリプト書くかな。
DBIC が起動時の重いのは C3 のせい
らしい。さっきIRCでそのパッチが出てた。
後で見てみよう。
開発中アプリの再起動に時間かかって結構致命的なのよね。
on_connect_do
で、下記の PRAGMA synchronous = off
だとか、MySQL の SET NAMES utf8
みたいなのを DBIC でやるばあいは
$schema->storage->on_connect_do( ['SET NAMES utf8'] );
みたいにするわけだけど、これは今はschemaクラス自体には書いておけないのでめんどくさい。(0.699..のほうではできるようになっている)
Catalyst でつかうだけなら、今の DBIC でも、Model::DBIC::Schema の connect_info
で on_connect_do
を書いておける。
connect_info => [
'dbi:SQLite:dbname=foo.db',
{ on_connect_do => [ 'PRAGMA synchronous = OFF', ], }
],
blblack++
DBIC というか SQL::Abstract の小技
同僚が DBIC で、
select * from table where column1 > column2;
みたいのを実行したいけどどうやるかわからんとかいっていて、オレもわからなかったので IRC で聞いたらすぐ解決した。
$rs->search({ column1 => \'> column2' });
SQL::Abstract
の機能。しらなかった。
これ他にもいろいろつかえるね。DBIC の機能というわけではないから CDBI::Sweet とかでもOKか。
DBIx::Class::Schema
Schema ベースにすると重くない?
なんかアプリの起動に10秒くらいかかるよ。。
さっきかいたの
PACKAGE->inflate_column( query => { inflate => sub { my $u = URI->new; $u->query(shift);
my $ret = {};
for my $k ( $u->query_param ) {
my @v = $u->query_param($k);
$ret->{$k} = @v > 1 ? [@v] : $v[0];
}
$ret;
},
deflate => sub {
my $utf8off = sub {
my $str = shift;
utf8::encode($str) if utf8::is_utf8($str);
};
my $hash = shift;
for ( keys %$hash ) {
if ( ref $hash->{$_} eq 'ARRAY' ) {
$utf8off->($_) for @{ $hash->{$_} };
}
else {
$utf8off->( $hash->{$_} );
}
}
my $u = URI->new;
$u->query_param(%$hash);
$u->query;
},
}
);
foo=bar&baz=blah
みたいなクエリを保存するカラムに、ハッシュで保存してハッシュで取り出すというやつ。
短くかけるかと思って書き始めたら、URIの query_form
や query_param
にutf8フラグったの渡すとこけたり、foo=bar&foo=baz
のように配列になるべきものがうまくハッシュにできなかったりとかしてこんなに長く。