背景:有伙伴组装了一个复杂的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