Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLBuilder.java +4 −28 Original line number Diff line number Diff line Loading @@ -59,36 +59,12 @@ public final class SQLBuilder { } /** * Append table token. * Append sharding placeholder. * * @param logicTableName logic table name * @param shardingPlaceholder sharding placeholder */ public void appendTable(final String logicTableName) { segments.add(new TablePlaceholder(logicTableName)); currentSegment = new StringBuilder(); segments.add(currentSegment); } /** * Append schema token. * * @param logicSchemaName logic schema name * @param logicTableName logic table name */ public void appendSchema(final String logicSchemaName, final String logicTableName) { segments.add(new SchemaPlaceholder(logicSchemaName, logicTableName)); currentSegment = new StringBuilder(); segments.add(currentSegment); } /** * Append index token. * * @param logicIndexName logic index name * @param logicTableName logic table name */ public void appendIndex(final String logicIndexName, final String logicTableName) { segments.add(new IndexPlaceholder(logicIndexName, logicTableName)); public void appendPlaceholder(final ShardingPlaceholder shardingPlaceholder) { segments.add(shardingPlaceholder); currentSegment = new StringBuilder(); segments.add(currentSegment); } Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLRewriteEngine.java +12 −9 Original line number Diff line number Diff line Loading @@ -33,6 +33,9 @@ import io.shardingjdbc.core.parsing.parser.token.RowCountToken; import io.shardingjdbc.core.parsing.parser.token.SQLToken; import io.shardingjdbc.core.parsing.parser.token.SchemaToken; import io.shardingjdbc.core.parsing.parser.token.TableToken; import io.shardingjdbc.core.rewrite.placeholder.IndexPlaceholder; import io.shardingjdbc.core.rewrite.placeholder.SchemaPlaceholder; import io.shardingjdbc.core.rewrite.placeholder.TablePlaceholder; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.routing.type.complex.CartesianTableReference; import io.shardingjdbc.core.rule.BindingTableRule; Loading Loading @@ -100,11 +103,11 @@ public final class SQLRewriteEngine { result.appendLiterals(originalSQL.substring(0, each.getBeginPosition())); } if (each instanceof TableToken) { appendTableToken(result, (TableToken) each, count, sqlTokens); appendTablePlaceholder(result, (TableToken) each, count, sqlTokens); } else if (each instanceof SchemaToken) { appendSchemaToken(result, (SchemaToken) each, count, sqlTokens); appendSchemaPlaceholder(result, (SchemaToken) each, count, sqlTokens); } else if (each instanceof IndexToken) { appendIndexToken(result, (IndexToken) each, count, sqlTokens); appendIndexPlaceholder(result, (IndexToken) each, count, sqlTokens); } else if (each instanceof ItemsToken) { appendItemsToken(result, (ItemsToken) each, count, sqlTokens); } else if (each instanceof RowCountToken) { Loading @@ -129,25 +132,25 @@ public final class SQLRewriteEngine { }); } private void appendTableToken(final SQLBuilder sqlBuilder, final TableToken tableToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendTable(tableToken.getTableName().toLowerCase()); private void appendTablePlaceholder(final SQLBuilder sqlBuilder, final TableToken tableToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendPlaceholder(new TablePlaceholder(tableToken.getTableName().toLowerCase())); int beginPosition = tableToken.getBeginPosition() + tableToken.getOriginalLiterals().length(); appendRest(sqlBuilder, count, sqlTokens, beginPosition); } private void appendSchemaToken(final SQLBuilder sqlBuilder, final SchemaToken schemaToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendSchema(schemaToken.getSchemaName().toLowerCase(), schemaToken.getTableName()); private void appendSchemaPlaceholder(final SQLBuilder sqlBuilder, final SchemaToken schemaToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendPlaceholder(new SchemaPlaceholder(schemaToken.getSchemaName().toLowerCase(), schemaToken.getTableName().toLowerCase())); int beginPosition = schemaToken.getBeginPosition() + schemaToken.getOriginalLiterals().length(); appendRest(sqlBuilder, count, sqlTokens, beginPosition); } private void appendIndexToken(final SQLBuilder sqlBuilder, final IndexToken indexToken, final int count, final List<SQLToken> sqlTokens) { private void appendIndexPlaceholder(final SQLBuilder sqlBuilder, final IndexToken indexToken, final int count, final List<SQLToken> sqlTokens) { String indexName = indexToken.getIndexName().toLowerCase(); String logicTableName = indexToken.getTableName().toLowerCase(); if (Strings.isNullOrEmpty(logicTableName)) { logicTableName = shardingRule.getLogicTableName(indexName); } sqlBuilder.appendIndex(indexName, logicTableName); sqlBuilder.appendPlaceholder(new IndexPlaceholder(indexName, logicTableName)); int beginPosition = indexToken.getBeginPosition() + indexToken.getOriginalLiterals().length(); appendRest(sqlBuilder, count, sqlTokens, beginPosition); } Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/placeholder/indexPlaceholder.java 0 → 100644 +23 −0 Original line number Diff line number Diff line package io.shardingjdbc.core.rewrite.placeholder; import lombok.Getter; import lombok.RequiredArgsConstructor; /** * Index placeholder for rewrite. * * @author zhangliang */ @RequiredArgsConstructor @Getter public final class IndexPlaceholder implements ShardingPlaceholder { private final String logicIndexName; private final String logicTableName; @Override public String toString() { return logicIndexName; } } sharding-jdbc-core/src/test/java/io/shardingjdbc/core/rewrite/SQLBuilderTest.java +5 −4 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingjdbc.core.rewrite; import io.shardingjdbc.core.rewrite.placeholder.TablePlaceholder; import org.junit.Test; import java.util.Collections; Loading @@ -43,10 +44,10 @@ public final class SQLBuilderTest { public void assertAppendTableWithoutTableToken() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("SELECT "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); sqlBuilder.appendLiterals(".id"); sqlBuilder.appendLiterals(" FROM "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); assertThat(sqlBuilder.toSQL(Collections.<String, String>emptyMap(), null), is("SELECT table_x.id FROM table_x")); } Loading @@ -54,10 +55,10 @@ public final class SQLBuilderTest { public void assertAppendTableWithTableToken() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("SELECT "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); sqlBuilder.appendLiterals(".id"); sqlBuilder.appendLiterals(" FROM "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); Map<String, String> tableTokens = new HashMap<>(1, 1); tableTokens.put("table_x", "table_x_1"); assertThat(sqlBuilder.toSQL(tableTokens, null), is("SELECT table_x_1.id FROM table_x_1")); Loading Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLBuilder.java +4 −28 Original line number Diff line number Diff line Loading @@ -59,36 +59,12 @@ public final class SQLBuilder { } /** * Append table token. * Append sharding placeholder. * * @param logicTableName logic table name * @param shardingPlaceholder sharding placeholder */ public void appendTable(final String logicTableName) { segments.add(new TablePlaceholder(logicTableName)); currentSegment = new StringBuilder(); segments.add(currentSegment); } /** * Append schema token. * * @param logicSchemaName logic schema name * @param logicTableName logic table name */ public void appendSchema(final String logicSchemaName, final String logicTableName) { segments.add(new SchemaPlaceholder(logicSchemaName, logicTableName)); currentSegment = new StringBuilder(); segments.add(currentSegment); } /** * Append index token. * * @param logicIndexName logic index name * @param logicTableName logic table name */ public void appendIndex(final String logicIndexName, final String logicTableName) { segments.add(new IndexPlaceholder(logicIndexName, logicTableName)); public void appendPlaceholder(final ShardingPlaceholder shardingPlaceholder) { segments.add(shardingPlaceholder); currentSegment = new StringBuilder(); segments.add(currentSegment); } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/SQLRewriteEngine.java +12 −9 Original line number Diff line number Diff line Loading @@ -33,6 +33,9 @@ import io.shardingjdbc.core.parsing.parser.token.RowCountToken; import io.shardingjdbc.core.parsing.parser.token.SQLToken; import io.shardingjdbc.core.parsing.parser.token.SchemaToken; import io.shardingjdbc.core.parsing.parser.token.TableToken; import io.shardingjdbc.core.rewrite.placeholder.IndexPlaceholder; import io.shardingjdbc.core.rewrite.placeholder.SchemaPlaceholder; import io.shardingjdbc.core.rewrite.placeholder.TablePlaceholder; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.routing.type.complex.CartesianTableReference; import io.shardingjdbc.core.rule.BindingTableRule; Loading Loading @@ -100,11 +103,11 @@ public final class SQLRewriteEngine { result.appendLiterals(originalSQL.substring(0, each.getBeginPosition())); } if (each instanceof TableToken) { appendTableToken(result, (TableToken) each, count, sqlTokens); appendTablePlaceholder(result, (TableToken) each, count, sqlTokens); } else if (each instanceof SchemaToken) { appendSchemaToken(result, (SchemaToken) each, count, sqlTokens); appendSchemaPlaceholder(result, (SchemaToken) each, count, sqlTokens); } else if (each instanceof IndexToken) { appendIndexToken(result, (IndexToken) each, count, sqlTokens); appendIndexPlaceholder(result, (IndexToken) each, count, sqlTokens); } else if (each instanceof ItemsToken) { appendItemsToken(result, (ItemsToken) each, count, sqlTokens); } else if (each instanceof RowCountToken) { Loading @@ -129,25 +132,25 @@ public final class SQLRewriteEngine { }); } private void appendTableToken(final SQLBuilder sqlBuilder, final TableToken tableToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendTable(tableToken.getTableName().toLowerCase()); private void appendTablePlaceholder(final SQLBuilder sqlBuilder, final TableToken tableToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendPlaceholder(new TablePlaceholder(tableToken.getTableName().toLowerCase())); int beginPosition = tableToken.getBeginPosition() + tableToken.getOriginalLiterals().length(); appendRest(sqlBuilder, count, sqlTokens, beginPosition); } private void appendSchemaToken(final SQLBuilder sqlBuilder, final SchemaToken schemaToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendSchema(schemaToken.getSchemaName().toLowerCase(), schemaToken.getTableName()); private void appendSchemaPlaceholder(final SQLBuilder sqlBuilder, final SchemaToken schemaToken, final int count, final List<SQLToken> sqlTokens) { sqlBuilder.appendPlaceholder(new SchemaPlaceholder(schemaToken.getSchemaName().toLowerCase(), schemaToken.getTableName().toLowerCase())); int beginPosition = schemaToken.getBeginPosition() + schemaToken.getOriginalLiterals().length(); appendRest(sqlBuilder, count, sqlTokens, beginPosition); } private void appendIndexToken(final SQLBuilder sqlBuilder, final IndexToken indexToken, final int count, final List<SQLToken> sqlTokens) { private void appendIndexPlaceholder(final SQLBuilder sqlBuilder, final IndexToken indexToken, final int count, final List<SQLToken> sqlTokens) { String indexName = indexToken.getIndexName().toLowerCase(); String logicTableName = indexToken.getTableName().toLowerCase(); if (Strings.isNullOrEmpty(logicTableName)) { logicTableName = shardingRule.getLogicTableName(indexName); } sqlBuilder.appendIndex(indexName, logicTableName); sqlBuilder.appendPlaceholder(new IndexPlaceholder(indexName, logicTableName)); int beginPosition = indexToken.getBeginPosition() + indexToken.getOriginalLiterals().length(); appendRest(sqlBuilder, count, sqlTokens, beginPosition); } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rewrite/placeholder/indexPlaceholder.java 0 → 100644 +23 −0 Original line number Diff line number Diff line package io.shardingjdbc.core.rewrite.placeholder; import lombok.Getter; import lombok.RequiredArgsConstructor; /** * Index placeholder for rewrite. * * @author zhangliang */ @RequiredArgsConstructor @Getter public final class IndexPlaceholder implements ShardingPlaceholder { private final String logicIndexName; private final String logicTableName; @Override public String toString() { return logicIndexName; } }
sharding-jdbc-core/src/test/java/io/shardingjdbc/core/rewrite/SQLBuilderTest.java +5 −4 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingjdbc.core.rewrite; import io.shardingjdbc.core.rewrite.placeholder.TablePlaceholder; import org.junit.Test; import java.util.Collections; Loading @@ -43,10 +44,10 @@ public final class SQLBuilderTest { public void assertAppendTableWithoutTableToken() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("SELECT "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); sqlBuilder.appendLiterals(".id"); sqlBuilder.appendLiterals(" FROM "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); assertThat(sqlBuilder.toSQL(Collections.<String, String>emptyMap(), null), is("SELECT table_x.id FROM table_x")); } Loading @@ -54,10 +55,10 @@ public final class SQLBuilderTest { public void assertAppendTableWithTableToken() { SQLBuilder sqlBuilder = new SQLBuilder(); sqlBuilder.appendLiterals("SELECT "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); sqlBuilder.appendLiterals(".id"); sqlBuilder.appendLiterals(" FROM "); sqlBuilder.appendTable("table_x"); sqlBuilder.appendPlaceholder(new TablePlaceholder("table_x")); Map<String, String> tableTokens = new HashMap<>(1, 1); tableTokens.put("table_x", "table_x_1"); assertThat(sqlBuilder.toSQL(tableTokens, null), is("SELECT table_x_1.id FROM table_x_1")); Loading