Pārlūkot izejas kodu

去除多租户多余的表名

miemie 5 gadi atpakaļ
vecāks
revīzija
3e46b54dcf

+ 6 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/parser/AbstractJsqlParser.java

@@ -54,7 +54,9 @@ public abstract class AbstractJsqlParser implements ISqlParser {
     public SqlInfo parser(MetaObject metaObject, String sql) {
         if (this.allowProcess(metaObject)) {
             try {
-                logger.debug("Original SQL: " + sql);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Original SQL: " + sql);
+                }
                 // fixed github pull/295
                 StringBuilder sqlStringBuilder = new StringBuilder();
                 Statements statements = CCJSqlParserUtil.parseStatements(sql);
@@ -93,7 +95,9 @@ public abstract class AbstractJsqlParser implements ISqlParser {
         } else if (statement instanceof Delete) {
             this.processDelete((Delete) statement);
         }
-        logger.debug("parser sql: " + statement.toString());
+        if (logger.isDebugEnabled()) {
+            logger.debug("parser sql: " + statement.toString());
+        }
         return SqlInfo.newInstance().setSql(statement.toString());
     }
 

+ 3 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/tenant/TenantSqlParser.java

@@ -287,19 +287,16 @@ public class TenantSqlParser extends AbstractJsqlParser {
 
     /**
      * 租户字段别名设置
-     * <p>tableName.tenantId 或 tableAlias.tenantId</p>
+     * <p>tenantId 或 tableAlias.tenantId</p>
      *
      * @param table 表对象
      * @return 字段
      */
     protected Column getAliasColumn(Table table) {
         StringBuilder column = new StringBuilder();
-        if (null == table.getAlias()) {
-            column.append(table.getName());
-        } else {
-            column.append(table.getAlias().getName());
+        if (table.getAlias() != null) {
+            column.append(table.getAlias().getName()).append(StringPool.DOT);
         }
-        column.append(StringPool.DOT);
         column.append(tenantHandler.getTenantIdColumn());
         return new Column(column.toString());
     }

+ 28 - 5
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/plugins/tenant/TenantSqlParserTest.java

@@ -3,9 +3,13 @@ package com.baomidou.mybatisplus.extension.plugins.tenant;
 import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.LongValue;
+import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
+import net.sf.jsqlparser.expression.operators.relational.InExpression;
 import net.sf.jsqlparser.parser.CCJSqlParserUtil;
+import net.sf.jsqlparser.schema.Column;
 import net.sf.jsqlparser.statement.Statements;
 import net.sf.jsqlparser.statement.select.Select;
+import net.sf.jsqlparser.statement.update.Update;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -21,7 +25,14 @@ public class TenantSqlParserTest {
         .setTenantHandler(new TenantHandler() {
             @Override
             public Expression getTenantId(boolean where) {
-                return new LongValue(1);
+                if (!where) {
+                    return new LongValue(1);
+                }
+                final InExpression inExpression = new InExpression();
+                inExpression.setLeftExpression(new Column(getTenantIdColumn()));
+                final ExpressionList itemsList = new ExpressionList(new LongValue(1), new LongValue(2));
+                inExpression.setRightItemsList(itemsList);
+                return inExpression;
             }
 
             @Override
@@ -38,13 +49,18 @@ public class TenantSqlParserTest {
     @Test
     public void processSelectBody() throws JSQLParserException {
         select("select * from user",
-            "select * from user where user.t_id = 1");
+            "select * from user where t_id = 1");
+        select("select * from user u",
+            "select * from user u where u.t_id = 1");
         select("select * from user where id in (select id from user)",
-            "select * from user where id in (select id from user where user.t_id = 1) and user.t_id = 1");
+            "select * from user where id in (select id from user where t_id = 1) and t_id = 1");
         select("select * from user where id = 1 and id in (select id from user)",
-            "select * from user where id = 1 and id in (select id from user where user.t_id = 1) and user.t_id = 1");
+            "select * from user where id = 1 and id in (select id from user where t_id = 1) and t_id = 1");
         select("select * from user where id = 1 or id in (select id from user)",
-            "select * from user where (id = 1 or id in (select id from user where user.t_id = 1)) and user.t_id = 1");
+            "select * from user where (id = 1 or id in (select id from user where t_id = 1)) and t_id = 1");
+
+        update("update user set age = 1",
+            "update user set age = 1 where t_id = 1");
     }
 
     private void select(String sql, String target) throws JSQLParserException {
@@ -53,4 +69,11 @@ public class TenantSqlParserTest {
         parser.processSelectBody(select.getSelectBody());
         assertThat(select.toString().toLowerCase()).isEqualTo(target);
     }
+
+    private void update(String sql, String target) throws JSQLParserException {
+        Statements statement = CCJSqlParserUtil.parseStatements(sql);
+        Update update = (Update) statement.getStatements().get(0);
+        parser.processUpdate(update);
+        assertThat(update.toString().toLowerCase()).isEqualTo(target);
+    }
 }