Commit 4bb57027 authored by haocao's avatar haocao
Browse files

For #529.

parent c6f02f94
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
1. [ISSUE #520](https://github.com/shardingjdbc/sharding-jdbc/issues/520) 引入分表后,唯一键冲突时异常类型不再是DuplicateKeyException
1. [ISSUE #521](https://github.com/shardingjdbc/sharding-jdbc/issues/521) YAML文件中ShardingProperties设置无效
1. [ISSUE #522](https://github.com/shardingjdbc/sharding-jdbc/issues/522) 读写分离Slave库不需要执行DDL语句
1. [ISSUE #529](https://github.com/shardingjdbc/sharding-jdbc/issues/529) 表名大写无法查询

## 2.0.1

+4 −4
Original line number Diff line number Diff line
@@ -23,8 +23,8 @@ import lombok.ToString;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.TreeSet;

/**
 * Tables collection.
@@ -79,7 +79,7 @@ public final class Tables {
     * @return 表名称集合
     */
    public Collection<String> getTableNames() {
        Collection<String> result = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
        Collection<String> result = new HashSet<>(tables.size(), 1);
        for (Table each : tables) {
            result.add(each.getName());
        }
@@ -99,7 +99,7 @@ public final class Tables {
    
    private Optional<Table> findTableFromName(final String name) {
        for (Table each : tables) {
            if (each.getName().equalsIgnoreCase(name)) {
            if (each.getName().equals(name)) {
                return Optional.of(each);
            }
        }
@@ -108,7 +108,7 @@ public final class Tables {
    
    private Optional<Table> findTableFromAlias(final String alias) {
        for (Table each : tables) {
            if (each.getAlias().isPresent() && each.getAlias().get().equalsIgnoreCase(alias)) {
            if (each.getAlias().isPresent() && each.getAlias().get().equals(alias)) {
                return Optional.of(each);
            }
        }
+2 −2
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ public final class IndexToken implements SQLToken {
     * @return index name
     */
    public String getIndexName() {
        return SQLUtil.getExactlyValue(originalLiterals).toLowerCase();
        return SQLUtil.getExactlyValue(originalLiterals);
    }
    
    /**
@@ -54,6 +54,6 @@ public final class IndexToken implements SQLToken {
     * @return table name
     */
    public String getTableName() {
        return SQLUtil.getExactlyValue(tableName).toLowerCase();
        return SQLUtil.getExactlyValue(tableName);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -42,6 +42,6 @@ public final class TableToken implements SQLToken {
     * @return table name
     */
    public String getTableName() {
        return SQLUtil.getExactlyValue(originalLiterals).toLowerCase();
        return SQLUtil.getExactlyValue(originalLiterals);
    }
}
+12 −9
Original line number Diff line number Diff line
@@ -127,14 +127,14 @@ public final class SQLRewriteEngine {
    }
    
    private void appendTableToken(final SQLBuilder sqlBuilder, final TableToken tableToken, final int count, final List<SQLToken> sqlTokens) {
        sqlBuilder.appendTable(tableToken.getTableName());
        sqlBuilder.appendTable(tableToken.getTableName().toLowerCase());
        int beginPosition = tableToken.getBeginPosition() + tableToken.getOriginalLiterals().length();
        appendRest(sqlBuilder, count, sqlTokens, beginPosition);
    }
    
    private void appendIndexToken(final SQLBuilder sqlBuilder, final IndexToken indexToken, final int count, final List<SQLToken> sqlTokens) {
        String indexName = indexToken.getIndexName();
        String logicTableName = indexToken.getTableName();
        String indexName = indexToken.getIndexName().toLowerCase();
        String logicTableName = indexToken.getTableName().toLowerCase();
        if (Strings.isNullOrEmpty(logicTableName)) {
            logicTableName = shardingRule.getLogicTableName(indexName);
        }
@@ -220,9 +220,10 @@ public final class SQLRewriteEngine {
    }
    
    private Map<String, String> getTableTokens(final TableUnit tableUnit) {
        String logicTableName = tableUnit.getLogicTableName().toLowerCase();
        Map<String, String> tableTokens = new HashMap<>();
        tableTokens.put(tableUnit.getLogicTableName(), tableUnit.getActualTableName());
        Optional<BindingTableRule> bindingTableRule = shardingRule.findBindingTableRule(tableUnit.getLogicTableName());
        tableTokens.put(logicTableName, tableUnit.getActualTableName());
        Optional<BindingTableRule> bindingTableRule = shardingRule.findBindingTableRule(logicTableName);
        if (bindingTableRule.isPresent()) {
            tableTokens.putAll(getBindingTableTokens(tableUnit, bindingTableRule.get()));
        }
@@ -232,8 +233,9 @@ public final class SQLRewriteEngine {
    private Map<String, String> getTableTokens(final CartesianTableReference cartesianTableReference) {
        Map<String, String> tableTokens = new HashMap<>();
        for (TableUnit each : cartesianTableReference.getTableUnits()) {
            tableTokens.put(each.getLogicTableName(), each.getActualTableName());
            Optional<BindingTableRule> bindingTableRule = shardingRule.findBindingTableRule(each.getLogicTableName());
            String logicTableName = each.getLogicTableName().toLowerCase();
            tableTokens.put(logicTableName, each.getActualTableName());
            Optional<BindingTableRule> bindingTableRule = shardingRule.findBindingTableRule(logicTableName);
            if (bindingTableRule.isPresent()) {
                tableTokens.putAll(getBindingTableTokens(each, bindingTableRule.get()));
            }
@@ -244,8 +246,9 @@ public final class SQLRewriteEngine {
    private Map<String, String> getBindingTableTokens(final TableUnit tableUnit, final BindingTableRule bindingTableRule) {
        Map<String, String> result = new HashMap<>();
        for (String eachTable : sqlStatement.getTables().getTableNames()) {
            if (!eachTable.equalsIgnoreCase(tableUnit.getLogicTableName()) && bindingTableRule.hasLogicTable(eachTable)) {
                result.put(eachTable, bindingTableRule.getBindingActualTable(tableUnit.getDataSourceName(), eachTable, tableUnit.getActualTableName()));
            String tableName = eachTable.toLowerCase();
            if (!tableName.equals(tableUnit.getLogicTableName().toLowerCase()) && bindingTableRule.hasLogicTable(tableName)) {
                result.put(tableName, bindingTableRule.getBindingActualTable(tableUnit.getDataSourceName(), tableName, tableUnit.getActualTableName()));
            }
        }
        return result;
Loading