When reading multi-column results, we care about the column names.
A natural fit for that are case class
es.
We need to add a derives SqlReadRow
, and then we can use it:
import ba.sake.squery.{*, given}
case class Customer(id: Int, name: String) derives SqlReadRow
def customers: List[Customer] = ctx.run {
sql"SELECT id, name FROM customers".readRows[Customer]()
}
Note that the case class
' fields need to match the SELECT
statement columns!
There are also variations that return a single result, depending if you want an Option[T]
or T
:
sql"SELECT ...".readRowOpt[T]() : Option[T] // first result, if present
sql"SELECT ...".readRow[T]() : T // first result, or exception