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

3
我正在使用jOOQ生成PlainSQL查询,大多数遵循ANSI SQL的规范。 如果我处理的是一个需要解析以验证其是否正确的SQL语句字段(我使用DSL.using(SQLDialect.DEFAULT).parser().parseField(sqlString)),但是从该字段生成的SQL应该使用平台本地的语法和关键字,该怎么办?
以字段TO_HEX(SHA256(CAST(userId AS string)))为例(注意,我已将DSLContext设置为忽略未知函数)。 当使用parseField解析并检查生成的SQL时,它会转换为to_hex(SHA256(cast(userId as varchar)))。然而,目标平台不支持varchar。是否有任何选项可以指定如何呈现类似于此的转换?我已经查阅了文档,但似乎找不到如何覆盖特定关键字/定义自己的方言的方法。

1
我已经提供了一个关于如何一般性地完成这个任务的答案。如果你对个别函数有具体的后续问题,我也很乐意在这里回答(最好是作为新的Stack Overflow问题)。 - undefined
谢谢 @LukasEder,我们会尝试你的方法并且会告诉你结果! - undefined
1个回答

2

你需要配置两个方言:

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

如果你需要支持解析器中的自定义语法,可以使用ParseListener SPI,它允许重写特定语法元素的输入/输出行为。你不能用它来重写所有内容,但至少对以下内容应该有效:

  • 字段表达式
  • 条件表达式
  • 表格表达式

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接