Ticket #2370 (closed 改善提案: 無効)

Opened 7 years ago

Last modified 7 years ago

トランザクション処理の前にトランザクションの状態を確認する

Reported by: pineray Owned by: pineray
Priority: Milestone: バックログ
Component: フロント Version: 2.12.5
Keywords: Cc:
修正済み: no

Description (last modified by pineray) (diff)

commit、begin、rollback の各関数を呼び出す前に、トランザクションが開始されているか毎回チェックしているが、これらの処理を SC_Query に組み込んでしまって、トランザクションの状態を意識せずに関数を呼び出せるようにする。

MDB2のコードを良く読んだら、内部で同じような処理を行っているので、変更を差し戻しました。 ただ、seasoftさんがご指摘なさった危険性は依然として残っているので、そちらは別チケットにて対応の必要があります。

Change History

comment:1 Changed 7 years ago by pineray

  • Owner changed from somebody to pineray
  • 修正済み set
  • Status changed from new to assigned

r23195 にて対応しました。

comment:2 follow-up: ↓ 3 Changed 7 years ago by Seasoft

  • 修正済み unset

①begin -> ②begin -> ③commit -> ④commit とした時に、③でコミットされませんか?

本来④でコミットしないと、まずいような。

comment:3 in reply to: ↑ 2 Changed 7 years ago by pineray

Seasoft への返信

①begin -> ②begin -> ③commit -> ④commit とした時に、③でコミットされませんか?

本来④でコミットしないと、まずいような。

そうですね。その危険性は有ります。

ご指摘いただいた危険性を回避するためには、トランザクションが開始された際のIDを保持しておいて、そのIDを指定した場合にのみ、コミットやロールバックを行う、という処理が必要となります。

今回の変更は、現在のコードに含まれている、以下の様なコードを短縮するための簡易な変更です。

if (!$objQuery->isTransaction()) {
    $objQuery->begin();
}

comment:4 Changed 7 years ago by pineray

  • Status changed from assigned to closed
  • Resolution set to 無効
  • Description modified (diff)
  • Milestone changed from EC-CUBE 2.13.1 to バックログ

r23198 にて差し戻しました。

Note: See TracTickets for help on using tickets.