Grails: указание пути к классу для hsqldb

#oracle #grails #grails-orm #hsqldb

#Oracle #grails #grails-orm #hsqldb

Вопрос:

В нашем проекте мы используем 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». Но какой путь к классу используется? Как я могу настроить источник данных в Grails, чтобы указать путь к классу hsqldb?

Комментарии:

1. Последняя версия HSQLDB 2.2.5 поддерживает как функции TRUNC, так и TO_DATE.