Commit 91a8a567 authored by haocao's avatar haocao
Browse files

For #525 5th.

parent af458531
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -50,8 +50,6 @@ public abstract class AbstractSQLStatement implements SQLStatement {
    @Setter
    private int parametersIndex;
    
    private boolean containsTableName = true;
    
    @Override
    public final SQLType getType() {
        return type;
@@ -61,9 +59,4 @@ public abstract class AbstractSQLStatement implements SQLStatement {
    public int increaseParametersIndex() {
        return ++parametersIndex;
    }
    
    @Override
    public void withoutTableName() {
        containsTableName = false;
    }
}
+0 −12
Original line number Diff line number Diff line
@@ -79,16 +79,4 @@ public interface SQLStatement {
     * @return increased parameters index
     */
    int increaseParametersIndex();
    
    /**
     * Without table name.
     */
    void withoutTableName();
    
    /**
     * Adjust contains table name is empty or not.
     *
     * @return table name is empty or not
     */
    boolean isContainsTableName();
}
+0 −10
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import io.shardingjdbc.core.parsing.parser.exception.SQLParsingException;
import io.shardingjdbc.core.parsing.parser.sql.SQLParser;
import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement;
import io.shardingjdbc.core.parsing.parser.token.IndexToken;
import io.shardingjdbc.core.parsing.parser.token.SQLToken;
import io.shardingjdbc.core.rule.ShardingRule;
import lombok.AccessLevel;
import lombok.Getter;
@@ -65,7 +64,6 @@ public abstract class AbstractDropParser implements SQLParser {
            throw new SQLParsingException("Can't support other DROP grammar unless DROP TABLE, DROP INDEX.");
        }
        tableReferencesClauseParser.parse(result, true);
        indexWithoutTable(result);
        return result;
    }
    
@@ -88,12 +86,4 @@ public abstract class AbstractDropParser implements SQLParser {
    }
    
    protected abstract Keyword[] getSkippedKeywordsBetweenDropTableAndTableName();
    
    private void indexWithoutTable(final DDLStatement ddlStatement) {
        for (SQLToken each : ddlStatement.getSqlTokens()) {
            if (each instanceof IndexToken && 1 == ddlStatement.getSqlTokens().size()) {
                ddlStatement.withoutTableName();
            }
        }
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package io.shardingjdbc.core.routing.router;

import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement;
import io.shardingjdbc.core.routing.type.all.DatabaseAllRoutingEngine;
import io.shardingjdbc.core.routing.type.none.NoneTableRoutingEngine;
import io.shardingjdbc.core.routing.type.ddl.DDLRoutingEngine;
import io.shardingjdbc.core.rule.ShardingRule;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.jdbc.core.ShardingContext;
@@ -111,8 +111,8 @@ public final class ParsingSQLRouter implements SQLRouter {
    private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement) {
        Collection<String> tableNames = sqlStatement.getTables().getTableNames();
        RoutingEngine routingEngine;
        if (sqlStatement instanceof DDLStatement && !sqlStatement.isContainsTableName()) {
            routingEngine = new NoneTableRoutingEngine(shardingRule, parameters, sqlStatement); 
        if (sqlStatement instanceof DDLStatement) {
            routingEngine = new DDLRoutingEngine(shardingRule, parameters, sqlStatement); 
        } else if (tableNames.isEmpty()) {
            routingEngine = new DatabaseAllRoutingEngine(shardingRule.getDataSourceMap());
        } else if (1 == tableNames.size() || shardingRule.isAllBindingTables(tableNames) || shardingRule.isAllInDefaultDataSource(tableNames)) {
+8 −13
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
 * </p>
 */

package io.shardingjdbc.core.routing.type.none;
package io.shardingjdbc.core.routing.type.ddl;

import com.google.common.base.Preconditions;
import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
@@ -24,18 +24,17 @@ import io.shardingjdbc.core.routing.type.RoutingEngine;
import io.shardingjdbc.core.routing.type.RoutingResult;
import io.shardingjdbc.core.routing.type.simple.SimpleRoutingEngine;
import io.shardingjdbc.core.rule.ShardingRule;
import io.shardingjdbc.core.rule.TableRule;
import lombok.RequiredArgsConstructor;

import java.util.List;

/**
 * None table routing engine.
 * DDL routing engine.
 * 
 * @author caohao
 */
@RequiredArgsConstructor
public final class NoneTableRoutingEngine implements RoutingEngine {
public final class DDLRoutingEngine implements RoutingEngine {
    
    private final ShardingRule shardingRule;
    
@@ -49,15 +48,11 @@ public final class NoneTableRoutingEngine implements RoutingEngine {
    }
    
    private String getLogicTableName() {
        if (sqlStatement.getTables().isEmpty()) {
            Preconditions.checkState(1 == sqlStatement.getSqlTokens().size());
            IndexToken indexToken = (IndexToken) sqlStatement.getSqlTokens().get(0);
        String indexName = indexToken.getIndexName();
        String result = "";
        for (TableRule each : shardingRule.getTableRules()) {
            if (indexName.equals(each.getLogicIndex())) {
                result = each.getLogicTable();
            return shardingRule.getLogicTableName(indexToken.getIndexName());
        }
        }
        return result;
        return sqlStatement.getTables().getSingleTableName();
    }
}