В пользовательском ContentProvider
мне нужно отфильтровать некоторые столбцы, указанные во входных данных. Учитывая тексто-ориентированные интерфейсы Android, мне трудно.
Например, ввод на MyContentProvider.query()
будет фактически спрашивать что-то вроде:
SELECT column_a, column_b FROM my_table WHERE column_a=1 AND column_b=red;
Проблема в том, что на данном конкретном MyContentProvider
_column_b_ может не иметь никакого смысла и не будет присутствовать в таблице. Фильтрация проекции так, чтобы остались только релевантные столбцы, может быть легко выполнена, поскольку это String []. Однако фильтрация входных данных String "where
" (selection) и "selectionArgs
" для этих столбцов не является тривиальной. Если все сделано правильно, это станет:
SELECT column_a FROM my_table WHERE column_a=1;
В противном случае можно получить SQLiteException "no such column"
.
Итак, есть ли простой способ игнорировать или фильтровать столбцы из такого оператора SQL или мне нужно пойти и написать какой-нибудь умный, хотя и очень ограниченный код синтаксического анализа регулярного выражения для части выбора?
Причина, по которой я не получаю правильные входные данные, заключается в том, что я поддерживаю пользовательский ContentProvider
в качестве интерфейса для адресации, но я говорю с несколькими пользовательскими ContentProvider
здесь (на заднем плане). Так или иначе, мне нужно было бы где-то отфильтровать выделение.
Обратите внимание, что я не просто спрашиваю, как выполнить запрос или использовать оператор SELECT ... WHERE
. Однако это касается моей реализации функции query()
.