ScheduleProvider
iosched の中にある ContentProvider も色々な意味でとても参考になります。特に REST な挙動をどうやって定義するか、という観点で非常に興味深い作りになっているようです。とりあえず provider.ScheduleProvider を起点に色々確認してみます。
CRUD 操作のうち、レコードを特定しなければならないケイスで使われている SelectionBuilder って何だろ、と言いつつ Google 先生に聞いてみたらどうも iosched の中で定義されているものらしく ScheduleProvider#buildExpandedSelection というメソドも定義されていることを確認してます。このメソドは SelectionBuilder なオブジェクトを戻すのですが、作りが非常に興味深いです。
例えば query メソド
さきに UriMatcher#match しといて以下。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { if (LOGV) Log.v(TAG, "query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")"); final SQLiteDatabase db = mOpenHelper.getReadableDatabase(); final int match = sUriMatcher.match(uri); switch (match) { default: { // Most cases are handled with simple SelectionBuilder final SelectionBuilder builder = buildExpandedSelection(uri, match);
上記 default は match が SEARCH_SUGGEST 以外のケイスになります。逆に言えば buildExpandedSelection メソドではそれ以外のケイスを care しているはず。
例えば match が BLOCKS* だった場合は
- BLOCKS
- 全件?
- BLOCKS_BETWEEN
- 範囲指定?
- BLOCKS_ID
- ID 指定?
- BLOCKS_ID_SESSIONS
- サブクエリ付き
みたいなケイスがあるように見てとれます。このあたりをトリガとして多分全部確認必要なのだと思いますが、穿り返してみる方向で考えてます。
ちょっと今日はもう遅いので
そろそろ手を止めます。手首の捻挫してて入力も微妙だったりしてorz
iosched.provider 配下は継続して確認な方向です。とは言え、明日はもしかすると pandaboard 方面に去ってしまうかもしれません。集中できない関係にて。