jOOQ PlainSQL 自定义关键字/自定义方言

问题描述 投票:0回答:1

我使用 jOOQ 生成 PlainSQL 查询,大部分遵循 ANSI SQL。 如果我正在处理某个字段的 SQL 语句,需要对其进行解析以验证它是否是正确的 SQL(我正在使用

DSL.using(SQLDialect.DEFAULT).parser().parseField(sqlString)
),但该字段生成的 sql 应使用平台本机语法和关键字,该怎么办?

考虑字段

TO_HEX(SHA256(CAST(userId AS string)))
的 SQL 语句示例(请注意,我已将
DSLContext
设置为忽略未知函数)。 当使用
parseField
解析它并检查生成的 SQL 时,它会被转换为
to_hex(SHA256(cast(userId as varchar)))
。然而,目标平台不支持
varchar
。是否有任何选项可以指定如何例如应该渲染这样的演员?我已经查看了文档,但我似乎找不到如何覆盖特定关键字/定义我自己的方言。

jooq
1个回答
0
投票

您应该配置 2 种方言:

  • 您传递给
    DSL.using()
    的方言(对应于
    Configuration.dialect()
    )是 output 方言,即您应该将其设置为您的目标方言
  • Settings.parseDialect
    input 方言。如果不支持您的方言,您可以保持不变。

如果您需要在解析器中支持自定义语法,可以使用

ParseListener
SPI,它允许覆盖某些语法元素的输入/输出行为。你不能用它来覆盖一切,但它至少应该适用于:

  • Field
    表情
  • Condition
    表情
  • Table
    表情
© www.soinside.com 2019 - 2024. All rights reserved.