postgresql Skunk - Scala -多参数查询出错

lsmepo6l  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(167)

我得到一个错误与下面的代码

  1. import br.com.gbtech.model.PaymentRequestItem
  2. import cats.effect.{IO, Resource}
  3. import skunk.codec.all.*
  4. import skunk.implicits.*
  5. import skunk.{Query, Session, ~}
  6. val query: Query[(String *: Int), ValueObject] =
  7. sql"""
  8. SELECT field1, field2
  9. FROM sample_table
  10. WHERE field1 = $text
  11. AND field2 = $int4
  12. """.query(ValueObject.decoder)
  13. database.use(s => s.option(query)((param1, param2)))

字符串
解码器在这里:

  1. case class ValueObject(field1: Int, field2: String)
  2. object ValueObject {
  3. val decoder: Decoder[ValueObject] =
  4. (int4 ~ varchar).map { case (f1, f2) => ValueObject(f1, f2) }
  5. }


错误是:

  1. type mismatch;
  2. found : skunk.Query[String *: Int *: org.typelevel.twiddles.EmptyTuple,br.com.ValueObject]
  3. (which expands to) skunk.Query[String :: Int :: shapeless.HNil,br.com.ValueObject]
  4. required: skunk.Query[String *: Int,br.com.ValueObject]
  5. (which expands to) skunk.Query[String :: Int,br.com.ValueObject]
  6. """.query(ValueObject.decoder)


问题究竟出在哪里呢?

qnyhuwrf

qnyhuwrf1#

解决方案:

  • 固定进口
  1. import skunk.codec.all.*
  2. import skunk.implicits.*
  3. import skunk.*

字符串

  • 按照here的说明修复查询类型
  1. Query[String *: Int *: EmptyTuple, ValueObject]

  • 固定解码器
  1. val decoder: Decoder[ValueObject] =
  2. (int4 ~ varchar).map { case (f1, f2) =>
  3. ValueObject(f1, f2)
  4. }

展开查看全部

相关问题