クエリーのOR指定(追記)

3,546 views
Skip to first unread message

ジョリクール

unread,
May 10, 2011, 1:46:04 PM5/10/11
to Redmine Users (japanese)
モデレータ様

すみません、対象ファイルの記載を忘れました。
app/models/query.rb です。再度diffを取りましたが、元原稿と置換できれば幸いです。
(ディレクトリを移ってdiff取り直しただけです)

--- app/models/query.rb.0 2011-05-10 09:46:00.234022999 +0900
+++ app/models/query.rb 2011-05-10 09:48:32.922023001 +0900
@@ -487,7 +487,28 @@
# regular field
db_table = Issue.table_name
db_field = field
- sql << '(' + sql_for_field(field, operator, v, db_table,
db_field) + ')'
+ #
+ # 2011/5/9 multi value query by jcool
+# sql << '(' + sql_for_field(field, operator, v, db_table,
db_field) + ')'
+ if operator == "~"
+ joint = " OR "
+ elsif operator == "!~"
+ joint = " AND "
+ else
+ joint = nil
+ end
+ if joint
+ sqlItem = v.first.to_s.split("||").map{|w|
+ '(' +
+ sql_for_field(field, operator, w.to_a,
+ db_table, db_field) + ')'
+ }
+ sql << '(' + sqlItem.join(joint) + ')'
+ else
+ sql << '(' + sql_for_field(field, operator, v,
+ db_table, db_field) + ')'
+ end
+
end
filters_clauses << sql

ジョリクール

unread,
May 11, 2011, 6:44:56 AM5/11/11
to Redmine Users (japanese)
はじめまして、ジョリクールと申します。
※中途半端なメッセージが登録されてしまいました。わかりにくいスレッドで申し訳ありませんでした。

改めて、初めてメッセージを投稿させていただきます。
 特定の題名のチケットを複数抽出するクエリーを行うときがあります。たとえば、ガントチャートで代表的なチケットだけに着目した確認を行うような場合
です。
 このときに、単純に
   題名= A or B or C
としたいところですが、うまくできません。(たとえば、題名に予め特別のキーワードを入れておいたり、あるいはサブプロジェクトや親子関係で抽出できれ
ばいいのですが、もっと手軽に汎用的にできないか、と考えました)

 いろいろ探してみてもいい方法が見つからないので、初めてカスタマイズに挑戦してみました。

※ rubyは初めてですので、ちょっと下手かもしれません。もしよろしければ、修正の仕方や、あるいは別の回避運用など、コメントいただけたらと思い
ます。
※ 単純に、AとBとCとでクエリーを三回行って、それぞれ状況フォローしてもいい、という方は、この機能はいらないと思われるかもしれませんが、みな
さんはどうでしょうか。
※ イメージとしては、子チケットを折りたたんで、親の進捗だけをサマリーで状況フォローしたい、というのがもともとやりたかったことです。


◆ 使い方:「題名」 「含む(もしくは含まない)」の値として、"A||B||C" という具合に、||(縦棒二つ)で並べます。

* 題名以外でも、文字列の欄をフィルターで選択するときは使えそうです。例えば担当者とか。
(担当者の複数指定は、決まりきった指定が多いと思うので、たいていはグループ機能で間に合ってしまうために、必要はないのかもしれません)
* もちろん、カスタムクエリとして覚えておくこともできます。
* 「含まない」の場合は、&&が良い、と思われる方もいるかもしれません。
* ||のエスケープは、未だ考えていません。

※修正イメージは、先のメッセージどおりです。重ね重ね、見にくい投稿で申し訳ありませんでした。
Reply all
Reply to author
Forward
0 new messages