出典: 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 |
|