diff options
author | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-23 15:34:13 +0700 |
---|---|---|
committer | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-23 17:15:39 +0700 |
commit | e3b8e6ce8f659bff81b9a4bc3a79e3d2c3dd734f (patch) | |
tree | 430986fa7935b1bd03659f4542ce15803b617e51 /src/main/scala/xyz/driver/pdsuicommon/db/EntityExtractorDerivation.scala | |
parent | 1d2131e98330284ce5a3dcfc0cfd13e012914d6a (diff) | |
download | rest-query-e3b8e6ce8f659bff81b9a4bc3a79e3d2c3dd734f.tar.gz rest-query-e3b8e6ce8f659bff81b9a4bc3a79e3d2c3dd734f.tar.bz2 rest-query-e3b8e6ce8f659bff81b9a4bc3a79e3d2c3dd734f.zip |
Removed quill query builder
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuicommon/db/EntityExtractorDerivation.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuicommon/db/EntityExtractorDerivation.scala | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/db/EntityExtractorDerivation.scala b/src/main/scala/xyz/driver/pdsuicommon/db/EntityExtractorDerivation.scala deleted file mode 100644 index 02ba322..0000000 --- a/src/main/scala/xyz/driver/pdsuicommon/db/EntityExtractorDerivation.scala +++ /dev/null @@ -1,66 +0,0 @@ -package xyz.driver.pdsuicommon.db - -import java.sql.ResultSet - -import io.getquill.NamingStrategy -import io.getquill.dsl.EncodingDsl - -import scala.language.experimental.macros -import scala.reflect.macros.blackbox - -trait EntityExtractorDerivation[Naming <: NamingStrategy] { this: EncodingDsl => - - /* - Simple Quill extractor derivation for [[T]] - Only case classes available. Type parameters is not supported - */ - def entityExtractor[T]: (ResultSet => T) = macro EntityExtractorDerivation.impl[T] -} - -object EntityExtractorDerivation { - def impl[T: c.WeakTypeTag](c: blackbox.Context): c.Tree = { - import c.universe._ - val namingStrategy = c.prefix.actualType - .baseType(c.weakTypeOf[EntityExtractorDerivation[NamingStrategy]].typeSymbol) - .typeArgs - .head - .typeSymbol - .companion - val functionBody = { - val tpe = weakTypeOf[T] - val resultOpt = tpe.decls.collectFirst { - // Find first constructor of T - case cons: MethodSymbol if cons.isConstructor => - // Create param list for constructor - val params = cons.paramLists.flatten.map { param => - val t = param.typeSignature - val paramName = param.name.toString - val col = q"$namingStrategy.column($paramName)" - // Resolve implicit decoders (from SqlContext) and apply ResultSet for each - val d = q"implicitly[${c.prefix}.Decoder[$t]]" - // Minus 1 cause Quill JDBC decoders make plus one. - // ¯\_(ツ)_/¯ - val i = q"row.findColumn($col) - 1" - val decoderName = TermName(paramName + "Decoder") - val valueName = TermName(paramName + "Value") - ( - q"val $decoderName = $d", - q"val $valueName = $decoderName($i, row)", - valueName - ) - } - // Call constructor with param list - q""" - ..${params.map(_._1)} - ..${params.map(_._2)} - new $tpe(..${params.map(_._3)}) - """ - } - resultOpt match { - case Some(result) => result - case None => c.abort(c.enclosingPosition, s"Can not derive extractor for $tpe. Constructor not found.") - } - } - q"(row: java.sql.ResultSet) => $functionBody" - } -} |