Commit 25efa6d2 authored by haocao's avatar haocao
Browse files

For #525 2th.

parent 430c330f
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

package io.shardingjdbc.core.rewrite;

import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;

@@ -91,7 +92,12 @@ public final class SQLBuilder {
                result.append(tableTokens.get(((TableToken) each).tableName));
            } else if (each instanceof IndexToken) {
                IndexToken indexToken = (IndexToken) each;
                result.append(indexToken.indexName + "_" + tableTokens.get(indexToken.tableName));
                result.append(indexToken.indexName);
                String tableName = tableTokens.get(indexToken.tableName);
                if (!Strings.isNullOrEmpty(tableName)) {
                    result.append("_");
                    result.append(tableName);
                }
            } else {
                result.append(each);
            }
+7 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
package io.shardingjdbc.core.rewrite;

import com.google.common.base.Optional;
import com.google.common.base.Strings;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword;
import io.shardingjdbc.core.parsing.parser.context.OrderItem;
@@ -132,7 +133,12 @@ public final class SQLRewriteEngine {
    }
    
    private void appendIndexToken(final SQLBuilder sqlBuilder, final IndexToken indexToken, final int count, final List<SQLToken> sqlTokens) {
        sqlBuilder.appendIndex(indexToken.getIndexName(), indexToken.getTableName());
        String indexName = indexToken.getIndexName();
        String logicTableName = indexToken.getTableName();
        if (Strings.isNullOrEmpty(logicTableName)) {
            logicTableName = shardingRule.getLogicTableName(indexName);
        }
        sqlBuilder.appendIndex(indexName, logicTableName);
        int beginPosition = indexToken.getBeginPosition() + indexToken.getOriginalLiterals().length();
        appendRest(sqlBuilder, count, sqlTokens, beginPosition);
    }
+19 −0
Original line number Diff line number Diff line
@@ -284,4 +284,23 @@ public final class ShardingRule {
        }
        return defaultKeyGenerator.generateKey();
    }
    
    /**
     * Get logic table name base on logic index name.
     *
     * @param logicIndexName logic index name
     * @return logic table name
     */
    public String getLogicTableName(final String logicIndexName) {
        String result = "";
        for (TableRule each : tableRules) {
            if (logicIndexName.equals(each.getLogicIndex())) {
                result = each.getLogicTable();
            }
        }
        if (Strings.isNullOrEmpty(result)) {
            throw new ShardingJdbcException("Cannot find logic table name with logic index name: '%s'", logicIndexName);
        }
        return result;
    }
}
+9 −1
Original line number Diff line number Diff line
@@ -86,6 +86,10 @@ public abstract class AbstractShardingTableOnlyTest extends AbstractSQLAssertTes
            orderItemTableRuleConfig.setActualDataNodes(Joiner.on(",").join(orderItemActualDataNodes));
            orderItemTableRuleConfig.setKeyGeneratorClass("item_id");
            shardingRuleConfig.getTableRuleConfigs().add(orderItemTableRuleConfig);
            TableRuleConfiguration logTableRuleConfig = new TableRuleConfiguration();
            logTableRuleConfig.setLogicIndex("t_log_index");
            logTableRuleConfig.setLogicTable("t_log");
            shardingRuleConfig.getTableRuleConfigs().add(logTableRuleConfig);
            shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
            shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new NoneShardingStrategyConfiguration());
            shardingRuleConfig.setDefaultTableShardingStrategyConfig(
@@ -104,11 +108,15 @@ public abstract class AbstractShardingTableOnlyTest extends AbstractSQLAssertTes
                executeSql("CREATE TABLE t_log(id int, status varchar(10))");
            }
        }
        if (getSql().startsWith("DROP INDEX")) {
            executeSql("CREATE TABLE t_log(id int, status varchar(10))");
            executeSql("CREATE INDEX t_log_index ON t_log(status)");
        }
    }
    
    @After
    public void cleanupDdlTables() throws SQLException {
        if (getSql().startsWith("CREATE TABLE") || getSql().startsWith("ALTER") || getSql().startsWith("TRUNCATE") || getSql().startsWith("CREATE INDEX") || getSql().startsWith("CREATE UNIQUE INDEX")) {
        if (getSql().startsWith("CREATE") || getSql().startsWith("ALTER") || getSql().startsWith("TRUNCATE") || getSql().startsWith("DROP INDEX")) {
            if (getSql().contains("TEMP")) {
                executeSql("DROP TABLE t_temp_log");
            } else {
+17 −0
Original line number Diff line number Diff line
@@ -25,4 +25,21 @@
            <data expected="drop/tbl.xml" />
        </sharding-rule>
    </sql>
    <sql id="assertDropIndex">
        <sharding-rule value="tbl">
            <data expected="drop/tbl.xml" />
        </sharding-rule>
    </sql>
    <!--
    <sql id="assertDropIndexWithoutOn">
        <sharding-rule value="tbl">
            <data expected="drop/tbl.xml" />
        </sharding-rule>
    </sql>
    -->
    <!--<sql id="assertDropIndexIfExists">-->
        <!--<sharding-rule value="tbl">-->
            <!--<data expected="drop/tbl.xml" />-->
        <!--</sharding-rule>-->
    <!--</sql>-->
</sqls>