2007/05/29

trac の db (sqlite3) を直接触ってみる

trac は便利なプロジェクト管理ツールだけれども、
プロジェクトをまたがった todo 管理などが弱い。

そこをまとめたいと思い、まずは trac で使われている
DB の構造などを調査することにした。

データは sqlite3 で、ファイルは db/trac.db だ。
これをコンソールから直接いじくってみよう。

壊すといけないのでホームにコピー。

$ sqlite3 trac.db
SQLite version 3.3.6
Enter ".help" for instructions
sqlite>

でsqlite3 クライアントが起動する。

システムコマンドは . から始まる。例えば .tables でテーブル一覧、.output でクエリ結果の出力先変更、.schema でテーブルのスキーマ表示、など。コマンド一覧は .help で確認できる。


sqlite> .tables
attachment node_change session_attribute version
auth_cookie permission system wiki
component report ticket
enum revision ticket_change
milestone session ticket_custom

以上のテーブルが存在する。



















attachment添付ファイル名一覧。
auth_cookieIPとクッキーの対応表。
componentチケットの「component」項目の選択肢。
enumチケットのその他の項目の選択しがまとめて入ってる
milestonチケットの「mileston」項目の選択肢。
node_changesvn の各バージョンごとにどういう変更があったか?
permissionユーザごとのパーミッション
reportレポートを表示するための sql。
revisionsvn revision とコミットログ
sessionweb 画面の session
session_attributeセッションの中身
systemtrac を動作させる上で持ちいるいくつかの変数。svn の現在のバージョンなど。
ticketチケット情報
ticket_changeチケットの更新ログ
ticket_custom各チケットのカスタム項目の値
versionチケットの「version」項目の値。
wikiwiki の本文。


トラックの情報をプロジェクト横断的に集めるのが今回の目的なので、
今回は ticket テーブルだけ見ていればいい。

SELECT * FROM ticket WHERE owner = 'omae' AND status != 'closed'

ruby で書くと次のような感じで取得できる。

#!/usr/local/bin/ruby -Ku
require "sqlite3"

db = SQLite3::Database.new("trac.db")
db.type_translation = true

sql = "SELECT * FROM ticket WHERE owner = 'omae' AND status != 'closed'"

result = db.execute( sql )


result.each do |row|
  p row
end


sqlite3 コマンドはどうも複数データベースを同時には開けないようなので、
一つ一つデータベースを開いてセレクトしてくる必要がある。

0 件のコメント: