I'm trying to generate statement by case class parameters.
case class f(a:String, b:String){
val statement = Macroses.st[f]
}
object MacrosTest {
def start() {
val result = f("1", "2").statement
}
}
Result must be INSERT INTO tableName(a, b) VALUES ('1', '2');
This is my macros
def st[T]:Insert = macro st_impl[T]
def st_impl[A : c.WeakTypeTag](c: Context): c.Expr[Insert] = {
import c.universe._
val methods: List[String] = c.weakTypeOf[A].typeSymbol.
typeSignature.decls.toList.filterNot(_.isMethod)
.map(_.name.toString)
c.Expr[Insert](q"""QueryBuilder.insertInto("tableName")${methods.map(v => s""".value("$v", $v)""").mkString}""")
}
I got exception:
c.universe.Name expected but c.universe.Tree found
If i use this quasiquote it works good.
(q"""QueryBuilder.insertInto("tableName").value("a", a).value("b", b)""")