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

时间:2014-12-04 10:36:32

标签: 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);

生成的语句是:

SELECT 
   id, 
   type, 
   request.id, 
   UPPERCASE, 
   lowercase
FROM MyTable
LIMIT 1000

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

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

1 个答案:

答案 0 :(得分:3)

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

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

创建Name
  

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

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