Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

TracのDBのスキーマとチケットレポート作成 @ Trac 0.10.3 on Debian Etch

      2013/07/15

Tracのチケット のレポートを作成するには、TracのDBのスキーマをある程度知っておかないと書けないので、スキーマの一覧を出力しました。

CREATE TABLE attachment (
    type text,
    id text,
    filename text,
    size integer,
    time integer,
    description text,
    author text,
    ipnr text,
    UNIQUE (type,id,filename)
);
CREATE TABLE auth_cookie (
    cookie text,
    name text,
    ipnr text,
    time integer,
    UNIQUE (cookie,ipnr,name)
);
CREATE TABLE component (
    name text PRIMARY KEY,
    owner text,
    description text
);
CREATE TABLE enum (
    type text,
    name text,
    value text,
    UNIQUE (type,name)
);
CREATE TABLE milestone (
    name text PRIMARY KEY,
    due integer,
    completed integer,
    description text
);
CREATE TABLE node_change (
    rev text,
    path text,
    node_type text,
    change_type text,
    base_path text,
    base_rev text,
    UNIQUE (rev,path,change_type)
);
CREATE TABLE permission (
    username text,
    action text,
    UNIQUE (username,action)
);
CREATE TABLE report (
    id integer PRIMARY KEY,
    author text,
    title text,
    query text,
    description text
);
CREATE TABLE revision (
    rev text PRIMARY KEY,
    time integer,
    author text,
    message text
);
CREATE TABLE session (
    sid text,
    authenticated integer,
    last_visit integer,
    UNIQUE (sid,authenticated)
);
CREATE TABLE session_attribute (
    sid text,
    authenticated integer,
    name text,
    value text,
    UNIQUE (sid,authenticated,name)
);
CREATE TABLE system (
    name text PRIMARY KEY,
    value text
);
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_change (
    ticket integer,
    time integer,
    author text,
    field text,
    oldvalue text,
    newvalue text,
    UNIQUE (ticket,time,field)
);
CREATE TABLE ticket_custom (
    ticket integer,
    name text,
    value text,
    UNIQUE (ticket,name)
);
CREATE TABLE version (
    name text PRIMARY KEY,
    time integer,
    description text
);
CREATE TABLE wiki (
    name text,
    version integer,
    time integer,
    author text,
    ipnr text,
    text text,
    comment text,
    readonly integer,
    UNIQUE (name,version)
);
CREATE INDEX node_change_rev_idx ON node_change (rev);
CREATE INDEX revision_time_idx ON revision (time);
CREATE INDEX session_authenticated_idx ON session (authenticated);
CREATE INDEX session_last_visit_idx ON session (last_visit);
CREATE INDEX ticket_change_ticket_idx ON ticket_change (ticket);
CREATE INDEX ticket_change_time_idx ON ticket_change (time);
CREATE INDEX ticket_status_idx ON ticket (status);
CREATE INDEX ticket_time_idx ON ticket (time);
CREATE INDEX wiki_time_idx ON wiki (time);

チケットレポートで主に使うテーブルはもちろん”ticket”です。各カラムは変数名を見るとほぼわかると思いますのでここには書きません。

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
);

その他に使うテーブルとしては、”ticket_change”です。これはチケットの更新履歴や追加コメントなどが格納されます。このあたりはチケット周りのテーブル構成のサイトが少し解説しているので参考にしてみてください。

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

ticketには対象となるチケットのチケットIDが入ります。fieldは更新履歴の種類が入ります。例えば、コメントの追加の場合は”comment”が入りますし、ステータスの変更ならば”status”が入ります。よって、レポートにコメント履歴も出力させたい場合は、以下のようにして出力できます。ここではコンポーネントがcomponent1でバージョンが1.0のチケットとその履歴を出力しています。太字の部分は環境に依存するので、自分の環境で定義されているものに変更します。

SELECT
  t.id,
  t.type,
  t.component,
  t.version,
  t.reporter,
  c.author,
  t.status,
  t.summary,
  t.description,
  c.newvalue
FROM ticket t left join ticket_change c
WHERE t.id = c.ticket AND c.field = "comment" AND
   t.component = "component1" AND
   t.version = "1.0"
ORDER BY t.id

ちなみにレポートではTrac固有の変数$USERを使うこともできます。

$USER アクセスしているユーザ名

== 追記 2008/12/16 ==

上記のSQLだとnewvalueが空の行が大量に出力されてしまうため、副問い合わせを使ってフィルタリングをかけてみました。さらにidとコメントの順で並び替えるようにしました。以下が改良版です。

SELECT
  t.id,
  c.time,
  t.type,
  t.component,
  t.version,
  t.reporter,
  t.status,
  t.summary,
  t.description,
  c.author,
  c.newvalue
FROM ticket t left join (SELECT * FROM ticket_change WHERE newvalue != '') c
WHERE t.id = c.ticket AND c.field = "comment" AND
   t.component = "component1" AND
   t.version = "1.0"
ORDER BY t.id, c.time

== 追記 2008/12/18 ==

発行されたばかりで、一度も変更のないチケットは上記だと表示されないので、さらに改良。UNION ALLを使って、発行されたばかりのチケット一覧をマージしています。

SELECT
  t.id as id,
  c.time as time,
  t.type,
  t.component,
  t.version,
  t.reporter,
  t.status,
  t.resolution,
  t.summary,
  t.description,
  c.author,
  c.newvalue
FROM ticket t left join (SELECT * FROM ticket_change WHERE newvalue != '') c
WHERE t.id = c.ticket AND c.field = "comment" AND
   t.component = "component1" AND
   t.version = "1.0"
UNION ALL
SELECT
  t.id as id,
  t.time as time,
  t.type,
  t.component,
  t.version,
  t.reporter,
  t.status,
  t.resolution,
  t.summary,
  t.description,
  '',
  ''
FROM ticket t
WHERE t.time = t.changetime AND
   t.component = "component1" AND
   t.version = "1.0"
ORDER by id, time

 - IT技術, サーバ構築 ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
オフラインファイルの削除@Windows XP

Windowsにはオフラインフォルダといって、ネットワーク共有のファイルをネット …

no image
Firefox検索フォームに検索履歴ボタンを追加する@Firefox 3.0

Firefox の検索欄は、検索履歴を覚えてくれ、↓を押すと履歴が出てきます。し …

no image
screenを起動するとウィンドウの幅が変わる@RHEL6

Windows上からsshログインしたRHEL6でscreenを使うと、ウィンド …

no image
iモーション作成@SH906i

携帯が壊れてしまったので先日SH906iを買いました。最近の携帯はめちゃくちゃ高 …

no image
nslookupでホスト名引けるのにpingに失敗する@Windows

自前のDNSサーバをたてて、ホストを登録してWindowsから登録したホストにp …

no image
Firefox7のプチフリ対策

Firefox 7 にしてから、Firefoxが定期的にフリーズしてしまいます。 …

GO言語 1.12をインストール@Ubuntu 18.04

GO言語1.12がそろそろリリースされるようですが、2/25にリリースされたので …

no image
USB 起動のLinux環境を作る @ Fedora 16 on Windows 7

CDやDVD起動でLinuxのデスクトップ環境を実現できる Live CDやLi …

no image
pythonスクリプトをダブルクリックで起動する→拡張子関連づけ詳細設定@Windows 7 with python 2.7

拡張子 .py を持ったファイルをダブルクリックで起動する方法です。 ※Wind …

no image
Googleマップがナビウォークに!?

Googleマップでとうとうドライブルートを検索できるようになったようです。 G …