FTS4 matchinfo не работает с базой данных Android room

#android #kotlin #android-sqlite #android-room

#Android #kotlin #android-sqlite #android-room

Вопрос:

У меня есть два столбца ( name и description ) в виртуальной таблице FTS, и я хочу расставить name приоритеты для столбца в FTS с помощью matchinfo функции, но с room в Android я получаю следующую ошибку:

Ошибка при извлечении данных из таблицы.: невозможно использовать функцию matchinfo в запрошенном контексте (код 1 SQLITE_ERROR)

Вот мой запрос:

 @Query("""select workout_cache.id, workout_cache.met, workout_cache.name, workout_cache.workoutDescription, matchinfo(workout_cache_fts, 'pcs') as mi
from workout_cache join workout_cache_fts on workout_cache.id = workout_cache_fts.id 
where workout_cache_fts match :text group by workout_cache.id""")
abstract suspend fun query(text: String): List<WorkoutCacheEntityWithMatchInfo>
  

Мой WorkoutCacheEntityWithMatchInfo класс

 class WorkoutCacheEntityWithMatchInfo(
    @Embedded
    val workout: WorkoutCacheEntity,
    @ColumnInfo(name = "mi")
    val matchInfo: ByteArray
)
  

ОБНОВЛЕНИЕ: он работает нормально, когда я не использую предложение join.

Ответ №1:

Это глупо. Я просто удалил group by предложение, и оно сработало.

Здесь обновлен Dao:

 @Query("""select workout_cache.id, workout_cache.met, workout_cache.name, workout_cache.workoutDescription, matchinfo(workout_cache_fts, 'pcs') as mi
from workout_cache join workout_cache_fts on workout_cache.id = workout_cache_fts.id 
where workout_cache_fts match :text""")
abstract suspend fun query(text: String): List<WorkoutCacheEntityWithMatchInfo>
  

Комментарии:

1. Это сработало и для меня на iOS с использованием Swift.SQLLite. В зависимости от параметра match запрос работал с group by предложением, что странно. — Есть идеи относительно того, почему это сработало?