« Trac/任意のSQLを実行する | Main | Gmail Notes »

2010.07.24

Trac/TicketをSQLでいろいろと

TracのTicketをSQLで処理する場合などの参考資料(ってほどのものではありませんが)。基本的に、使用するのは3つのテーブル(Trac0.11.1)。

【ticket】


  • 1チケット(id)に付き1行。

  • 最新の情報が格納されている。

  • type(分類)、time(登録日時)、changetime(更新日時)、component(コンポーネント)、severity(重要度)、priority(優先度)、owner(担当者)、reporter(報告者)、cc(関係者)、version(バージョン)、milestone(マイルストーン)、status(ステータス)、resolution(解決方法)、summary(概要)、description(説明)、keywords(キーワード) の項目を有している。

【ticket_custom】


  • カスタムフィールドの情報が格納されている。

  • 各TicketID(ticket)およびフィールド名(name)単位で0~1レコードずつ存在(2レコード以上存在することはない)。

  • valueには、各TicketIDおよびフィールド名単位で最新の情報(最後に登録/更新された値)が格納されている。

  • 各TicketID単位では0~nレコード存在する(最大で、カスタムフィールドの個数分のレコードが存在する)。

  • 途中でカスタムフィールドを追加した場合、それ以前に作成されていたTicketに対するデータは存在せず、Ticketを更新したタイミングで追加される。

【ticket_change】


  • チケットの更新履歴の情報が格納されている。

  • 各TicketID(ticket)および更新日時(time)単位で、「1つのTicket更新」に関する内容となる。

  • 各TicketIDおよび更新日時、更新対象の項目/フィールド(field)単位で1レコード存在。

  • 更新前の値(oldvalue)と更新後の値(newvalue)が記録されている。

  • 更新日時を上手く処理することで、「ある状態になった日付」を後から追跡することも可能。例えば、ある日付においてチケットがnewから別のステータスに変わった件数、など。

補足


  • Tracでは、日付情報は全てintegerで保持している。

  • SQLでは、date(time,'unixepoch') のような感じで変換することが可能。ただし、Tracを導入している環境によっては、JSTで表記する場合は、date(datetime(time,'unixepoch'), '+09:00:00') のような感じで変換することが可能。日付単位でTicketの修正をする場合、日付の処理を上手くしてあげないと前日のデータとして処理してしまう可能性があります。

  • 日付の処理に関しては、SQLite3 での日付処理や、SQLiteの日付関数あたりが参考になるかと。

ポチッとよろしく!

|

« Trac/任意のSQLを実行する | Main | Gmail Notes »

Subversion・Trac・etc.」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Trac/TicketをSQLでいろいろと:

« Trac/任意のSQLを実行する | Main | Gmail Notes »