トレース DBIx::Classで複雑なクエリを行っている場合、実際に発行されているクエリをみる必要がある場合があります。そのような場合は環境変数DBIC_TRACEを設定してスクリプトを実行すると実行されているクエリをみることができます: DBIC_TRACE=1 myscript.p... 続きを読む
DBICで論理削除をしたくなったので調べていたのだが、うまく書く方法がイマイチなかった。 まず、削除フラグを常にチェックするようにするのは簡単で、テーブルクラスに __PACKAGE__->resultset_attributes({ where => { deleted => undef }}); とか書いてくだ... 続きを読む
以前からブログに書こうかどうか迷っていたものです。 DBIx::Class::UTF8Columnsでできるんですが、カラムを指定するのが面倒。MySchemaはDBIx::Class::Schema::Loaderで自動生成してることもあって、あんまりMySchema/*をいじりたくない。というわけで、inflat... 続きを読む
結論: DBIC で bulk insert するには DBIC::ResultSet->populate を使えばよい。ただし primary key を明示的に指定する必要がある。大量のデータを mysql に一度にぶちこみたいときには INSERT 文をたくさん発行すると遅いので下記のように bulk insert するの... 続きを読む
トランザクション使ってください。以上!!とかが当然一番な感じだったりするのですが、MySQLのMyISAMを使ってたりしてトランザクションなんですかそれ状態の場合まあ困るわけです。 my $user = $self->model('User')->search()->first; my $login_count = $use... 続きを読む
ってのをつくってみました。ちょっと微妙な実装だったり、ほかにいい方法あるんかもしれないですがこれくらいしか思いつかなかったので。利用方法としてはたとえばuserテーブルにレコードを作成するときにリレーションのあるプロフィールテーブルにもレコードを... 続きを読む
■Class::C3 updateしたらClass::C3::XSも付いて来た。 体感出来る程早くなってる。 特にDBIC! Permalink | コメント(1) | トラックバック(0) | 18:31 続きを読む
書き忘れたけどさっきの update_schema.pl は ./script/myapp_update_schema.pl dbi:mysql:tablename username password 見たいな感じで DSN を渡す必要がある。めんどう。 ここら辺があれでまだヘルパーにはなってない。 mizzy.org : Re: DBICとDBIx::Class::S... 続きを読む
■[Perl]S::P::DebugMessageでDBICのクエリログをみる このGW期間中空前のBradブームのなか皆様いかがお過ごしでしょうか? http://www.onemogin.com/blog/554-profile-your-catalystdbixclass-app-with-querylog.html このサイトをみててSledgeでもだせばいい... 続きを読む
ブログが続かないわけ | DBICとDBIx::Class::Schema::Loader 僕のいろいろな勘違い にて、 とはいえ、僕の稼働中のアプリはすでに手動型のSchema で動いている。スキーマを作り直したら、リレーションの設定を全てしなおさなければならないので、それは現実的じ... 続きを読む
find_or_createをよく使ってる人はfind_or_newを使うようにしたほうがいいお。たとえば、 my $member = $self->model('Member')->find_or_create( { name => 'nekokak' } )->update( { moge => 'kekekek' } ); とかすると、searchしてinsertしてupdateとクエリ... 続きを読む
■[Perl]DBICでMySQLのロック http://d.hatena.ne.jp/tokuhirom/20070126/1169812586 なんとなくDBICのにしてみた。 package DBIx::Class::Lock::MySQL; use strict; use warnings; use base 'DBIx::Class'; use Carp::Clan qw/^DBIx::Class/; sub get_lock { m... 続きを読む
MySQLの関数を検索条件にぶち込んでほげほげしたい場合 $rs->search({'me.created_on' => {'>'=> \"NOW() - INTERVAL $span DAY"}); とか書くと、$spanがSQLインジェクションになりかねないの。そういう場合はsearch_literal使うよろし。 $rs->search_literal('... 続きを読む
IRCの#dbix-classではDBIx::ClassのモジュールがCPANにアップされるとIRCボットがお知らせしてくれるようになってます。で、先ほどDBIx::Class::FromSledgeをアップして、そのお知らせがIRCでながれたら、、、 17:15 (GumbyNET2) CPAN Upload: DBIx-Class-FromS... 続きを読む
DBIC の ResultSet を Storable で serialize してセッションに入れようとしてハマってる人がいたのでちょっと調べてみた。$hoge とかをセッションに入れて、入れたあとでセッションから復元したやつに対して update とかをかけようとしたりするとエラー。これ... 続きを読む
■[Perl]DBIC::Schema::Loaderを久々に使ってみる 普段からLoader使っている人には目新しい話題はない予定。 思い出すことから始めてるので。 load_from_connectionがdeprecatedになってた。 バージョン0.04000では削除されるらしいので使わないようにすべし。 ... 続きを読む
■[Perl]DBICでの簡単キャッシング DBICで簡単にお金が借りることができます(ちが まあ、面白くないのでやめておきますが、DBICは かなりパフォーマンスに気を使った設計なのは周知の事実なのでつが、 キャッシュを使うことでよりパフォーマンス向上が図れます... 続きを読む
■[Perl]DBIx::Class::StorageReadOnly とかいうのをでっち上げてみた。 スレーブにinsertとかupdateとかかけて死ねるのはイヤンなので。 まあ、開発環境のDBもちゃんと設定しておけば こんなの使わなくても気づくのですが、保険です。 package DBIx::Class::St... 続きを読む
■[Perl]DBICでのアップデート まあ、普通。こんな感じかと。 my $member = $self->model('Member')->search({email => 'nekokak@hogehoge.hoge'})->first; $member->update({name => 'nekokak'}); 実行されるSQL Executing : SELECT me.name, me.rid, me.id FR... 続きを読む