private Cursor getReviewsByMovieId(Uri uri, String[] projection, String sortOrder) {
    String movieId = MoviesContract.ReviewEntry.getMovieIdFromUri(uri);

    String[] selectionArgs = new String[] {movieId};
    String selection = sMovieSelection;

    return sReviewByMovieIdQueryBuilder.query(
        moviesDbHelper.getReadableDatabase(),
        projection,
        selection,
        selectionArgs,
        null,
        null,
        sortOrder);
  }
 @Override
 public Cursor query(
     Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
   Cursor cursor;
   SQLiteDatabase db = mOpenHelper.getReadableDatabase();
   switch (sUriMatcher.match(uri)) {
     case MOVIES_LIST:
       cursor =
           db.query(
               MoviesContract.MoviesEntry.TABLE_NAME,
               projection,
               selection,
               selectionArgs,
               null,
               null,
               sortOrder);
       break;
     case TRAILERS:
       cursor =
           db.query(
               MoviesContract.TrailersEntry.TABLE_NAME,
               projection,
               selection,
               selectionArgs,
               null,
               null,
               null);
       break;
     case REVIEWS:
       cursor =
           db.query(
               MoviesContract.ReviewsEntry.TABLE_NAME,
               projection,
               selection,
               selectionArgs,
               null,
               null,
               null);
       break;
     default:
       throw new UnsupportedOperationException("Unknown uri: " + uri);
   }
   cursor.setNotificationUri(getContext().getContentResolver(), uri);
   return cursor;
 }
  @Nullable
  @Override
  public Cursor query(
      Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    Cursor retCursor;
    switch (sUriMatcher.match(uri)) {
      case MOVIE:
        {
          retCursor =
              moviesDbHelper
                  .getReadableDatabase()
                  .query(
                      MoviesContract.MovieEntry.TABLE_NAME,
                      projection,
                      selection,
                      selectionArgs,
                      null,
                      null,
                      sortOrder);
          break;
        }
      case MOVIE_WITH_ID:
        {
          String movieId = MoviesContract.ReviewEntry.getMovieIdFromUri(uri);

          selectionArgs = new String[] {movieId};
          selection = sMovieSelection;
          retCursor =
              moviesDbHelper
                  .getReadableDatabase()
                  .query(
                      MoviesContract.MovieEntry.TABLE_NAME,
                      projection,
                      selection,
                      selectionArgs,
                      null,
                      null,
                      sortOrder);
          break;
        }
      case TRAILER:
        {
          retCursor = getTrailersByMovieId(uri, projection, sortOrder);
          break;
        }
      case REVIEW:
        {
          retCursor = getReviewsByMovieId(uri, projection, sortOrder);
          break;
        }
      case REVIEW_WITH_ID:
        {
          String movieId = MoviesContract.ReviewEntry.getMovieIdFromUri(uri);
          retCursor =
              sReviewByMovieIdQueryBuilder.query(
                  moviesDbHelper.getReadableDatabase(),
                  projection,
                  sMovieSelection,
                  new String[] {movieId},
                  null,
                  null,
                  sortOrder);
          break;
        }
      case TRAILER_WITH_ID:
        {
          String movieId = MoviesContract.TrailerEntry.getMovieIdFromUri(uri);
          retCursor =
              sTrailerByMovieIdQueryBuilder.query(
                  moviesDbHelper.getReadableDatabase(),
                  projection,
                  sMovieSelection,
                  new String[] {movieId},
                  null,
                  null,
                  sortOrder);
          break;
        }
      default:
        throw new UnsupportedOperationException("Unknown uri: " + uri);
    }
    retCursor.setNotificationUri(getContext().getContentResolver(), uri);
    return retCursor;
  }