diff options
author | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-05 17:44:17 +0700 |
---|---|---|
committer | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-05 19:17:09 +0700 |
commit | 96a9bdde5c96e2f743f835fd8996fd765c13bf40 (patch) | |
tree | f00144ab2c1c91a301611e9d718364e9a05fc4ea | |
parent | 1b04669effd79324e52f0dcba0f3714d4a2a957c (diff) | |
download | rest-query-96a9bdde5c96e2f743f835fd8996fd765c13bf40.tar.gz rest-query-96a9bdde5c96e2f743f835fd8996fd765c13bf40.tar.bz2 rest-query-96a9bdde5c96e2f743f835fd8996fd765c13bf40.zip |
Added implicit set parameter object for slick query builder
-rw-r--r-- | src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala b/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala index 0daa84d..8f42949 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala @@ -1,6 +1,6 @@ package xyz.driver.pdsuicommon.db -import java.sql.PreparedStatement +import java.sql.{JDBCType, PreparedStatement} import java.time.LocalDateTime import slick.jdbc.{JdbcProfile, PositionedParameters, SQLActionBuilder, SetParameter} @@ -38,6 +38,20 @@ object SlickQueryBuilder { }) } } + + implicit object SetQueryParameter extends SetParameter[AnyRef] { + def apply(v: AnyRef, pp: PositionedParameters) = { + pp.setObject(v, JDBCType.BINARY.getVendorTypeNumber) + } + } + + implicit object SetListQueryParameter extends SetParameter[Seq[AnyRef]] { + def apply(vList: Seq[AnyRef], pp: PositionedParameters) = { + vList.foreach { v => + pp.setObject(v, JDBCType.BINARY.getVendorTypeNumber) + } + } + } } final case class SlickTableLink(keyColumnName: String, foreignTableName: String, foreignKeyColumnName: String) @@ -196,7 +210,7 @@ sealed trait SlickQueryBuilderParameters { // So, to handle NotEq for nullable fields we need to use more complex SQL expression. // http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html val escapedColumn = escapeDimension(dimension) - sql"(#${escapedColumn} is null or #${escapedColumn} != ${value.toString})" + sql"(#${escapedColumn} is null or #${escapedColumn} != $value)" case Atom.Binary(dimension, op, value) => val operator = op match { @@ -208,7 +222,7 @@ sealed trait SlickQueryBuilderParameters { case Lt => sql"<" case LtEq => sql"<=" } - sql"#${escapeDimension(dimension)}" concat operator concat sql"""${value.toString}""" + sql"#${escapeDimension(dimension)}" concat operator concat sql"""$value""" case Atom.NAry(dimension, op, values) => val sqlOp = op match { @@ -217,7 +231,7 @@ sealed trait SlickQueryBuilderParameters { } val formattedValues = if (values.nonEmpty) { - val condition = s"(${values.map(v => "'" + v.toString + "'").mkString(",")})" + val condition = s"(${values})" sql"#${condition}" } else sql"NULL" sql"#${escapeDimension(dimension)}" concat sqlOp concat formattedValues |