我必须在中缀中编写普通的 SQL 查询。我有一个主 SQL 查询,然后根据某些条件向其中添加 AND 子句。
例如 :
val andClause= quote { (name: String) =>
infix"""AND name = $name """.as[Query[(Int, String)]]
}
val rawQuery = quote { (id: String, name: String) =>
infix"""SELECT id, name FROM my_entity WHERE id = $id ${andClause(name)}"""
.as[Query[(Int, String)]]
}
ctx.translate(rawQuery("ramakrishna", "rk”))
这打印
SELECT x._1, x._2 FROM (SELECT id, name FROM my_entity WHERE id = 'ramakrishna' AND name = 'rk' ) AS x
正如预期的那样。
但是我需要有条件地连接中缀,例如
val andClause1= quote { (name: String) =>
infix"""AND name = $name """.as[Query[(Int, String)]]
}
val andClause2= quote { (name: String) =>
infix""" """.as[Query[(Int, String)]]
}
def andClauseCondition(i: String) =
if (!i.isEmpty) {
andClause1(i)
} else {
andClause2(i)
}
我称我的查询为
val rawQuery = quote { (id: String, name: String) =>
infix"""SELECT id, name FROM my_entity WHERE id = $id ${andClauseCondition(name)}"""
.as[Query[(Int, String)]]
}
但我得到错误
Error:(231, 26) Tree 'andClauseCondition(name)' can't be parsed to 'Ast'
val rawQuery = quote { (id: String, name: String) =>
是否可以将一个或多个中缀附加到基本查询?如果是,这是附加的正确方法吗?