摘要:
一直以来秉持一个观点,不但要将事情做正确,更要用正确的方式做事.
由此而来的就是对于思路的追踪,并根据思路追踪的反馈, 调整下一步的思路.
本文记录mysql列存储引擎下,当在谓词or的场景,出现a=1时的遇到查询错误,对其进行修复.
DML:
CREATE TABLE t1 (a INT NOT NULL, b INT)engine=tianmu;
INSERT INTO t1 VALUES (1, 1),(1,2),(1,3);
select * from t1 where 1=1 and 1=1 or b>2;
CREATE TABLE t1 (a INT NOT NULL, b INT)engine=tianmu;
INSERT INTO t1 VALUES (1, 1);
SELECT * FROM t1 WHERE (a=a AND a=a) OR b > 2;
解决思路追踪:
一. 定位是否是列存储引擎层转换语法树出错
将排除列存储引擎转换语法树放在第一个要定位的,原因在于
- 可以直接将逻辑分割为mysql/sql层逻辑,与列存储引擎逻辑,两个部分
- 列存储引擎有一个可以输出的语法树, 逻辑相较代码比较清晰,