Ticket #565 (closed 改善提案: 修正済)
SC_DbConn クラスの削除
Reported by: | nanasess | Owned by: | nanasess |
---|---|---|---|
Priority: | 高 | Milestone: | EC-CUBE2.11.0 |
Component: | その他 | Version: | コミュニティ (eccube-comu) |
Keywords: | Cc: | ||
修正済み: |
Description
現在, DBアクセスクラスとして, SC_Query と SC_DbConn がある. SC_Query は, 内部で SC_DbConn を使用しているが, お互い同じような振舞いの関数もあり, 統一性に欠ける.
SC_Query の方が多機能で, SC_Query に DB 接続関連の機能を持たせれば, SC_DbConn は不要と思われるので, SC_DbConn クラスを削除する.
削除に伴い, SC_DbConn クラスを使用している箇所を, SC_Query に変更する
Attachments
Change History
comment:2 Changed 11 years ago by nanasess
- Status changed from closed to reopened
- Resolution 無効 deleted
MDB2 をうまく利用すれば何とかできそうなので差し戻します
comment:6 follow-up: ↓ 7 Changed 10 years ago by nanasess
r18770 で SC_DbConn のインスタンスを直接使用している箇所を SC_Query に置き替えて一旦コミットしました.
今後, count 句を使用している箇所などは, SC_Query::getOne() を SC_Query::count() 置き替えるなどした方が良いと思われます.
comment:8 Changed 10 years ago by nanasess
version-2_5-dev r18773 で対応しました.
かなりのビッグコミットですので, 万が一不具合などありましたらフィードバック願います!
また, エラーハンドリングや, ロギング方法が貧弱ですので, 今後改善していこうと思います.
comment:10 Changed 10 years ago by nanasess
SC_Query における追加の修正をコミットしました(r18784)
Windows 環境で Apache が強制終了する問題にも対応しました.
comment:11 Changed 10 years ago by nanasess
- Milestone changed from EC-CUBE2.5.0alpha to EC-CUBE2.5.0beta
概ね動作していますので, milestone:EC-CUBE2.5.0beta へ変更します
comment:12 follow-ups: ↓ 13 ↓ 17 Changed 10 years ago by Seasoft
SC_Query#currval が動作していない箇所を見つけました。(1箇所のみの発見で、他は確認していません。)
r18797 にて、コメントを追記しておきました。
comment:13 in reply to: ↑ 12 ; follow-up: ↓ 14 Changed 10 years ago by nanasess
comment:14 in reply to: ↑ 13 ; follow-up: ↓ 15 Changed 10 years ago by Seasoft
どうも MDB2_Error が返っているようです。
$sendId = $objQuery->currval('dtb_send_history'); var_dump($sendId);exit;
comment:15 in reply to: ↑ 14 ; follow-up: ↓ 16 Changed 10 years ago by nanasess
Seasoft への返信
どうも MDB2_Error が返っているようです。
$sendId = $objQuery->currval('dtb_send_history_send_id');
で, いかがでしょうか??
comment:16 in reply to: ↑ 15 Changed 10 years ago by Seasoft
失礼いたしました。シーケンス名ですね。
動作確認し、r18798 としてコミットしました。
comment:17 in reply to: ↑ 12 Changed 10 years ago by Seasoft
SC_Query#currval が動作していない箇所を見つけました。(1箇所のみの発見で、他は確認していません。)
他での利用は LC_Page_Admin_System_Bkup に1箇所ありましたが、動作は問題ないようでした。
comment:18 Changed 10 years ago by nanasess
r18801 で SC_Query::getSql() を修正しました
comment:19 Changed 10 years ago by nanasess
r18802 で追加の修正をしました
comment:20 follow-up: ↓ 23 Changed 10 years ago by Seasoft
管理機能「デザイン管理 - ページ詳細設定」での新規登録でエラーが発現するようです。
FATAL Error(256) /home/eccube/ec25d/data/class/SC_Query.php:756 http://1.eccube.local/ec25d/admin/design/main_edit.php? SERVER_ADDR: 192.168.10.106 REMOTE_ADDR: 192.168.10.10 USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.53 Safari/534.3 SQL: INSERT INTO dtb_pagelayout ( page_id ,page_name ,url ,php_dir ,tpl_dir ,filename ,header_chk ,footer_chk ,update_url ,create_date ,update_date ) VALUES ( ?,?,?,?,?,?,?,?,now(),now() ) MDB2 Error: unknown error prepare: [Error message: Unable to create prepared statement handle] [Last executed query: SELECT NEXTVAL('dtb_pagelayout_page_id_seq')] [Native message: ERROR: INSERT has more target columns than expressions] /home/eccube/ec25d/html/admin/design/main_edit.php 34:LC_Page_Admin_Design_MainEdit_Ex->process /home/eccube/ec25d/data/class_extends/page_extends/admin/design/LC_Page_Admin_Design_MainEdit_Ex.php 56:LC_Page_Admin_Design_MainEdit->process /home/eccube/ec25d/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php 102:LC_Page_Admin_Design_MainEdit->lfConfirmPageData /home/eccube/ec25d/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php 239:LC_Page_Admin_Design_MainEdit->lfEntryPageData /home/eccube/ec25d/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php 335:SC_Query->query /home/eccube/ec25d/data/class/SC_Query.php 675:SC_Query->prepare /home/eccube/ec25d/data/class/SC_Query.php 753:MDB2_Driver_pgsql->prepare /home/eccube/ec25d/data/module/MDB2/Driver/pgsql.php 965:MDB2_Driver_Common->raiseError /home/eccube/ec25d/data/module/MDB2.php 1497:PEAR->raiseError /home/eccube/ec25d/data/module/PEAR.php 557:MDB2_Error->MDB2_Error /home/eccube/ec25d/data/module/MDB2.php 1009:PEAR_Error->PEAR_Error
まずは、ご報告まで。
comment:21 follow-up: ↓ 22 Changed 10 years ago by nanasess
ありがとうございます. すぐに試せる環境が無いのですが, 以下のパッチでどうでしょうか?
=== modified file 'data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php' *** data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php 2010-08-19 10:47:58 +0000 --- data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php 2010-09-11 13:46:07 +0000 *************** *** 294,300 **** // page_id が空 若しくは データが存在していない場合にはINSERTを行う if ($arrData['page_id'] === '' or !isset($arrChk[0])) { // SQL生成 ! $arrData['page_id'] = $objQuery->nextVal('dtb_pagelayout_page_id'); $sql = " INSERT INTO dtb_pagelayout "; $sql .= " ( "; $sql .= " page_id"; --- 294,300 ---- // page_id が空 若しくは データが存在していない場合にはINSERTを行う if ($arrData['page_id'] === '' or !isset($arrChk[0])) { // SQL生成 ! array_unshift($arrUpdData, $objQuery->nextVal('dtb_pagelayout_page_id')); $sql = " INSERT INTO dtb_pagelayout "; $sql .= " ( "; $sql .= " page_id";
煩わしいので, SC_Query::insert or update を使用した実装にしたいですね...
comment:22 in reply to: ↑ 21 Changed 10 years ago by Seasoft
ありがとうございます. すぐに試せる環境が無いのですが, 以下のパッチでどうでしょうか?
nanasess 様のパッチに加えて、SQL文の VALUES に「?,」を追加したところ、登録されたようです。
煩わしいので, SC_Query::insert or update を使用した実装にしたいですね...
そうですね。この処理でしたら、私でも分かりそうですので、改修してみようと思います。
comment:23 in reply to: ↑ 20 Changed 10 years ago by Seasoft
comment:24 Changed 10 years ago by nanasess
- Milestone changed from EC-CUBE2.5.0beta to EC-CUBE2.5.0
SC_DbConn クラスの削除に伴う副作用は見られないようですので, milestone:EC-CUBE2.5.0 へ変更します
comment:25 Changed 10 years ago by nanasess
- Status changed from assigned to closed
- Resolution set to 修正済
SC_DbConn の本体への癒着が激しく, 削除には相当な労力が必要です...
O/R Mapper の開発(#555)とも重なるため, 一旦クローズしたいと思います.