Можно ли выполнить пакетное обновление с условным выражением переменной длины для базы данных sqlite?
val data = Seq(
Seq(Set(1,2,3), 50),
Seq(Set(4,5,6,7), 51)
)
NamedDB(symbol).localTx { implicit s: DBSession =>
sql"""
update table_a
set xs=(
select group_concat(x) from (
select distinct x from table_b where id in (?)
)
) where id=?
""".batch(xs.map(_.data): _*).apply()
}
Этот подход по умолчанию заставляет scalikejdbc регистрировать, что параметр задан как объект (предупреждение?), И в результате обновления не применяются.
Я пытался использовать связыватель параметров, но невозможно установить параметр in (?)
в качестве типа массива, поскольку sqlite (и его драйвер JDBC) не поддерживают массивы.
Альтернативой является изменение текста SQL таким образом, чтобы в предложении было ?
на значение. Это невозможно при пакетном обновлении, поскольку разные строки имеют разное количество значений.