Selaa lähdekoodia

test 多租户

miemie 4 vuotta sitten
vanhempi
commit
6fb93b49ff

+ 11 - 11
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptor.java

@@ -270,35 +270,35 @@ public class TenantLineInnerInterceptor extends JsqlParserSupport implements Inn
         if (where == null) {
             return;
         }
-        if (where instanceof SubSelect) {
-            processSelectBody(((SubSelect) where).getSelectBody());
+        if (where instanceof FromItem) {
+            processFromItem((FromItem) where);
             return;
         }
         if (where.toString().indexOf("SELECT") > 0) {
             // 有子查询
-            if (where instanceof AndExpression) {
-                AndExpression expression = (AndExpression) where;
-                processWhereSubSelect(expression.getLeftExpression());
-                processWhereSubSelect(expression.getRightExpression());
-            } else if (where instanceof OrExpression) {
-                OrExpression expression = (OrExpression) where;
+            if (where instanceof BinaryExpression) {
+                // 比较符号 , and , or , 等等
+                BinaryExpression expression = (BinaryExpression) where;
                 processWhereSubSelect(expression.getLeftExpression());
                 processWhereSubSelect(expression.getRightExpression());
             } else if (where instanceof InExpression) {
+                // in
                 InExpression expression = (InExpression) where;
                 ItemsList itemsList = expression.getRightItemsList();
                 if (itemsList instanceof SubSelect) {
                     processSelectBody(((SubSelect) itemsList).getSelectBody());
                 }
-            } else if (where instanceof ComparisonOperator) {
-                ComparisonOperator expression = (ComparisonOperator) where;
-                processWhereSubSelect(expression.getRightExpression());
             } else if (where instanceof ExistsExpression) {
+                // exists
                 ExistsExpression expression = (ExistsExpression) where;
                 processWhereSubSelect(expression.getRightExpression());
             } else if (where instanceof NotExpression) {
+                // not exists
                 NotExpression expression = (NotExpression) where;
                 processWhereSubSelect(expression.getExpression());
+            } else if (where instanceof Parenthesis) {
+                Parenthesis expression = (Parenthesis) where;
+                processWhereSubSelect(expression.getExpression());
             }
         }
     }

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

@@ -76,10 +76,14 @@ class TenantLineInnerInterceptorTest {
 
         assertSql("SELECT * FROM entity WHERE (id = ? OR name = ?)",
             "SELECT * FROM entity WHERE (id = ? OR name = ?) AND tenant_id = 1");
+
+        /* not */
+        assertSql("SELECT * FROM entity WHERE not (id = ? OR name = ?)",
+            "SELECT * FROM entity WHERE NOT (id = ? OR name = ?) AND tenant_id = 1");
     }
 
     @Test
-    void selectSubSelect() {
+    void selectSubSelectIn() {
         /* in */
         assertSql("SELECT * FROM entity e WHERE e.id IN (select e1.id from entity1 e1 where e1.id = ?)",
             "SELECT * FROM entity e WHERE e.id IN (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
@@ -98,13 +102,39 @@ class TenantLineInnerInterceptorTest {
                 "(select e1.id from entity1 e1 where e1.id = ?) and e.id = ?",
             "SELECT * FROM entity e WHERE e.id = ? AND e.id IN " +
                 "(SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.id = ? AND e.tenant_id = 1");
+    }
 
-
+    @Test
+    void selectSubSelectEq() {
         /* = */
         assertSql("SELECT * FROM entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?)",
             "SELECT * FROM entity e WHERE e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
+    }
+
+    @Test
+    void selectSubSelectInnerNotEq() {
+        /* inner not = */
+        assertSql("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?))",
+            "SELECT * FROM entity e WHERE NOT (e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1)) AND e.tenant_id = 1");
+
+        assertSql("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?) and e.id = ?)",
+            "SELECT * FROM entity e WHERE NOT (e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.id = ?) AND e.tenant_id = 1");
+    }
+
+    @Test
+    void selectSubSelectExists() {
+        /* EXISTS */
+        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");
+
 
+        /* NOT EXISTS */
+        assertSql("SELECT * FROM entity e WHERE NOT EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
+            "SELECT * FROM entity e WHERE NOT EXISTS (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
+    }
 
+    @Test
+    void selectSubSelect() {
         /* >= */
         assertSql("SELECT * FROM entity e WHERE e.id >= (select e1.id from entity1 e1 where e1.id = ?)",
             "SELECT * FROM entity e WHERE e.id >= (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
@@ -118,16 +148,6 @@ class TenantLineInnerInterceptorTest {
         /* <> */
         assertSql("SELECT * FROM entity e WHERE e.id <> (select e1.id from entity1 e1 where e1.id = ?)",
             "SELECT * FROM entity e WHERE e.id <> (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
-
-
-        /* EXISTS */
-        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");
-
-
-        /* NOT EXISTS */
-        assertSql("SELECT * FROM entity e WHERE NOT EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
-            "SELECT * FROM entity e WHERE NOT EXISTS (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
     }
 
     @Test