Когда я пытаюсь выполнить Query(query.length).first
в запросе, который представляет собой соединение двух таблиц, которые имеют несколько столбцов с одинаковыми именами, я получаю искаженный sql. Рассмотрим пример:
// in Main.scala
import scala.slick.driver.MySQLDriver.simple._
object Main extends App {
object Houses extends Table[Long]("Houses") {
def id = column[Long]("id")
def * = id
}
object Rooms extends Table[(Long, Long)]("Rooms") {
def id = column[Long]("id")
def houseId = column[Long]("houseId")
def * = id ~ houseId
}
val query = for {
h <- Houses
r <- Rooms
if h.id === r.houseId
} yield (h, r)
println("QUERY: " + Query(query.length).selectStatement)
}
// in build.sbt
scalaVersion := "2.10.2"
libraryDependencies += "com.typesafe.slick" %% "slick" % "1.0.1"
В этом примере создается следующий SQL:
select x2.x3 from
(select count(1) as x3 from
(select x4.`id`, x5.`id`, x5.`houseId`
from `Houses` x4, `Rooms` x5 where x4.`id` = x5.`houseId`) x6) x2
Что явно неверно и отклоняется MySQL, потому что столбец id
дублируется в части select x4.id, x5.id
.
Я мог бы попробовать сделать следующее:
query.list.size
но это приведет к извлечению всех строк из запроса и отправке их по сети, что значительно снизит производительность.
Что я делаю неправильно? Есть ли способ исправить это?