Commit 1a5e8df1 authored by terrymanu's avatar terrymanu
Browse files

for #2084, remove useless codes for OrConditionFiller

parent c7628df1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ public final class ShardingTableMetaData {
     * Get all column names via table.
     *
     * @param tableName table name
     * @return column names.
     * @return column names
     */
    public Collection<String> getAllColumnNames(final String tableName) {
        return tables.containsKey(tableName) ? tables.get(tableName).getColumns().keySet() : Collections.<String>emptyList();
+2 −34
Original line number Diff line number Diff line
@@ -30,15 +30,11 @@ import org.apache.shardingsphere.core.parse.antlr.sql.statement.dml.SelectStatem
import org.apache.shardingsphere.core.parse.antlr.sql.token.EncryptColumnToken;
import org.apache.shardingsphere.core.parse.old.parser.context.condition.AndCondition;
import org.apache.shardingsphere.core.parse.old.parser.context.condition.Column;
import org.apache.shardingsphere.core.parse.old.parser.context.condition.OrCondition;
import org.apache.shardingsphere.core.parse.old.parser.context.table.Table;
import org.apache.shardingsphere.core.parse.old.parser.context.table.Tables;
import org.apache.shardingsphere.core.rule.EncryptRule;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
@@ -47,7 +43,7 @@ import java.util.Set;
 * @author duhongjun
 */
@RequiredArgsConstructor
public class EncryptOrConditionFiller implements SQLSegmentFiller<OrPredicateSegment> {
public final class EncryptOrConditionFiller implements SQLSegmentFiller<OrPredicateSegment> {
    
    private final EncryptRule encryptRule;
    
@@ -55,35 +51,8 @@ public class EncryptOrConditionFiller implements SQLSegmentFiller<OrPredicateSeg
    
    @Override
    public void fill(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement) {
        Map<String, String> columnNameToTable = new HashMap<>();
        Map<String, Integer> columnNameCount = new HashMap<>();
        fillColumnTableMap(sqlStatement, columnNameToTable, columnNameCount);
        filterPredicate(sqlStatement, sqlSegment);
    }
    
    private void fillColumnTableMap(final SQLStatement sqlStatement, final Map<String, String> columnNameToTable, final Map<String, Integer> columnNameCount) {
        if (null == shardingTableMetaData) {
            return;
        }
        for (String each : sqlStatement.getTables().getTableNames()) {
            Collection<String> tableColumns = shardingTableMetaData.getAllColumnNames(each);
            for (String columnName : tableColumns) {
                columnNameToTable.put(columnName, each);
                Integer count = columnNameCount.get(columnName);
                if (null == count) {
                    count = 1;
                } else {
                    count++;
                }
                columnNameCount.put(columnName, count);
            }
        }
    }
    
    private OrCondition filterPredicate(final SQLStatement sqlStatement, final OrPredicateSegment orPredicate) {
        OrCondition result = new OrCondition();
        Set<Integer> filledConditionStopIndexes = new HashSet<>();
        for (AndPredicateSegment each : orPredicate.getAndPredicates()) {
        for (AndPredicateSegment each : sqlSegment.getAndPredicates()) {
            for (PredicateSegment predicate : each.getPredicates()) {
                if (null == predicate.getColumn()) {
                    continue;
@@ -97,7 +66,6 @@ public class EncryptOrConditionFiller implements SQLSegmentFiller<OrPredicateSeg
                fillEncryptCondition(column, predicate, sqlStatement);
            }
        }
        return result;
    }
    
    private void fillEncryptCondition(final Column column, final PredicateSegment predicate, final SQLStatement sqlStatement) {
+2 −31
Original line number Diff line number Diff line
@@ -40,11 +40,9 @@ import org.apache.shardingsphere.core.parse.old.parser.context.table.Tables;
import org.apache.shardingsphere.core.rule.ShardingRule;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
@@ -75,35 +73,8 @@ public final class ShardingOrConditionFiller implements SQLSegmentFiller<OrPredi
     * @return or condition
     */
    public OrCondition buildCondition(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData) {
        Map<String, String> columnNameToTable = new HashMap<>();
        Map<String, Integer> columnNameCount = new HashMap<>();
        fillColumnTableMap(sqlStatement, shardingTableMetaData, columnNameToTable, columnNameCount);
        return filterCondition(shardingTableMetaData, sqlStatement, sqlSegment, shardingRule);
    }
    
    private void fillColumnTableMap(final SQLStatement sqlStatement, 
                                    final ShardingTableMetaData shardingTableMetaData, final Map<String, String> columnNameToTable, final Map<String, Integer> columnNameCount) {
        if (null == shardingTableMetaData) {
            return;
        }
        for (String each : sqlStatement.getTables().getTableNames()) {
            Collection<String> tableColumns = shardingTableMetaData.getAllColumnNames(each);
            for (String columnName : tableColumns) {
                columnNameToTable.put(columnName, each);
                Integer count = columnNameCount.get(columnName);
                if (null == count) {
                    count = 1;
                } else {
                    count++;
                }
                columnNameCount.put(columnName, count);
            }
        }
    }
    
    private OrCondition filterCondition(final ShardingTableMetaData shardingTableMetaData, final SQLStatement sqlStatement, final OrPredicateSegment orPredicate, final ShardingRule shardingRule) {
        OrCondition result = new OrCondition();
        for (AndPredicateSegment each : orPredicate.getAndPredicates()) {
        for (AndPredicateSegment each : sqlSegment.getAndPredicates()) {
            List<PredicateSegment> predicates = new LinkedList<>();
            boolean needSharding = false;
            for (PredicateSegment predicate : each.getPredicates()) {
@@ -130,7 +101,7 @@ public final class ShardingOrConditionFiller implements SQLSegmentFiller<OrPredi
            }
        }
        Set<Integer> filledConditionStopIndexes = new HashSet<>();
        for (AndPredicateSegment each : orPredicate.getAndPredicates()) {
        for (AndPredicateSegment each : sqlSegment.getAndPredicates()) {
            for (PredicateSegment predicate : each.getPredicates()) {
                if (null == predicate.getColumn()) {
                    continue;