问题描述
二进制字符串位运算的操作数长度不等时,MO 能识别该用户输入无效,却以 20101 internal error 返回。该错误不表示服务器内部状态异常,而是 MySQL 定义的可预期语义校验错误。
环境
- MatrixOne:
main@6875e4203519de1ed98b842c1cbc8c57f11dc326
- 对照: MySQL 8.3.0
复现
SELECT HEX(_binary X'01' & _binary X'0001');
SELECT HEX(_binary X'01' | _binary X'0001');
SELECT HEX(_binary X'01' ^ _binary X'0001');
MO 对三种运算均返回:
ERROR 20101 (HY000): internal error:
Binary operands of bitwise operators must be of equal length
MySQL 返回:
ERROR 3513 (HY000): Binary operands of bitwise operators must be of equal length
9 组长度组合和三个操作符的矩阵中,等长输入结果均与 MySQL 相同;所有不等长输入都保留了相同文字但被包装为 internal error。表列路径亦相同。
初步定位与预期
pkg/sql/plan/function/func_compare.go 的三个 binary-string 位运算实现对长度不等调用 moerr.NewInternalErrorNoCtx。应改用表示用户可恢复输入错误的错误码/类别,并尽可能与 MySQL 3513 语义对齐;客户端不应将正常参数校验误判为服务端故障。
问题描述
二进制字符串位运算的操作数长度不等时,MO 能识别该用户输入无效,却以
20101 internal error返回。该错误不表示服务器内部状态异常,而是 MySQL 定义的可预期语义校验错误。环境
main@6875e4203519de1ed98b842c1cbc8c57f11dc326复现
MO 对三种运算均返回:
MySQL 返回:
9 组长度组合和三个操作符的矩阵中,等长输入结果均与 MySQL 相同;所有不等长输入都保留了相同文字但被包装为 internal error。表列路径亦相同。
初步定位与预期
pkg/sql/plan/function/func_compare.go的三个 binary-string 位运算实现对长度不等调用moerr.NewInternalErrorNoCtx。应改用表示用户可恢复输入错误的错误码/类别,并尽可能与 MySQL 3513 语义对齐;客户端不应将正常参数校验误判为服务端故障。