在案例查询中显式转换枚举
Posted
技术标签:
【中文标题】在案例查询中显式转换枚举【英文标题】:Explicitly casting enum in case query 【发布时间】:2021-08-26 06:29:40 【问题描述】:我正在使用 jOOQ 构建 Postgres 查询(不过,查询不会使用 jOOQ 发送到数据库,它用于创建 vertx 使用的查询)。
查询包含一个带有“案例”的片段:
...
set "state" = case
when "theschema"."actions"."is_promoted" = true then 'OK'
else "theschema"."actions"."state"
end
查询失败
ERROR: "CASE types actions_state_enum and text cannot be matched"
解决方案是将 'OK' 转换为 actions_state_enum,类似于 'OK'::"theschema"."actions_state_enum"。
上面创建查询片段的代码如下所示:
DSL.iif(ACTIONS.IS_PROMOTED.isTrue(), ActionsStateEnum.OK, ACTIONS.STATE)
我找不到在代码中添加所需转换的方法。尝试使用 DSL.inline 添加自定义绑定但没有运气。
【问题讨论】:
ActionsStateEnum
是什么?手写的、自定义的枚举,还是代码生成器生成的枚举类型?
@LukasEder 这是 jooq 生成的枚举。实际上,我认为我找到了它不起作用的原因:dsl 上下文使用的是 static_statement 类型,使用prepared_statement 时,铸造是开箱即用的。
【参考方案1】:
这看起来像https://github.com/jOOQ/jOOQ/issues/5612。将尽快解决此问题。解决方法是使用显式生成强制转换的自定义数据类型绑定
【讨论】:
以上是关于在案例查询中显式转换枚举的主要内容,如果未能解决你的问题,请参考以下文章
是否执行了视图列集中的所有函数,即使它们没有在查询中显式引用?
SQL中显式Join Transitive Closure的优点是啥?
sequelize抛出错误方言需要在express js中显式定义