Ticket #564 (closed 改善提案: 修正済)
PEAR::DB から PEAR::MDB2 への変更
Reported by: | nanasess | Owned by: | nanasess |
---|---|---|---|
Priority: | 高 | Milestone: | EC-CUBE2.11.0 |
Component: | その他 | Version: | コミュニティ (eccube-comu) |
Keywords: | Cc: | ||
修正済み: |
Description (last modified by nanasess) (diff)
現在, DB の抽象化ライブラリとして PEAR::DB を使用しているが, 以下の問題がある.
- PEAR::DB は PHP ライセンスであり, GPL と矛盾する
- もうメンテナンスされてない
上記の理由により PEAR::MDB2 若しくは ADOdb へ変更する
導入要件
- GPL と矛盾しないライセンスで配布されていること
- Sequence 取得の抽象化メソッドがあること
- Sequence に関して PostgreSQL 及び MySQL を同一のコードベースで記述可能なこと
- データベースのメタデータを扱うメソッドがあること
- 活発にメンテナンスされていること
利点
- PEAR::MDB2
- 2.5.x では, PDO 用のドライバも有り
- エラーハンドリングを, 他の PEAR パッケージと統一可能
- ADOdb
- 速いというウワサ
- キャッシュ機構あり
- adodb-errorpear.inc.php を include すれば, PEAR::Error も使用可能
- adodb-errorhandler.inc.php で, 任意のエラー定数で trigger_error を使用可能
欠点
- PEAR::MDB2
- PHP の include_path に, 他の PEAR クラスが存在すると, 関数の多重定義エラーになる
- EC-CUBE のエラーハンドリングが貧弱なため, DBエラーが発生すると無限ループする
- ADOdb
- DB::last_query に相当する機能が無い(EC-CUBE 本体では未使用)
- adodb-errorpear.inc.php を使用した場合, 出力するエラー文字列が膨大になり, memory_limit を越える場合がある
その他
- DBエラーが発生した場合, PHP エラーではなく EC-CUBE のエラー画面を表示するのが望ましい
参考
Change History
comment:1 Changed 14 years ago by nanasess
- Component changed from フロント to その他
- Description modified (diff)
- Summary changed from PEAR::DB から PEAR::MDB2 への変更 to PEAR::DB から PEAR::MDB2 or ADOdb への変更
comment:2 Changed 14 years ago by nanasess
- Status changed from new to assigned
- Description modified (diff)
現状は, どちらも導入要件を満たしていそうなので, サンプルコードを書いてみることにします.
comment:4 Changed 14 years ago by nanasess
- Description modified (diff)
PEAR::DB から PEAR::MDB2 へ移行のための参考サイト追加.
現状は, PEAR::DB への依存が激しすぎるので MDB2 の方が妥当かも...
comment:6 Changed 14 years ago by nanasess
- Description modified (diff)
説明を更新.
PEAR::MDB2 の欠点の影響が強すぎ, 簡単に動いてくれないので, ADOdb を使用する方向で検討.
comment:10 Changed 14 years ago by nanasess
- Description modified (diff)
エラー表示に関する説明を追記
PEAR::DB 版 SC_DbConn は下記のような実装になっている
- DB 接続エラーの場合
- SC_DbConn::getAll() 関数の場合のみ 0 を返し, 「DB接続に失敗しました」という文言を表示する. その他の関数は SC_DbConn::send_err_mail() 関数を呼び exit する
- SQL エラーの場合
- SC_DbConn::send_err_mail() 関数を呼び exit する
PEAR::DB 版 SC_DbConn の実装の問題点は, 接続エラーの場合は文言が表示されるものの, それ以外の場合は真っ白な画面になってしまう.
また, エラー画面を表示しようとしても, 表示するまでに DB 接続を行うため, 多重でエラーが発生する.
本来であれば, DB 関連のエラーはエラーコードを付与して EC-CUBE のエラー画面を表示するのが望ましい.
comment:11 follow-up: ↓ 12 Changed 13 years ago by miningbrownie
MDB2ってオリジナルBSDライセンスだったような、、、 オリジナルBSDだとBSD宣伝条項が引っかかるような気がします。
comment:12 in reply to: ↑ 11 Changed 13 years ago by nanasess
miningbrownie への返信
MDB2ってオリジナルBSDライセンスだったような、、、オリジナルBSDだとBSD宣伝条項が引っかかるような気がします。
実際に MDB2.php を覗いてみました.
オリジナルBSDライセンスで問題となる, 下記の条項は見当たらないので大丈夫かと思います.
All advertising materials mentioning features or use of this software must display the following acknowledgement:
comment:13 Changed 13 years ago by nanasess
- Priority changed from 中 to 高
エラーハンドリングの問題が解決できそうなので, MDB2 へ置き替えるコードも書いてみることにします
comment:14 Changed 13 years ago by nanasess
r18754:18755 で, MDB2 に対応するためのパッチとライブラリを追加しました
comment:15 Changed 13 years ago by nanasess
version-2_5-dev r18763 に MDB2 対応のコードをコミットしました.
大幅な修正を伴っていますので, 不具合などありましたらフィードバックお願いします!
comment:16 Changed 13 years ago by nanasess
r18766 で ADOdb のライブラリを削除しました
comment:17 Changed 13 years ago by nanasess
- Summary changed from PEAR::DB から PEAR::MDB2 or ADOdb への変更 to PEAR::DB から PEAR::MDB2 への変更
- Description modified (diff)
- Milestone changed from EC-CUBE2.5.0alpha to EC-CUBE2.5.0beta
概ね動作していますので, milestone:EC-CUBE2.5.0beta へ変更します
comment:18 Changed 13 years ago by nanasess
MDB2 2.5.0b3 がリリースされました
http://pear.php.net/package/MDB2/download/
しかし, このバージョンから
- dropped PHP 4 support
- Dependencies
- PHP Version: PHP 5.3.0 or newer
ということなので, 当面は 2.5.0b2 を同梱しようと思います
comment:19 Changed 13 years ago by Seasoft
- Milestone changed from EC-CUBE2.5.0beta to EC-CUBE2.5.0alpha
インストール中に発生した DROP / CREATE に関わるエラーを捕捉できない不具合があるようです。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=6775&forum=14&post_id=32478
comment:20 Changed 13 years ago by nanasess
- Milestone changed from EC-CUBE2.5.0beta to EC-CUBE2.5.0
milestone:EC-CUBE2.5.0beta では問題ないようですので, milestone:EC-CUBE2.5.0 へ変 更します
comment:21 Changed 13 years ago by nanasess
r18982 不具合修正 AMUAMU様
comment:22 Changed 13 years ago by AMUAMU
r19690 の不具合修正、機能改善にて各種問題を解決しました。
comment:23 follow-up: ↓ 24 Changed 12 years ago by Seasoft
- Milestone changed from EC-CUBE2.5.0 to EC-CUBE2.5.0beta
MySQL で dtb_member に文字化けが発生する。SET NAMES が実行されていないか。
本チケットの範疇か確信がないのですが、一旦差し戻します。(違っていたら、新たなチケット発行の方向で。)
comment:24 in reply to: ↑ 23 ; follow-up: ↓ 26 Changed 12 years ago by nanasess
- Milestone changed from EC-CUBE2.5.0beta to EC-CUBE2.5.0
comment:25 Changed 12 years ago by nanasess
- Status changed from assigned to closed
- Resolution set to 修正済
comment:26 in reply to: ↑ 24 ; follow-up: ↓ 27 Changed 12 years ago by Seasoft
- Status changed from closed to reopened
- Resolution 修正済 deleted
comment:27 in reply to: ↑ 26 Changed 12 years ago by nanasess
- Status changed from reopened to closed
- Resolution set to 修正済