tracのチケット一覧にカラムを追加する。

テンプレートかPythonスクリプトいじれば出来るんでしょ?とか
思っていたら意外と大変だった。


tracのチケット一覧取得は、それ用のクエリ文がtrac環境初期化時に
DBに突っ込まれていて、一覧ページにアクセスをしたらDBから
まずそのクエリを取り出し、更にそのクエリで一覧を取得している。
…なんでこんなやり方なんだ?


前回書いたtracのインストールメモと同じ環境とすると、
以下のフォルダにDBデータがある。
C:\TracEnvironment\MyProject\db\trac.db
こいつをsqlite3で開けば読めるんだけど、Trac-jaでは、
クエリ文がUTF-8で入っていて(本家はどうなのか知らないけど)、
MS-DOSプロンプトだとうまく見られない。

そこで便利なツールがあったのでこれを使う。
http://www.forest.impress.co.jp/article/2008/09/04/pupsqlite.html
DBがささっと覗けてしまう。


で、例のクエリはどこに入っているのかと言うと、


report.query
に入っている。
テーブル定義は、

CREATE TABLE report (
  id integer PRIMARY KEY,
  author text,
  title text,
  query text,
  description text
)

デフォルトではこんな値が入っている。

SELECT p.value AS __color__,
   id AS ticket, summary AS 概要, component AS コンポーネント,
   version AS バージョン, milestone 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'
  WHERE status <> 'closed'
  ORDER BY CAST(p.value AS int), milestone, t.type, time

このクエリ文を編集すれば、tracの表示でもカラムが追加されている。
たとえば優先度(priority)を追加したいなら、適当な位置に
priority AS 優先度,
といった記述を追加すればOK。


ちなみにこのクエリは、Pythonのsite-packageにインストールされているdb_default.pyによって
突っ込まれている模様。除くと同じクエリ文がある。trac作成時に追加カラム等が決まっているなら、
こちらを編集してからtracを作成するでもいいかもしれない。