From 59aababea4a8856ac972fe452b14003f82fe3706 Mon Sep 17 00:00:00 2001 From: vlad Date: Wed, 14 Jun 2017 13:55:15 -0700 Subject: Cleaning up SqlContext --- .../xyz/driver/pdsuicommon/db/SqlContext.scala | 122 +-------------------- .../logging/PhiStringContextSuite.scala | 1 - 2 files changed, 3 insertions(+), 120 deletions(-) diff --git a/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala b/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala index 7477e71..376956a 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala @@ -1,21 +1,15 @@ package xyz.driver.pdsuicommon.db import java.io.Closeable -import java.net.URI import java.time._ -import java.util.UUID import java.util.concurrent.Executors import javax.sql.DataSource -import xyz.driver.pdsuicommon.logging.{PhiLogging, Unsafe} -import xyz.driver.pdsuicommon.concurrent.MdcExecutionContext -import xyz.driver.pdsuicommon.db.SqlContext.Settings -import xyz.driver.pdsuicommon.domain._ -import xyz.driver.pdsuicommon.error.IncorrectIdException -import xyz.driver.pdsuicommon.utils.JsonSerializer import com.typesafe.config.Config import io.getquill._ -import xyz.driver.pdsuidomain.entities.{CaseId, RecordRequestId} +import xyz.driver.pdsuicommon.concurrent.MdcExecutionContext +import xyz.driver.pdsuicommon.db.SqlContext.Settings +import xyz.driver.pdsuicommon.logging.{PhiLogging, Unsafe} import scala.concurrent.ExecutionContext import scala.util.control.NonFatal @@ -65,116 +59,6 @@ class SqlContext(dataSource: DataSource with Closeable, settings: Settings) tpe.shutdownNow() } - // ///////// Encodes/Decoders /////////// - - /** - * Overrode, because Quill JDBC optionDecoder pass null inside decoders. - * If custom decoder don't have special null handler, it will failed. - * - * @see https://github.com/getquill/quill/issues/535 - */ - implicit override def optionDecoder[T](implicit d: Decoder[T]): Decoder[Option[T]] = - decoder( - sqlType = d.sqlType, - row => - index => { - try { - val res = d(index - 1, row) - if (row.wasNull) { - None - } else { - Some(res) - } - } catch { - case _: NullPointerException => None - case _: IncorrectIdException => None - } - } - ) - - implicit def encodeStringId[T] = MappedEncoding[StringId[T], String](_.id) - implicit def decodeStringId[T] = MappedEncoding[String, StringId[T]] { - case "" => throw IncorrectIdException("'' is an invalid Id value") - case x => StringId(x) - } - - def decodeOptStringId[T] = MappedEncoding[Option[String], Option[StringId[T]]] { - case None | Some("") => None - case Some(x) => Some(StringId(x)) - } - - implicit def encodeLongId[T] = MappedEncoding[LongId[T], Long](_.id) - implicit def decodeLongId[T] = MappedEncoding[Long, LongId[T]] { - case 0 => throw IncorrectIdException("0 is an invalid Id value") - case x => LongId(x) - } - - // TODO Dirty hack, see REP-475 - def decodeOptLongId[T] = MappedEncoding[Option[Long], Option[LongId[T]]] { - case None | Some(0) => None - case Some(x) => Some(LongId(x)) - } - - implicit def encodeUuidId[T] = MappedEncoding[UuidId[T], String](_.toString) - implicit def decodeUuidId[T] = MappedEncoding[String, UuidId[T]] { - case "" => throw IncorrectIdException("'' is an invalid Id value") - case x => UuidId(x) - } - - def decodeOptUuidId[T] = MappedEncoding[Option[String], Option[UuidId[T]]] { - case None | Some("") => None - case Some(x) => Some(UuidId(x)) - } - - implicit def encodeTextJson[T: Manifest] = - MappedEncoding[TextJson[T], String](x => JsonSerializer.serialize(x.content)) - implicit def decodeTextJson[T: Manifest] = MappedEncoding[String, TextJson[T]] { x => - TextJson(JsonSerializer.deserialize[T](x)) - } - - implicit val encodeUserRole = MappedEncoding[User.Role, Int](_.bit) - implicit val decodeUserRole = MappedEncoding[Int, User.Role] { - // 0 is treated as null for numeric types - case 0 => throw new NullPointerException("0 means no roles. A user must have a role") - case x => User.Role(x) - } - - implicit val encodeEmail = MappedEncoding[Email, String](_.value.toString) - implicit val decodeEmail = MappedEncoding[String, Email](Email) - - implicit val encodePasswordHash = MappedEncoding[PasswordHash, Array[Byte]](_.value) - implicit val decodePasswordHash = MappedEncoding[Array[Byte], PasswordHash](PasswordHash(_)) - - implicit val encodeUri = MappedEncoding[URI, String](_.toString) - implicit val decodeUri = MappedEncoding[String, URI](URI.create) - - implicit val encodeCaseId = MappedEncoding[CaseId, String](_.id.toString) - implicit val decodeCaseId = MappedEncoding[String, CaseId](CaseId(_)) - - implicit val encodeFuzzyValue = { - MappedEncoding[FuzzyValue, String] { - case FuzzyValue.No => "No" - case FuzzyValue.Yes => "Yes" - case FuzzyValue.Maybe => "Maybe" - } - } - implicit val decodeFuzzyValue = MappedEncoding[String, FuzzyValue] { - case "Yes" => FuzzyValue.Yes - case "No" => FuzzyValue.No - case "Maybe" => FuzzyValue.Maybe - case x => - Option(x).fold { - throw new NullPointerException("FuzzyValue is null") // See catch in optionDecoder - } { _ => - throw new IllegalStateException(s"Unknown fuzzy value: $x") - } - } - - implicit val encodeRecordRequestId = MappedEncoding[RecordRequestId, String](_.id.toString) - implicit val decodeRecordRequestId = MappedEncoding[String, RecordRequestId] { x => - RecordRequestId(UUID.fromString(x)) - } - final implicit class LocalDateTimeDbOps(val left: LocalDateTime) { // scalastyle:off diff --git a/src/test/scala/xyz/driver/pdsuicommon/logging/PhiStringContextSuite.scala b/src/test/scala/xyz/driver/pdsuicommon/logging/PhiStringContextSuite.scala index de1d1bf..eb9d9b4 100644 --- a/src/test/scala/xyz/driver/pdsuicommon/logging/PhiStringContextSuite.scala +++ b/src/test/scala/xyz/driver/pdsuicommon/logging/PhiStringContextSuite.scala @@ -28,5 +28,4 @@ class PhiStringContextSuite extends FreeSpecLike { assert(!result.contains("test")) assert(!result.contains("42")) } - } -- cgit v1.2.3