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 方面に去ってしまうかもしれません。集中できない関係にて。