Sql字符串插值,带有超过22个参数的slick 2.1

时间:2016-02-10 17:27:55

标签: scala slick slick-2.0

我使用字符串插值和光滑来生成sql请求。

当参数少于22时,光滑字符串插值工作正常。

示例:

val s = sql"select * from my_table where my_table.id = $i"

但是,当光滑使用元组和自动元组时,我无法编写超过23个参数的查询。

示例:

val s = sql"""select * from my_table 
              where a1 = $i1 and a2 = $i2 and .... and a23 = $i23"""

目前我唯一的解决方案就是为超过23个参数的每个查询创建一个新的自定义字符串插值。

示例:

  case class A(q1: Q1, q2: q2, ..., qn: Qn)

  implicit class CustomSQLInterpolation(val s: StringContext) extends AnyVal {
    /** Build a SQLInterpolationResult via string interpolation */
    def csql[P](q1: Q1, q2: Q2, ..., qn: Qn) = {
      val a = A(q1, q2, ..., qn)
      val setTupleA = new SetTupleParameter[A](
        SetQ1, SetQ2, ..., SetQ3)

      new SQLInterpolationResult[A](s.parts, a, setTupleA)
    }
  }

但这种方法并不通用,使用起来也不方便。

0 个答案:

没有答案