как использовать hsqldb и SET DATABASE SQL РЕГУЛЯРНЫЕ ИМЕНА - PullRequest
0 голосов
/ 14 октября 2019

У меня обычно есть необходимость смоделировать производственную базу данных с базой данных в памяти. Производство mysql , и я пытаюсь использовать hsqldb , чтобы смоделировать его, используя Spring Boot для обработки замены. Все это прекрасно работает, включая поиск сценариев flyway и их запуск. Проблема, с которой я столкнулся, возникает во время запуска сценариев flyway . Кто-то в прошлом решил назвать одну из таблиц mysql"_show", и mysql , кажется, вполне доволен этим. Hsqldb не счастлив. Я нашел ссылки на некоторые настройки, которые утверждают, что решают эту проблему, но они, кажется, не имеют никакого значения. Вот как выглядит мой сценарий:

SET DATABASE SQL NAMES FALSE
SET DATABASE SQL REGULAR NAMES FALSE

CREATE TABLE _show (
  id bigint(20) NOT NULL,
...

С этим на месте я получаю:

org.hsqldb.HsqlException: unexpected token: _SHOW

, когда flyway пытается выполнить сценарий. Я попытался поместить двойные кавычки вокруг имени таблицы и на этот раз получил другую ошибку об открытой скобке, и я попытался поэкспериментировать с обратной косой чертой, чтобы процитировать подчеркивание. Не повезло. Я думаю, что я как-то неправильно использую флаги SET DATABASE ..., но я не могу найти никаких примеров их использования, просто документы, которые говорят, что я делаю это правильно.

Я использую org.hsqldb: hsqldb: 2.5.0

Спасибо за любую помощь

1 Ответ

1 голос
/ 14 октября 2019

Операторы SET отлично работают в версии 2.5.0 и позволяют создавать таблицы _SHOW. Объявление BIGINT (20) несовместимо и должно быть BIGINT для HSQLDB.

Вы можете использовать менеджер баз данных HSQLDB и выполнить SQL вручную, по одному состоянию за раз, в базе данных mem:, чтобы увидеть, чтовызывая проблемы. Если указанные вами операторы выполняются в одном блоке, команда SET не вступает в силу до компиляции CREATE.

...