Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/PredicateExtractor.java +9 −2 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import java.util.Map; * Predicate extractor. * * @author duhongjun * @author zhangliang */ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { Loading @@ -55,8 +56,14 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { private final ColumnExtractor columnExtractor = new ColumnExtractor(); @Override public Optional<OrPredicateSegment> extract(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { return extractRecursiveWithLogicalOperation(exprNode, parameterMarkerIndexes); public Optional<OrPredicateSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> whereNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.WHERE_CLAUSE); if (!whereNode.isPresent()) { return Optional.absent(); } Optional<ParserRuleContext> exprNode = ExtractorUtils.findFirstChildNode((ParserRuleContext) whereNode.get().getChild(1), RuleName.EXPR); Preconditions.checkState(exprNode.isPresent()); return extractRecursiveWithLogicalOperation(exprNode.get(), parameterMarkerIndexes); } private Optional<OrPredicateSegment> extractRecursiveWithLogicalOperation(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/WhereExtractor.java +0 −12 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ 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.predicate.OrPredicateSegment; import java.util.Collection; import java.util.Map; Loading @@ -36,18 +35,12 @@ import java.util.Map; */ public final class WhereExtractor implements OptionalSQLSegmentExtractor { private final PredicateExtractor predicateExtractor = new PredicateExtractor(); @Override public Optional<WhereSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { WhereSegment result = new WhereSegment(parameterMarkerIndexes.size()); Optional<ParserRuleContext> whereNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.WHERE_CLAUSE); if (whereNode.isPresent()) { setPropertiesForRevert(result, whereNode.get(), parameterMarkerIndexes); Optional<OrPredicateSegment> orConditionSegment = extractOrConditionSegment(whereNode.get(), parameterMarkerIndexes); if (orConditionSegment.isPresent()) { result.getOrPredicate().getAndPredicates().addAll(orConditionSegment.get().getAndPredicates()); } } return Optional.of(result); } Loading @@ -66,9 +59,4 @@ public final class WhereExtractor implements OptionalSQLSegmentExtractor { whereSegment.setWhereParameterStartIndex(whereParameterStartIndex); whereSegment.setWhereParameterEndIndex(whereParameterStartIndex + parameterMarkerNodes.size() - 1); } private Optional<OrPredicateSegment> extractOrConditionSegment(final ParserRuleContext whereNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> exprNode = ExtractorUtils.findFirstChildNode((ParserRuleContext) whereNode.getChild(1), RuleName.EXPR); return exprNode.isPresent() ? predicateExtractor.extract(exprNode.get(), parameterMarkerIndexes) : Optional.<OrPredicateSegment>absent(); } } sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/SubqueryPredicateExtractor.java +6 −6 Original line number Diff line number Diff line Loading @@ -20,10 +20,10 @@ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.select; import com.google.common.base.Optional; import org.antlr.v4.runtime.ParserRuleContext; import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.WhereExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.PredicateExtractor; 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.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.SubqueryPredicateSegment; import java.util.Collection; Loading @@ -36,16 +36,16 @@ import java.util.Map; */ public final class SubqueryPredicateExtractor implements OptionalSQLSegmentExtractor { private final WhereExtractor whereExtractor = new WhereExtractor(); private final PredicateExtractor predicateExtractor = new PredicateExtractor(); @Override public Optional<SubqueryPredicateSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Collection<ParserRuleContext> subqueryNodes = ExtractorUtils.getAllDescendantNodes(ancestorNode, RuleName.SUBQUERY); SubqueryPredicateSegment result = new SubqueryPredicateSegment(); for (ParserRuleContext each : subqueryNodes) { Optional<WhereSegment> whereSegment = whereExtractor.extract(each, parameterMarkerIndexes); if (whereSegment.isPresent()) { result.getOrPredicates().add(whereSegment.get().getOrPredicate()); Optional<OrPredicateSegment> orPredicateSegment = predicateExtractor.extract(each, parameterMarkerIndexes); if (orPredicateSegment.isPresent()) { result.getOrPredicates().add(orPredicateSegment.get()); } } return Optional.of(result); Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptOrPredicateFiller.java +7 −5 Original line number Diff line number Diff line Loading @@ -18,10 +18,12 @@ package org.apache.shardingsphere.core.parse.antlr.filler.encrypt.dml; import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; import lombok.Setter; 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.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.ShardingTableMetaDataAwareFiller; 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; Loading @@ -42,12 +44,12 @@ import java.util.HashSet; * * @author duhongjun */ @RequiredArgsConstructor public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredicateSegment> { @Setter public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredicateSegment>, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { private final EncryptRule encryptRule; private EncryptRule encryptRule; private final ShardingTableMetaData shardingTableMetaData; private ShardingTableMetaData shardingTableMetaData; @Override public void fill(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement) { Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptWhereFiller.java +1 −12 Original line number Diff line number Diff line Loading @@ -17,31 +17,20 @@ package org.apache.shardingsphere.core.parse.antlr.filler.encrypt.dml; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.antlr.filler.api.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.WhereSegment; import org.apache.shardingsphere.core.parse.antlr.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.antlr.sql.statement.dml.DeleteStatement; import org.apache.shardingsphere.core.rule.EncryptRule; /** * Where filler for encrypt. * * @author duhongjun */ @Setter public final class EncryptWhereFiller implements SQLSegmentFiller<WhereSegment>, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { private EncryptRule encryptRule; private ShardingTableMetaData shardingTableMetaData; public final class EncryptWhereFiller implements SQLSegmentFiller<WhereSegment> { @Override public void fill(final WhereSegment sqlSegment, final SQLStatement sqlStatement) { new EncryptOrPredicateFiller(encryptRule, shardingTableMetaData).fill(sqlSegment.getOrPredicate(), sqlStatement); sqlStatement.setParametersIndex(sqlSegment.getParameterCount()); if (sqlStatement instanceof DeleteStatement) { DeleteStatement deleteStatement = (DeleteStatement) sqlStatement; 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 +9 −2 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import java.util.Map; * Predicate extractor. * * @author duhongjun * @author zhangliang */ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { Loading @@ -55,8 +56,14 @@ public final class PredicateExtractor implements OptionalSQLSegmentExtractor { private final ColumnExtractor columnExtractor = new ColumnExtractor(); @Override public Optional<OrPredicateSegment> extract(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { return extractRecursiveWithLogicalOperation(exprNode, parameterMarkerIndexes); public Optional<OrPredicateSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> whereNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.WHERE_CLAUSE); if (!whereNode.isPresent()) { return Optional.absent(); } Optional<ParserRuleContext> exprNode = ExtractorUtils.findFirstChildNode((ParserRuleContext) whereNode.get().getChild(1), RuleName.EXPR); Preconditions.checkState(exprNode.isPresent()); return extractRecursiveWithLogicalOperation(exprNode.get(), parameterMarkerIndexes); } private Optional<OrPredicateSegment> extractRecursiveWithLogicalOperation(final ParserRuleContext exprNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/WhereExtractor.java +0 −12 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ 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.predicate.OrPredicateSegment; import java.util.Collection; import java.util.Map; Loading @@ -36,18 +35,12 @@ import java.util.Map; */ public final class WhereExtractor implements OptionalSQLSegmentExtractor { private final PredicateExtractor predicateExtractor = new PredicateExtractor(); @Override public Optional<WhereSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { WhereSegment result = new WhereSegment(parameterMarkerIndexes.size()); Optional<ParserRuleContext> whereNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.WHERE_CLAUSE); if (whereNode.isPresent()) { setPropertiesForRevert(result, whereNode.get(), parameterMarkerIndexes); Optional<OrPredicateSegment> orConditionSegment = extractOrConditionSegment(whereNode.get(), parameterMarkerIndexes); if (orConditionSegment.isPresent()) { result.getOrPredicate().getAndPredicates().addAll(orConditionSegment.get().getAndPredicates()); } } return Optional.of(result); } Loading @@ -66,9 +59,4 @@ public final class WhereExtractor implements OptionalSQLSegmentExtractor { whereSegment.setWhereParameterStartIndex(whereParameterStartIndex); whereSegment.setWhereParameterEndIndex(whereParameterStartIndex + parameterMarkerNodes.size() - 1); } private Optional<OrPredicateSegment> extractOrConditionSegment(final ParserRuleContext whereNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> exprNode = ExtractorUtils.findFirstChildNode((ParserRuleContext) whereNode.getChild(1), RuleName.EXPR); return exprNode.isPresent() ? predicateExtractor.extract(exprNode.get(), parameterMarkerIndexes) : Optional.<OrPredicateSegment>absent(); } }
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/SubqueryPredicateExtractor.java +6 −6 Original line number Diff line number Diff line Loading @@ -20,10 +20,10 @@ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.select; import com.google.common.base.Optional; import org.antlr.v4.runtime.ParserRuleContext; import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.WhereExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.PredicateExtractor; 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.predicate.OrPredicateSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.predicate.SubqueryPredicateSegment; import java.util.Collection; Loading @@ -36,16 +36,16 @@ import java.util.Map; */ public final class SubqueryPredicateExtractor implements OptionalSQLSegmentExtractor { private final WhereExtractor whereExtractor = new WhereExtractor(); private final PredicateExtractor predicateExtractor = new PredicateExtractor(); @Override public Optional<SubqueryPredicateSegment> extract(final ParserRuleContext ancestorNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Collection<ParserRuleContext> subqueryNodes = ExtractorUtils.getAllDescendantNodes(ancestorNode, RuleName.SUBQUERY); SubqueryPredicateSegment result = new SubqueryPredicateSegment(); for (ParserRuleContext each : subqueryNodes) { Optional<WhereSegment> whereSegment = whereExtractor.extract(each, parameterMarkerIndexes); if (whereSegment.isPresent()) { result.getOrPredicates().add(whereSegment.get().getOrPredicate()); Optional<OrPredicateSegment> orPredicateSegment = predicateExtractor.extract(each, parameterMarkerIndexes); if (orPredicateSegment.isPresent()) { result.getOrPredicates().add(orPredicateSegment.get()); } } return Optional.of(result); Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptOrPredicateFiller.java +7 −5 Original line number Diff line number Diff line Loading @@ -18,10 +18,12 @@ package org.apache.shardingsphere.core.parse.antlr.filler.encrypt.dml; import com.google.common.base.Optional; import lombok.RequiredArgsConstructor; import lombok.Setter; 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.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.ShardingTableMetaDataAwareFiller; 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; Loading @@ -42,12 +44,12 @@ import java.util.HashSet; * * @author duhongjun */ @RequiredArgsConstructor public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredicateSegment> { @Setter public final class EncryptOrPredicateFiller implements SQLSegmentFiller<OrPredicateSegment>, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { private final EncryptRule encryptRule; private EncryptRule encryptRule; private final ShardingTableMetaData shardingTableMetaData; private ShardingTableMetaData shardingTableMetaData; @Override public void fill(final OrPredicateSegment sqlSegment, final SQLStatement sqlStatement) { Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/encrypt/dml/EncryptWhereFiller.java +1 −12 Original line number Diff line number Diff line Loading @@ -17,31 +17,20 @@ package org.apache.shardingsphere.core.parse.antlr.filler.encrypt.dml; import lombok.Setter; import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData; import org.apache.shardingsphere.core.parse.antlr.filler.api.EncryptRuleAwareFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.SQLSegmentFiller; import org.apache.shardingsphere.core.parse.antlr.filler.api.ShardingTableMetaDataAwareFiller; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.WhereSegment; import org.apache.shardingsphere.core.parse.antlr.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.antlr.sql.statement.dml.DeleteStatement; import org.apache.shardingsphere.core.rule.EncryptRule; /** * Where filler for encrypt. * * @author duhongjun */ @Setter public final class EncryptWhereFiller implements SQLSegmentFiller<WhereSegment>, EncryptRuleAwareFiller, ShardingTableMetaDataAwareFiller { private EncryptRule encryptRule; private ShardingTableMetaData shardingTableMetaData; public final class EncryptWhereFiller implements SQLSegmentFiller<WhereSegment> { @Override public void fill(final WhereSegment sqlSegment, final SQLStatement sqlStatement) { new EncryptOrPredicateFiller(encryptRule, shardingTableMetaData).fill(sqlSegment.getOrPredicate(), sqlStatement); sqlStatement.setParametersIndex(sqlSegment.getParameterCount()); if (sqlStatement instanceof DeleteStatement) { DeleteStatement deleteStatement = (DeleteStatement) sqlStatement; Loading