1

私はscalaqueryを使用してoracleサーバーとpostgresサーバーの両方に接続しています。この動作はOracleとPostgresの両方で発生していますが、Postgresでは有効な(そしてまだ正しくない)SQLのみです。

ある時点で、次の形式のscalaqueryでクエリを実行しています。

row.foo.bind == parameter.foo || row.foo inSetBind parameter.foo.children

パラメータは特性であり、その中にfooが含まれていることが知られています。

ここでの問題は、実行される最大100のクエリのうち、scala-queryが正しいSQLを1回だけ生成することです。

...
WHERE row.foo = ? or row.foo in (?, ?, ?, ?, ?)
...

ほとんどの場合、代わりに生成されます

...
WHERE row.foo = ? or false
...

なぜこれが一貫して発生しないのですか、それはバグですか(私はそれがそうであると思います)、そしてどのようにそれを回避するのですか?

4

1 に答える 1

1

ほとんどの場合、parameter.foo には子要素がないため、クエリが空のセットを参照していたことが判明しました。

これは有効な SQLでWHERE row.foo IN ()はないため、代わりに として書き出されましたfalse

falseこれにより、コードが oracle DB を対象としているにもかかわらず生成されるという問題が残りますが、根本的な原因は解決されました。

于 2012-06-01T15:06:08.700 に答える