24062006 cdbi fedoracore oracle
jreって単なるシェルスクリプトだったので、頑張ればGUIインストーラーを起動させられそうな感じが。
jreいじってみたけど、segmentation faultが治らん。
FC2もFC5もkernel2.6系なんだからoracle8iクライアントがFC2にはインストールできてFC5にはできないのは納得いかん。
libgcjがあやしい。
24062006 cdbi fedoracore oracle
jreって単なるシェルスクリプトだったので、頑張ればGUIインストーラーを起動させられそうな感じが。
jreいじってみたけど、segmentation faultが治らん。
FC2もFC5もkernel2.6系なんだからoracle8iクライアントがFC2にはインストールできてFC5にはできないのは納得いかん。
libgcjがあやしい。
16062006 cdbi
Class::DBI::OracleのおかげでSQL書かなくて快適になったんだが、悩ましいカラム名のついているテーブルがあった。
Column 'qv' in Test::Table clashes with built-in method at ./m2desc.pl line 6
あー、qvとは、、、、
aliasってないのかなぁとちょっと探してみたけど、それだと__PACKAGE__->set_up_tableでお気軽に設定する意味なくなっちゃうからないんだろうナァ。
やっぱ、テーブルのカラム名変えるしかないんだろうか?既存のプログラムにも手を入れなきゃならんから、これはちょっと現実的でない。参照したいだけだから、qvだけ名前を変えたviewでしのぐ方法もあるにはあるが、、、、
CDBIでうまいことやる方法はないんだろうか、と探してみたけどいい方法は見つからなかった。
18052006 cdbi
職場のTTいじくってたら、
これおかしなことやってんじゃんということに気づいた。prev,next自分で書く必要ないじゃん。
### navigation like: prev 20 | next 20 [% IF pager.previous_page %] <a href="display?page=[% pager.previous_page %]"> prev [% pager.entries_per_page %] | [% END %] [% IF pager.next_page %] <a href="display?page=[% pager.next_page %]"> next [% pager.entries_per_page %] [% END %]
そしてClass::DBI::Plugin::Pagerてのもみっけたのでどう違うんだろうと思って調べたら、 Limitがきくから大きいDBで速くなるのね。
にClass::DBI::PagerはClass::DBIのためのミックスインでと書いてあったのだけど、多重継承とはどう違うんだろうか
とか思ったのでソース見てみたけどわからん。明日もう一度じっくり読もう。
12052006 cdbi
Class::DBIでMySQLのDatetime型を日付で集計ってどうやるんだろうか?
つまりはこういうことがやりたいんだけど。
mysql> select substring(subdate,1,10) as date,count(*) mysql> from items group by date; +------------+----------+ | date | count(*) | +------------+----------+ | 2006-04-26 | 15 | | 2006-04-27 | 2 | | 2006-05-01 | 5 | | 2006-05-02 | 1 | | 2006-05-09 | 2 | | 2006-05-10 | 1 | | 2006-05-11 | 37 | | 2006-05-12 | 2 | +------------+----------+
こいつを棒グラフとか折れ線グラフで画像に書き出してやろうと思ったんだけどナァ、、、、
やっぱset_sqlなのかな。
08052006 cdbi
mixiみとったら、Class::DBI::AutoLoaderがわかんないとかいうトピックをみっけた。
自動的にサブクラスを作ってくれるらしい。サブクラスの命名則は文字数字以外をsplitして最初の文字を大文字にして連結。
$table = join('', map { ucfirst($_) } split(/[^a-zA-Z0-9]/, $table));
おー、これは便利そうだ、いったいどうやってるんだ?とコードを眺めてみたら、importメソッドからgenerateClassを呼び出して、eval($class)でサブクラスを作ってるみたい。
で、importってドコで呼ばれんの?
ってことで少し調べてみたら、 続・初めてのPerlの12章に書いてあった。
use My::Module qw(kzfm hana yuki);
は以下のコードと等価
require My::Module; My::Module->import( qw(kzfm hana yuki) );
02052006 cdbi
調子にのってClass::DBI::OracleでO/Rマッピングじゃ!とQSARやりやすいようにデータベースのモジュールを片っ端から書いたら、
DBD::Oracle::st fetchrow_array failed: ORA-24345: A Truncation or null fetch error occurred (DBD ERROR: ORA-01406 error on field 7 of 14, ora_type 8, LongReadLen too small and/or LongTruncOk not set) [for Statement "SELECT cmr, nnhoh, mixture, mwt, status, mlogp, smiles, tpsa, ro5_score FROM PHYSICO WHERE id=? " with ParamValues: :p1='99999'] at /usr/lib/perl5/site_perl/5.8.3/DBIx/ContextualFetch.pm line 88,line 203.
とエラーが。
どうも、smilesで突っ込んであった化合物情報が長すぎるっぽい。 今まで、問題にならなかったのはsmilesをselectする必要がなかったかららしい。
use base qw(Class::DBI::Oracle); our $VERSION = '0.01'; # Preloaded methods go here. __PACKAGE__->set_db('Main','dbi:Oracle:orcl','kzfm','kzfm',{LongReadLen => 20000}); __PACKAGE__->set_up_table("PHYSICO"); 1; __END__
とやってLongReadLenの値を変えてOKなかんじ。
01052006 cdbi
Class::DBI::mysqlのset_up_table便利すぎなんで、最近もっぱらmysql派なんだけどオラクルにもないかなと探したらあった。
カラム名とか入れなくてもいいのに慣れちゃうとあれだ、ずぼらになる。というか、テーブル作る際にそのままCDBIで使えるようなわかりやすいカラム名付けたり、APIのこと考えたテーブルスキーマにするように努力したりするのでいいことなのかも。