aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskih@datamonsters.co>2017-10-06 12:45:19 +0700
committerGitHub <noreply@github.com>2017-10-06 12:45:19 +0700
commit52b5e1a5febc91aa316565fdea309df2b646481e (patch)
treefd8984aff5a814c5b0ddb70874c9411c55febdca
parentd9bb907bc15445dd2db14be8c033fcfce2fd59c1 (diff)
parent794a013fa88caebd6eb88faf17285ef18209e68b (diff)
downloadrest-query-0.6.1.tar.gz
rest-query-0.6.1.tar.bz2
rest-query-0.6.1.zip
Merge pull request #40 from drivergroup/fix-slick-qbv0.6.1
Added implicit set parameter object for slick query builder
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala25
1 files changed, 20 insertions, 5 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..dc03a52 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,12 @@ object SlickQueryBuilder {
})
}
}
+
+ implicit object SetQueryParameter extends SetParameter[AnyRef] {
+ def apply(v: AnyRef, pp: PositionedParameters) = {
+ pp.setObject(v, JDBCType.BINARY.getVendorTypeNumber)
+ }
+ }
}
final case class SlickTableLink(keyColumnName: String, foreignTableName: String, foreignKeyColumnName: String)
@@ -175,6 +181,16 @@ sealed trait SlickQueryBuilderParameters {
} else sql
}
+ def concatenateParameters(sql: SQLActionBuilder, first: Boolean, tail: Seq[AnyRef]): SQLActionBuilder = {
+ if (tail.nonEmpty) {
+ if (!first) {
+ concatenateParameters(sql concat sql""",${tail.head}""", false, tail.tail)
+ } else {
+ concatenateParameters(sql"""(${tail.head}""", false, tail.tail)
+ }
+ } else sql concat sql")"
+ }
+
filter match {
case x if isEmpty(x) =>
sql""
@@ -196,7 +212,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 +224,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,8 +233,7 @@ sealed trait SlickQueryBuilderParameters {
}
val formattedValues = if (values.nonEmpty) {
- val condition = s"(${values.map(v => "'" + v.toString + "'").mkString(",")})"
- sql"#${condition}"
+ concatenateParameters(sql"", true, values)
} else sql"NULL"
sql"#${escapeDimension(dimension)}" concat sqlOp concat formattedValues