Commit 712e2587 authored by terrymanu's avatar terrymanu
Browse files

for #2084, add ShardingOrPredicateFiller.fillEncryptConditions

parent 98de0de4
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -73,14 +73,7 @@ public final class ShardingOrPredicateFiller implements SQLSegmentFiller<OrPredi
    public OrCondition buildCondition(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement) {
        OrCondition result = new OrCondition();
        fillShardingConditions(sqlSegment, sqlStatement, result);
        Collection<Integer> stopIndexes = new HashSet<>();
        for (AndPredicateSegment each : sqlSegment.getAndPredicates()) {
            for (PredicateSegment predicate : each.getPredicates()) {
                if (!(predicate.getExpression() instanceof ColumnSegment) && stopIndexes.add(predicate.getStopIndex())) {
                    fillEncryptCondition(predicate.getColumn().getName(), getTableName(sqlStatement, predicate), predicate, sqlStatement);
                }
            }
        }
        fillEncryptConditions(sqlSegment, sqlStatement);
        return result;
    }
    
@@ -133,6 +126,17 @@ public final class ShardingOrPredicateFiller implements SQLSegmentFiller<OrPredi
        }
    }
    
    private void fillEncryptConditions(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement) {
        Collection<Integer> stopIndexes = new HashSet<>();
        for (AndPredicateSegment each : sqlSegment.getAndPredicates()) {
            for (PredicateSegment predicate : each.getPredicates()) {
                if (!(predicate.getExpression() instanceof ColumnSegment) && stopIndexes.add(predicate.getStopIndex())) {
                    fillEncryptCondition(predicate.getColumn().getName(), getTableName(sqlStatement, predicate), predicate, sqlStatement);
                }
            }
        }
    }
    
    private void fillEncryptCondition(final String columnName, final String tableName, final PredicateSegment predicateSegment, final SQLStatement sqlStatement) {
        if (!shardingRule.getShardingEncryptorEngine().getShardingEncryptor(tableName, columnName).isPresent()) {
            return;