Ticket #780 (closed バグ指摘: 修正済)
ID の出力に MDB2::nextID を使用する
Reported by: | nanasess | Owned by: | nanasess |
---|---|---|---|
Priority: | 高 | Milestone: | EC-CUBE2.11.0 |
Component: | その他 | Version: | 2.4.3 |
Keywords: | シーケンス | Cc: | |
修正済み: |
Description
現在, ID の出力には以下の実装が使用されている
- MySQL - auto_increment
- PostgreSQL - serial
これらの実装は大きく異なり, 汎用性に乏しい. その他の RDBMS にも対応するため, MDB2::nextID を使用するよう変更する
Change History
comment:2 Changed 13 years ago by nanasess
下記の順序での変更を考えています
- SC_Query::nextVal(), SC_Query::currVal(), SC_Query::setVal() を, それぞれ MDB2 のシーケンス関数の実装へ置き替える
- html/sql/create_table_pgsql.sql の serial を int へ変更, html/sql/create_table_mysql.sql の auto_increment を削除
- html/sql/insert_data.sql のシーケンス値を使用しているカラムを修正
- html/install/index.php に, シーケンス値の初期化処理を追加
- SC_Query::nextVal() を使用している個所で, MySQL と PostgreSQL の条件分岐を修正
- シーケンス値を使用しているテーブルの INSERT 処理で SC_Query::nextVal() を使用するように修正
comment:3 Changed 13 years ago by nanasess
version-2_5-dev r18788 で対応しました.
data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php については, 改修範囲が大きいため後ほど修正します.
comment:4 Changed 13 years ago by nanasess
シーケンス値は, DB 側では bigint ですので, 本来であれば対応するテーブルのデータ型も bigint にすべきです. しかし, 下記の理由から int 型としています.
- 現状では, これらの ID と結合するカラムのデータ型が int 型であり, 改修範囲が大きくなる.
- 使用するIDが int の範囲を越える可能性は低い
comment:5 Changed 13 years ago by nanasess
- Milestone changed from EC-CUBE2.5.0alpha to EC-CUBE2.5.0beta
概ね動作していますので, milestone:EC-CUBE2.5.0beta へ変更します
comment:6 follow-up: ↓ 7 Changed 13 years ago by Seasoft
- Keywords シーケンス added
商品規格の登録でSQL実行エラーが発生するようです。
MDB2 Error: null value violates not-null constraint _doQuery: [Error message: Could not execute statement] [Last executed query: EXECUTE mdb2_statement_pgsql_6bcf7be6cc99dfbe0ad2851755f3027471c5ad6dc ('3', '6', '0', 'nabe-01', '99', '0', '1700', '1650', '2')] [Native message: ERROR: null value in column "product_class_id" violates not-null constraint] /home/eccube/ec25d/html/admin/products/product_class.php 34:LC_Page_Admin_Products_ProductClass_Ex->process /home/eccube/ec25d/data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_ProductClass_Ex.php 56:LC_Page_Admin_Products_ProductClass->process /home/eccube/ec25d/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php 187:LC_Page_Admin_Products_ProductClass->lfInsertProductClass /home/eccube/ec25d/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php 377:SC_Query->insert /home/eccube/ec25d/data/class/SC_Query.php 435:SC_Query->query /home/eccube/ec25d/data/class/SC_Query.php 686:SC_Query->execute /home/eccube/ec25d/data/class/SC_Query.php 779:MDB2_Statement_Common->execute /home/eccube/ec25d/data/module/MDB2.php 4152:MDB2_Statement_pgsql->_execute /home/eccube/ec25d/data/module/MDB2/Driver/pgsql.php 1472:MDB2_Driver_pgsql->_doQuery /home/eccube/ec25d/data/module/MDB2/Driver/pgsql.php 673: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
個人的には、そもそも product_class_id って使わなくても組めそうな気もしています。
comment:8 Changed 12 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:9 Changed 12 years ago by Seasoft
- Milestone changed from EC-CUBE2.5.0 to EC-CUBE2.5.0beta
管理機能「システム設定 - メンバー管理」で、新規メンバーを登録するとコケるようです。
▼▼▼ エラーメッセージ ▼▼▼ https://1.eccube.local/ec25d/admin/system/input.php SERVER_ADDR: * REMOTE_ADDR: * USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7 SQL: INSERT INTO dtb_member(name,department,login_id,password,authority,rank,work,del_flg,creator_id,create_date,update_date) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,Now(),Now()) MDB2 Error: null value violates not-null constraint _doQuery: [Error message: Could not execute statement] [Last executed query: EXECUTE mdb2_statement_pgsql_87bfbff73db2398b1fd7bc0474aa30c5476d1d678 ('テスト', NULL, 'owner', '132772d594c74a13a9767818be00310d29433844', '1', 2, '1', '0', '2')] [Native message: ERROR: null value in column "member_id" violates not-null constraint] /home/eccube/ec25d/html/admin/system/input.php 34:LC_Page_Admin_System_Input_Ex->process /home/eccube/ec25d/data/class_extends/page_extends/admin/system/LC_Page_Admin_System_Input_Ex.php 56:LC_Page_Admin_System_Input->process /home/eccube/ec25d/data/class/pages/admin/system/LC_Page_Admin_System_Input.php 72:LC_Page_Admin_System_Input->execNewMode /home/eccube/ec25d/data/class/pages/admin/system/LC_Page_Admin_System_Input.php 149:LC_Page_Admin_System_Input->insertMemberData /home/eccube/ec25d/data/class/pages/admin/system/LC_Page_Admin_System_Input.php 371:SC_Query->insert /home/eccube/ec25d/data/class/SC_Query.php 435:SC_Query->query /home/eccube/ec25d/data/class/SC_Query.php 686:SC_Query->execute /home/eccube/ec25d/data/class/SC_Query.php 779:MDB2_Statement_Common->execute /home/eccube/ec25d/data/module/MDB2.php 4152:MDB2_Statement_pgsql->_execute /home/eccube/ec25d/data/module/MDB2/Driver/pgsql.php 1472:MDB2_Driver_pgsql->_doQuery /home/eccube/ec25d/data/module/MDB2/Driver/pgsql.php 673: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:10 in reply to: ↑ description ; follow-up: ↓ 11 Changed 12 years ago by Seasoft
MySQL の dtb_mobile_kara_mail.kara_mail_id が対応漏れの懸念。
comment:11 in reply to: ↑ 10 Changed 12 years ago by nanasess
- Status changed from assigned to closed
- Resolution set to 修正済