ScheduleProvider (2)

昨晩エントリでいくつかのパターンを列挙してみました。

  • 全件指定
  • 範囲指定
  • ID 指定
  • サブクエリ付き

他にもあるのかもしれませんが、諸々確認しつつ掘ってみます。

buildExpandSelection メソド

基本的には SelectionBuilder のオブジェクトを生成してパターンに沿って云々しているように見えます。ええと例えば全件指定だと

            case ROOMS: {
                return builder.table(Tables.ROOMS);
            }

みたいなカンジ。これは分かりやすいですね。あるいは ID 指定な例が以下。

            case ROOMS_ID: {
                final String roomId = Rooms.getRoomId(uri);
                return builder.table(Tables.ROOMS)
                        .where(Rooms.ROOM_ID + "=?", roomId);
            }

ええと Rooms は ScheduleContract ですね。getRoomId メソドの定義が以下。

        public static String getRoomId(Uri uri) {
            return uri.getPathSegments().get(1);
        }

Uri のメソドを確認してみます。プロトタイプ的には以下らしい。

abstract List<String>	 getPathSegments()

ええと説明によれば

Gets the decoded path segments.

とのことですが List か。どうも Uri から ID を取り出すには

uri.getPathSegments().get(1)

にするのが常道らしく見えます。これ、もしかして以下な Uri からだと

content://com.example.transportationprovider/trains/122

"trains" が 0 番目で "122" が 1 番目、ということなのかな。path segments ってことで大丈夫と思おう。ID でナニする通常の query であれば uri があればライダムアクセスができるのが分かりました。

ちょい限界

SelectionsBuilder#where とか SelectionsBuilder#query など、要確認。