Project

General

Profile

Backport(バックポート) #3081

activity/community.json 実行時にDoctrineでエラーが発生する場合がある

Added by Yuya Watanabe almost 8 years ago. Updated almost 8 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2012-05-10
Due date:
% Done:

100%


Description

現象

activity/community.json 呼び出し時に下記のようなエラーがhttpdのエラーログに出力されて500エラーとなる。

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

is_active: 0 のメンバー(仮登録中のメンバー)が1人以上いる場合に発生する。

原因

マイフレンドまで公開のアクティビティを取得するための条件の中で、is_active: 0 のメンバーを対象外とするためにサブクエリ内に member_id_to NOT IN ? を追加していたが、この形式の DQL を Doctrine が正しくパースできず、最終的にパラメーター数が一致しない SQL とパラメーターの組が生成されていたためにエラーとなっていた。

inactiveIds が空の場合は opDoctrineQuery::andWhereIn() により ->andWhere('0 = 1'); に書き換えられるため問題が発生しない。

修正内容

問題箇所のクエリでは Member モデルを必ず leftJoin しているため、opActivateListener により is_active のチェックが自動的に追加される。

このクエリにおいて is_active: 0 のメンバーを除外するには Member に対する絞り込みのみで十分であるため、マイフレンドまで公開のアクティビティを抽出する部分からは is_active: 0 を除外する条件を冗長と判断し削除した。


Related issues

Related to OpenPNE 3 - Bug(バグ) #3052: activity/community.json 実行時にDoctrineでエラーが発生する場合がある Won't fix(対応せず) 2012-05-10

Associated revisions

Revision 939d70cb (diff)
Added by Rimpei Ogawa almost 8 years ago

added an inactive member to test fixture (refs #3081, BP from #3052)

opActivityQueryBuilder::includeFriends() throws an error exception if any inactive members exist

Revision 9e16f3e1 (diff)
Added by Rimpei Ogawa almost 8 years ago

fixed getting 500 error responce from activity/community.json if any inactive members exist (fixes #3081, BP from #3052)

For the opActivityQueryBuilder's query joins the Member model,
opActivateListener removes inactive members automatically.
So opActivityQueryBuilder::buildFriendQuery() doesn't need to add inactive members condition.

History

#1 Updated by Yuma Sakata almost 8 years ago

  • Target version changed from OpenPNE 3.8.1 to OpenPNE 3.8.x

3.8.2 以降で対応します。

#2 Updated by Yuma Sakata almost 8 years ago

  • Target version changed from OpenPNE 3.8.x to OpenPNE 3.8.1

3.8.1 で対応します。

#3 Updated by Rimpei Ogawa almost 8 years ago

  • Assignee set to Rimpei Ogawa

原因がはっきりしていないとのことだったので、調査から引き受けます。

#4 Updated by Rimpei Ogawa almost 8 years ago

  • Status changed from New(新規) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 9e16f3e18af59095f2fc2dcd2be4a9c757439d2f で適用されました。

#5 Updated by Rimpei Ogawa almost 8 years ago

  • Description updated (diff)

Description を親チケットと同じ内容に更新。

#6 Updated by Yuya Watanabe almost 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#7 Updated by 開 石切山 almost 8 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

Also available in: Atom PDF