aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-06-14 13:55:15 -0700
committervlad <vlad@driver.xyz>2017-06-14 13:55:15 -0700
commit59aababea4a8856ac972fe452b14003f82fe3706 (patch)
tree99d53e97e251e333ac17caeaa0f455489b343508
parent91a4120b4253dc4a1e9552ec39fcb25c303a21e1 (diff)
downloadrest-query-59aababea4a8856ac972fe452b14003f82fe3706.tar.gz
rest-query-59aababea4a8856ac972fe452b14003f82fe3706.tar.bz2
rest-query-59aababea4a8856ac972fe452b14003f82fe3706.zip
Cleaning up SqlContextv0.1.3
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/db/SqlContext.scala122
-rw-r--r--src/test/scala/xyz/driver/pdsuicommon/logging/PhiStringContextSuite.scala1
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"))
}
-
}