scala scala-2.10 slick

scala - ¿Es posible utilizar la cláusula IN en sql simple Slick?



scala-2.10 (4)

Aunque no es seguro para la inyección de SQL, puede usar #$ interpolator:

val ids = idList.map("''" + _ + "''").mkString(",") val q = sql"""select name from mytable where id in (#$ids)"""

Por ejemplo, quiero crear la siguiente consulta:

SELECT c.* FROM Coffees c WHERE c.name IN (''robusta'', ''arabica'')

Mi intento fracasó:

val cnames = List("robusta", "arabica") sql""" SELECT c.* FROM Coffees c WHERE c.name IN ${cnames} """ could not find implicit value for parameter pconv: scala.slick.jdbc.SetParameter[List[String]]

¿Es posible utilizar de alguna manera in cláusula en las consultas Slick plain sql?


Hay una biblioteca que (entre otras cosas) introduce un cuaderno para las propiedades de la lista en el interpolador SQL de Slick: https://index.scala-lang.org/tarao/slick-jdbc-extension-scala/slick-jdbc-extension

Código de ejemplo de la página:

import util.NonEmpty def findAll(entryIds: Option[NonEmpty[Long]]): Seq[Entry] = entryIds match { case Some(ids) => run { sql""" | SELECT * FROM ${table} | WHERE entry_id IN $ids """.as[Entry] } case None => Seq.empty }



No veo nada fuera de la caja para manejar esto. Su mejor apuesta es probablemente algo como esto:

val cnames = List("robusta", "arabica").map("''" + _ + "''").mkString(",") val query = sql""" SELECT c.* FROM Coffees c WHERE c.name IN (${cnames}) """