出典: Fukudat.com
以下のテーブルが存在する
1 Calendarテーブル
Calendar table
| カラム名 | データ型 | コメント
|
| ROWID | INTEGER | 行番号 primary key. 他のテーブルから calendar_id として参照される.
|
| store_id | INTEGER | 1
|
| title | text | カレンダー名
|
| read_only | INTEGER | 読み取り専用なら non zero (?)
|
| hidden | INTEGER | 隠しカレンダーなら non zero (?)
|
| immutable | INTEGER | 変更不可なら non zero (?)
|
| color_r | INTEGER | 色のR成分 (?)
|
| color_g | INTEGER | 色のG成分 (?)
|
| color_b | INTEGER | 色のB成分 (?)
|
| color_is_display | INTEGER | null or 0 (?)
|
| type | TEXT | null (?)
|
| supported_entity_types | INTEGER | 0 (?)
|
| external_id | TEXT | null (?)
|
| external_mod_tag | TEXT | null (?)
|
| external_id_tag | TEXT | null (?)
|
| external_rep | BLOB | null (?)
|
複数のカレンダーを管理することが想定されているものと考えられるが,
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 | 元となったイベントの開始時刻.
|
| organizer_id | INTEGER |
|
| organizer_is_self | INTEGER |
|
| status | INTEGER |
|
| external_status | INTEGER |
|
| availability | INTEGER |
|
| privacy_level | INTEGER |
|
| external_tracking_status | INTEGER |
|
| external_id | TEXT |
|
| external_mod_tag | TEXT |
|
| external_id_tag | TEXT |
|
| external_delivery_source_id | TEXT |
|
| external_delivery_item_id | TEXT |
|
| external_rep | BLOB |
|
| response_comment | TEXT |
|
予定一つがこのテーブルの1行になると考えられる.
時刻は 2001年1月1日0:00GMT からの経過秒数で表現されている(iPod時間と呼ぶことにしよう).
したがって,UNIX時間(1970年1月1日からの経過秒数)からiPod時間への変換には 978307200 を引けばよい.
2.1 EventChangeテーブル
EventChanges table
| カラム名 | データ型 | コメント
|
| record | INTEGER | Event.ROWID (forign key)
|
| type | INTEGER | 変更種類 (0 = 新規, 1 = 変更, 2 = 削除)
|
2.2 EventExceptionDateテーブル
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が常に入っており,それ以外の値を見たことがない.
3.1 AlarmChangesテーブル
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 OccurrenceCacheテーブル
OccurrenceCache
| カラム名 | データ型 | コメント
|
| day | INTEGER |
|
| event_id | INTEGER |
|
| calendar_id | INTEGER |
|
| store_id | INTEGER |
|
| occurrence_date | INTEGER |
|
| occurrence_start_date | INTEGER |
|
どうやら,リストビューで表示するためにイベントはこのテーブルに "cache" されるようだ.おそらく繰り返しのあるエントリを処理するためだろうと思うが,1回きりのイベントもこのテーブルに入っていないと,リストビューでは表示されない.
5.1 OccurrenceCacheDaysテーブル
OccurrenceCacheDays
| カラム名 | データ型 | コメント
|
| day | INTEGER | primary key
|
| count | INTEGER |
|