Bug(バグ) #4131
Doctrine_Query::execute() の $params に応じて WHERE ... IN の要素数が変化する場合にクエリキャッシュが対応できていない
100%
Description
Overview (現象)¶
$query = Doctrine_Core::getTable('AdminUser')->createQuery()
->andWhere('id IN ?');
// (1) 生成されるクエリ: SELECT ... FROM admin_user a WHERE (a.id IN (?))
$query->execute(array(array(1)));
// (2) 生成されるクエリ: SELECT ... FROM admin_user a WHERE (a.id IN (?, ?))
$query->execute(array(array(1, 2)));
上記のコードを実行すると、(1) の状態で生成されたクエリキャッシュが (2) でも使用され、パラメーターの数が一致せず下記のエラーが発生する。
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
このような、Doctrine_Query::execute()
が呼び出されるまでプリペアドステートメントの形式が不定となる状況に Doctrine_Query_Abstract::calculateQueryCacheHash()
および opDoctrineQuery::calculateQueryCacheHash()
のいずれも対応できていない。
Way to fix (修正内容)¶
calculateQueryCacheHash()
メソッド内では execute()
メソッドに渡されたパラメータの値を参照する手段が存在しない。
そのため opDoctrineQuery クラスで Doctrine_Query::execute()
をオーバーライドし、渡されたパラメータに応じて一時的に $this->whereInCount
を書き換えることで対処する。
Subtasks
Associated revisions
fix query hash for caching consider to the number of placeholder will vary depending on the execute() params (fixes #4131)
History
#1
Updated by Youichi Kimura over 6 years ago
- Status changed from New(新規) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
下記 Pull Request にて修正しました
https://github.com/openpne/OpenPNE3/pull/432
なお、残念ながらこのバグを修正しても #3135 は直りません
#2
Updated by Youichi Kimura over 6 years ago
- Description updated (diff)
#3
Updated by kaoru n over 6 years ago
- Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
- Target version changed from OpenPNE 3.9.0-old to OpenPNE 3.9.0
対象バージョン変更により修正内容の確認が必要であるため差し戻します。
#4
Updated by kaoru n over 3 years ago
- Target version changed from OpenPNE 3.9.0 to OpenPNE 3.10.x
#5
Updated by kaoru n over 3 years ago
- Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)
master 向けにプルリクエスト作成しました。
https://github.com/openpne/OpenPNE3/pull/559
https://github.com/openpne/OpenPNE3/pull/432
については、close します。
#6
Updated by kaoru n over 3 years ago
- Assignee changed from Youichi Kimura to kaoru n
#7
Updated by Rimpei Ogawa over 3 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
#8
Updated by kaoru n over 3 years ago
- Target version changed from OpenPNE 3.10.x to OpenPNE 3.9.8
#9
Updated by kaoru n over 3 years ago
- Target version changed from OpenPNE 3.9.8 to OpenPNE 3.10.0
#10
Updated by isao sano over 3 years ago
- Status changed from Pending Testing(テスト待ち) to Pending Merge(マージ待ち)
- % Done changed from 70 to 80
試験完了です。問題ありません。
#11
Updated by kaoru n over 3 years ago
- Status changed from Pending Merge(マージ待ち) to Fixed(完了)
- % Done changed from 80 to 100
マージしました