【标题】(请简要描述下实现的内容)
修复B库cast(unknown_type_expr as unsigned)函数返回结果与mysql不一致
【实现内容】:
修复B库cast(expr as unsigned)函数表达式为如'-1'这样的unknown类型时,对负值返回对应溢出的正整数没有告警信息。
具体规则为:
(1)非严格模式下,表达式expr的值范围是expr<0或expr>uint64_max时给出告警信息。当int64_min<=expr<0时取值为对应的正整数值;expr<int64_min截断为int64_min,并取值int64_min对应的正整数值;expr>uint64_max截断为uint64_max的值;否则返回对应的原数值。
(2)严格模式下,表达式expr的值范围是expr<int64_min或expr>uint64_max时给出报错信息。当int64_min<=expr<0时取值为对应的正整数值,并给出告警信息;否则返回对应的原数值。
另外对uint1/uint2/uint4的情况做了和uint8即unsigned类似的修改。
【根因分析】:
cast(expr as unsigned):expr为unknown类型,即字符型的数字时,类型转换通过text_cast_uint8处理,其中对产生告警和报错信息的数字的范围设置与mysql不一致。
【实现方案】:
当表达式为unknown类型,修改转换函数text_cast_uint8,按实现内容部分的说明修改产生告警/报错信息的数值范围,以和mysql表现保持一致。
【关联需求或issue】:
https://e.gitee.com/opengaussorg/dashboard?issue=I7OCNB
【开发自验报告】:

  1. 请附上自验结果(内容或者截图)
    输入图片说明
  2. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
    修改增加了uint_cast用例
  3. 是否涉及资料修改,如是,在docs仓库补充资料
  4. 是否考虑支撑升级和在线扩容等扩展场景
  5. 是否考虑异常场景/并发场景/前向兼容/性能场景
  6. 是否对其他模块产生影响

【其他说明】: