« AjaxなToDoをハックする | トップページ | PEAR::DBでOracleをもうちょっと便利に(2) »

2006年1月24日 (火)

PEAR::DBでOracleをもうちょっと便利に(1)

PEAR::DBやPEAR::DB_DataObjectを使っていると、PEAR::DBがOracleにおざなりな対応しかしていないために、いろいろと不便な思いをすることがあり、自分で解析してHackしてしまうことが、ままあります。

今回のHackは、OracleのPrimary Key制約をDB_DataObjectが自動的に見つけられるようにするためのものです。

DB/oci8.php
1005,1017c1005,1008
<             $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';
---
>             $q_fields = 'SELECT column_name, data_type, data_length, '
>                         . 'nullable '
>                         . 'FROM user_tab_columns '
>                         . "WHERE table_name='$result' ORDER BY column_id";
1035,1036c1026
<                     'flags' => ((@OCIResult($stmt, 4) == 'N') ? 'not_null' : '') .
<                                ((@OCIResult($stmt, 5) > 0) ? ' primary' : ''),
---
>                     'flags' => (@OCIResult($stmt, 4) == 'N') ? 'not_null' : '',

これで、少なくともPrimary Key制約は自動的に取ってこれるようになります。また必要になったらUnique Keyなども取れるようにするかもしれませんが、今回はこれまで。

|

« AjaxなToDoをハックする | トップページ | PEAR::DBでOracleをもうちょっと便利に(2) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/161557/8315012

この記事へのトラックバック一覧です: PEAR::DBでOracleをもうちょっと便利に(1):

« AjaxなToDoをハックする | トップページ | PEAR::DBでOracleをもうちょっと便利に(2) »