From abbbdba4d98e2be233607d96add61b708f5863cc Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 6 Oct 2015 10:07:01 +0200 Subject: [PATCH] [#4600] Add support for plain SQL APIs via Scala string interpolation --- .../scala/org/jooq/scala/Conversions.scala | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala b/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala index 58f597b191..1cf53e77e0 100644 --- a/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala +++ b/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala @@ -92,6 +92,41 @@ object Conversions { // Enhanced jOOQ types // ------------------------------------------------------------------------- + implicit class SQLInterpolation(val sc : StringContext) extends AnyVal { + + @PlainSQL + def sql(args: Any*) : SQL = DSL.sql(string(args), args.asInstanceOf[Seq[AnyRef]] : _*) + + @PlainSQL + def condition(args : Any*) : Condition = DSL.condition(string(args), args.asInstanceOf[Seq[AnyRef]] : _*) + + @PlainSQL + def table(args : Any*) : Table[Record] = DSL.table(string(args), args.asInstanceOf[Seq[AnyRef]] : _*) + + @PlainSQL + def query(args : Any*) : Query = DSL.query(string(args), args.asInstanceOf[Seq[AnyRef]] : _*) + + @PlainSQL + def resultQuery(args : Any*) : ResultQuery[Record] = DSL.resultQuery(string(args), args.asInstanceOf[Seq[AnyRef]] : _*) + + private def string(args : Any*) = { + val pi = sc.parts.iterator + val sb = new StringBuilder(pi.next()) + var i = 0; + + while (pi.hasNext) { + sb += '{' + sb ++= (i toString) + sb += '}' + sb ++= pi.next() + + i = i + 1; + } + + sb.result + } + } + implicit class ScalaDSLContext (val ctx : DSLContext) { def fetchAnyOption[R <: Record] (table : Table[R]) : Option[R] = Option(ctx.fetchAny(table)) def fetchAnyOption[R <: Record] (table : Table[R], condition : Condition) : Option[R] = Option(ctx.fetchAny(table, condition))