Как эмулировать нотацию внешнего соединения Oracle (+) в базе данных в памяти, используемой для запуска модульных тестов Java?

Мы используем HSQLDB с синтаксисом базы данных Oracle (jdbc: hsqldb: mem: TestDB; sql.syntax_ora = true) для наших модульных тестов уровня данных.

(Мы понимаем, что это не идеально, и было бы лучше, если бы мы могли протестировать реальную базу данных Oracle. Однако это не вариант, поскольку мы хотим быть уверены, что можем запускать наши автоматизированные тесты где угодно. На более позднем этапе все запросы также тестируются в интеграционных тестах на реальной базе данных Oracle, которая настроена аналогично производственной базе данных.)

Есть ли способ поддержать нотацию Oracle external join (+) для запросов с HSQLDB?

По моему мнению, мы должны использовать не обозначение (+), а стандартное обозначение внешнего соединения. Однако ребята, отвечающие за настройку запросов, используют эту нотацию, поэтому общение с ними станет более трудным / подверженным ошибкам. Хотя это может быть вариантом, если решение не найдено, вопрос не в этом.

Я нашел следующую тему: http://comments.gmane.org/gmane.comp.java.hsqldb.user/5756 С упомянутым там патчем QueryRewrite у меня была бы необходимая ловушка для самостоятельной обработки (+), но этот интерфейс так и не попал в официальный выпуск HSQL.

Есть ли другой способ решения этой проблемы для HSQL?

Мы могли бы добавить перезапись запроса где-нибудь в самих наших модульных тестах (а не на уровне тестовой базы данных), но было бы лучше, если бы мы могли этого избежать.

Если для HSQL нет обходного пути, существует ли какая-либо другая база данных / база данных в памяти, запускаемая из jar-файла, которая поддерживает эту (+) нотацию внешнего соединения?


person Integrating Stuff    schedule 21.05.2013    source источник


Ответы (2)


Думаю, вы уже процитировали все «легкие» возможности в своем вопросе.

Таким образом, единственный оставшийся подход - это переписать запрос в вашем коде перед его отправкой в ​​HSQLDB.

Должно быть проще написать запросы, не используя нотацию (+), а затем переписать их (с помощью сценария) для ваших настройщиков базы данных. Это переписывание должно быть проще, чем в другом направлении, потому что стандартная нотация несет в себе больше информации в своей структуре.

person Beryllium    schedule 22.05.2013

Просто не используйте это. Были времена, когда оптимизатор Oracle обрабатывал эти два синтаксиса по-разному. С 11g все закончилось, и нет причин настаивать на этом синтаксисе.

Но в любом случае Oracle имеет другие улучшения синтаксиса SQL - например, аналитические запросы. Возможно, вам стоит использовать OracleXE для ваших автоматических тестов.

person ibre5041    schedule 22.05.2013