У меня есть приложение scala, которое управляет несколькими схемами баз данных MySQL, которые включают в себя изменение (добавление, переименование и т. Д.) Таблиц. Команды выдаются через пул соединений, который подключается к общей базе данных управления на сервере базы данных.
Поскольку приложение разработано для работы с несколькими базами данных, я использую JOOQ для рендеринга SQL-запросов (выполнение выполняется через отдельный модуль JDBC).
У меня проблемы с JOOQ alterTable(...).renameTo(...)
DSL - рассмотрим следующий пример:
У нас есть таблица «TestTable» в базе данных «TestDatabase». Допустим, я хочу переименовать эту таблицу просто в «Foo», оставив ее в «TestDatabase».
Этот код:
...
val context = DSL.using(SQLDialect.MYSQL_5_7)
val query = context
.alterTable(table(name("TestDatabase", "TestDatabase")))
.renameTo(name("TestDatabase", "Foo"))
...
Генерирует: ALTER TABLE `TestDatabase`.`TestTable` RENAME TO `Foo`
Однако, поскольку пул соединений, который я использую, подключен к моей базе данных управления, он просто переименовывает таблицу в «Foo» и перемещает ее в мою базу данных управления. Я ожидал, что SQL будет: ALTER TABLE `TestDatabase`.`TestTable` RENAME TO `TestDatabase`.`Foo`
. Я пробовал множество альтернатив, чтобы вызвать метод .renameTo
и убедить его использовать полное имя, но безрезультатно:
.renameTo(table(name(...)
-> такое же поведение.
.renameTo("`TestDatabase`.`Foo`")
-> Экранирует имя с помощью обратных кавычек, обрабатывает его как одно имя вместо квалифицированного имени.
Мне интересно, что я что-то упускаю, это предполагаемое поведение, или, может быть, даже ошибка или недостаток дизайна JOOQ.
Есть ли способ переименовать таблицу, используя полные имена?
Спасибо!