Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptOrPredicateFiller.java +6 −13 Original line number Diff line number Diff line Loading @@ -34,8 +34,8 @@ 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.HashSet; import java.util.Set; /** * Or predicate filler for encrypt. Loading @@ -51,24 +51,17 @@ public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredic @Override public void fill(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement) { Set<Integer> filledConditionStopIndexes = new HashSet<>(); Collection<Integer> stopIndexes = new HashSet<>(); for (AndPredicateSegment each : sqlSegment.getAndPredicates()) { for (PredicateSegment predicate : each.getPredicates()) { if (null == predicate.getColumn()) { continue; if (stopIndexes.add(predicate.getStopIndex())) { fill(new Column(predicate.getColumn().getName(), getTableName(predicate, sqlStatement)), predicate, sqlStatement); } if (filledConditionStopIndexes.contains(predicate.getStopIndex())) { continue; } else { filledConditionStopIndexes.add(predicate.getStopIndex()); } Column column = new Column(predicate.getColumn().getName(), getTableName(sqlStatement, predicate)); fillEncryptCondition(column, predicate, sqlStatement); } } } private void fillEncryptCondition(final Column column, final PredicateSegment predicate, final SQLStatement sqlStatement) { private void fill(final Column column, final PredicateSegment predicate, final SQLStatement sqlStatement) { if (!encryptRule.getEncryptorEngine().getShardingEncryptor(column.getTableName(), column.getName()).isPresent()) { return; } Loading @@ -84,7 +77,7 @@ public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredic } // TODO hongjun: find table from parent select statement, should find table in subquery level only private String getTableName(final SQLStatement sqlStatement, final PredicateSegment predicateSegment) { private String getTableName(final PredicateSegment predicateSegment, final SQLStatement sqlStatement) { if (!(sqlStatement instanceof SelectStatement)) { return getTableName(sqlStatement.getTables(), predicateSegment); } Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/sharding/dml/ShardingOrPredicateFiller.java +4 −4 Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ public final class ShardingOrPredicateFiller implements SQLSegmentFiller<OrPredi AndCondition andConditionResult = new AndCondition(); orCondition.getAndConditions().add(andConditionResult); for (PredicateSegment each : shardingCondition) { Optional<String> tableName = getTableName(sqlStatement, each); Optional<String> tableName = getTableName(each, sqlStatement); Column column = new Column(each.getColumn().getName(), tableName.isPresent() ? tableName.get() : getTableName(shardingTableMetaData, shardingRule, sqlStatement, each)); andConditionResult.getConditions().add(each.getExpression().buildCondition(column, sqlStatement.getLogicSQL())); } Loading Loading @@ -180,9 +180,9 @@ public final class ShardingOrPredicateFiller implements SQLSegmentFiller<OrPredi return getTableName(shardingTableMetaData, shardingRule, currentSelectStatement.getTables(), predicateSegment); } private Optional<String> getTableName(final SQLStatement sqlStatement, final PredicateSegment conditionSegment) { if (conditionSegment.getColumn().getOwner().isPresent()) { Optional<Table> table = sqlStatement.getTables().find(conditionSegment.getColumn().getOwner().get()); private Optional<String> getTableName(final PredicateSegment predicateSegment, final SQLStatement sqlStatement) { if (predicateSegment.getColumn().getOwner().isPresent()) { Optional<Table> table = sqlStatement.getTables().find(predicateSegment.getColumn().getOwner().get()); if (table.isPresent()) { return Optional.of(table.get().getName()); } Loading Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptOrPredicateFiller.java +6 −13 Original line number Diff line number Diff line Loading @@ -34,8 +34,8 @@ 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.HashSet; import java.util.Set; /** * Or predicate filler for encrypt. Loading @@ -51,24 +51,17 @@ public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredic @Override public void fill(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement) { Set<Integer> filledConditionStopIndexes = new HashSet<>(); Collection<Integer> stopIndexes = new HashSet<>(); for (AndPredicateSegment each : sqlSegment.getAndPredicates()) { for (PredicateSegment predicate : each.getPredicates()) { if (null == predicate.getColumn()) { continue; if (stopIndexes.add(predicate.getStopIndex())) { fill(new Column(predicate.getColumn().getName(), getTableName(predicate, sqlStatement)), predicate, sqlStatement); } if (filledConditionStopIndexes.contains(predicate.getStopIndex())) { continue; } else { filledConditionStopIndexes.add(predicate.getStopIndex()); } Column column = new Column(predicate.getColumn().getName(), getTableName(sqlStatement, predicate)); fillEncryptCondition(column, predicate, sqlStatement); } } } private void fillEncryptCondition(final Column column, final PredicateSegment predicate, final SQLStatement sqlStatement) { private void fill(final Column column, final PredicateSegment predicate, final SQLStatement sqlStatement) { if (!encryptRule.getEncryptorEngine().getShardingEncryptor(column.getTableName(), column.getName()).isPresent()) { return; } Loading @@ -84,7 +77,7 @@ public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredic } // TODO hongjun: find table from parent select statement, should find table in subquery level only private String getTableName(final SQLStatement sqlStatement, final PredicateSegment predicateSegment) { private String getTableName(final PredicateSegment predicateSegment, final SQLStatement sqlStatement) { if (!(sqlStatement instanceof SelectStatement)) { return getTableName(sqlStatement.getTables(), predicateSegment); } Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/sharding/dml/ShardingOrPredicateFiller.java +4 −4 Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ public final class ShardingOrPredicateFiller implements SQLSegmentFiller<OrPredi AndCondition andConditionResult = new AndCondition(); orCondition.getAndConditions().add(andConditionResult); for (PredicateSegment each : shardingCondition) { Optional<String> tableName = getTableName(sqlStatement, each); Optional<String> tableName = getTableName(each, sqlStatement); Column column = new Column(each.getColumn().getName(), tableName.isPresent() ? tableName.get() : getTableName(shardingTableMetaData, shardingRule, sqlStatement, each)); andConditionResult.getConditions().add(each.getExpression().buildCondition(column, sqlStatement.getLogicSQL())); } Loading Loading @@ -180,9 +180,9 @@ public final class ShardingOrPredicateFiller implements SQLSegmentFiller<OrPredi return getTableName(shardingTableMetaData, shardingRule, currentSelectStatement.getTables(), predicateSegment); } private Optional<String> getTableName(final SQLStatement sqlStatement, final PredicateSegment conditionSegment) { if (conditionSegment.getColumn().getOwner().isPresent()) { Optional<Table> table = sqlStatement.getTables().find(conditionSegment.getColumn().getOwner().get()); private Optional<String> getTableName(final PredicateSegment predicateSegment, final SQLStatement sqlStatement) { if (predicateSegment.getColumn().getOwner().isPresent()) { Optional<Table> table = sqlStatement.getTables().find(predicateSegment.getColumn().getOwner().get()); if (table.isPresent()) { return Optional.of(table.get().getName()); } Loading