Browse Source

Merge branch '3.0' into 3.gay

miemie 3 years ago
parent
commit
90a9b76080

+ 1 - 1
build.gradle

@@ -2,7 +2,7 @@ import java.time.LocalDateTime
 
 allprojects {
     group = 'com.baomidou'
-    version = "3.5.2"
+    version = "3.5.2.1-SNAPSHOT"
 }
 
 ext {

+ 1 - 2
changelog-temp.md

@@ -1,2 +1 @@
-- 枚举处理器优化-现在无需在配置文件里指定枚举包
-- DbType 清理以及 IDialect 实现类的清理
+- 多租户插件:多表join表名必需起别名,否则追加的过滤条件不带前缀

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

@@ -571,13 +571,12 @@ public class TenantLineInnerInterceptor extends JsqlParserSupport implements Inn
      */
     protected Column getAliasColumn(Table table) {
         StringBuilder column = new StringBuilder();
-        // 为了兼容隐式内连接,没有别名时条件就需要加上表名
+        // 禁止 `为了兼容隐式内连接,没有别名时条件就需要加上表名`
+        // 该起别名就要起别名
         if (table.getAlias() != null) {
-            column.append(table.getAlias().getName());
-        } else {
-            column.append(table.getName());
+            column.append(table.getAlias().getName()).append(StringPool.DOT);
         }
-        column.append(StringPool.DOT).append(tenantLineHandler.getTenantIdColumn());
+        column.append(tenantLineHandler.getTenantIdColumn());
         return new Column(column.toString());
     }
 

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

@@ -48,48 +48,48 @@ class TenantLineInnerInterceptorTest {
             "INSERT INTO entity (id, name, tenant_id) VALUES (?, ?, ?)");
         // insert into select
         assertSql("insert into entity (id,name) select id,name from entity2",
-            "INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM entity2 WHERE entity2.tenant_id = 1");
+            "INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM entity2 WHERE tenant_id = 1");
 
-        assertSql("insert into entity (id,name) select * from entity2",
-            "INSERT INTO entity (id, name, tenant_id) SELECT * FROM entity2 WHERE entity2.tenant_id = 1");
+        assertSql("insert into entity (id,name) select * from entity2 e2",
+            "INSERT INTO entity (id, name, tenant_id) SELECT * FROM entity2 e2 WHERE e2.tenant_id = 1");
 
-        assertSql("insert into entity (id,name) select id,name from (select id,name from entity3) t",
-            "INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM (SELECT id, name, tenant_id FROM entity3 WHERE entity3.tenant_id = 1) t");
+        assertSql("insert into entity (id,name) select id,name from (select id,name from entity3 e3) t",
+            "INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
 
-        assertSql("insert into entity (id,name) select * from (select id,name from entity3) t",
-            "INSERT INTO entity (id, name, tenant_id) SELECT * FROM (SELECT id, name, tenant_id FROM entity3 WHERE entity3.tenant_id = 1) t");
+        assertSql("insert into entity (id,name) select * from (select id,name from entity3 e3) t",
+            "INSERT INTO entity (id, name, tenant_id) SELECT * FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
 
-        assertSql("insert into entity (id,name) select t.* from (select id,name from entity3) t",
-            "INSERT INTO entity (id, name, tenant_id) SELECT t.* FROM (SELECT id, name, tenant_id FROM entity3 WHERE entity3.tenant_id = 1) t");
+        assertSql("insert into entity (id,name) select t.* from (select id,name from entity3 e3) t",
+            "INSERT INTO entity (id, name, tenant_id) SELECT t.* FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
     }
 
     @Test
     void delete() {
         assertSql("delete from entity where id = ?",
-            "DELETE FROM entity WHERE entity.tenant_id = 1 AND id = ?");
+            "DELETE FROM entity WHERE tenant_id = 1 AND id = ?");
     }
 
     @Test
     void update() {
         assertSql("update entity set name = ? where id = ?",
-            "UPDATE entity SET name = ? WHERE entity.tenant_id = 1 AND id = ?");
+            "UPDATE entity SET name = ? WHERE tenant_id = 1 AND id = ?");
     }
 
     @Test
     void selectSingle() {
         // 单表
         assertSql("select * from entity where id = ?",
-            "SELECT * FROM entity WHERE id = ? AND entity.tenant_id = 1");
+            "SELECT * FROM entity WHERE id = ? AND tenant_id = 1");
 
         assertSql("select * from entity where id = ? or name = ?",
-            "SELECT * FROM entity WHERE (id = ? OR name = ?) AND entity.tenant_id = 1");
+            "SELECT * FROM entity WHERE (id = ? OR name = ?) AND tenant_id = 1");
 
         assertSql("SELECT * FROM entity WHERE (id = ? OR name = ?)",
-            "SELECT * FROM entity WHERE (id = ? OR name = ?) AND entity.tenant_id = 1");
+            "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 entity.tenant_id = 1");
+            "SELECT * FROM entity WHERE NOT (id = ? OR name = ?) AND tenant_id = 1");
     }
 
     @Test
@@ -258,17 +258,17 @@ class TenantLineInnerInterceptorTest {
 
     @Test
     void selectJoinSubSelect() {
-        assertSql("select * from (select * from entity) e1 " +
+        assertSql("select * from (select * from entity e) e1 " +
                 "left join entity2 e2 on e1.id = e2.id",
-            "SELECT * FROM (SELECT * FROM entity WHERE entity.tenant_id = 1) e1 " +
+            "SELECT * FROM (SELECT * FROM entity e WHERE e.tenant_id = 1) e1 " +
                 "LEFT JOIN entity2 e2 ON e1.id = e2.id AND e2.tenant_id = 1");
 
         assertSql("select * from entity1 e1 " +
-                "left join (select * from entity2) e2 " +
-                "on e1.id = e2.id",
+                "left join (select * from entity2 e2) e22 " +
+                "on e1.id = e22.id",
             "SELECT * FROM entity1 e1 " +
-                "LEFT JOIN (SELECT * FROM entity2 WHERE entity2.tenant_id = 1) e2 " +
-                "ON e1.id = e2.id " +
+                "LEFT JOIN (SELECT * FROM entity2 e2 WHERE e2.tenant_id = 1) e22 " +
+                "ON e1.id = e22.id " +
                 "WHERE e1.tenant_id = 1");
     }
 
@@ -367,10 +367,10 @@ class TenantLineInnerInterceptorTest {
                 "WHERE (e.id = ? OR e.name = ?)");
 
         // 隐式内连接
-        assertSql("SELECT * FROM entity,entity1 " +
-                "WHERE entity.id = entity1.id",
-            "SELECT * FROM entity, entity1 " +
-                "WHERE entity.id = entity1.id AND entity.tenant_id = 1 AND entity1.tenant_id = 1");
+        assertSql("SELECT * FROM entity e,entity1 e1 " +
+                "WHERE e.id = e1.id",
+            "SELECT * FROM entity e, entity1 e1 " +
+                "WHERE e.id = e1.id AND e.tenant_id = 1 AND e1.tenant_id = 1");
 
         // 隐式内连接
         assertSql("SELECT * FROM entity a, with_as_entity1 b " +
@@ -384,30 +384,30 @@ class TenantLineInnerInterceptorTest {
                 "WHERE a.id = b.id");
 
         // SubJoin with 隐式内连接
-        assertSql("SELECT * FROM (entity,entity1) " +
-                "WHERE entity.id = entity1.id",
-            "SELECT * FROM (entity, entity1) " +
-                "WHERE entity.id = entity1.id " +
-                "AND entity.tenant_id = 1 AND entity1.tenant_id = 1");
-
-        assertSql("SELECT * FROM ((entity,entity1),entity2) " +
-                "WHERE entity.id = entity1.id and entity.id = entity2.id",
-            "SELECT * FROM ((entity, entity1), entity2) " +
-                "WHERE entity.id = entity1.id AND entity.id = entity2.id " +
-                "AND entity.tenant_id = 1 AND entity1.tenant_id = 1 AND entity2.tenant_id = 1");
-
-        assertSql("SELECT * FROM (entity,(entity1,entity2)) " +
-                "WHERE entity.id = entity1.id and entity.id = entity2.id",
-            "SELECT * FROM (entity, (entity1, entity2)) " +
-                "WHERE entity.id = entity1.id AND entity.id = entity2.id " +
-                "AND entity.tenant_id = 1 AND entity1.tenant_id = 1 AND entity2.tenant_id = 1");
+        assertSql("SELECT * FROM (entity e,entity1 e1) " +
+                "WHERE e.id = e1.id",
+            "SELECT * FROM (entity e, entity1 e1) " +
+                "WHERE e.id = e1.id " +
+                "AND e.tenant_id = 1 AND e1.tenant_id = 1");
+
+        assertSql("SELECT * FROM ((entity e,entity1 e1),entity2 e2) " +
+                "WHERE e.id = e1.id and e.id = e2.id",
+            "SELECT * FROM ((entity e, entity1 e1), entity2 e2) " +
+                "WHERE e.id = e1.id AND e.id = e2.id " +
+                "AND e.tenant_id = 1 AND e1.tenant_id = 1 AND e2.tenant_id = 1");
+
+        assertSql("SELECT * FROM (entity e,(entity1 e1,entity2 e2)) " +
+                "WHERE e.id = e1.id and e.id = e2.id",
+            "SELECT * FROM (entity e, (entity1 e1, entity2 e2)) " +
+                "WHERE e.id = e1.id AND e.id = e2.id " +
+                "AND e.tenant_id = 1 AND e1.tenant_id = 1 AND e2.tenant_id = 1");
 
         // 沙雕的括号写法
-        assertSql("SELECT * FROM (((entity,entity1))) " +
-                "WHERE entity.id = entity1.id",
-            "SELECT * FROM (((entity, entity1))) " +
-                "WHERE entity.id = entity1.id " +
-                "AND entity.tenant_id = 1 AND entity1.tenant_id = 1");
+        assertSql("SELECT * FROM (((entity e,entity1 e1))) " +
+                "WHERE e.id = e1.id",
+            "SELECT * FROM (((entity e, entity1 e1))) " +
+                "WHERE e.id = e1.id " +
+                "AND e.tenant_id = 1 AND e1.tenant_id = 1");
 
     }
 
@@ -415,7 +415,7 @@ class TenantLineInnerInterceptorTest {
     @Test
     void selectWithAs() {
         assertSql("with with_as_A as (select * from entity) select * from with_as_A",
-            "WITH with_as_A AS (SELECT * FROM entity WHERE entity.tenant_id = 1) SELECT * FROM with_as_A");
+            "WITH with_as_A AS (SELECT * FROM entity WHERE tenant_id = 1) SELECT * FROM with_as_A");
     }