使用 scala slick,如何使用纯文本生成查询过滤器? 语境 - 我正在尝试过滤数组位置列,似乎不受 https://github.com/tminglei/slick-pg 提供的光滑扩展的支持。
即我们有一个数组字段:
id UUID,
name varchar,
my_array_field varchar[],
...
我希望能够通过相当于以下的 sql 进行查询
SELECT FROM BLAH where name='somename' and my_array_field[2] = 'bar'
在 slick-pg 的自述文件中,您可以在 usage 部分看到如何使用该库的示例。您需要将
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")
的数组列以及使用过滤器 byTag
的方法 .filter(_.tags @& tags.toList.bind)
。
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 您可以查看。