【发布时间】:2021-07-01 16:43:27
【问题描述】:
我正在尝试在每个 jOOQ 生成的 sql 语句中添加一个分号 ;,因为我正在编写多个 DDL 并将语句插入输出文件。
我在这里发现了一个类似的问题,建议在此处使用ExecuteListener https://jooq-user.narkive.com/6adKecpt/adding-semicolon-at-the-end-of-sql-statement。
我现在的设置如下(使用 Groovy):
private DSLContext createDSLContext() {
def configuration = new DefaultConfiguration()
configuration.settings = new Settings()
.withRenderFormatted(true)
.withRenderKeywordCase(RenderKeywordCase.LOWER)
.withRenderQuotedNames(RenderQuotedNames.ALWAYS)
.withStatementType(StatementType.STATIC_STATEMENT)
configuration.set(
new DefaultExecuteListenerProvider(new DefaultExecuteListener() {
@Override
void renderEnd(ExecuteContext ctx) {
ctx.sql(ctx.sql() + ";")
}
}),
new DefaultExecuteListenerProvider(new DefaultExecuteListener() {
@Override
void start(ExecuteContext ctx) {
println "YEAH!!!"
}
}))
// return configuration.dsl();
return DSL.using(configuration)
}
但没有添加分号,也根本没有进入renderEnd 方法。
我添加了另一个执行侦听器以在开始时打印一些内容(正如我在其他示例中看到的那样),但它也从未被调用..
我的代码如下:
file.withWriter { writer ->
// Drop schema objects.
DEFAULT_SCHEMA.tables.each {
switch (it.type) {
case TABLE:
writer.writeLine(dsl.dropTableIfExists(it).SQL)
break
case VIEW:
writer.writeLine(dsl.dropViewIfExists(it).SQL)
break
}
}
writer.writeLine("")
// Create schema objects.
def ddlStatements = dsl.ddl(DEFAULT_SCHEMA)
ddlStatements.each {
writer.writeLine(it.SQL)
writer.writeLine("")
}
// Insert data.
def insert = dsl.insertInto(Tales.CUSTOMER).columns(Tales.CUSTOMER.fields())
customers.each {insert.values(it) }
writer.writeLine(insert.SQL)
}
【问题讨论】: