gpt4 book ai didi

scala - 如何使用 Scala Slick 表达 Postgres 数组

转载 作者:行者123 更新时间:2023-12-04 14:25:16 25 4
gpt4 key购买 nike

我在 Postgres 9.5 中有一个具有这种结构的表:

my_table (id Integer, images_ranks image_rank[]);

哪里image_rank是:

CREATE TYPE image_rank AS (image_url text, thumbnail_rank integer);

我正在努力在 Slick (3.1) 中表达类似的东西:

case class MyTable (id: Int, imagesRanks: Seq[Option[ImageRank]])

implicit val propertyMyTableResult = GetResult(r => MyTable(r.<<, r.<<)
implicit val propertyImageRankResult = GetResult[Option[ImageRank]] { r => ImageRank(r.<<, r.<<)) }

正确的做法是什么?

更新

这个包装(根据 n1r3 的回答)目前正在阻止我:

implicit val ImageRankWrapper: JdbcType[List[ImageRank]] = new SimpleArrayJdbcType[ImageRank]("image_rank[]").to(_.toList)

更新 2

还是不知道哪里出了问题。我已经按照你的建议添加了代码,但它仍然提示:

could not find implicit value for parameter rconv: slick.jdbc.GetResult[database.rows.MyTable] .

所以我添加了:

implicit val myTableResult = GetResult[MyTable](r => MyTable(r.<<, r.<<))

返回:

diverging implicit expansion for type slick.jdbc.GetResult[T1]
starting with object GetStringOption in object GetResult
r.<<, r.<<))

这是我的配置:

import com.github.tminglei.slickpg._
import database.rows.ImageRank

trait CustomPostgresProfile extends ExPostgresProfile
with PgArraySupport
with PgPlayJsonSupport
with PgPostGISSupport
with PgEnumSupport
with PgDate2Support {

// Use PostgreSQL JSONB support
def pgjson = "jsonb"

override val api = MyAPI
object MyAPI extends API
with ArrayImplicits
with JsonImplicits
with PostGISImplicits
with DateTimeImplicits {
implicit val imageRankListTypeMapper =
new AdvancedArrayJdbcType[ImageRank]("image_rank",
str => utils.SimpleArrayUtils.fromString[ImageRank](s => {
val ImageRankRegex = "ImageRank\\((.*),(\\d+)\\)".r
s match {
case ImageRankRegex(imageUrl, thumbnailRank) =>
ImageRank(imageUrl, thumbnailRank.toInt)
case _ =>
println(s"$s is not ImageRank")
ImageRank("", 0)
}
})(str).orNull,
imageRanks => utils.SimpleArrayUtils.mkString[ImageRank](_.toString)(imageRanks)
).to(_.toList)
}
}

object CustomPostgresProfile extends CustomPostgresProfile


abstract class DatabaseProfile(val provider: DatabaseConfigProvider) {
val config = provider.get[CustomPostgresProfile]
val profile = config.profile
val db = config.db
}

trait PropertyDataDatabase {
self: DatabaseProfile =>
.....

最佳答案

您最好使用这个优秀的库:https://github.com/tminglei/slick-pg

如果您更愿意自己实现它,请查看源代码 ( https://github.com/tminglei/slick-pg/tree/master/core/src/main/scala/com/github/tminglei/slickpg/array ) 并从中获得您想要的。

关于scala - 如何使用 Scala Slick 表达 Postgres 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46808137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com