Skip to content

Instantly share code, notes, and snippets.

@pinglamb
Created December 27, 2011 16:37
Show Gist options
  • Save pinglamb/1524283 to your computer and use it in GitHub Desktop.
Save pinglamb/1524283 to your computer and use it in GitHub Desktop.
ContentProvider#query
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbHelper.getReadableDatabase();
if(sURIMatcher.match(uri) == EVENTS) {
String selectClauses = "";
for(int i=0; i < projection.length; i++) {
if(projection[i] == "participants_count") {
selectClauses += "(SELECT COUNT(*) FROM participants WHERE participants.event_id = events.event_id)";
} else {
selectClauses += projection[i];
}
}
// Handle the where clauses
String whereClauses = "";
Cursor c = db.rawQuery("SELECT " + selectClauses
+ " FROM events"
+ " WHERE " + whereClauses;
return c;
} else {
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
switch (sURIMatcher.match(uri)) {
case EVENTS:
qBuilder.setTables(Tables.EVENTS);
break;
case LOCATIONS:
qBuilder.setTables(Tables.LOCATIONS);
break;
case TIMESLOTS:
qBuilder.setTables(Tables.TIMESLOTS);
break;
case PARTICIPANTS:
qBuilder.setTables(Tables.PARTICIPANTS);
break;
case EVENTS_ID:
qBuilder.setTables(Tables.EVENTS);
qBuilder.appendWhere("_ID=" + uri.getLastPathSegment());
break;
case LOCATIONS_ID:
qBuilder.setTables(Tables.LOCATIONS);
qBuilder.appendWhere("_ID=" + uri.getLastPathSegment());
break;
case TIMESLOTS_ID:
qBuilder.setTables(Tables.TIMESLOTS);
qBuilder.appendWhere("_ID=" + uri.getLastPathSegment());
break;
case PARTICIPANTS_ID:
qBuilder.setTables(Tables.PARTICIPANTS);
qBuilder.appendWhere("_ID=" + uri.getLastPathSegment());
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
Cursor c = qBuilder.query(db,
projection,
selection,
selectionArgs,
null,
null,
sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment