无法在 JOOQ 中设置引号样式(RenderNameStyle.QUOTED)
2014-12-04
1135
我想让 JOOQ 渲染带引号的列名。这是我尝试过的,阅读文档和 StackOverflow:
DSLContext sql = DSL.using( SQLDialect.SQL99,
new Settings()
.withRenderNameStyle(RenderNameStyle.QUOTED)
.withRenderFormatted(true)
.withRenderKeywordStyle(RenderKeywordStyle.UPPER)
);
System.out.println( "Quoted: " + (sql.settings().getRenderNameStyle()==RenderNameStyle.QUOTED) );
Table<Record> table = table("MyTable");
Field<Long> lid = field("id",Long.class);
String sqlStr = sql.renderInlined(
sql.select( lid, field("type"), field("request.id"), field("UPPERCASE"), field("lowercase") )
.from(table)
.limit(1000)
);
System.out.println(sqlStr);
生成的语句是:
SELECT
id,
type,
request.id,
UPPERCASE,
lowercase
FROM MyTable
LIMIT 1000
它输出
Quoted: true
,因此标志似乎已设置。
虽然
renderFormatted
和
renderKeywordStyle
似乎受到尊重,但 `renderNameStyle`` 似乎被忽略了。
我正在尝试使用不受支持的数据库,因此使用 SQL99。 附带问题:为什么 JOOQ 中弃用 SQL99?
1个回答
DSL.field(String)
方法用于将“纯 SQL”嵌入 jOOQ。 jOOQ 不会解析您的 SQL 字符串,因此不知道您将哪些部分视为“名称”,例如
type
、
request
和
id
。
如果您不想使用代码生成器,您应该使用
DSL.field(Name)
来创建其名称受
RenderNameStyle
设置影响的字段。
Name
可以使用
DSL.name(String...)
I'm experimenting with an unsupported database, therefore the SQL99. Side question: Why is SQL99 deprecated in JOOQ?
创建,因为名称具有误导性。jOOQ 并未真正生成 SQL99,因为没有集成测试来验证输出是否确实正确或符合标准。在 jOOQ 的未来版本中,
SQL99
将被
DEFAULT
方言取代,该方言可能不适用于任何数据库。
Lukas Eder
2014-12-04