diff --git a/build.sbt b/build.sbt index 6516b6b..cd5429e 100644 --- a/build.sbt +++ b/build.sbt @@ -9,8 +9,6 @@ scalaVersion := "2.13.8" crossScalaVersions := Seq("2.11.12", "2.12.16", "2.13.8") libraryDependencies ++= Seq( - "com.github.jsqlparser" % "jsqlparser" % "0.9.6", - "org.scalamacros" %% "resetallattrs" % "1.0.0", "org.scala-lang" % "scala-reflect" % scalaVersion.value, "org.scala-lang" % "scala-compiler" % scalaVersion.value % "provided", "org.scalatest" %% "scalatest" % "3.0.8" % "test", diff --git a/src/main/scala/com/github/takezoe/scala/jdbc/IOUtils.scala b/src/main/scala/com/github/takezoe/scala/jdbc/IOUtils.scala index ebafb2e..ee6f332 100644 --- a/src/main/scala/com/github/takezoe/scala/jdbc/IOUtils.scala +++ b/src/main/scala/com/github/takezoe/scala/jdbc/IOUtils.scala @@ -31,7 +31,6 @@ object IOUtils { } } - def readStreamAsString(in: InputStream): String = { val buf = new Array[Byte](1024 * 8) var length = 0 diff --git a/src/main/scala/com/github/takezoe/scala/jdbc/package.scala b/src/main/scala/com/github/takezoe/scala/jdbc/package.scala index bef8ae9..30fbf4a 100644 --- a/src/main/scala/com/github/takezoe/scala/jdbc/package.scala +++ b/src/main/scala/com/github/takezoe/scala/jdbc/package.scala @@ -4,7 +4,8 @@ import com.github.takezoe.scala.jdbc.SqlTemplate import scala.language.experimental.macros import scala.reflect.macros.blackbox.Context -import com.github.takezoe.scala.jdbc.validation._ + +import scala.language.implicitConversions package object jdbc { @@ -24,52 +25,4 @@ package object jdbc { } case class SqlTemplate(sql: String, params: Any*) - - /** - * Macro version of sql string interpolation. - * This macro validates the given sql in compile time and returns SqlTemplate as same as string interpolation. - */ - def sqlc(sql: String): com.github.takezoe.scala.jdbc.SqlTemplate = macro Macros.validateSqlMacro - -} - -object Macros { - - def validateSqlMacro(c: Context)(sql: c.Expr[String]): c.Expr[com.github.takezoe.scala.jdbc.SqlTemplate] = { - import c.universe._ - sql.tree match { - case Literal(x) => x.value match { - case sql: String => SqlValidator.validateSql(sql, Nil, c) - val Apply(fun, _) = reify(new SqlTemplate("")).tree - c.Expr[com.github.takezoe.scala.jdbc.SqlTemplate](Apply.apply(fun, Literal(x) :: Nil)) - } - case Apply(Select(Apply(Select(Select((_, _)), _), trees), _), args) => { - val sql = trees.collect { case Literal(x) => x.value.asInstanceOf[String] }.mkString("?") - SqlValidator.validateSql(sql, args.map(_.tpe.toString), c) - val Apply(fun, _) = reify(new SqlTemplate("")).tree - -// args.foreach { arg => -// println(arg.tpe.getClass) -// } - - c.Expr[SqlTemplate](Apply.apply(fun, Literal(Constant(sql)) :: args)) - } - case Select(Apply(Select(a, b), List(Literal(x))), TermName("stripMargin")) => { - x.value match { - case s: String => - val sql = s.stripMargin - SqlValidator.validateSql(sql, Nil, c) - val Apply(fun, _) = reify(new SqlTemplate("")).tree - c.Expr[SqlTemplate](Apply.apply(fun, Literal(Constant(sql)) :: Nil)) - } - } - case Select(Apply(_, List(Apply(Select(Apply(Select(Select((_, _)), _), trees), _), args))), TermName("stripMargin")) => { - val sql = trees.collect { case Literal(x) => x.value.asInstanceOf[String] }.mkString("?").stripMargin - SqlValidator.validateSql(sql, args.map(_.tpe.toString), c) - val Apply(fun, _) = reify(new SqlTemplate("")).tree - c.Expr[SqlTemplate](Apply.apply(fun, Literal(Constant(sql)) :: args)) - } - } - } - } diff --git a/src/main/scala/com/github/takezoe/scala/jdbc/validation/SqlValidator.scala b/src/main/scala/com/github/takezoe/scala/jdbc/validation/SqlValidator.scala deleted file mode 100644 index ec7c04d..0000000 --- a/src/main/scala/com/github/takezoe/scala/jdbc/validation/SqlValidator.scala +++ /dev/null @@ -1,17 +0,0 @@ -package com.github.takezoe.scala.jdbc.validation - -import scala.reflect.macros.blackbox.Context -import net.sf.jsqlparser.JSQLParserException -import net.sf.jsqlparser.parser.CCJSqlParserUtil - -object SqlValidator { - - def validateSql(sql: String, types: Seq[String], c: Context): Unit = { - try { - CCJSqlParserUtil.parse(sql) - } catch { - case e: JSQLParserException => c.error(c.enclosingPosition, e.getCause.getMessage) - } - } - -} diff --git a/src/test/scala/com/github/takezoe/scala/jdbc/SqlTemplateSpec.scala b/src/test/scala/com/github/takezoe/scala/jdbc/SqlTemplateSpec.scala index 2b52cc0..cd3e33d 100644 --- a/src/test/scala/com/github/takezoe/scala/jdbc/SqlTemplateSpec.scala +++ b/src/test/scala/com/github/takezoe/scala/jdbc/SqlTemplateSpec.scala @@ -18,7 +18,6 @@ class SqlTemplateSpec extends FunSuite { )""") db.update(sql"INSERT INTO articles (published,author,title) VALUES (${a.published},${a.author},${a.title})") - db.update(sqlc(s"INSERT INTO articles (published,author,title) VALUES (${a.published},${a.author},${a.title})")) val aricles = db.select("SELECT * FROM articles", Article.apply _) assert(aricles.size == 2) diff --git a/src/test/scala/com/github/takezoe/scala/jdbc/validation/SqlValidationSpec.scala b/src/test/scala/com/github/takezoe/scala/jdbc/validation/SqlValidationSpec.scala deleted file mode 100644 index d94e20e..0000000 --- a/src/test/scala/com/github/takezoe/scala/jdbc/validation/SqlValidationSpec.scala +++ /dev/null @@ -1,47 +0,0 @@ -package com.github.takezoe.scala.jdbc.validation - -import org.scalatest.FunSuite -import com.github.takezoe.scala.jdbc._ - -class SqlValidationSpec extends FunSuite { - - test("macro test"){ - val companyId = 1 - val companyName = "xxx" - - sqlc(s""" - |SELECT - | A.USER_ID, - | A.USER_NAME, - | B.COMPANY_NAME, - | C.DEPT_NAME - |FROM - | USER A, - | (SELECT DEPT_ID, DEPT_NAME FROM DEPT) C - |INNER JOIN COMPANY B ON A.COMPANY_ID = B.COMPANY_ID AND A.DEPT_ID IN (SELECT DEPT_ID FROM DEPT) - |WHERE - | B.COMPANY_ID = ${companyId} AND - | B.COMPANY_NAME = ${companyName} AND - | C.DEPT_ID = A.DEPT_ID AND - | C.DEPT_ID IN (SELECT DEPT_ID FROM DEPT_GROUP) - |ORDER BY A.USER_ID - """.stripMargin) - - - sqlc( - """ - |INSERT INTO USER (USER_ID, USER_NAME) VALUES (1, 'takezoe') - """.stripMargin) - - sqlc( - """ - |UPDATE USER SET USER_ID = 1, USER_NAME = 'takezoe' WHERE USER_ID = 2 - """.stripMargin) - - sqlc( - """ - |DELETE USER WHERE USER_ID IN (SELECT DEPT_ID FROM DEPT WHERE DEPT_NAME = 'dev') - """.stripMargin) - } - -}