dtksmsl
dtksmsl

Reputation: 239

slick filter from any other class

I have a case class, mappings and the object defined like this

import slick.driver.PostgresDriver.api._

import scala.concurrent.Await
import scala.concurrent.duration.Duration

case class Coffee(name : String, supID: Int, price: Double, sales: Int, total: Int) {

  def save(): Coffee = { Coffees.save(this) }

  def delete() { Coffees.delete(this) }
}

class Coffees(tag: Tag) extends Table[Coffee](tag, "coffee") {
  def name = column[String]("cof_name", O.PrimaryKey)
  def supID = column[Int]("sup_id")
  def price = column[Double]("price")
  def sales = column[Int]("sales", O.Default(0))
  def total = column[Int]("total", O.Default(0))
  def * = (name, supID, price, sales, total) <> (Coffee.tupled, Coffee.unapply)
}

object Coffees extends TableQuery(new Coffees(_)) {
  lazy val db = DatabaseAccess.databases("db.test")
  def save(coffee: Coffee): Coffee = {
    val saveQuery = (this returning this).insertOrUpdate(coffee)
    Await.result(db.run(saveQuery), Duration.Inf) match {
      case Some(x) => x
      case None => coffee
    }
  }

  def delete(coffee: Coffee) = {
    Await.result(db.run(this.filter(_.name === coffee.name).delete), Duration.Inf)
  }
}

Now I want to write queries from other classes like this :

import com.typesafe.config.ConfigFactory
import org.scalatest.{FeatureSpec, GivenWhenThen, Matchers}

class CoffeeSpec extends FeatureSpec with GivenWhenThen with Matchers {
  feature("Accessing coffees in the database") {
    scenario("Adding a new coffee") {
      val config = ConfigFactory.load()
      DatabaseAccess.loadConfiguration(config)
      lazy val db = DatabaseAccess.databases("db.test")

      val coffee = Coffee("nescafe", 1, 20, 20, 40).save()

      val temp = Coffees.filter(_.name === "nescafe")

      temp.length should be (1)

      coffee.delete()
    }
  }
}

This line

val temp = Coffees.filter(_.name === "nescafe")

Throws an error like this:

enter image description here

What is the best way to write the filter queries on the Coffees object? Using slick 2.0 I have queries like:

Query(Coffees).filter(_.name is "coffee").firstOption.getOrElse(None)

I want to be able to do the similar queries using the new setup for all the data mappings.

Why am I getting these errors and how should I be able to make similar queries in slick 3?

Upvotes: 1

Views: 554

Answers (1)

Paweł Jurczenko
Paweł Jurczenko

Reputation: 4471

Your queries are fine, but your CoffeeSpec file is missing an import:

import slick.driver.PostgresDriver.api._

Compilation should pass then.

Upvotes: 2

Related Questions