内部結合されている派生テーブル内で Order by を実行しているクエリがあります。
元:
SELECT g.*
FROM (
SELECT ...
FROM ...
ORDER BY alias.some_column
LIMIT 0, 20
) as g
... # other joins
これは MySQL では正常に機能しますが、HSQLDB では失敗します。ここで順序を指定する理由は、外部クエリに ORDER BY を配置するよりも mysql の方がはるかに高速だからです。それは純粋なパフォーマンスの勝利です。ただし、HSQLDB は不平を言っています。
これは例外です:
WARN JDBCExceptionReporter:100 - SQL Error: -70, SQLState: 37000
ERROR JDBCExceptionReporter:101 - Cannot be in ORDER BY clause in statement [SELECT g.* FROM gallery g LEFT OUTER JOIN preview p ON p.id = g.preview_id INNER JOIN ( SELECT g.id, g.date_created FROM gallery g WHERE g.published = true ORDER BY g.date_created DESC LIMIT 0, 20 ) as g_ids on g_ids.id = g.id ]
私のテストでは HSQLDB を使用していますが、本番システムは MySQL であるため、これは大きな問題です。これらのテストを「例外」として移動し、mysql に対して実行することもできますが、はるかに遅くなります...そして、テストに合格するためだけに本番システムを遅くすると、テストのポイントが無効になります。
すべてに hsqldb を一括して使用するのではなく、一部のテストに mysql を使用するようにテストを再構築することもできます...これは私にとって大きなテスト フレームワークの変更です。hsqldb を正常に動作させる方法はありますか、それともテスト フレームワークを改善する必要がありますか?
ありがとう!