DB_DataObject をいろいろと使ってみる.
oci8 では,options[ optimize ] == portability
でないと動かないモヨウ.
変え方は,$db =& $dataobject->getDatabaseConnection()
してから
$db->setOptions( 'optimize', 'portability' );
.
なぜ動かないかというと,portability モードでないと,
Oracle は何でもかんでも大文字で返すから.
DSN は oci8://hoge:fuga@moge
だけだと
DB_DataObject_Generator が DB 名を拾えないので,
ダミーでいいから oci8://hoge:fuga@moge/dbname
の形式にしておく.
ってゆーか DB_oci8 の「互換モード」(勝手に命名)も,けっこうアレだなぁ. テーブルリストとかは大文字のままだし, っていうかこれが小文字じゃなきゃいかんなんてルールはないのだろうけど, DB_DataObject はそれに依存してるしなぁ. っていうかこれバグだろう.Bugs に登録しちゃえ(笑)
クラス作成段階ではテーブル定義を大文字で持ってくるから, クラス変数は $_USER_ID みたく大文字になるが, 動かすのは互換モードで動かすので $_user_id とかが実行時に作られてこっちに値が代入される罠.
ってことで,_createTableList() をオーバライドしたクラスを作って,そっち使って作成.
あと,_generateDefinitionsTable() に case "NUMBER": // oracle
を追加.
primary key を探して勝手にキー項目を設定する機能は,oci8 では動かないようだ. ってーか作者もこれを PEAR DB 一般で行なう方法を思いつかないらしい. ソースに I have no idea なんて書いてある(笑)