quill - 无法标记非标量提升
quill - can't tokenize a non-scalar lifting
我目前遇到这个错误,我不太明白为什么:
exception during macro expansion: java.lang.IllegalStateException: Can't tokenize a non-scalar lifting. AgentService.this.agentsByOrganization(id).id
我是否需要在进行查询之前将 ID 转换为 Long
?我希望能够使用特定的 Id class,但我是 Scala 的新手,不确定这是否可行。此外,并非所有查询都会失败。例如,delete
有效,即使它也被传递给 AgentId
。而 findByOrganization
方法不起作用。传递 AgentId
的其他方法也显示与 findByOrganization
.
相同的错误
型号:
case class AgentId(value: Long) extends AnyVal
case class OrganizationId(value: Long) extends AnyVal
case class Agent(
id: AgentId
, identifier: String
, organizationId: OrganizationId
, createdAt: LocalDateTime
, updatedAt: LocalDateTime
)
服务:
class AgentService(implicit val ex: ExecutionContext, val ctx: DBContext)
extends AgentsRepository {
import ctx._
def listByOrganization(id: OrganizationId): List[Agent] =
ctx.run(agentsByOrganization(id)) // this returns the error
def delete(agent: RichAgent): Unit = {
ctx.run(deleteAgent(agent)) // this doesn't
}
}
存储库:
trait AgentsRepository extends Repository {
import ctx._
def agentsByOrganization(id: OrganizationId) = quote { // error
query[Agent].filter(_.organizationId == lift(id))
}
def agentById(id: AgentId) = quote {
query[Agent].filter(_.id == lift(id))
}
def deleteAgent(agent: Agent) = quote { agentById(agent.id).delete }
}
db
import io.getquill.{PostgresJdbcContext, SnakeCase}
package object db {
class DBContext(config: String) extends PostgresJdbcContext(SnakeCase, config)
trait Repository {
val ctx: DBContext
}
}
我看过这个similar issue, but it seems specific to Option
. Here's a scastie snippet。
不太确定发生了什么,但现在它正在运行:
case class AgentId(value: Long) extends AnyVal
case class Agent(
id: AgentId
, identifier: String
, organizationId: OrganizationId
, createdAt: LocalDateTime
, updatedAt: LocalDateTime
)
case class RichAgent(
id: AgentId
, identifier: String
, organization: Organization
)
服务
class AgentService(implicit val ex: ExecutionContext, val ctx: DBContext)
extends AgentsRepository {
import ctx._
def listByOrganization(id: OrganizationId): List[Agent] =
ctx.run(agentsByOrganization(id))
def delete(agent: Agent): AgentId = {
AgentId(ctx.run(deleteAgent(agent.id)))
}
}
存储库
trait AgentsRepository extends Repository {
import ctx._
val agents = quote {
query[Agent]
}
def agentsByOrganization(id: OrganizationId) = quote {
agents.filter(_.organizationId == lift(id))
}
def agentById(id: AgentId) = quote {
agents.filter(_.id == lift(id))
}
def deleteAgent(agentId: AgentId) = quote { agentById(agentId).delete }
}
db
object db {
class DBContext(config: String) extends PostgresJdbcContext(SnakeCase, config)
trait Repository {
val ctx: DBContext
}
}
我目前遇到这个错误,我不太明白为什么:
exception during macro expansion: java.lang.IllegalStateException: Can't tokenize a non-scalar lifting. AgentService.this.agentsByOrganization(id).id
我是否需要在进行查询之前将 ID 转换为 Long
?我希望能够使用特定的 Id class,但我是 Scala 的新手,不确定这是否可行。此外,并非所有查询都会失败。例如,delete
有效,即使它也被传递给 AgentId
。而 findByOrganization
方法不起作用。传递 AgentId
的其他方法也显示与 findByOrganization
.
型号:
case class AgentId(value: Long) extends AnyVal
case class OrganizationId(value: Long) extends AnyVal
case class Agent(
id: AgentId
, identifier: String
, organizationId: OrganizationId
, createdAt: LocalDateTime
, updatedAt: LocalDateTime
)
服务:
class AgentService(implicit val ex: ExecutionContext, val ctx: DBContext)
extends AgentsRepository {
import ctx._
def listByOrganization(id: OrganizationId): List[Agent] =
ctx.run(agentsByOrganization(id)) // this returns the error
def delete(agent: RichAgent): Unit = {
ctx.run(deleteAgent(agent)) // this doesn't
}
}
存储库:
trait AgentsRepository extends Repository {
import ctx._
def agentsByOrganization(id: OrganizationId) = quote { // error
query[Agent].filter(_.organizationId == lift(id))
}
def agentById(id: AgentId) = quote {
query[Agent].filter(_.id == lift(id))
}
def deleteAgent(agent: Agent) = quote { agentById(agent.id).delete }
}
db
import io.getquill.{PostgresJdbcContext, SnakeCase}
package object db {
class DBContext(config: String) extends PostgresJdbcContext(SnakeCase, config)
trait Repository {
val ctx: DBContext
}
}
我看过这个similar issue, but it seems specific to Option
. Here's a scastie snippet。
不太确定发生了什么,但现在它正在运行:
case class AgentId(value: Long) extends AnyVal
case class Agent(
id: AgentId
, identifier: String
, organizationId: OrganizationId
, createdAt: LocalDateTime
, updatedAt: LocalDateTime
)
case class RichAgent(
id: AgentId
, identifier: String
, organization: Organization
)
服务
class AgentService(implicit val ex: ExecutionContext, val ctx: DBContext)
extends AgentsRepository {
import ctx._
def listByOrganization(id: OrganizationId): List[Agent] =
ctx.run(agentsByOrganization(id))
def delete(agent: Agent): AgentId = {
AgentId(ctx.run(deleteAgent(agent.id)))
}
}
存储库
trait AgentsRepository extends Repository {
import ctx._
val agents = quote {
query[Agent]
}
def agentsByOrganization(id: OrganizationId) = quote {
agents.filter(_.organizationId == lift(id))
}
def agentById(id: AgentId) = quote {
agents.filter(_.id == lift(id))
}
def deleteAgent(agentId: AgentId) = quote { agentById(agentId).delete }
}
db
object db {
class DBContext(config: String) extends PostgresJdbcContext(SnakeCase, config)
trait Repository {
val ctx: DBContext
}
}