Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/item/ColumnSelectItemExtractor.java +10 −4 Original line number Diff line number Diff line Loading @@ -18,27 +18,33 @@ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.select.item; 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.common.column.ColumnExtractor; 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.item.ColumnSelectItemSegment; /** * Column select item segment extractor. * Column select item extractor. * * @author zhangliang */ public final class ColumnSelectItemExtractor implements OptionalSQLSegmentExtractor { private final ColumnExtractor columnExtractor = new ColumnExtractor(); @Override public Optional<ColumnSelectItemSegment> extract(final ParserRuleContext expressionNode) { if (!RuleName.COLUMN_NAME.getName().equals(expressionNode.getChild(0).getClass().getSimpleName())) { return Optional.absent(); } ParserRuleContext columnNode = (ParserRuleContext) expressionNode.getChild(0); ColumnSelectItemSegment result = new ColumnSelectItemSegment(columnNode.getStart().getStartIndex(), columnNode.getText()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.ALIAS); Optional<ColumnSegment> columnSegment = columnExtractor.extract((ParserRuleContext) expressionNode.getChild(0)); Preconditions.checkState(columnSegment.isPresent()); ColumnSelectItemSegment result = new ColumnSelectItemSegment(columnSegment.get()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.ALIAS); if (aliasNode.isPresent()) { result.setAlias(aliasNode.get().getText()); } Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/item/ExpressionSelectItemExtractor.java +2 −2 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.ExpressionSelectItemSegment; /** * Expression select item segment extractor. * Expression select item extractor. * * @author zhangliang */ Loading @@ -35,7 +35,7 @@ public final class ExpressionSelectItemExtractor implements OptionalSQLSegmentEx public Optional<ExpressionSelectItemSegment> extract(final ParserRuleContext expressionNode) { // TODO parse table inside expression ExpressionSelectItemSegment result = new ExpressionSelectItemSegment(expressionNode.getText(), expressionNode.getStart().getStartIndex(), expressionNode.getStop().getStopIndex()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.ALIAS); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.ALIAS); if (aliasNode.isPresent()) { result.setAlias(aliasNode.get().getText()); } Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/item/FunctionSelectItemExtractor.java +3 −6 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.Expressio import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.SelectItemSegment; /** * Function select item segment extractor. * Function select item extractor. * * @author zhangliang */ Loading @@ -40,10 +40,7 @@ public final class FunctionSelectItemExtractor implements OptionalSQLSegmentExtr @Override public Optional<SelectItemSegment> extract(final ParserRuleContext expressionNode) { Optional<ParserRuleContext> functionNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.FUNCTION_CALL); if (!functionNode.isPresent()) { return Optional.absent(); } return Optional.of(extractFunctionSelectItemSegment(expressionNode, functionNode.get())); return functionNode.isPresent() ? Optional.of(extractFunctionSelectItemSegment(expressionNode, functionNode.get())) : Optional.<SelectItemSegment>absent(); } private SelectItemSegment extractFunctionSelectItemSegment(final ParserRuleContext expressionNode, final ParserRuleContext functionNode) { Loading @@ -51,7 +48,7 @@ public final class FunctionSelectItemExtractor implements OptionalSQLSegmentExtr Optional<AggregationType> aggregationType = findAggregationType(functionName); AliasAvailable result = aggregationType.isPresent() ? extractAggregationSelectItemSegment(aggregationType.get(), functionNode) : new ExpressionSelectItemSegment(functionNode.getText(), functionNode.getStart().getStartIndex(), functionNode.getStop().getStopIndex()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.ALIAS); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.ALIAS); if (aliasNode.isPresent()) { result.setAlias(aliasNode.get().getText()); } Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/sql/segment/dml/column/ColumnSegment.java +3 −0 Original line number Diff line number Diff line Loading @@ -18,7 +18,9 @@ package org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column; import com.google.common.base.Optional; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import org.apache.shardingsphere.core.parse.antlr.constant.QuoteCharacter; import org.apache.shardingsphere.core.parse.antlr.sql.OwnerAvailable; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.SQLRightValueExpressionSegment; Loading @@ -42,6 +44,7 @@ public class ColumnSegment implements SQLRightValueExpressionSegment, OwnerAvail private String owner; @Setter(AccessLevel.PROTECTED) private QuoteCharacter ownerQuoteCharacter = QuoteCharacter.NONE; public ColumnSegment(final int startIndex, final String name) { Loading sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/sql/segment/dml/item/ColumnSelectItemSegment.java +6 −2 Original line number Diff line number Diff line Loading @@ -31,8 +31,12 @@ public final class ColumnSelectItemSegment extends ColumnSegment implements Sele private String alias; public ColumnSelectItemSegment(final int startIndex, final String name) { super(startIndex, name); public ColumnSelectItemSegment(final ColumnSegment columnSegment) { super(columnSegment.getStartIndex(), columnSegment.getName()); if (columnSegment.getOwner().isPresent()) { setOwner(columnSegment.getOwner().get()); setOwnerQuoteCharacter(columnSegment.getOwnerQuoteCharacter()); } } @Override Loading Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/item/ColumnSelectItemExtractor.java +10 −4 Original line number Diff line number Diff line Loading @@ -18,27 +18,33 @@ package org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.select.item; 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.common.column.ColumnExtractor; 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.item.ColumnSelectItemSegment; /** * Column select item segment extractor. * Column select item extractor. * * @author zhangliang */ public final class ColumnSelectItemExtractor implements OptionalSQLSegmentExtractor { private final ColumnExtractor columnExtractor = new ColumnExtractor(); @Override public Optional<ColumnSelectItemSegment> extract(final ParserRuleContext expressionNode) { if (!RuleName.COLUMN_NAME.getName().equals(expressionNode.getChild(0).getClass().getSimpleName())) { return Optional.absent(); } ParserRuleContext columnNode = (ParserRuleContext) expressionNode.getChild(0); ColumnSelectItemSegment result = new ColumnSelectItemSegment(columnNode.getStart().getStartIndex(), columnNode.getText()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.ALIAS); Optional<ColumnSegment> columnSegment = columnExtractor.extract((ParserRuleContext) expressionNode.getChild(0)); Preconditions.checkState(columnSegment.isPresent()); ColumnSelectItemSegment result = new ColumnSelectItemSegment(columnSegment.get()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.ALIAS); if (aliasNode.isPresent()) { result.setAlias(aliasNode.get().getText()); } Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/item/ExpressionSelectItemExtractor.java +2 −2 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.util.RuleName; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.ExpressionSelectItemSegment; /** * Expression select item segment extractor. * Expression select item extractor. * * @author zhangliang */ Loading @@ -35,7 +35,7 @@ public final class ExpressionSelectItemExtractor implements OptionalSQLSegmentEx public Optional<ExpressionSelectItemSegment> extract(final ParserRuleContext expressionNode) { // TODO parse table inside expression ExpressionSelectItemSegment result = new ExpressionSelectItemSegment(expressionNode.getText(), expressionNode.getStart().getStartIndex(), expressionNode.getStop().getStopIndex()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.ALIAS); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.ALIAS); if (aliasNode.isPresent()) { result.setAlias(aliasNode.get().getText()); } Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/item/FunctionSelectItemExtractor.java +3 −6 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.Expressio import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.SelectItemSegment; /** * Function select item segment extractor. * Function select item extractor. * * @author zhangliang */ Loading @@ -40,10 +40,7 @@ public final class FunctionSelectItemExtractor implements OptionalSQLSegmentExtr @Override public Optional<SelectItemSegment> extract(final ParserRuleContext expressionNode) { Optional<ParserRuleContext> functionNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.FUNCTION_CALL); if (!functionNode.isPresent()) { return Optional.absent(); } return Optional.of(extractFunctionSelectItemSegment(expressionNode, functionNode.get())); return functionNode.isPresent() ? Optional.of(extractFunctionSelectItemSegment(expressionNode, functionNode.get())) : Optional.<SelectItemSegment>absent(); } private SelectItemSegment extractFunctionSelectItemSegment(final ParserRuleContext expressionNode, final ParserRuleContext functionNode) { Loading @@ -51,7 +48,7 @@ public final class FunctionSelectItemExtractor implements OptionalSQLSegmentExtr Optional<AggregationType> aggregationType = findAggregationType(functionName); AliasAvailable result = aggregationType.isPresent() ? extractAggregationSelectItemSegment(aggregationType.get(), functionNode) : new ExpressionSelectItemSegment(functionNode.getText(), functionNode.getStart().getStartIndex(), functionNode.getStop().getStopIndex()); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNode(expressionNode, RuleName.ALIAS); Optional<ParserRuleContext> aliasNode = ExtractorUtils.findFirstChildNodeNoneRecursive(expressionNode, RuleName.ALIAS); if (aliasNode.isPresent()) { result.setAlias(aliasNode.get().getText()); } Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/sql/segment/dml/column/ColumnSegment.java +3 −0 Original line number Diff line number Diff line Loading @@ -18,7 +18,9 @@ package org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.column; import com.google.common.base.Optional; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import org.apache.shardingsphere.core.parse.antlr.constant.QuoteCharacter; import org.apache.shardingsphere.core.parse.antlr.sql.OwnerAvailable; import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.SQLRightValueExpressionSegment; Loading @@ -42,6 +44,7 @@ public class ColumnSegment implements SQLRightValueExpressionSegment, OwnerAvail private String owner; @Setter(AccessLevel.PROTECTED) private QuoteCharacter ownerQuoteCharacter = QuoteCharacter.NONE; public ColumnSegment(final int startIndex, final String name) { Loading
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/sql/segment/dml/item/ColumnSelectItemSegment.java +6 −2 Original line number Diff line number Diff line Loading @@ -31,8 +31,12 @@ public final class ColumnSelectItemSegment extends ColumnSegment implements Sele private String alias; public ColumnSelectItemSegment(final int startIndex, final String name) { super(startIndex, name); public ColumnSelectItemSegment(final ColumnSegment columnSegment) { super(columnSegment.getStartIndex(), columnSegment.getName()); if (columnSegment.getOwner().isPresent()) { setOwner(columnSegment.getOwner().get()); setOwnerQuoteCharacter(columnSegment.getOwnerQuoteCharacter()); } } @Override Loading