@Override
 public Uri insertDir(SQLiteDatabase db, ContentProvider provider, Uri uri, ContentValues values)
     throws SQLException {
   final long parentId = Long.valueOf(ProviderUtils.getNthPathFromEnd(uri, 1));
   values.put(mColumn, parentId);
   return super.insertDir(db, provider, uri, values);
 }
  @Override
  public int deleteItem(
      SQLiteDatabase db, ContentProvider provider, Uri uri, String where, String[] whereArgs) {
    final String parentId = ProviderUtils.getNthPathFromEnd(uri, 2);

    return super.deleteItem(
        db,
        provider,
        uri,
        ProviderUtils.addExtraWhere(where, mColumn + "=?"),
        ProviderUtils.addExtraWhereArgs(whereArgs, parentId));
  }
  @Override
  public int updateDir(
      SQLiteDatabase db,
      ContentProvider provider,
      Uri uri,
      ContentValues values,
      String where,
      String[] whereArgs) {
    final String parentId = ProviderUtils.getNthPathFromEnd(uri, 1);

    return super.updateDir(
        db,
        provider,
        uri,
        values,
        ProviderUtils.addExtraWhere(where, mColumn + "=?"),
        ProviderUtils.addExtraWhereArgs(whereArgs, parentId));
  }
  @Override
  public Cursor queryItem(
      SQLiteDatabase db,
      Uri uri,
      String[] projection,
      String selection,
      String[] selectionArgs,
      String sortOrder) {
    final String parentId = ProviderUtils.getNthPathFromEnd(uri, 2);

    if (WILDCARD_PATH_SEGMENT.equals(parentId)) {
      return super.queryItem(db, uri, projection, selection, selectionArgs, sortOrder);

    } else {
      return super.queryItem(
          db,
          uri,
          projection,
          ProviderUtils.addExtraWhere(selection, mColumn + "=?"),
          ProviderUtils.addExtraWhereArgs(selectionArgs, parentId),
          sortOrder);
    }
  }