2010-09-25 34 views
2

当我使用ScalaQuery进行编程时,如何从表格中建立“select count(*)”语句?如何使用ScalaQuery构建count(*)sql的查询?

我用

查询(TestTable.count)

但是生成的select语句是:

选择从COUNT(*)(选择TestTable的COLUMN1 t2)t1

我想:从TestTable的

对不起

SELECT 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 
} 
+0

你能发表其余的代码吗? – Jus12 2010-09-25 15:29:34

+0

Stefan说它看起来像一个bug。 – 2010-09-25 21:38:16

+0

已更新添加剩余代码 – 2010-09-26 01:08:47

回答

4

我不应该这么快就称它为一个错误。生成的代码是正确的,但显然不理想。作为ScalaQuery 0.9.0的,你只能通过手动插入CountAll运营商到查询AST获得所需的声明:

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

我刚刚提交的修改,以改善这种状况,使不必要的子查询将在许多情况下可以避免。在ScalaQuery 0.9.1中,您最初的尝试“Query(TestTable.count)”应该按预期工作。

+0

感谢您的回答和您的项目,szeiger。随着你的回答,我还获得了如何使用ColumnOps对象,再次感谢。 – 2010-09-26 15:08:05