2

ScalaQueryでプログラミングする場合、「select count(*) from table」ステートメントを作成するにはどうすればよいですか?

私は

クエリ(TestTable.count)

しかし、生成された選択ステートメントは次のとおりです。

select count(*) from (TestTable t2 から column1 を選択) 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
}
4

1 に答える 1

4

すぐにバグと呼ぶべきではなかった。生成されたコードは正しいですが、明らかに理想的ではありません。ScalaQuery 0.9.0 の時点では、CountAll 演算子をクエリ AST に手動で挿入することによってのみ、目的のステートメントを取得できます。

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

多くの場合、不要なサブクエリが回避されるように、この状況を改善するための変更をコミットしました。ScalaQuery 0.9.1 では、最初の試行 "Query(TestTable.count)" が期待どおりに機能するはずです。

于 2010-09-26T13:01:55.463 に答える