Группировать в ContentResolver в Ice Cream Sandwich

Я делаю запрос в Android Contacts ContentProvider. Мне нужно предложение Group By. В Gingerbread и Honeycomb, я делаю что-то вроде этого для одновременного поиска телефонных номеров и электронных писем:

(Фактическое предложение WHERE намного сложнее, поскольку оно включает проверку типов. Это упрощение, но оно дает тот же результат)

String request = Phone.NUMBER + " LIKE ? OR " + Email.DATA + " LIKE ?";
String[] params = new String["%test%", "%test%"];

Cursor cursor = getContentResolver().query(
    Data.CONTENT_URI,
    new String[] { Data._ID, Data.RAW_CONTACT_ID },
    request + ") GROUP BY (" + Data.RAW_CONTACT_ID,
    params, "lower(" + Data.DISPLAY_NAME + ") ASC");

Внедрение ')' завершает предложение WHERE и позволяет вставить предложение GROUP BY.

Однако в Ice Cream Sandwich похоже, что ContentProvider обнаруживает это и добавляет правильное количество скобок, чтобы предотвратить мою инъекцию. Есть ли другой способ сделать это в запросе с одним курсором?

Edit

В настоящее время я удалил GROUP BY и добавил MatrixCursor, чтобы ограничить воздействие, но я бы предпочел иметь настоящий курсор:

MatrixCursor result = new MatrixCursor(new String[] { Data._ID, Data.RAW_CONTACT_ID });
Set<Long> seen = new HashSet<Long>();
while (cursor.moveToNext()) {
    long raw = cursor.getLong(1);
    if (!seen.contains(raw)) {
        seen.add(raw);
        result.addRow(new Object[] {cursor.getLong(0), raw});
    }
}
18
задан njzk2 10 April 2014 в 14:54
поделиться