无法在 JOOQ 中设置引用样式 (RenderNameStyle.QUOTED)

DCS*_*DCS 5 java jooq

我想让 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);
Run Code Online (Sandbox Code Playgroud)

生成的语句是:

SELECT 
   id, 
   type, 
   request.id, 
   UPPERCASE, 
   lowercase
FROM MyTable
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

它输出Quoted: true,因此标志似乎已设置。虽然renderFormatted并且renderKeywordStyle似乎受到尊重,但 `renderNameStyle` 似乎被忽略了。

我正在试验一个不受支持的数据库,因此是 SQL99。附带问题:为什么 JOOQ 中不推荐使用 SQL99?

Luk*_*der 4

这些DSL.field(String)方法用于将“纯 SQL”嵌入到 jOOQ 中。jOOQ 不会解析您的 SQL 字符串,因此不知道您认为哪些部分是“名称”,例如 type、 或requestid

如果您不想使用代码生成器,则应使用DSL.field(Name)创建名称受RenderNameStyle设置影响的字段。Name可以使用创建DSL.name(String...)

我正在尝试使用不受支持的数据库,因此使用 SQL99。附带问题:为什么 JOOQ 中不推荐使用 SQL99?

因为这个名字有误导性。jOOQ 并没有真正生成 SQL99,因为没有集成测试来验证输出是否真正正确或根据标准有意义。在 jOOQ 的未来版本中,SQL99将被DEFAULT方言取代,该方言可能不适用于任何数据库。