Преглед изворни кода

修复租户插件使用exists语句会失效

https://github.com/baomidou/mybatis-plus/issues/6139
nieqiurong пре 1 година
родитељ
комит
192d38b64e

+ 3 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BaseMultiTableInnerInterceptor.java

@@ -202,6 +202,9 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
             processSelectBody(((Select) expression), whereSegment);
         } else if (expression instanceof Function) {
             processFunction((Function) expression, whereSegment);
+        } else if (expression instanceof ExistsExpression) {
+            ExistsExpression existsExpression = (ExistsExpression) expression;
+            processSelectBody((Select) existsExpression.getRightExpression(), whereSegment);
         }
     }
 

+ 1 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/TenantLineInnerInterceptorTest.java

@@ -154,6 +154,7 @@ class TenantLineInnerInterceptorTest {
         assertSql("SELECT * FROM entity e WHERE EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
             "SELECT * FROM entity e WHERE EXISTS (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
 
+        assertSql("SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? LIMIT 1)","SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? AND e.tenant_id = 1 LIMIT 1)");
 
         /* NOT EXISTS */
         assertSql("SELECT * FROM entity e WHERE NOT EXISTS (select e1.id from entity1 e1 where e1.id = ?)",