Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLBuilder.java +7 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingjdbc.core.rewrite; import com.google.common.base.Strings; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; Loading Loading @@ -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); } Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLRewriteEngine.java +7 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rule/ShardingRule.java +19 −0 Original line number Diff line number Diff line Loading @@ -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; } } sharding-jdbc-core/src/test/java/io/shardingjdbc/core/integrate/type/sharding/AbstractShardingTableOnlyTest.java +9 −1 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 { Loading sharding-jdbc-core/src/test/resources/integrate/assert/drop.xml +17 −0 Original line number Diff line number Diff line Loading @@ -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> Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLBuilder.java +7 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingjdbc.core.rewrite; import com.google.common.base.Strings; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; Loading Loading @@ -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); } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLRewriteEngine.java +7 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rule/ShardingRule.java +19 −0 Original line number Diff line number Diff line Loading @@ -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; } }
sharding-jdbc-core/src/test/java/io/shardingjdbc/core/integrate/type/sharding/AbstractShardingTableOnlyTest.java +9 −1 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 { Loading
sharding-jdbc-core/src/test/resources/integrate/assert/drop.xml +17 −0 Original line number Diff line number Diff line Loading @@ -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>