[PHP-users 25526] PEAR::DBのoci8をHackしてみました
榮水貴行
t-eimizu @ aim.ac
2005年 5月 8日 (日) 17:34:26 JST
いつもおせわになります。榮水です
OracleとPEAR::DB, DB_DataObjectの組み合わせを
試しているのですが、DB_DataObjectのcreateTables.phpが
まともにスキーマを取得してくれない(特にテーブルのキーが取れない)
ため、PEAR::DBのoci8.phpに手を入れてみました。
1005行目付近を以下のように書き換えました。
(もとのSQL)
$q_fields = 'SELECT column_name, data_type, data_length, '
. 'nullable '
. 'FROM user_tab_columns '
. "WHERE table_name='$result' ORDER BY column_id";
(書き換え後のSQL)
$q_fields= 'SELECT t.column_name, t.data_type, t.data_length, '
. ' t.nullable, c.position '
. 'FROM user_tab_columns t,'
. ' (SELECT ucc.table_name, ucc.column_name, ucc.position'
. ' FROM user_constraints uc, user_cons_columns ucc'
. ' WHERE uc.owner = ucc.owner AND'
. ' uc.constraint_name = ucc.constraint_name AND'
. ' uc.constraint_type = 'P' AND '
. ' uc.table_name = ucc.table_name) c "
. "WHERE t.table_name = '$result' AND "
. ' t.table_name = c.table_name(+) AND'
. ' t.column_name = c.column_name(+) '
. 'ORDER BY t.column_id';
さらに1026行目のあたりに手を入れました。
(もとの記述)
'flags' => (@OCIResult($stmt, 4) == 'N') ? 'not_null' : '',
(書き換え後の記述)
'flags' => ((@OCIResult($stmt, 4) == 'N') ? 'not_null' : '') .
((@OCIResult($stmt, 5) > 0) ? ' primary' : ''),
これで、今までnot_nullしか返していなかったものが、
プライマリキーの primary も一緒に返ってくるようになりました。
どなたかユニークキーとか外部キーとかも取れるようにしてみませんか?
*=================================*
株式会社エイム
榮水 貴行
Mail: t-eimizu @ aim.ac
*=================================*
PHP-users メーリングリストの案内