Skip to content

Commit

Permalink
For #525 2th.
Browse files Browse the repository at this point in the history
  • Loading branch information
haocao committed Dec 29, 2017
1 parent 430c330 commit 25efa6d
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package io.shardingjdbc.core.rewrite;

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

Expand Down Expand Up @@ -91,7 +92,12 @@ public String toSQL(final Map<String, String> tableTokens) {
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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -132,7 +133,12 @@ private void appendTableToken(final SQLBuilder sqlBuilder, final TableToken tabl
}

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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,4 +284,23 @@ public Number generateKey(final String logicTableName) {
}
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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ protected final Map<DatabaseType, ShardingDataSource> getDataSources() throws SQ
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(
Expand All @@ -104,11 +108,15 @@ public void initDDLTables() throws SQLException {
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 {
Expand Down
17 changes: 17 additions & 0 deletions sharding-jdbc-core/src/test/resources/integrate/assert/drop.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>

0 comments on commit 25efa6d

Please sign in to comment.