【问题标题】:Returning a tuple column type from slick plain SQL query从光滑的普通 SQL 查询返回元组列类型
【发布时间】:2018-08-29 18:35:59
【问题描述】:

在带有 postgres 的 slick 3 中,我尝试使用带有元组列返回类型的普通 sql 查询。我的查询是这样的:

sql"""
  select (column1, column2) as tup from table group by tup;
""".as[((Int, String))]

但在编译时出现以下错误:

找不到参数 rconv 的隐含值:slick.jdbc.GetResult[((Int, String), String)]

如何使用普通的 sql 查询返回元组列类型?

【问题讨论】:

  • 如果没有GROUP BY 子句,查询是否有效?
  • @Dario 问题实际上不是分组依据,而是列类型和 scala 类型之间的映射。如果您在带有或不带有 group by 的数据库上直接运行查询,则它根本不会通过 slick 运行。
  • Slick 不支持开箱即用的复合类型,但有一个适用于 PostgreSQL 的 Slick 扩展库支持。你可以在这里看到一些例子:github.com/tminglei/slick-pg/blob/…

标签: sql postgresql scala slick


【解决方案1】:

GetResult[T] 是函数PositionedResult => T 的包装器,并期望使用PositionedResult 方法(例如nextInt、nextString)来提取位置类型字段。以下隐式 val 应满足您的需求:

implicit val getTableResult = GetResult(r => (r.nextInt, r.nextString))

更多细节可以在这个Slick doc找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2013-03-05
    • 2010-12-08
    相关资源
    最近更新 更多