Tracのレポートをちょっといじってステータス別に色づけ。

最近慣れてきたTrac。レポートがSQLで難しいなと思ったけれど、
例があるので挑戦。(なんか、無くなる方向らしいけれども)

コンポーネント別の出力が欲しかったのでちょっと作ってみた。

SELECT p.VALUE AS __color__,
   t.component AS __group__,
   id AS ticket, summary AS 概要, component AS コンポーネント,
   version AS バージョン, t.TYPE AS 分類,
   owner AS 担当者, status AS ステータス, TIME AS 登録日付,
   changetime AS _更新日付, description AS _説明,
   reporter AS _報告者
  FROM ticket t
  LEFT JOIN enum p ON p.name = t.priority AND p.TYPE = 'priority'
  ORDER BY (t.component IS NULL),t.component, CAST(p.VALUE AS int), TIME


これだと、優先度に応じて色が付けられるらしい。
優先度はあまり使っていなくて、closedなのかacceptedなのかnewなのかでパッと見てわかりたかったので
変えてみた。

SELECT p.VALUE AS __color__,
   t.component AS __group__,
   id AS ticket, summary AS 概要, component AS コンポーネント,
   version AS バージョン, t.TYPE AS 分類,
   owner AS 担当者, status AS ステータス, TIME AS 登録日付,
   changetime AS _更新日付, description AS _説明,
   reporter AS _報告者
  FROM ticket t
  LEFT JOIN enum p ON p.name = t.status AND p.TYPE = 'status'
  ORDER BY (t.component IS NULL),t.component, CAST(p.VALUE AS int), TIME

__color__ — 1 から 5 の数値である必要があります。値によって、あらかじめ定義された色付けが行われます。一般的な使用法は、優先度別の色付けです。
デフォルトの色付け: Color 1 Color 2 Color 3 Color 4 Color 5

Note: ticket 表の優先度に対応する数値は、 enum 表を結合することで取り出しています。

っていう記述があったのでこれでいいのかなと思って、保存したけれど何も変わらず。

不思議に思ったので、テーブルを直接見ることに。

trac=# SELECT * FROM develop.enum ;
    TYPE     |     name     | VALUE 
-------------+--------------+-------
 priority    | blocker      | 1
 priority    | critical     | 2
 priority    | major        | 3
 priority    | minor        | 4
 priority    | trivial      | 5
 ticket_type | 拡張         | 2
 ticket_type | 不具合対応   | 3
 ticket_type | 一般タスク   | 1
 ticket_type | 思いつき     | 4
 ticket_type | コーディング | 5
 ticket_type | テスト       | 6
 resolution  | 解決済み     | 1
 resolution  | 不可能       | 2
 resolution  | 解決求む     | 3
 resolution  | 重複         | 4
 resolution  | 自己解決     | 5
 ticket_type | 外観・名前   | 7
(17 rows)

おっと、status に対応する数字がない。

trac=# SELECT DISTINCT status FROM ticket;
  status  
----------
 closed
 accepted
 NEW
(3 rows)

この3種類だけだと思われるので、下記のようにINSERT文を走らせてみた。

 INSERT INTO develop.enum (TYPE,name,VALUE) VALUES('status','new',1);
 INSERT INTO develop.enum (TYPE,name,VALUE) VALUES('status','accepted',2);
 INSERT INTO develop.enum (TYPE,name,VALUE) VALUES('status','closed',3);
 INSERT INTO develop.enum (TYPE,name,VALUE) VALUES('status','reopened',4);

するとOK!
偶数行目(2行目、4行目)では色が赤が肌色になったりしているので見やすくなった。
status もいろいろ増えると良いなと思ったり、mantisほどなくてもよいなと思ったり、思わなかったり。