-
Notifications
You must be signed in to change notification settings - Fork 33
Open
Description
The example below is also available as a public repo.
@bishabosha @lihaoyi
// ThisBuild / scalaVersion := "3.7.3"
// val scalaSqlVersion = "0.2.1"
// libraryDependencies += "com.lihaoyi" %% "scalasql" % scalaSqlVersion
// libraryDependencies += "com.lihaoyi" %% "scalasql-namedtuples" % scalaSqlVersion
package com.example
import scalasql.dialects.PostgresDialect.*
import scalasql.simple.{*, given}
opaque type UserId = java.util.UUID
object UserId {
given TypeMapper[UserId] = new UuidType
}
case class User(id: UserId, firstName: String, lastName: String)
object User extends SimpleTable[User]
def find(id: UserId)(using db: DbApi.Txn): Option[User] = {
db.run(User.select.filter(_.id === id)).headOption
}The above won't compile with the following error:
value === is not a member of com.example.UserId match {
case scalasql.namedtuples.SimpleTable.Nested =>
scalasql.namedtuples.SimpleTable.Record[com.example.UserId,
scalasql.core.Expr]
case Any => scalasql.core.Expr[com.example.UserId]
} <:
scalasql.namedtuples.SimpleTable.Record[com.example.UserId, scalasql.core.Expr
]
| scalasql.core.Expr[com.example.UserId] - did you mean com.example.UserId match {
case scalasql.namedtuples.SimpleTable.Nested =>
scalasql.namedtuples.SimpleTable.Record[com.example.UserId,
scalasql.core.Expr]
case Any => scalasql.core.Expr[com.example.UserId]
} <:
scalasql.namedtuples.SimpleTable.Record[com.example.UserId, scalasql.core.Expr
]
| scalasql.core.Expr[com.example.UserId].==?As far as I understand, opaque types used in SimpleTables do not reduce appropiately in the Records match types used to convert them into Expr.
This has been stopping us from using SimpleTable as we use opaque types for all ids of models in our system (to avoid passing an incorrect ids anywhere in the system).
Metadata
Metadata
Assignees
Labels
No labels