如何使用ScalaQuery为count(*)sql构建查询?

时间:2010-09-25 03:18:03

标签: sql scala scalaquery

当我使用ScalaQuery进行编程时,如何构建“从表中选择计数(*)”语句?

我用过

  

查询(TestTable.count)

但生成的select语句是:

  

从(选择column1)中选择count(*)   来自TestTable t2)t1

我想要:

  

从TestTable中选择count(*)

抱歉,我的英语很差。


import org.scalaquery.ql.extended.MySQLDriver.Implicit._
import org.scalaquery.session._
import org.scalaquery.session.Database.threadLocalSession
import org.scalaquery.ql.Query
import org.scalaquery.ql.basic.{BasicTable => Table}

object Test {
  val db = Database.forURL(...)
  db withSession {
    val q = Query(TestTable.count)
    println(q.selectStatement)
  }
}
object TestTable extends Table[(Long, Int)]("test") {
  def id = column[Long]("id")
  def config = column[Int]("config")
  def * = id ~ config
}

1 个答案:

答案 0 :(得分:4)

我不应该这么快就把它称为bug。生成的代码是正确的,但显然不是理想的。从ScalaQuery 0.9.0开始,您只能通过手动将CountAll运算符插入查询AST来获取所需的语句:

TestTable.map(t => ColumnOps.CountAll(t))

我刚刚提交了一项更改以改善这种情况,以便在许多情况下避免不必要的子查询。在ScalaQuery 0.9.1中,您的原始尝试“Query(TestTable.count)”应该按预期工作。