У меня есть HQL-запрос, который не выполняется в PostgreSQL, так как предложение order by содержит неоднозначную ссылку на столбец. Я понимаю причину проблемы и как ее устранить, однако модульные тесты, проверяющие один и тот же запрос и порядок по пунктам, проходят без ошибок при работе с базой данных HSQLDB в памяти. Я хочу убедиться, что все мои модульные тесты, выполняющиеся на HSQLDB в сборках CI, не будут работать, если они столкнутся с похожими проблемами в других запросах.
Чтение руководства HSQLDB (http://hsqldb.org/doc/2.0/guide/guide.pdf) показывает, что есть несколько настроек, которыеотключено по умолчанию, где их включение будет принудительно проверять соответствие объекта и запросов БД стандартам SQL.
Я считаю, что мне нужно установить значение sql.enforce_refs=true
в URL-адресе подключения JDBC, чтобы тест не прошел, когдавстречается неоднозначная ссылка.
Я обновил свой URL, теперь он выглядит следующим образом.
jdbc.url=jdbc:hsqldb:mem:testdb;shutdown=false;sql.enforce_refs=true;sql.restrict_exec=true;sql.enforce_type=true
(Примечание: я также включил sql.enforce_names=true
, но это вызвало многосбоев, которые я еще не исследовал).
Проблема, с которой я столкнулся, заключается в том, что даже с этими настройками в URL-адресе подключения тесты продолжают проходить. Похоже, HSQLDB не выполняет проверку. IЯ не обнаружил никаких проблем, связанных с этим параметром, и я использую последнюю версию HSQLDB (в настоящее время 2.5.0).
Моя проблема в том, что я хочу применить эту проверку viпараметр URL-адреса подключения, чтобы обнаружить эти проблемы в то время, когда сборка CI выполняет модульные тесты, и кажется, что параметр не работает, поэтому я хотел бы знать, является ли это известной проблемой илисделал что-то не так, или если кому-то еще удалось включить эту проверку по-другому? (Я действительно не хочу выполнять команду SET DATABASE...
, чтобы включить эту проверку).
Большое спасибо, Роб
Редактировать: 4/11/19
Пример SQL включен, чтобы помочь с решением проблем. Обратите внимание, что моя проблема не в этом SQL, а в использовании параметров в строке подключения HSQLDB для обнаружения такого рода проблем SQL при выполнении тестов в сборке CI.
select
f.ID as ID1_98_,
f.PROP_A as PROP_A2_98_,
f.CLOSE_DATE as CLOSE_DA3_98_,
from
FOO f
left outer join
FOO_SUB_TYPE fst
on f.FOO_SUB_TYPE_FK=fst.ID
left outer join
FOO_TYPE ft
on fst.ID=ft.ID
where
?=f.WIBBLE_FK
order by
id ASC nulls last
SQL генерируетсяиз Hibernate HQL, как показано ниже:
from Foo f
left outer join f.fooSubType as fst
where (:wibbleId = f.wibble.id)
Я не являюсь автором HQL / SQL (за исключением изменения имен таблиц / классов сущностей здесь), и, на мой взгляд, left outer join
не требуется. Как я уже сказал, SQL на самом деле не очень важен, проблема заключается в том, чтобы обнаружить проблему неоднозначных ссылок в SQL / HQL (которых в кодовой базе много).