Scala + Slick - Obtenir des comptes sur les résultats de groupeby
Question
J'essaie d'obtenir des comptes à partir d'une DB à l'aide d'un groupe de groupe, SCALA + SLICK CODE.
Voici mon code partiel:
object DBJobs extends Table[DBJob]("encoder_job") {
object Status extends Enumeration {
val local = Value("LOCAL")
val encoding = Value("ENCODING")
val done = Value("DONE")
val error = Value("ERROR")
}
implicit val StatusMapper = MappedTypeMapper.base[Status.Value, String] (
{x => x.toString},
{x => x match {case "LOCAL"=>Status(0);case "ENCODING"=>Status(1);case "DONE"=>Status(2);case "ERROR"=>Status(3)}}
)
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def status = column[DBJobs.Status.Value]("status", O.NotNull)
def getStats()(implicit session:Session):mutable.Map[Status.Value, Int] = {
var map = mutable.Map[Column[Status.Value], Column[Int]]()
val q = (for { j <- DBJobs } yield (j)).groupBy(_.status).map{
case (s, results) =>
map = map += (s -> results.length)
}
map
}
}
Mon problème est de savoir comment mettre des données sur ma carte sous [dbjobs.status, int] au lieu de
Voici l'équivalent SQL:
SELECT COUNT( 1 ), status FROM encoder_job GROUP BY STATUS
Version SLICK: 1.0.1
merci
La solution
def getStats()(implicit session:Session):mutable.Map[Status.Value, Int] = {
Query(DBJobs).groupBy(_.status).map{
case (s, results) => (s -> results.length)
}
}
// usage
val results = getStats.run
Sachez que la mise en place d'une méthode dans l'objet de la table ne peut pas être facilement migrée vers SLICK 2.0.Mettez-les séparément, par exemple.comme extensions de méthodes.Voir aussi https://groups.google.com/d/msg/scalaquerer/xnttt8sexxi/ zlkgxv6lz6yj
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow