チケット回りのテーブル構成

TracでチケットをCSV出力しても、コメントが付いてこないので、調べてみました。

テーブル構成

チケット情報(既定のフィールド)

チケット本体。

CREATE TABLE ticket (
    id integer PRIMARY KEY,
    type text,
    time integer,
    changetime integer,
    component text,
    severity text,
    priority text,
    owner text,
    reporter text,
    cc text,
    version text,
    milestone text,
    status text,
    resolution text,
    summary text,
    description text,
    keywords text
)
カスタムフィールドの内容

チケットごとのカスタムフィールド名と値を管理するテーブルのようです。
例えば、開始予定日・終了予定日・進捗率を追加した場合、それらの値はこのテーブル上で管理されます。
カスタムフィールドに値を入力していなくても、レコードは必ず全カスタムフィールド分作られます。

CREATE TABLE ticket_custom (
    ticket integer,
    name text,
    value text,
    UNIQUE (ticket,name)
)
チケットの履歴

ticket_changeは、チケットの変更履歴を管理するテーブルのようです。
ticket_customと同様に、変更したfield名と(old|new)valueの対を管理するようです。
一度に複数個所を変更した場合、ticketとtimeが同じデータが複数作られます。

CREATE TABLE ticket_change (
    ticket integer,
    time integer,
    author text,
    field text,
    oldvalue text,
    newvalue text,
    UNIQUE (ticket,time,field)
)

コメント(基本)

チケット変更時には、必ず、field = 'comment'のデータが追加されるようです。
このデータだけは、他の変更履歴と異なり、oldvalue / newvalueは下記のような内容になります。

oldvalue
変更の通番(1始まり)
newvalue
コメント欄に記載した内容(あれば)

例えば、チケット1を登録して、最初の変更でassignだけを行った場合、
以下のように、ticketとtimeが同一のデータが2行追加されます。

ticket time author field oldvalue newvalue
1 1224567344 kamataro comment 1  
1 1224567344 kamataro status new accepted

この後コメントを追加するとこんな感じ。

ticket time author field oldvalue newvalue
1 1224567344 kamataro comment 1  
1 1224567344 kamataro status new accepted
1 1224567830 kamataro comment 2 テストテストテスト

コメント(返信時)

返信ボタンでコメントを作った場合、oldvalueの内容が上記と変わって、対象のコメント番号 "." 通番という形式になります。
説明に対する返信の場合は、"default." 変更の通番になります。

例えば、前述の例に、説明への返信を追加すると、こんな感じのデータが追加されます。

ticket time author field oldvalue newvalue
1 1224568360 kamataro comment description.3 [ticket:1 kamataro]への返信...(以下略)

更に、コメント1(status:new→accepted)への返信を追加すると、こんな感じ。

ticket time author field oldvalue newvalue
1 1224568380 kamataro comment 1.4 [comment:1 kamataro] への返信...(以下略)