iPhone Tips/Calendarの解析/テーブル構造/FW1.1.x

出典: Fukudat.com

FW1.1.x のCalendar DBの構造

目次

1 Calendarデータ

Calendar table
カラム名 データ型 コメント
ROWID INTEGER 行番号 primary key. 他のテーブルから calendar_id として参照される.
title text カレンダー名
read_only INTEGER 読み取り専用なら non zero (?)

複数のカレンダーを管理することが想定されているものと考えられるが, iPod touchのカレンダーアプリケーションでは新しいカレンダーを作成することはできない. デフォルトのカレンダーは ROWID = 1, title = default, read_only = 0 となっている.

2 Eventデータ

Event table
カラム名 データ型 コメント
ROWID INTEGER 行番号 primary key
summary TEXT 要約
location TEXT 場所
description TEXT 説明
start_date INTEGER 開始時刻
start_tz TEXT 開始時刻のタイムゾーン
end_date INTEGER 終了時刻
all_day INTEGER 終日イベント
calendar_id INTEGER カレンダー番号.Calendar.ROWID を参照する foreign key
orig_event_id INTEGER 元となったイベントの ROWID.そうでないときは 0
orig_start_date INTEGER 元となったイベントの開始時刻.

この予定一つがこのテーブルの1行になると考えられる.

時刻は 2001年1月1日0:00GMT からの経過秒数で表現されている(iPod時間と呼ぶことにしよう). したがって,UNIX時間(1970年1月1日からの経過秒数)からiPod時間への変換には 978307200 を引けばよい.


EventChanges table
カラム名 データ型 コメント
record INTEGER Event.ROWID (forign key)
type INTEGER 変更種類 (0 = 新規, 1 = 変更, 2 = 削除)
EventExceptionDate table
カラム名 データ型 コメント
event_id INTEGER
date INTEGER

3 Alarmデータ

EventExceptionDate table
カラム名 データ型 コメント
ROWID INTEGER 行番号 primary key
trigger_date INTEGER 0x80000000 が入っている(意味は不明)
trigger_interval INTEGER アラームを鳴らすイベントの開始時刻からの秒数.例えば5分前なら -300
type INTEGER 0 (意味は不明)
entity_id INTEGER Event.ROWID (foreign key)
entity_type INTEGER 2 (意味は不明)

trigger_date には32bit整数の最小値,typeには0, entity_typeも2が常に入っており,それ以外の値を見たことがない.

AlarmChanges table
カラム名 データ型 コメント
record INTEGER Event.ROWID (forign key)
type INTEGER 変更種類 (0 = 新規, 1 = 変更, 2 = 削除)

4 Recurrenceデータ

Recurrence table
カラム名 データ型 コメント
ROWID INTEGER 行番号 (primary key)
frequency INTEGER 繰り返し間隔の単位.日=1, 週=2, 月=3, 年=4
interval INTEGER frequency * interval が繰り返し間隔となる.frequency = 2, interval = 2 で2週間に1回.
week_start INTEGER
count INTEGER
cache_end_date INTEGER
cache_end_date_tz TEXT
end_date INTEGER
specifier TEXT
by_month_months INTEGER
event_id INTEGER Event.ROWID (foreign key)

繰り返しのあるイベントは,その繰り返し情報がこのテーブルに格納される.

5 Occurrenceテーブル

OccurrenceCache
カラム名 データ型 コメント
day INTEGER
event_id INTEGER
occurrence_date INTEGER
occurrence_start_date INTEGER

どうやら,リストビューで表示するためにイベントはこのテーブルに "cache" されるようだ.おそらく繰り返しのあるエントリを処理するためだろうと思うが,1回きりのイベントもこのテーブルに入っていないと,リストビューでは表示されない.

OccurrenceCacheDays
カラム名 データ型 コメント
day INTEGER primary key
count INTEGER