В нашем проекте мы используем Grails в качестве веб-фреймворка, Oracle db для развертывания и HSQLDB для разработки и тестирования.В некоторых запросах используются специальные функции Oracle, такие как TRUNC или TO_DATE, к сожалению, HSQLDB не поддерживает их.Таким образом, это означает, что мы не можем создавать интеграционные тесты без некоторой предварительной работы.
HSQLDB имеет поддержку хранимых функций, написанных на Java, поэтому я собираюсь имитировать TRUNC и TO_DATE путем написания хранимых функций Java.Например, TRUNC можно определить так:
CREATE FUNCTION TRUNC(v DOUBLE) RETURNS INT
LANGUAGE JAVA DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.Math.floor'
И это работает.Потому что стандартный Java-класс Math находится на пути к классу сервера HSQLDB.Для функции to_date нет стандартной функции Java, поэтому мне нужно написать свою собственную.Нет проблем, скажем, он называется - to_date и находится в классе com.stackoverflow.HSQLDBOracleSupport.Когда мне нужно выполнить такой запрос
CREATE FUNCTION TO_DATE(d VARCHAR, format VARCHAR) RETURNS DATE
LANGUAGE JAVA DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:com.stackoverflow.HSQLDBOracleSupport.to_date'
Проблема в том, что я не знаю, где мне разместить мой HSQLDBOracleSupport.class.Документация говорит, что это должно быть "на пути к классу сервера hsqldb".Но какой путь к классу используется?Как я могу настроить DataSource в Grails, чтобы указать путь к классу hsqldb?