Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/ExpressionExtractor.java→sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/common/expression/ExpressionExtractor.java +7 −28 Original line number Diff line number Diff line Loading @@ -15,10 +15,9 @@ * limitations under the License. */ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml; package org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression; import com.google.common.base.Optional; import com.google.common.base.Preconditions; 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.select.SubqueryExtractor; Loading @@ -39,6 +38,8 @@ import java.util.Map; */ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { private final ParameterMarkerExpressionExtractor parameterMarkerExpressionExtractor = new ParameterMarkerExpressionExtractor(); @Override public Optional<? extends ExpressionSegment> extract(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> subqueryNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.SUBQUERY); Loading @@ -46,37 +47,15 @@ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { } private ExpressionSegment extractExpression(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.PARAMETER_MARKER); if (parameterMarkerNode.isPresent()) { Optional<ParameterMarkerExpressionSegment> result = extractParameterMarkerExpressionSegment(parameterMarkerNode.get(), parameterMarkerIndexes); Preconditions.checkState(result.isPresent()); return result.get(); Optional<ParameterMarkerExpressionSegment> parameterMarkerExpressionSegment = parameterMarkerExpressionExtractor.extract(expressionNode, parameterMarkerIndexes); if (parameterMarkerExpressionSegment.isPresent()) { return parameterMarkerExpressionSegment.get(); } Optional<ParserRuleContext> literalsNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.LITERALS); return literalsNode.isPresent() ? extractLiteralExpressionSegment(literalsNode.get()) : extractCommonExpressionSegment(expressionNode); } /** * Extract parameter marker expression segment. * * @param parameterMarkerIndexes parameter marker indexes * @param expressionNode expression node * @return parameter marker expression segment */ public Optional<ParameterMarkerExpressionSegment> extractParameterMarkerExpressionSegment(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.PARAMETER_MARKER); return parameterMarkerNode.isPresent() ? Optional.of(new ParameterMarkerExpressionSegment(expressionNode.getStop().getStopIndex(), parameterMarkerIndexes.get(parameterMarkerNode.get()))) : Optional.<ParameterMarkerExpressionSegment>absent(); } /** * Extract literal expression segment. * * @param expressionNode expression node * @return literal expression segment */ public LiteralExpressionSegment extractLiteralExpressionSegment(final ParserRuleContext expressionNode) { private LiteralExpressionSegment extractLiteralExpressionSegment(final ParserRuleContext expressionNode) { Optional<ParserRuleContext> numberLiteralsNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.NUMBER_LITERALS); Object literals = null; if (numberLiteralsNode.isPresent()) { Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/common/expression/ParameterMarkerExpressionExtractor.java 0 → 100644 +42 −0 Original line number Diff line number Diff line /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression; 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.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ParameterMarkerExpressionSegment; import java.util.Map; /** * Parameter marker expression extractor. * * @author zhangliang */ public final class ParameterMarkerExpressionExtractor implements OptionalSQLSegmentExtractor { @Override public Optional<ParameterMarkerExpressionSegment> extract(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.PARAMETER_MARKER); return parameterMarkerNode.isPresent() ? Optional.of(new ParameterMarkerExpressionSegment(expressionNode.getStop().getStopIndex(), parameterMarkerIndexes.get(parameterMarkerNode.get()))) : Optional.<ParameterMarkerExpressionSegment>absent(); } } sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/AssignmentExtractor.java +4 −7 Original line number Diff line number Diff line Loading @@ -23,12 +23,12 @@ import lombok.RequiredArgsConstructor; 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.common.column.ColumnExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression.ExpressionExtractor; 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.assignment.AssignmentSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ParameterMarkerExpressionSegment; import java.util.Map; Loading @@ -51,11 +51,8 @@ public final class AssignmentExtractor implements OptionalSQLSegmentExtractor { return Optional.absent(); } Optional<ColumnSegment> columnSegment = columnExtractor.extract((ParserRuleContext) assignmentNode.get().getChild(0), parameterMarkerIndexes); Preconditions.checkState(columnSegment.isPresent()); Optional<ParameterMarkerExpressionSegment> parameterMarkerExpressionSegment = expressionExtractor.extractParameterMarkerExpressionSegment( (ParserRuleContext) assignmentNode.get().getChild(2), parameterMarkerIndexes); ExpressionSegment expressionSegment = parameterMarkerExpressionSegment.isPresent() ? parameterMarkerExpressionSegment.get() : expressionExtractor.extractLiteralExpressionSegment((ParserRuleContext) assignmentNode.get().getChild(2)); return Optional.of(new AssignmentSegment(columnSegment.get(), expressionSegment)); Optional<? extends ExpressionSegment> expressionSegment = expressionExtractor.extract((ParserRuleContext) assignmentNode.get().getChild(2), parameterMarkerIndexes); Preconditions.checkState(columnSegment.isPresent() && expressionSegment.isPresent()); return Optional.of(new AssignmentSegment(columnSegment.get(), expressionSegment.get())); } } sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/PredicateExtractor.java +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import org.apache.shardingsphere.core.parse.antlr.constant.LogicalOperator; import org.apache.shardingsphere.core.parse.antlr.constant.Paren; import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.column.ColumnExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression.ExpressionExtractor; 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; Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/insert/InsertValuesExtractor.java +4 −7 Original line number Diff line number Diff line Loading @@ -20,12 +20,11 @@ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.insert; import com.google.common.base.Optional; import org.antlr.v4.runtime.ParserRuleContext; import org.apache.shardingsphere.core.parse.antlr.extractor.api.CollectionSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.ExpressionExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression.ExpressionExtractor; 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.InsertValuesSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ParameterMarkerExpressionSegment; import java.util.Collection; import java.util.Collections; Loading Loading @@ -57,11 +56,9 @@ public final class InsertValuesExtractor implements CollectionSQLSegmentExtracto private Collection<ExpressionSegment> extractExpressionSegments(final ParserRuleContext assignmentValuesNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Collection<ExpressionSegment> result = new LinkedList<>(); for (ParserRuleContext each : ExtractorUtils.getAllDescendantNodes(assignmentValuesNode, RuleName.ASSIGNMENT_VALUE)) { Optional<ParameterMarkerExpressionSegment> parameterMarkerExpressionSegment = expressionExtractor.extractParameterMarkerExpressionSegment(each, parameterMarkerIndexes); if (parameterMarkerExpressionSegment.isPresent()) { result.add(parameterMarkerExpressionSegment.get()); } else { result.add(expressionExtractor.extractLiteralExpressionSegment(each)); Optional<? extends ExpressionSegment> expressionSegment = expressionExtractor.extract(each, parameterMarkerIndexes); if (expressionSegment.isPresent()) { result.add(expressionSegment.get()); } } return result; Loading Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/ExpressionExtractor.java→sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/common/expression/ExpressionExtractor.java +7 −28 Original line number Diff line number Diff line Loading @@ -15,10 +15,9 @@ * limitations under the License. */ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml; package org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression; import com.google.common.base.Optional; import com.google.common.base.Preconditions; 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.select.SubqueryExtractor; Loading @@ -39,6 +38,8 @@ import java.util.Map; */ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { private final ParameterMarkerExpressionExtractor parameterMarkerExpressionExtractor = new ParameterMarkerExpressionExtractor(); @Override public Optional<? extends ExpressionSegment> extract(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> subqueryNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.SUBQUERY); Loading @@ -46,37 +47,15 @@ public final class ExpressionExtractor implements OptionalSQLSegmentExtractor { } private ExpressionSegment extractExpression(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.PARAMETER_MARKER); if (parameterMarkerNode.isPresent()) { Optional<ParameterMarkerExpressionSegment> result = extractParameterMarkerExpressionSegment(parameterMarkerNode.get(), parameterMarkerIndexes); Preconditions.checkState(result.isPresent()); return result.get(); Optional<ParameterMarkerExpressionSegment> parameterMarkerExpressionSegment = parameterMarkerExpressionExtractor.extract(expressionNode, parameterMarkerIndexes); if (parameterMarkerExpressionSegment.isPresent()) { return parameterMarkerExpressionSegment.get(); } Optional<ParserRuleContext> literalsNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.LITERALS); return literalsNode.isPresent() ? extractLiteralExpressionSegment(literalsNode.get()) : extractCommonExpressionSegment(expressionNode); } /** * Extract parameter marker expression segment. * * @param parameterMarkerIndexes parameter marker indexes * @param expressionNode expression node * @return parameter marker expression segment */ public Optional<ParameterMarkerExpressionSegment> extractParameterMarkerExpressionSegment(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.PARAMETER_MARKER); return parameterMarkerNode.isPresent() ? Optional.of(new ParameterMarkerExpressionSegment(expressionNode.getStop().getStopIndex(), parameterMarkerIndexes.get(parameterMarkerNode.get()))) : Optional.<ParameterMarkerExpressionSegment>absent(); } /** * Extract literal expression segment. * * @param expressionNode expression node * @return literal expression segment */ public LiteralExpressionSegment extractLiteralExpressionSegment(final ParserRuleContext expressionNode) { private LiteralExpressionSegment extractLiteralExpressionSegment(final ParserRuleContext expressionNode) { Optional<ParserRuleContext> numberLiteralsNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.NUMBER_LITERALS); Object literals = null; if (numberLiteralsNode.isPresent()) { Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/common/expression/ParameterMarkerExpressionExtractor.java 0 → 100644 +42 −0 Original line number Diff line number Diff line /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression; 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.util.ExtractorUtils; import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ParameterMarkerExpressionSegment; import java.util.Map; /** * Parameter marker expression extractor. * * @author zhangliang */ public final class ParameterMarkerExpressionExtractor implements OptionalSQLSegmentExtractor { @Override public Optional<ParameterMarkerExpressionSegment> extract(final ParserRuleContext expressionNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Optional<ParserRuleContext> parameterMarkerNode = ExtractorUtils.findSingleNodeFromFirstDescendant(expressionNode, RuleName.PARAMETER_MARKER); return parameterMarkerNode.isPresent() ? Optional.of(new ParameterMarkerExpressionSegment(expressionNode.getStop().getStopIndex(), parameterMarkerIndexes.get(parameterMarkerNode.get()))) : Optional.<ParameterMarkerExpressionSegment>absent(); } }
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/AssignmentExtractor.java +4 −7 Original line number Diff line number Diff line Loading @@ -23,12 +23,12 @@ import lombok.RequiredArgsConstructor; 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.common.column.ColumnExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression.ExpressionExtractor; 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.assignment.AssignmentSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ParameterMarkerExpressionSegment; import java.util.Map; Loading @@ -51,11 +51,8 @@ public final class AssignmentExtractor implements OptionalSQLSegmentExtractor { return Optional.absent(); } Optional<ColumnSegment> columnSegment = columnExtractor.extract((ParserRuleContext) assignmentNode.get().getChild(0), parameterMarkerIndexes); Preconditions.checkState(columnSegment.isPresent()); Optional<ParameterMarkerExpressionSegment> parameterMarkerExpressionSegment = expressionExtractor.extractParameterMarkerExpressionSegment( (ParserRuleContext) assignmentNode.get().getChild(2), parameterMarkerIndexes); ExpressionSegment expressionSegment = parameterMarkerExpressionSegment.isPresent() ? parameterMarkerExpressionSegment.get() : expressionExtractor.extractLiteralExpressionSegment((ParserRuleContext) assignmentNode.get().getChild(2)); return Optional.of(new AssignmentSegment(columnSegment.get(), expressionSegment)); Optional<? extends ExpressionSegment> expressionSegment = expressionExtractor.extract((ParserRuleContext) assignmentNode.get().getChild(2), parameterMarkerIndexes); Preconditions.checkState(columnSegment.isPresent() && expressionSegment.isPresent()); return Optional.of(new AssignmentSegment(columnSegment.get(), expressionSegment.get())); } }
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/PredicateExtractor.java +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import org.apache.shardingsphere.core.parse.antlr.constant.LogicalOperator; import org.apache.shardingsphere.core.parse.antlr.constant.Paren; import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.column.ColumnExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression.ExpressionExtractor; 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; Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/insert/InsertValuesExtractor.java +4 −7 Original line number Diff line number Diff line Loading @@ -20,12 +20,11 @@ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.insert; import com.google.common.base.Optional; import org.antlr.v4.runtime.ParserRuleContext; import org.apache.shardingsphere.core.parse.antlr.extractor.api.CollectionSQLSegmentExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.ExpressionExtractor; import org.apache.shardingsphere.core.parse.antlr.extractor.impl.common.expression.ExpressionExtractor; 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.InsertValuesSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.ParameterMarkerExpressionSegment; import java.util.Collection; import java.util.Collections; Loading Loading @@ -57,11 +56,9 @@ public final class InsertValuesExtractor implements CollectionSQLSegmentExtracto private Collection<ExpressionSegment> extractExpressionSegments(final ParserRuleContext assignmentValuesNode, final Map<ParserRuleContext, Integer> parameterMarkerIndexes) { Collection<ExpressionSegment> result = new LinkedList<>(); for (ParserRuleContext each : ExtractorUtils.getAllDescendantNodes(assignmentValuesNode, RuleName.ASSIGNMENT_VALUE)) { Optional<ParameterMarkerExpressionSegment> parameterMarkerExpressionSegment = expressionExtractor.extractParameterMarkerExpressionSegment(each, parameterMarkerIndexes); if (parameterMarkerExpressionSegment.isPresent()) { result.add(parameterMarkerExpressionSegment.get()); } else { result.add(expressionExtractor.extractLiteralExpressionSegment(each)); Optional<? extends ExpressionSegment> expressionSegment = expressionExtractor.extract(each, parameterMarkerIndexes); if (expressionSegment.isPresent()) { result.add(expressionSegment.get()); } } return result; Loading