Skip to content

Conversation

@huajianxiaowanzi
Copy link
Contributor

@huajianxiaowanzi huajianxiaowanzi commented May 23, 2025

关联的 issue

#3049

描述你的变更

  • 简化类型判断逻辑:将对常量类型的判断(parserdriver.ValueExpr)由原来的 Datum.Kind() 方式,统一改为直接取 node.Type.Tp。
  • 增加了整数类型宽松判断:对于比较类型不同的场景,如果两个类型都属于整数类型(如 tinyint, int, bigint 等),则认为通过,不再报违规。
  • 新增了单元测试:将issue中误触发的sql加入测试用例

确认项(pr提交后操作)

Tip

请在指定复审人之前,确认并完成以下事项,完成后✅


  • 我已完成自测
  • 我已记录完整日志方便进行诊断
  • 我已在关联的issue里补充了实现方案
  • 我已在关联的issue里补充了测试影响面
  • 我已确认了变更的兼容性,如果不兼容则在issue里标记 not_compatible
  • 我已确认了是否要更新文档,如果要更新则在issue里标记 need_update_doc

@CLAassistant
Copy link

CLAassistant commented May 23, 2025

CLA assistant check
All committers have signed the CLA.

@ColdWaterLW ColdWaterLW requested a review from BugsGuru June 17, 2025 02:53
Comment on lines -134 to -159
switch node.Datum.Kind() {
case types.KindInt64, types.KindUint64:
return mysql.TypeLong, nil
case types.KindFloat32, types.KindFloat64:
return mysql.TypeDouble, nil
case types.KindString:
return mysql.TypeVarchar, nil
case types.KindBytes:
return mysql.TypeBlob, nil
case types.KindBinaryLiteral:
return mysql.TypeBit, nil
case types.KindMysqlDecimal:
return mysql.TypeNewDecimal, nil
case types.KindMysqlDuration:
return mysql.TypeDuration, nil
case types.KindMysqlTime:
return mysql.TypeDatetime, nil
case types.KindMysqlEnum:
return mysql.TypeEnum, nil
case types.KindMysqlSet:
return mysql.TypeSet, nil
case types.KindMysqlJSON:
return mysql.TypeJSON, nil
default:
return 0, fmt.Errorf("不支持的常量类型: %d", node.Datum.Kind())
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我们来理解一下这一条规则的用意:
在 MySQL 中,禁止WHERE子句中条件字段与值的数据类型不一致的一个原因有一些:

  1. 避免隐式类型转换带来的性能问题:SELECT * FROM users WHERE user_id = '123'; -- 索引失效
  2. 导致结果不准确或难以预料:SELECT * FROM users WHERE name = 123; -- 结果可能是错误的

从原始的代码上看,如:types.KindInt64, types.KindUint64,这两种类型都被认为是同一种,需要确认:

  1. 整数类型之间的比较一定不产生隐式转换吗?
@winfredLIN winfredLIN requested review from winfredLIN and removed request for BugsGuru June 17, 2025 07:51
@winfredLIN winfredLIN changed the title FIX:rule_00112 中bigint和整数误触发 fix:rule_00112 中bigint和整数误触发 Jun 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

4 participants