记一次Qfilter的and和or的优化问题原创
金蝶云社区-JeremyG
JeremyG
15人赞赏了该文章 2,440次浏览 未经作者许可,禁止转载编辑于2022年01月04日 08:57:12
summary-icon摘要由AI智能服务提供

文本讨论了关于构造复杂filter时遇到的括号缺失问题,作者通过分析发现,尽管filter表达式未显式添加括号,但由于MySQL中and的优先级高于or,因此表达式逻辑与预期一致。作者还提到,平台底层可能兼容多种数据库,但具体执行时会翻译成ksql,推测ksql也有类似特性。最后,作者请求读者帮忙参与社区活动点赞。

背景:有伙伴组装了一个复杂的filter,大概期望是:a=a and ((b=b and c=c) or (d=d and e=e) or (f=f and g=g))  类似这种

image.png


问题:构造qfilter就是正常的and和or的链式构造,但是最后打印出来的filter是这样的:a=a and (b=b and c=c or d=d and e=e or f=f and g=g)。可以看到,默认没有携带括号,尝试分析原因。


分析:改动其中几个and的关联变成or,发现会有括号,因为qfilter是平台比较基础的能力,基本不会有bug,所以怀疑这两个语句是一致的。本地数据库是mysql,所以查了mysql的 and 和 or ,发现mysql的 and 执行会优先于 or,那其实第二条和第一条的语句是一模一样的,问题解决(其实就没有问题【emoji】)


最后:这里只看了mysql的,其实平台底层可以兼容其他类型的数据库,不确定其他类型的是不是和mysql一样,但是底层执行的时候是先会把代码翻译成ksql,盲猜ksql应该会有类似的特性,具体的也不去深究了,记录一下。



如果发现文章有什么问题欢迎大家指出,我将积极验证修改。如果有帮到你,还请来一波三连:关注,点赞,收藏【emoji】【emoji】。觉得有用也可以分享到公司群,惠及其他同事,感谢您的耐心观看~~~


最后拉个票:在参加社区3周年的活动,大家帮忙进下面链接里点个赞,已经点过的不要取消点赞哈,感谢各位大帅哥大漂亮【emoji】【emoji】

hello~我正在参与金蝶云社区三周年领航者成长故事打榜,点击链接帮忙点赞,还有机会获得彩蛋奖品哦!https://club.kdcloud.com/article/188313160498153216 


图标赞 15
15人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0