SqlDelight не генерирует строку запроса SQL для оператора SQL
В примере, приведенном в документации по SqlDelight, HockeyPlayerModel
генерируется SqlDelight из HockeyPlayer.sq
файл реализован в абстрактном классе public abstract class HockeyPlayer implements HockeyPlayerModel
В этом классе строка SELECT_ALL_INFO
передается как запрос к db.rawQuery(SELECT_ALL_INFO, new String[0])
, Строка SELECT_ALL_INFO
был создан select_all_info
заявление внутри HockeyPlayer.sq
, Однако в моей ситуации мои утверждения не генерируют строки. Почему это?
Мое заявление
names_for_groups:
SELECT DISTINCT name, exercise_set_group FROM exercise_set JOIN exercises
USING (exercise_id) WHERE workout_FK = ? ORDER BY exercise_set_group ASC ;
Моя реализация ExerciseSetModel
генерируется SqlDelight
@AutoValue
public abstract class DbExerciseSet implements ExerciseSetModel, DbItem {
public static final Factory<DbExerciseSet> FACTORY = new Factory<>(AutoValue_DbExerciseSet::new);
public static final RowMapper<DbExerciseSet> MAPPER = FACTORY.select_allMapper();
public static final RowMapper<NamesForGroups> NAMES_FOR_GROUPS_MAPPER =
FACTORY.names_for_groupsMapper(AutoValue_DbExerciseSet_NamesForGroups::new);
public List<NamesForGroups> namesForGroups(SQLiteDatabase db) {
List<NamesForGroups> namesForGroupsList= new ArrayList<>();
Cursor cursor = db.rawQuery(NAMES_FOR_GROUPS, new String[0]);
while (cursor.moveToNext() && NAMES_FOR_GROUPS_MAPPER.map(cursor) != null) {
//NamesForGroups namesForGroups = NAMES_FOR_GROUPS_MAPPER.map(cursor);
namesForGroupsList.add(NAMES_FOR_GROUPS_MAPPER.map(cursor));
}
return namesForGroupsList;
}
@AutoValue
public abstract static class NamesForGroups implements Names_for_groupsModel {}
@AutoValue
public abstract static class Exercises implements ExerciseModel {}
}
Для ясности ссылка на переменную NAMES_FOR_GROUPS не найдена в строке db.rawQuery(NAMES_FOR_GROUPS, new String[0])
1 ответ
Документация должна быть обновлена, я сделаю это. Мы больше не генерируем строки в SQLDelight 0.6.+ Вместо этого на фабрике есть метод, который возвращает SQLDelightStatement
который используется для запроса:
public List<NamesForGroups> namesForGroups(SQLiteDatabase db) {
List<NamesForGroups> namesForGroupsList= new ArrayList<>();
SQLDelightStatement query = FACTORY.name_for_groups();
Cursor cursor = db.rawQuery(query.statement, query.args);
while (cursor.moveToNext() && NAMES_FOR_GROUPS_MAPPER.map(cursor) != null) {
//NamesForGroups namesForGroups = NAMES_FOR_GROUPS_MAPPER.map(cursor);
namesForGroupsList.add(NAMES_FOR_GROUPS_MAPPER.map(cursor));
}
return namesForGroupsList;
}