标签: slick-pg

用于组合各种形状的已编译查询的 Scala Slick 策略

我正在使用 postgresql 9.6、slick 3.2 并连接了slick-pg

我正在 Scala 中实现一个 graphql 后端,我需要实现查询来解析各种形状的 GraphQL 游标。输入的形状是可枚举的。影响查询的一些输入可能是:

  • 用户可选择的排序。
  • 各种过滤条件(全文搜索、日期范围等)。
  • 在向后或向前遍历之间进行选择。

我当前的简单游标将向后和向前硬编码为编译查询。并且两者都具有相同的形状,我使用标准的光滑抽象来分解重用的共性(带有操作的值类、“实体”表的继承层次结构和代码生成)。但是仍然有很多样板文件,除非我将它们全部列出,否则它不会扩展到更动态的形状。

这是使用此模式的类的摘录:

private [shard] class SchemaAllTypeCursor(shard: SlickShard) extends CursorSpec[TypeModel] {
  import shard.PostgresProfile.api._
  private val forwardQC = Compiled { (tenantIdUrls: Rep[List[String]], low: Rep[Long], take: ConstColumn[Long]) =>
    Queries.listTypesByTenantIds(tenantIdUrls).forwardCursorById(low, take)
  }
  private val backwardQC = Compiled { (tenantIdUrls: Rep[List[String]], high: Rep[Long], take: ConstColumn[Long]) =>
    Queries.listTypesByTenantIds(tenantIdUrls).backwardCursorById(high, take)
  }

  def executor(tenantIdUrls: List[String])(c: CursorRequest)(implicit req: Req[_]): Observable[TypeModel] = {
    implicit val ec = req.ctx.ec
    Observable fromFuture {
      shard.db.run { …
Run Code Online (Sandbox Code Playgroud)

scala slick slick-pg

6
推荐指数
0
解决办法
430
查看次数

标签 统计

scala ×1

slick ×1

slick-pg ×1