Мне нужно написать простые 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) =>
Можно ли добавить один или несколько инфиксов в базовый запрос? Если да, это правильный способ добавления?