Ticket #2370 (closed 改善提案: 無効)
トランザクション処理の前にトランザクションの状態を確認する
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 11 years ago by pineray
- Owner changed from somebody to pineray
- 修正済み set
- Status changed from new to assigned
comment:2 follow-up: ↓ 3 Changed 11 years ago by Seasoft
- 修正済み unset
①begin -> ②begin -> ③commit -> ④commit とした時に、③でコミットされませんか?
本来④でコミットしないと、まずいような。
comment:3 in reply to: ↑ 2 Changed 11 years ago by pineray
Seasoft への返信
①begin -> ②begin -> ③commit -> ④commit とした時に、③でコミットされませんか?
本来④でコミットしないと、まずいような。
そうですね。その危険性は有ります。
ご指摘いただいた危険性を回避するためには、トランザクションが開始された際のIDを保持しておいて、そのIDを指定した場合にのみ、コミットやロールバックを行う、という処理が必要となります。
今回の変更は、現在のコードに含まれている、以下の様なコードを短縮するための簡易な変更です。
if (!$objQuery->isTransaction()) { $objQuery->begin(); }
Note: See
TracTickets for help on using
tickets.
r23195 にて対応しました。