Ticket #565 (closed 改善提案: 修正済)

Opened 11 years ago

Last modified 10 years ago

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

dump.zip Download (20.8 KB) - added by Seasoft 10 years ago.

Change History

comment:1 Changed 11 years ago by nanasess

  • Status changed from new to closed
  • Resolution set to 無効

SC_DbConn の本体への癒着が激しく, 削除には相当な労力が必要です...

O/R Mapper の開発(#555)とも重なるため, 一旦クローズしたいと思います.

comment:2 Changed 10 years ago by nanasess

  • Status changed from closed to reopened
  • Resolution 無効 deleted

MDB2 をうまく利用すれば何とかできそうなので差し戻します

comment:3 Changed 10 years ago by nanasess

  • Status changed from reopened to new

comment:4 Changed 10 years ago by nanasess

  • Priority changed from to

comment:5 Changed 10 years ago by nanasess

  • Status changed from new to assigned

comment:6 follow-up: ↓ 7 Changed 10 years ago by nanasess

r18770 で SC_DbConn のインスタンスを直接使用している箇所を SC_Query に置き替えて一旦コミットしました.

今後, count 句を使用している箇所などは, SC_Query::getOne() を SC_Query::count() 置き替えるなどした方が良いと思われます.

comment:7 in reply to: ↑ 6 Changed 10 years ago by nanasess

nanasess への返信

r18770 で SC_DbConn のインスタンスを直接使用している箇所を SC_Query に置き替えて一旦コミットしました.

r18772 で追加の修正を行いました.

comment:8 Changed 10 years ago by nanasess

version-2_5-dev r18773 で対応しました.

かなりのビッグコミットですので, 万が一不具合などありましたらフィードバック願います!

また, エラーハンドリングや, ロギング方法が貧弱ですので, 今後改善していこうと思います.

comment:9 Changed 10 years ago by nanasess

インストール時にエラーになるケースがありましたので, 修正しています

 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=6484&post_id=30642&order=0&viewmode=flat&pid=30641&forum=14#forumpost30642

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

Seasoft への返信

SC_Query#currval が動作していない箇所を見つけました。(1箇所のみの発見で、他は確認していません。)

r18797 にて、コメントを追記しておきました。

ありがとうございます.

SC_Query#currval() の引数は, テーブル名, カラム名 ではなく シーケンス名 に変更しましたので,

$sendId = $objQuery->currval('dtb_send_history_send_id'); 

でいけると思います.

修正方法のみで恐縮ですが, とり急ぎ.

Changed 10 years ago by Seasoft

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;

attachment:dump.zip Download

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

管理機能「デザイン管理 - ページ詳細設定」での新規登録でエラーが発現するようです。

本件は #780 (r18788) の影響だったようですね。コミットでは、そちらのチケット番号でメッセージを記述する予定です。

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 修正済
Note: See TracTickets for help on using tickets.