2009-05-10 3 views
1

このクエリを取る:テスト

SELECT * 
    FROM MyTable 
    WHERE MyColumn = 'SomeValue' 
ORDER BY SomeFakeQualifier.MyColumn DESC 

それのSQLServerはちょうどこの場合の修飾子を無視しているようです。 JOINを追加すると、それが考慮されます。

DBMSベンダー間でクエリを実行可能にするまでは、これは問題ではありません。例えば、オラクルは、修飾子が無効であると正当な理由で不平を言うでしょう。

はい、私たちはこれを大量に排除するORMを使用していますが、まだいくつかのアクション(製品の性質と動的クエリのサポート)ではJDBCが必要です。こののため、実際にはです。この問題が発生しました。誰かがJPAという名前のクエリをJDBC提供のクエリにコピーしましたが、テーブル名ではなくオブジェクト名のままでした。

だから、私は質問があると思います。もしそうなら、あなたのコードをテストして、「主要な3つの」DBMS(SqlServer、Oracle、DB2)で動作することを確認する最良の方法は何ですか?私たちにはQAチームがいますが、これらの特異性の単体テストにはもっと良い方法があるはずです。

注意、我々は常に問題を回避するために、ANSI SQLの書き込みを強制しようとしますが、いくつかのもの、前述の問題のように、私は、これは理にかなって願っています

をすり抜けることができます。必要に応じてより多くの文脈を提供することができます。ここ

TIA

答えて

1

あなたのソリューションは本当にcontinuous integrationと組み合わせて、クエリのユニットテストです。 JDBCコードの形式でクエリがあります。関連するデータベースに接続するための単体テストを書くだけで簡単です。あなたが話している標準である結果を気にしなくても、少なくとも実行しているかどうかを確認できるようにクエリを実行します。

これを拡張してパフォーマンスや結果を測定することは間違いありませんが、これらの種類のテストは非常に脆弱であり、必然的に多くの変更が発生すると非常に迅速に破損することがあります。

関連する問題