Можно ли обновить несколько строк с помощью Quill, используя IN - PullRequest
0 голосов
/ 30 января 2020

Можно ли производить что-то вроде

UPDATE employees SET gender = 'Male' WHERE id IN ('asfd','bleh');

с помощью Quill? Я не нахожу и пример в документации, и пакетное обновление, кажется, что-то еще .

1 Ответ

0 голосов
/ 31 января 2020

У меня работает (попробуйте https://scastie.scala-lang.org/):

Stati c query:

import io.getquill._

val ctx = new SqlMirrorContext(PostgresDialect, SnakeCase)

import ctx._

case class Product(name: String, price: Int)

def products(names: Seq[String], name: String) =
    ctx.run {
      ctx
        .query[Product]
        .filter(person => quote(liftQuery(names).contains(person.name)))
        .update(_.name -> lift(name))
}

val m = products(Seq("AA", "BB"), "EE")

println(m.string)

Dynami c query

import io.getquill._

val ctx = new SqlMirrorContext(PostgresDialect, SnakeCase)

import ctx._

case class Product(name: String, price: Int)

def products(names: Seq[String], name: String) =
    ctx.run {
      ctx
        .dynamicQuery[Product]
        .filter(person => quote(liftQuery(names).contains(person.name)))
        .update(setValue(_.name, name))
}

val m = products(Seq("AA", "BB"), "EE")

println(m.string)

Выход:

UPDATE product SET name = ? WHERE name IN (?, ?)

...