Предположим, у меня есть таблица, определенная следующим образом в Slick 3.2.3:
class ATable(tag: Tag) extends Table[(Int, Option[Boolean])](tag, "a_table") {
def someInt = column[Int]("some_int")
def someBool = column[Option[Boolean]]("some_bool")
def * = (someInt, someBool)
}
object ATable extends TableQuery(new ATable(_))
и немного данных для этого:
insert into a_table
values
(1, true),
(2, null),
(2, true),
(2, null),
(3, true),
(3, true),
(3, null);
Теперь я хотел бынайти эти целые в таблице, где есть ровно одна строка, где some_bool
не равно null
.Это не сложно в SQL:
select some_int
from a_table
group by some_int
having count(some_bool) = 1;
Это прекрасно работает.Итак, давайте попробуем это с Slick:
ATable
.groupBy(_.someInt)
.filter(_._2.map(_.someBool).countDefined === 1)
.map(_._1)
И пока он скомпилируется, во время выполнения произойдет сбой с сообщением об ошибке «slick.SlickTreeException: Cannot convert node to SQL Comprehension
».Это известное ограничение или ошибка в пятне?Или я должен написать свой запрос по-другому?Конечно, можно написать это с помощью подзапроса, но я бы лучше понял, почему вещь groupBy
не работает ...