Ticket #780 (closed バグ指摘: 修正済)

Opened 10 years ago

Last modified 10 years ago

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:1 Changed 10 years ago by nanasess

  • Status changed from new to assigned

comment:2 Changed 10 years ago by nanasess

下記の順序での変更を考えています

  1. SC_Query::nextVal(), SC_Query::currVal(), SC_Query::setVal() を, それぞれ MDB2 のシーケンス関数の実装へ置き替える
  2. html/sql/create_table_pgsql.sql の serial を int へ変更, html/sql/create_table_mysql.sql の auto_increment を削除
  3. html/sql/insert_data.sql のシーケンス値を使用しているカラムを修正
  4. html/install/index.php に, シーケンス値の初期化処理を追加
  5. SC_Query::nextVal() を使用している個所で, MySQL と PostgreSQL の条件分岐を修正
  6. シーケンス値を使用しているテーブルの INSERT 処理で SC_Query::nextVal() を使用するように修正

comment:3 Changed 10 years ago by nanasess

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

data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php については, 改修範囲が大きいため後ほど修正します.

comment:4 Changed 10 years ago by nanasess

シーケンス値は, DB 側では bigint ですので, 本来であれば対応するテーブルのデータ型も bigint にすべきです. しかし, 下記の理由から int 型としています.

  • 現状では, これらの ID と結合するカラムのデータ型が int 型であり, 改修範囲が大きくなる.
  • 使用するIDが int の範囲を越える可能性は低い

comment:5 Changed 10 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 10 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:7 in reply to: ↑ 6 Changed 10 years ago by nanasess

Seasoft への返信

商品規格の登録でSQL実行エラーが発生するようです。

ありがとうございます.

#781 の対応で, 該当箇所も修正中です. 早ければ本日中くらいに修正をコミットします!

comment:8 Changed 10 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 10 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 10 years ago by Seasoft

MySQL の dtb_mobile_kara_mail.kara_mail_id が対応漏れの懸念。

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

  • Status changed from assigned to closed
  • Resolution set to 修正済

Seasoft への返信

MySQL の dtb_mobile_kara_mail.kara_mail_id が対応漏れの懸念。

空メール機能は実質機能していないため close します.

Note: See TracTickets for help on using tickets.