HSQLDB 1.8 не может сделать заказ в производных таблицах? - PullRequest
0 голосов
/ 12 июля 2010

У меня есть запрос, в котором я выполняю заказ внутри производной таблицы, к которой внутреннее соединение присоединено.

Ex:

SELECT g.*
FROM (
    SELECT ...
    FROM ...
    ORDER BY alias.some_column
    LIMIT 0, 20
) as g
... # other joins

Это прекрасно работает в MySQL, но не работает в HSQLDB. Причина, по которой я разместил здесь порядок, состоит в том, что mysql намного быстрее, чем помещение ORDER BY во внешний запрос. Это чистая победа производительности. Однако 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, но это намного медленнее ... и замедление производственной системы только для того, чтобы тесты проходили, побеждает точку испытаний.

Я мог бы просто реструктурировать свои тесты, чтобы использовать mysql для некоторых тестов вместо общего использования hsqldb для всего ... и это большое изменение для меня. Так есть ли способ заставить hsqldb играть хорошо или мне нужно улучшить мою среду тестирования?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 июля 2010

Вместо изменения среды тестирования, один из вариантов - рассмотреть возможность использования более новой версии HSQLDB или другой базы данных Java.Есть Apache Derby (который, к сожалению, не поддерживает LIMIT) и ядро ​​базы данных H2.

0 голосов
/ 12 июля 2010

Я бы сказал, улучшите свои рамки тестирования. Всегда опасно писать на одной платформе и развертывать на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...