2022-10-18 stonedb-谓词or的a=a和1=1错误修复-思路记录

本文记录了在stonedb列存储引擎中,处理DML查询时遇到的谓词or错误,特别是a=1这类条件导致的问题。通过追踪定位,发现在MySQL/SQL层等值谓词被优化掉,但在列存储引擎层未正确处理,导致语义错误。解决思路涉及理解语法树节点和等值谓词的去除过程,并提出了在SQL层优化后补充恒为真的谓词条件来避免逻辑冗余的方法。目前,仍在进行查询执行结果的校验和优化剩余的谓词判定问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:

一直以来秉持一个观点,不但要将事情做正确,更要用正确的方式做事.

由此而来的就是对于思路的追踪,并根据思路追踪的反馈, 调整下一步的思路.

本文记录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;

解决思路追踪:

一. 定位是否是列存储引擎层转换语法树出错

将排除列存储引擎转换语法树放在第一个要定位的,原因在于

  1. 可以直接将逻辑分割为mysql/sql层逻辑,与列存储引擎逻辑,两个部分
  2. 列存储引擎有一个可以输出的语法树, 逻辑相较代码比较清晰,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值