Я пишу интеграционное тестирование, и я хочу протестировать свои SQL-запросы с помощью базы данных H2. В производстве эти запросы работают с базой данных Oracle.Сделать функцию Oracle last_day совместимой с базой H2
Я должен выполнить этот запрос
меня пытается использовать режим совместимости
SELECT last_day(MY_CURRENT_DATE) from MY_TIME
, используя режим совместимости оракул jdbc:h2:mem:default;MODE=Oracle;DB_CLOSE_DELAY=-1
но я получаю эту ошибку:
org.h2.jdbc.JdbcSQLException: Function "LAST_DAY" not found; SQL statement:
SELECT last_day(MY_CURRENT_DATE) from MY_TIME [90022-176]
It просто кажется, что режим совместимости не распространяется на специфические для вендора функции.
У меня есть идея, как решить эту проблему при тестировании. Просто переопределить last_day
функцию Oracle с H2 определенной пользователем функции:
DROP ALIAS IF EXISTS last_day;
CREATE ALIAS last_day AS $$
String last_day(java.sql.Connection con, Date date) throws Exception {
//get the last day of month
}
}
$$;
Но мне интересно, если это лучшая идея? Есть ли способ переписать функцию Oracle LAST_DAY
(которая вычисляет последний день месяца) таким образом, который совместим со всеми другими базами данных (включая H2)?
Еще один хороший пример того, почему использование другой СУБД для тестирования тогда в производстве - это не очень хорошая идея. –
Я бы использовал базу данных в памяти, а не ту, которую я использую в производстве. Это потому, что я хочу, чтобы мои интеграционные тесты работали быстро. – Alex
Fast не покупает вам ничего, если тест бессмыслен –