Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/PredicateExtractor.java +18 −18 Original line number Diff line number Diff line Loading @@ -28,13 +28,13 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.column.C import org.apache.shardingsphere.core.parse.antlr.extractor.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.BetweenValueExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.CompareValueExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.InValueExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.PredicateSegment; import java.util.Collection; import java.util.Collections; Loading @@ -55,20 +55,20 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { @Override public Optional<OrPredicateSegment> extract(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { return extractConditionInternal(exprNode, parameterMarkerIndexes); return extractRecursive(exprNode, parameterMarkerIndexes); } private Optional<OrPredicateSegment> extractConditionInternal(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { private Optional<OrPredicateSegment> extractRecursive(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<Integer> index = getLogicalOperatorIndex(exprNode); if (!index.isPresent()) { return extractConditionForParen(exprNode, parameterMarkerIndexes); return extractPredicateForParen(exprNode, parameterMarkerIndexes); } Optional<OrPredicateSegment> leftOrCondition = extractConditionInternal((ParserRuleContext) exprNode.getChild(index.get() - 1), parameterMarkerIndexes); Optional<OrPredicateSegment> rightOrCondition = extractConditionInternal((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); if (leftOrCondition.isPresent() && rightOrCondition.isPresent()) { return Optional.of(mergePredicate(leftOrCondition.get(), rightOrCondition.get(), exprNode.getChild(index.get()).getText())); Optional<OrPredicateSegment> leftPredicate = extractRecursive((ParserRuleContext) exprNode.getChild(index.get() - 1), parameterMarkerIndexes); Optional<OrPredicateSegment> rightPredicate = extractRecursive((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); if (leftPredicate.isPresent() && rightPredicate.isPresent()) { return Optional.of(mergePredicate(leftPredicate.get(), rightPredicate.get(), exprNode.getChild(index.get()).getText())); } return leftOrCondition.isPresent() ? leftOrCondition : rightOrCondition; return leftPredicate.isPresent() ? leftPredicate : rightPredicate; } private Optional<Integer> getLogicalOperatorIndex(final ParserRuleContext exprNode) { Loading @@ -80,11 +80,11 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { return Optional.absent(); } private Optional<OrPredicateSegment> extractConditionForParen(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { private Optional<OrPredicateSegment> extractPredicateForParen(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<Integer> index = getLeftParenIndex(exprNode); if (index.isPresent()) { if (RuleName.EXPR.getName().equals(exprNode.getChild(index.get() + 1).getClass().getSimpleName())) { return extractConditionInternal((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); return extractRecursive((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); } return Optional.absent(); } Loading Loading @@ -187,14 +187,14 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { return result; } private OrPredicateSegment mergePredicate(final OrPredicateSegment leftOrPredicate, final OrPredicateSegment rightOrPredicate, final String operator) { private OrPredicateSegment mergePredicate(final OrPredicateSegment leftPredicate, final OrPredicateSegment rightPredicate, final String operator) { if (LogicalOperator.isOrOperator(operator)) { leftOrPredicate.getAndPredicates().addAll(rightOrPredicate.getAndPredicates()); return leftOrPredicate; leftPredicate.getAndPredicates().addAll(rightPredicate.getAndPredicates()); return leftPredicate; } OrPredicateSegment result = new OrPredicateSegment(); for (AndPredicateSegment each : leftOrPredicate.getAndPredicates()) { for (AndPredicateSegment eachRightOr : rightOrPredicate.getAndPredicates()) { for (AndPredicateSegment each : leftPredicate.getAndPredicates()) { for (AndPredicateSegment eachRightOr : rightPredicate.getAndPredicates()) { AndPredicateSegment tempList = new AndPredicateSegment(); tempList.getPredicates().addAll(each.getPredicates()); tempList.getPredicates().addAll(eachRightOr.getPredicates()); Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/WhereExtractor.java +1 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegme import org.apache.shardingsphere.core.parse.antlr.extractor.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.WhereSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import java.util.Collection; import java.util.Map; Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/SubqueryConditionExtractor.java +3 −3 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegme import org.apache.shardingsphere.core.parse.antlr.extractor.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.WhereSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.SubqueryConditionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.SubqueryPredicateSegment; import java.util.Collection; import java.util.Map; Loading @@ -38,9 +38,9 @@ public final class SubqueryConditionExtractor implements OptionalSQLSegmentExtra private final SelectWhereExtractor selectWhereExtractor = new SelectWhereExtractor(); @Override public Optional<SubqueryConditionSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { public Optional<SubqueryPredicateSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Collection<ParserRuleContext> suQueryNodes = ExtractorUtils.getAllDescendantNodes(ancestorNode, RuleName.SUBQUERY); SubqueryConditionSegment result = new SubqueryConditionSegment(); SubqueryPredicateSegment result = new SubqueryPredicateSegment(); for (ParserRuleContext each : suQueryNodes) { Optional<WhereSegment> condition = selectWhereExtractor.extract(each, parameterMarkerIndexes); if (condition.isPresent()) { Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptOrConditionFiller.java +3 −3 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.metadata.table.TableMetaData; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.antlr.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.parse.antlr.sql.token.EncryptColumnToken; Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/sharding/dml/OrConditionFiller.java +3 −3 Original line number Diff line number Diff line Loading @@ -24,9 +24,9 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.metadata.table.TableMetaData; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.antlr.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.parse.antlr.sql.token.EncryptColumnToken; Loading Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/PredicateExtractor.java +18 −18 Original line number Diff line number Diff line Loading @@ -28,13 +28,13 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.column.C import org.apache.shardingsphere.core.parse.antlr.extractor.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.BetweenValueExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.CompareValueExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.InValueExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.PredicateSegment; import java.util.Collection; import java.util.Collections; Loading @@ -55,20 +55,20 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { @Override public Optional<OrPredicateSegment> extract(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { return extractConditionInternal(exprNode, parameterMarkerIndexes); return extractRecursive(exprNode, parameterMarkerIndexes); } private Optional<OrPredicateSegment> extractConditionInternal(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { private Optional<OrPredicateSegment> extractRecursive(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<Integer> index = getLogicalOperatorIndex(exprNode); if (!index.isPresent()) { return extractConditionForParen(exprNode, parameterMarkerIndexes); return extractPredicateForParen(exprNode, parameterMarkerIndexes); } Optional<OrPredicateSegment> leftOrCondition = extractConditionInternal((ParserRuleContext) exprNode.getChild(index.get() - 1), parameterMarkerIndexes); Optional<OrPredicateSegment> rightOrCondition = extractConditionInternal((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); if (leftOrCondition.isPresent() && rightOrCondition.isPresent()) { return Optional.of(mergePredicate(leftOrCondition.get(), rightOrCondition.get(), exprNode.getChild(index.get()).getText())); Optional<OrPredicateSegment> leftPredicate = extractRecursive((ParserRuleContext) exprNode.getChild(index.get() - 1), parameterMarkerIndexes); Optional<OrPredicateSegment> rightPredicate = extractRecursive((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); if (leftPredicate.isPresent() && rightPredicate.isPresent()) { return Optional.of(mergePredicate(leftPredicate.get(), rightPredicate.get(), exprNode.getChild(index.get()).getText())); } return leftOrCondition.isPresent() ? leftOrCondition : rightOrCondition; return leftPredicate.isPresent() ? leftPredicate : rightPredicate; } private Optional<Integer> getLogicalOperatorIndex(final ParserRuleContext exprNode) { Loading @@ -80,11 +80,11 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { return Optional.absent(); } private Optional<OrPredicateSegment> extractConditionForParen(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { private Optional<OrPredicateSegment> extractPredicateForParen(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<Integer> index = getLeftParenIndex(exprNode); if (index.isPresent()) { if (RuleName.EXPR.getName().equals(exprNode.getChild(index.get() + 1).getClass().getSimpleName())) { return extractConditionInternal((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); return extractRecursive((ParserRuleContext) exprNode.getChild(index.get() + 1), parameterMarkerIndexes); } return Optional.absent(); } Loading Loading @@ -187,14 +187,14 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { return result; } private OrPredicateSegment mergePredicate(final OrPredicateSegment leftOrPredicate, final OrPredicateSegment rightOrPredicate, final String operator) { private OrPredicateSegment mergePredicate(final OrPredicateSegment leftPredicate, final OrPredicateSegment rightPredicate, final String operator) { if (LogicalOperator.isOrOperator(operator)) { leftOrPredicate.getAndPredicates().addAll(rightOrPredicate.getAndPredicates()); return leftOrPredicate; leftPredicate.getAndPredicates().addAll(rightPredicate.getAndPredicates()); return leftPredicate; } OrPredicateSegment result = new OrPredicateSegment(); for (AndPredicateSegment each : leftOrPredicate.getAndPredicates()) { for (AndPredicateSegment eachRightOr : rightOrPredicate.getAndPredicates()) { for (AndPredicateSegment each : leftPredicate.getAndPredicates()) { for (AndPredicateSegment eachRightOr : rightPredicate.getAndPredicates()) { AndPredicateSegment tempList = new AndPredicateSegment(); tempList.getPredicates().addAll(each.getPredicates()); tempList.getPredicates().addAll(eachRightOr.getPredicates()); Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/WhereExtractor.java +1 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegme import org.apache.shardingsphere.core.parse.antlr.extractor.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.WhereSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import java.util.Collection; import java.util.Map; Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/SubqueryConditionExtractor.java +3 −3 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegme import org.apache.shardingsphere.core.parse.antlr.extractor.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.WhereSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.SubqueryConditionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.SubqueryPredicateSegment; import java.util.Collection; import java.util.Map; Loading @@ -38,9 +38,9 @@ public final class SubqueryConditionExtractor implements OptionalSQLSegmentExtra private final SelectWhereExtractor selectWhereExtractor = new SelectWhereExtractor(); @Override public Optional<SubqueryConditionSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { public Optional<SubqueryPredicateSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Collection<ParserRuleContext> suQueryNodes = ExtractorUtils.getAllDescendantNodes(ancestorNode, RuleName.SUBQUERY); SubqueryConditionSegment result = new SubqueryConditionSegment(); SubqueryPredicateSegment result = new SubqueryPredicateSegment(); for (ParserRuleContext each : suQueryNodes) { Optional<WhereSegment> condition = selectWhereExtractor.extract(each, parameterMarkerIndexes); if (condition.isPresent()) { Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptOrConditionFiller.java +3 −3 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.metadata.table.TableMetaData; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.antlr.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.parse.antlr.sql.token.EncryptColumnToken; Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/sharding/dml/OrConditionFiller.java +3 −3 Original line number Diff line number Diff line Loading @@ -24,9 +24,9 @@ import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.metadata.table.TableMetaData; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.condition.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.AndPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.PredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.antlr.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.parse.antlr.sql.token.EncryptColumnToken; Loading