-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BaseMultiTableInnerInterceptor 处理多表时,会错误地把where条件附加到left join
的on联表条件中
#5186
Comments
PR |
SELECT * FROM entity e
left join entity1 e1 on e1.id = e.id
WHERE e.id = ? 变为 SELECT * FROM entity e
LEFT JOIN entity1 e1 ON e1.id = e.id AND e1.tenant_id = 1
WHERE (e.id = ?) AND e.tenant_id = 1 不对吗? |
租户和权限过滤的需求还是不一样吧
|
我也遇到了这个问题 后续是怎么解决的 |
目前我的解决方案是如下: 复制把BaseMultiTableInnerInterceptor的大部分方法复制出来(因为processJoins方法是私有化的方法导致不能直接重写) 然后主要是重写了processJoins 具体代码如下:
这个时候的mainTables就包含所有的 join 的table 和驱动表
不过值得注意的是 我把拼接on条件的数据权限注释掉了 |
实际上运行效果是 将where条件拼到了left join 里面 但是没有拼到where条件里面
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
当前使用版本(必填,否则不予处理)
V3.5.3.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
BaseMultiTableInnerInterceptor
在执行processPlainSelect(final PlainSelect plainSelect, final String whereSegment)
方法时逻辑有漏洞重现步骤(如果有就写完整)
LEFT JOIN
来说会左表的数据会超出范围最终导致结果集返回了过多的数据。报错信息
不会报错,但此处设计是有问题的。
processPlainSelect
方法中的 处理 join 环境,应该考虑 左连接或右连接特殊处理一下?不能把数据筛选条件和联表条件做and。The text was updated successfully, but these errors were encountered: