diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuicommon')
4 files changed, 24 insertions, 47 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 diff --git a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala b/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala deleted file mode 100644 index 36c3de7..0000000 --- a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala +++ /dev/null @@ -1,40 +0,0 @@ -package xyz.driver.pdsuicommon.domain - -import xyz.driver.pdsuicommon.logging._ -import xyz.driver.pdsuicommon.utils.Utils - -sealed trait FuzzyValue - -object FuzzyValue { - case object Yes extends FuzzyValue - case object No extends FuzzyValue - case object Maybe extends FuzzyValue - - private val yes = "Yes" - private val no = "No" - private val maybe = "Maybe" - - val All: Set[FuzzyValue] = - Set(Yes, No, Maybe) - - def fromBoolean(x: Boolean): FuzzyValue = - if (x) Yes else No - - implicit def toPhiString(x: FuzzyValue): PhiString = - Unsafe(Utils.getClassSimpleName(x.getClass)) - - val fromString: PartialFunction[String, FuzzyValue] = { - case fuzzy => - fuzzy.toLowerCase.capitalize match { - case `yes` => Yes - case `no` => No - case `maybe` => Maybe - } - } - - def valueToString(x: FuzzyValue): String = x match { - case Yes => `yes` - case No => `no` - case Maybe => `maybe` - } -} diff --git a/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala b/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala index a53f1dd..9383a1c 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala @@ -3,7 +3,7 @@ package xyz.driver.pdsuicommon.json import java.text.SimpleDateFormat import com.fasterxml.jackson.annotation.JsonInclude -import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper} import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.scala.DefaultScalaModule import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper @@ -15,6 +15,7 @@ object JsonSerializer { mapper.registerModule(new JavaTimeModule) mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")) mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL) + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) def serialize(value: Any): String = { mapper.writeValueAsString(value) diff --git a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala index 83c4e6f..6d2a068 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala @@ -15,6 +15,7 @@ import xyz.driver.pdsuidomain.formats.json.sprayformats.trial._ import xyz.driver.pdsuidomain.formats.json.sprayformats.trialhistory._ import xyz.driver.pdsuidomain.formats.json.sprayformats.trialissue._ import xyz.driver.core.swagger.CustomSwaggerJsonConverter._ +import xyz.driver.entities.patient.CancerType import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData @@ -32,7 +33,7 @@ object CustomSwaggerJsonFormats { ) val customTrialCurationProperties = immutable.Map[Class[_], Property]( classOf[Trial.Status] -> stringProperty(), - classOf[Trial.Condition] -> stringProperty(), + classOf[CancerType] -> stringProperty(), classOf[TrialHistory.Action] -> stringProperty(), classOf[TrialHistory.State] -> stringProperty() ) ++ customCommonProperties |