# 本次修改一下bug,同时回归禅道上存在的之前未关闭bug，bug关键字已被修改为 `v11hotfix` 
# 修复 `bug3642` tag-why 2018-12-22 merge bysdc@20201221 lwb@20200909 bysdc@20201228
- [原因分析]：

  设计缺陷

- [修复方案]：

  修改 HashGroup 扫描器细化处理空和空串的分组处理

  xugu.ini 中empty_str_as_null = false 时 空和空串作为两个分组项输出(空值分组和空串分组)

  xugu.ini 中empty_str_as_null = true  时 空和空串作为一个分组项输出(空值分组)

  empty_str_as_null 参数在线设置无效，需要修改xugu.ini文件后重启数据库生效

  [遗留问题] grouping 并未处理
  
- [影响功能]：

  1.group by 查询

- [回归建议]：

  1.新增测试用例覆盖影响功能，分组字段覆盖1-n个，分组字段值包含空、空串和正常值

  2.覆盖普通查询和 parallel 查询

# 修复 `bug3177` tag-bysdc@20201222 forbug3177
- [原因分析]：

  支持 `update set (多字段) = select 字段 ...` 语法时 解析查询时忽略了 update 语句中所有子查询的字段数检测，导致执行阶段出现内存访问错误

- [修复方案]：

  对 `update set (多字段) = select 字段 ...` 中set 部分的子查询特殊处理为解析查询时不检测字段个数，延迟到解析更新目标列目标列时检测，其他子查询依然正常检测，以确保所有子查询输出字段和目标字段不匹配都可正常抛出错误 `16004`
  
  同时修改 `update set (多字段) = select 字段 ...` 的 prepare 方式执行时语句重写错误问题和 参数绑定错误问题
  
- [影响功能]：

  1.所有类型子查询(EXISTS/UNIQUE/IN/NOT IN/MATCH/UMINUS/多字段=SELECT/...)
  2.update 执行

- [回归建议]：

  1.覆盖 select 中所有类型子查询

  2.覆盖 update 的statement,prepare(含prepare_reuse和参数绑定)执行

  3.覆盖`update set (多字段) = select 字段 ...`以及`update set (多字段) = select 字段 ...where ....` where 条件后子查询

  # 修复 `bug3852` tag-bysdc@20201221 forbug3852
- [原因分析]：

  float和double类型中实现2参数ROUND函数返回值依然是浮点类型，返回浮点类型尾数不精确导致转换为字符串时异常
- [修复方案]：

  取消float和double类型中2参数ROUND函数，2参数ROUND函数由numeric类型实现
- [影响功能]：

  各种数字类型进行ROUND运算
- [回归建议]：

  覆盖各种数据类型的ROUND运算(含1参数和2参数)

  # 修复 `bug3801` tag-bysdc@20201221 forbug3801
- [原因分析]：

  sum 运算后结果是 numeric 类型，numeric 类型进行算数运算后结果即使等于0也可能带有负号， numeric 实现的比较函数对-0和0进行比较时返回值为不等，最终导致where条件中条件不等于0条件未完全生效
- [修复方案]：
  修正 numeric 比较函数，当比较两个值都为0时忽略符号直接返回相等
- [影响功能]：
  numeric 的比较(等于、大于，小于，不等于，大于等于，小于等于)
- [回归建议]：
  覆盖 多类场景下 numeric 的比较
  
  # 修复 `bug3599` tag-lwb@20200907 forbug3599 merge bysdc@20201221
- [原因分析]：
  设计缺陷
- [修复方案]：
  修改 numeric SIGN函数大于0返回1，等于0返回0，小于0返回-1
- [影响功能]：
  numeric SIGN函数
- [回归建议]：
  按用例回归

  # 修复 `bug3763` tag-bysdc@20201221 forbug3763
- [原因分析]：
  NVL2在 SQL 重写时2，3参数位置错误，导致返回结果不对
- [修复方案]：
  修复NVL2 SQL重写时2，3参数位置，同时修复prepare参数处理和explain verbose 中2，3参数顺序
- [影响功能]：
  NVL2出现在视图定义、prepare、explain verbose中
- [回归建议]：
  覆盖视图、prepare(含prepare_reuse和参数绑定)、explain verbose

  # 修复 `bug3486` bysdc@20201228 for bug3486
- [原因分析]：
  `max_temp_space_size` 是4字节int 单位MB 转换为Byte使用时 操作2GB发生越界
- [修复方案]：
  使用时将表空间上Byte除以1MB后和 `max_temp_space_size` 比较，防止 `max_temp_space_size` 乘以1MB越界问题
- [影响功能]：
  临时表空间最大值限制
- [回归建议]：
  按用例回归

  # 修复 `bug3759` bysdc@20201229 for bug3759
- [原因分析]：
  `compute_const_op` 接口中 para_vars 未初始化，后续程序使用未初始化参数出现内存访问异常
- [修复方案]：
  初始化 para_vars = {0}
- [影响功能]：
  常数 OP(like/||/contains/算数比较等操作) 常数
- [回归建议]：
  按用例回归

  注意操作符符合度用例是否完整，如不完整请安排补充

  # 新增功能
- 1.新增系统表 `SYS_FORBIDDEN_IPS` `SYS_ALL_FORBIDDEN_IPS` 支持对已禁用IP地址的查询




