Я только что потратил часы на это.Я пытаюсь сделать довольно сложный запрос в PostgreSQL через Slick в Scala, но Slick НИКОГДА не учитывает ни один из моих параметров.Если я попробую что-то простое, например:
def get(location: String) = {
val query = sql"select * from cities_v where name = $location limit 10"
println(query.toString)
}
Вывод будет:
SQLActionBuilder(Vector(select * from cities_v where name = ? limit 10),<function2>)
Если вместо этого я попытаюсь вставить буквенное значение:
def get(location: String) = {
val query = sql"select * from cities_v where name = #$location limit 10"
println(query.toString)
}
вывод будет:
SQLActionBuilder(Vector(select * from cities_v where name = , ville, limit 10),<function2>
Slick ВСЕГДА будет добавлять запятые вокруг любого литерального аргумента, независимо от того, где он находится, даже если это единственный аргумент в запросе, например:
sql"#$q"
Теперь я хотел бы сделать более сложные запросы с вычислениями и вызовами функций в Postgres.Но я нигде не могу понять, что Slick не позволит мне использовать ни одну из моих переменных.
Я пытался установить всевозможные последствия, некоторые из которых расширяют GetResult
некоторые расширяют StatementParameters
, кажется, Slickигнорировать все из них и либо заменяет мои аргументы на ?
, либо окружает их запятыми, тем самым делая все мои запросы недействительными.Я хотел бы добавить, что #$
не очень хорош, потому что он не обеспечивает дезинфекцию.Я бы хотел придерживаться Slick, потому что он асинхронный, но я не уверен, куда идти.
Это мои номера версий, согласно build.sbt
:
"postgresql" % "postgresql" % "9.1-901-1.jdbc4",
"com.typesafe.slick" % "slick_2.12" % "3.2.3",
Что я делаю не так?