mst: Matt S Trout (project founder - original idea, architecture and implementation) castaway: Jess Robinson (lions share of the reference documentation and manuals) abraxxa: Alexander Hartmaier acca: Alexander Kuznetsov acme: Leon Brocard aherzog: Adam Herzog Alexander Keusch alexrj: Alessandro Ranellucci alnewkirk: Al Newkirk Altreus: Alastair McGowan-Douglas amiri: Amiri Barksdale amoore: Andre
« TaskPadを使いながら作業作業 | トップページ | 新宿 磯善 » DBICのリレーションシップ [Perl] やっぱり、DBIx::Class::Relationshipを読み直すことにした。 こういうのをちゃんと理解しておかないと足をすくわれるし。 ちょっとづつ書いたら、何日もかかった。ションボリ。 まずは前提となるデータ こんな感じで、Authorテーブルと、Bookテーブルがあるとする。 ID | Name | Age ------------------ 1 | Fred | 30 2 | Joe | 32 ID | Author | Name -------------------- 1 | 1 | Rulers of the universe 2 | 1 | Rulers of the galaxy リレーションシップなしの場合 もしもリ
MySQLの関数を検索条件にぶち込んでほげほげしたい場合 $rs->search({'me.created_on' => {'>'=> \"NOW() - INTERVAL $span DAY"}); とか書くと、$spanがSQLインジェクションになりかねないの。 そういう場合はsearch_literal使うよろし。 $rs->search_literal('me.created_on >= NOW() - INTERVAL ? DAY', $span); こんなSQLで安全無敵 Executing : SELECT me.id, me.rid, me.name, me.created_on, me.timestamp FROM member me WHERE ( me.created_on >= NOW() - INTERVAL ? DAY ) : '1' まあINTERVAL使わな
DBIx::ClassやFormValidator::Simple::Plugin::DBIC::UniqueをつかってTropy DBIx::ClassやFormValidator::Simple::Plugin::DBIC::Uniqueをつかってみる。ネタはTropy。Tropyは簡単で良い。 完成品は↓ここで。特に外見で変わったところはありません。 http://nomadscafe.jp/dbiccaropy/dbiccaropy.cgi/ DBIx::Class(0.03003)なんだけど、自分の環境(CentOS 4.2)だとmake testで失敗する。 Failed Test Stat Wstat Total Fail Failed List of Failed -------------------------------------------------------
http://back-paper.atsushi.labs.mfac.jp/show?paper_rid=hPu9MWCKGd 実際にわたしが遭遇したのは以下のようにprefetchをつかって 結合先のテーブルのカラムをとったときにずれるという現象です。 my $friends = $schema->resultset('Friend')->search( { 'me.seq' => 12, }, { '+select' => [ \ 'RAND() as rand' ], # '+as' => [ 'rand' ], prefetch => 'profile', cache => 1, order_by => 'rand', page => 1, rows => 3 } ); while(my $friend = $friends->next){ print("------------
DBICで簡単にお金が借りることができます(ちが まあ、面白くないのでやめておきますが、DBICは かなりパフォーマンスに気を使った設計なのは周知の事実なのでつが、 キャッシュを使うことでよりパフォーマンス向上が図れます。 例えば my $itr = $self->model('Member')->search({},{}); while (my $member = $itr->next) { warn $member->id; } $itr->reset; while (my $member = $itr->next) { warn $member->id; } こんな感じの処理があったとします。 Memberテーブルを二度処理するみたいな。 ちなみに同じオブジェクトを使う時は $itr->reset; こうしてやればイテレータがリセットされます。 この場合、2個のwhileのところでそ
Windows 10 の入ったディスクのバックアップが clonezilla で外形的にできることがわかった Posted on Jun 27, 2020 Windows10 が載ってるディスクに破壊的な変更加える前にバックアップしたくて、SystemRescueCd で clonezilla 使ってディスクまるごとイメージ化した(内部的には partimage が使われてる?)。 でこれ、レストアしたら起動する状態まで持っていけるんかな? すんごく不安だ。。。 — woremacx (@woremacx) June 15, 2020 systemrescuecd に同梱されている clonezilla を使ってまるまる取った Windows 10 のバックアップが戻せるか不安で仕方なかったので、VirtualBox に戻せるか試した。 そもそもなぜ clonezilla を試したかったの
NAME SQL::Abstract - Generate SQL from Perl data structures SYNOPSIS use SQL::Abstract; my $sql = SQL::Abstract->new; my($stmt, @bind) = $sql->select($source, \@fields, \%where, $order); my($stmt, @bind) = $sql->insert($table, \%fieldvals || \@values); my($stmt, @bind) = $sql->update($table, \%fieldvals, \%where); my($stmt, @bind) = $sql->delete($table, \%where); # Then, use these in your DBI stat
以前「DBICで本当に困ったら SCALAR REFERNCE を使え - daily dayflower」にて, DBIC で WHERE field1 IS NOT NULL な検索をしようと思って, …… $resultset->search({ field1 => \'IS NOT NULL' }); とか書いていたんですが, $resultset->search({ field1 => { '!=', undef } });でよかったのでした。 $resultset->search({ field1 => undef });が WHERE field1 IS NULLというのは知っていたんですが,'!=' をつけるときちんと「IS NOT NULL」に変換してくれるとは(SQL::Abstract の 714 行目あたりのロジックとしてちゃんとありました)。これでスカラーリファレ
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
ActiveRecordなORマッピングはJavaのTorqueを大昔に触ったきりなのでこんな実装デザインが正しいのかどうかわかりませんが、DBIx::Classで package CD::Schema::Albums; use strict; use warnings; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/Core/); __PACKAGE__->table('albums'); __PACKAGE__->add_columns(qw/ id artist title /); __PACKAGE__->set_primary_key('id'); __PACKAGE__->belongs_to('artist' => 'CD::Schema::Artists'); __PACKAGE__->has_many(
退社。というか帰宅。 琥珀エビスといかいうのを見つけてお酒かうつもりはなかったのに買ってしまった。うまそう。 既存のDBに接続してテーブル情報などを取得して、DBIx::Class::Schema のテーブルクラスを作成してくれる Schema::Loader の make_schema_at が自分で定義した外部クラスファイルも見てくれるようになっていた。 perl -Ilib -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:tmp -e 'make_schema_at("MyApp::Schema", { components => [qw/ResultSetManager UTF8Columns/]}, ["dbi:mysql:myapp","root"])' などとすると、./tmp にスキーマクラスをダンプしてくれ
use DBIx::Class::Storage::Statistics module's hook. package Your::DBIC::Profiler; use strict; use warnings; use base 'DBIx::Class::Storage::Statistics'; use Time::HiRes qw( tv_interval gettimeofday ); sub new { my ($class, $params) = @_; bless $params, $class; } sub query_start { my $self = shift; my $sql = shift; my $params = @_; my $bind = $params ? join(', ', @{$params})
Revision 200 (by atsushi, 11/24/06 11:02:05) package MoFedge::Plugin::DBIC; use strict; use warnings; use UNIVERSAL::require; sub import { my $class = shift; my $pkg = caller; my $schema_class = $pkg->base_name . "::Schema"; $schema_class->use or die $@; { no strict 'refs'; ## no critic *{"$pkg\::model"} = sub { my ($self, $schema) = @_; $self->{__DBIC_SCHEMA} ||= $self->_dbic_connect($schema_clas
mst: Matt S Trout (project founder - original idea, architecture and implementation) castaway: Jess Robinson (lions share of the reference documentation and manuals) abraxxa: Alexander Hartmaier acca: Alexander Kuznetsov acme: Leon Brocard aherzog: Adam Herzog Alexander Keusch alexrj: Alessandro Ranellucci alnewkirk: Al Newkirk Altreus: Alastair McGowan-Douglas amiri: Amiri Barksdale amoore: Andre
http://en.yummy.stripper.jp/?eid=448071 DBICではたぶん発行するSQLのカラムに別名をつけられないみたいなので スカラーリファレンスでしかたないんじゃないすかね。 どしても嫌だったら、 my @results = reverse sort {$a->get_column('posts_count') <=> $b->get_column('posts_count')} $self->model('Hoge::User')->search( { ## nothing }, { select => [ 'me.user_id', { count => 'me.user_id' } ], as => [qw/ user_id posts_count /], group_by => ['me.user_id'], } ); for my $data (@r
やっぱりちゃんと Schema::Pg を作ろうと思い立ち、作業してみたらちょっと悩む。 Schema/SQLite/*.pm の belongs_to, has_many で __PACKAGE__->belongs_to( feed => 'Plagger::Schema::SQLite::Feed' );こんな風に hard code してあるところはどうしよう? 単に SQLite/*.pm をまんま Pg/*.pm としてコピーして s/SQLite/Pg/ すればもちろんできるけど、それはなあ。 それ以外の作業は以下の通りで。 entry.date / feed.updated の infrate, deflate には DateTime::Format::Pg を使う(DB 側の型は timestamp ) __PACKAGE__->inflate_column( date
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く