如何在scala slick中通过数组索引添加查询?

mm9b1k5b  于 4个月前  发布在  Scala
关注(0)|答案(1)|浏览(71)

使用scala slick,你如何使用纯文本生成一个查询过滤器?上下文-我试图在一个数组位置列上进行过滤,似乎不受https://github.com/tminglei/slick-pg提供的slick扩展的支持。
也就是说,我们有一个数组字段:

id UUID,
   name varchar,
   my_array_field varchar[],
   ...

字符串
我希望能够通过SELECT FROM BLAH where name='somename' and my_array_field[2] = 'bar'的SQL等价物进行查询

  • 有没有一种方法可以只注入一个文本字符串作为一个过滤器?也就是说,不是一个查询的光滑的SQL语句,而只是一个过滤器元素?
  • 是否有一个光滑的或光滑的pg表示检索的数组元素?
qncylg1j

qncylg1j1#

slick-pg的README中,您可以在用法部分看到如何使用lib的示例。您需要将PgArraySupport混合到配置文件中,并将ArrayImplicits混合到API中。

trait MyPostgresProfile extends ExPostgresProfile
                           with PgArraySupport

  override val api = MyAPI

  object MyAPI extends ExtPostgresAPI with ArrayImplicits
}

object MyPostgresProfile extends MyPostgresProfile

字符串
然后,您可以看到定义为def tags = column[List[String]]("tags_arr")的数组列和使用过滤器.filter(_.tags @& tags.toList.bind)的方法byTag

import MyPostgresProfile.api._

class TestTable(tag: Tag) extends Table[Test](tag, Some("xxx"), "Test") {
  def tags = column[List[String]]("tags_arr")
  def * = (tags) <> (Test.tupled, Test.unapply)
}

object tests extends TableQuery(new TestTable(_)) {
  // will generate sql like:
  //   select * from test where tags && ?
  def byTag(tags: String*) = tests
    .filter(_.tags @& tags.toList.bind)
    .map(t => t)
}


还有一个README - Supported Array Oper/Functions你可以检查。

相关问题