如何将MySQL JOOQ重命名表查询范围扩展到同一个数据库?

我有一个scala应用程序来管理多个MySQL数据库模式,其中包括修改(添加,重命名等)表.这些命令通过连接池发出,该连接池连接到数据库服务器中的通用管理数据库.

因为应用程序被设计为跨数据库,所以我使用JOOQ来呈现SQL查询(通过单独的JDBC模块执行).

我遇到了JOOQs的问题alterTable(…).renameto(…)DSL – 请考虑以下示例:

我们在数据库“TestDatabase”中有一个表“TestTable”.假设我想将该表简单地重命名为“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`重命名为`Foo`
但是,由于我正在使用的连接池连接到我的管理数据库,它只是将表重命名为“Foo”并将其移动到我的管理数据库.我原以为sql应该是:ALTER TABLE`TestDatabase“TestTable`重命名为`TestDatabase“Foo`.我尝试了各种替代方法调用.renameto方法并将其设置为使用完全限定名称,但无济于事:

> .renameto(table(name(…) – >相同的行为.
> .renameto(“`TestDatabase` .Foo`”) – >使用反引号转义名称,将其视为一个名称而不是限定名称.

我想知道我是否遗漏了某些东西,如果这是预期的行为,或者甚至是JOOQ的错误或设计缺点.

有没有办法使用完全限定名称重命名表?

谢谢!

解决方法:

这是jOOQ:https://github.com/jOOQ/jOOQ/issues/8042中的一个错误

你的解决方法很接近.这不起作用:

.renameto("`TestDatabase`.`Foo`")

正如您已经注意到的那样,在幕后,DSL.name()API用于包装目标名称,因为renameto()方法不实现plain SQL templating API.但是,您可以通过写入明确使用纯sql模板作为一种解决方法

.renameto(table("`TestDatabase`.`Foo`"))

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...