私はこれに何時間も費やしました。Scala で Slick を使用して PostgreSQL でかなり複雑なクエリを作成しようとしていますが、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 が私の変数を一切使用させてくれないので、どこにもたどり着けません。
Slickはそれらをすべて無視するようで、引数をコンマで置き換えるかGetResult
コンマで囲み、すべてのクエリを無効にします。サニタイズを提供しないため、あまり良くないことを付け加えておきます。非同期なので Slick を使い続けたいと思っていますが、ここからどこへ行くべきかわかりません。StatementParameters
?
#$
によると、これらは私のバージョン番号ですbuild.sbt
:
"postgresql" % "postgresql" % "9.1-901-1.jdbc4",
"com.typesafe.slick" % "slick_2.12" % "3.2.3",
私は何を間違っていますか?