Loading sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/extractor/impl/SelectClauseExtractor.java +15 −18 Original line number Diff line number Diff line Loading @@ -17,18 +17,16 @@ package io.shardingsphere.core.parsing.antlr.extractor.impl; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNodeImpl; import com.google.common.base.Optional; import io.shardingsphere.core.parsing.antlr.extractor.OptionalSQLSegmentExtractor; import io.shardingsphere.core.parsing.antlr.extractor.util.ExtractorUtils; import io.shardingsphere.core.parsing.antlr.extractor.util.RuleName; import io.shardingsphere.core.parsing.antlr.sql.segment.SelectClauseSegment; import io.shardingsphere.core.parsing.antlr.sql.segment.expr.ExpressionSegment; import io.shardingsphere.core.parsing.lexer.token.DefaultKeyword; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNodeImpl; /** * Select clause extractor. Loading @@ -38,27 +36,22 @@ import io.shardingsphere.core.parsing.lexer.token.DefaultKeyword; */ public final class SelectClauseExtractor implements OptionalSQLSegmentExtractor { private ExpressionExtractor expressionExtractor = new ExpressionExtractor(); @Override public Optional<SelectClauseSegment> extract(final ParserRuleContext ancestorNode) { Optional<ParserRuleContext> selectClauseNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.SELECT_CLAUSE); if (!selectClauseNode.isPresent()) { return Optional.absent(); } boolean hasDistinct = false; if (2 < selectClauseNode.get().getChildCount()) { if (DefaultKeyword.DISTINCT.name().equalsIgnoreCase(selectClauseNode.get().getChild(1).getText())) { hasDistinct = true; } } Optional<ParserRuleContext> selectExpressionNode = ExtractorUtils.findFirstChildNode(selectClauseNode.get(), RuleName.SELECT_EXPRS); if (!selectExpressionNode.isPresent()) { Optional<ParserRuleContext> selectExpressionsNode = ExtractorUtils.findFirstChildNode(selectClauseNode.get(), RuleName.SELECT_EXPRS); if (!selectExpressionsNode.isPresent()) { return Optional.absent(); } SelectClauseSegment result = new SelectClauseSegment(selectExpressionNode.get().getStart().getStartIndex(), selectExpressionNode.get().getStop().getStopIndex() + 2); result.setHasDistinct(hasDistinct); ExpressionExtractor expressionExtractor = new ExpressionExtractor(); for (int i = 0; i < selectExpressionNode.get().getChildCount(); i++) { ParseTree childNode = selectExpressionNode.get().getChild(i); SelectClauseSegment result = new SelectClauseSegment( selectExpressionsNode.get().getStart().getStartIndex(), selectExpressionsNode.get().getStop().getStopIndex() + 2, hasDistinct(selectClauseNode.get())); for (int i = 0; i < selectExpressionsNode.get().getChildCount(); i++) { ParseTree childNode = selectExpressionsNode.get().getChild(i); if (childNode instanceof TerminalNodeImpl) { continue; } Loading @@ -69,4 +62,8 @@ public final class SelectClauseExtractor implements OptionalSQLSegmentExtractor } return Optional.of(result); } private boolean hasDistinct(final ParserRuleContext selectClauseNode) { return selectClauseNode.getChildCount() > 2 && DefaultKeyword.DISTINCT.name().equalsIgnoreCase(selectClauseNode.getChild(1).getText()); } } sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/sql/segment/SelectClauseSegment.java +2 −4 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antlr.sql.segment; import io.shardingsphere.core.parsing.antlr.sql.segment.expr.ExpressionSegment; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import java.util.Collection; import java.util.LinkedList; Loading @@ -39,8 +38,7 @@ public final class SelectClauseSegment implements SQLSegment { private final int selectListLastPosition; private final Collection<ExpressionSegment> expressions = new LinkedList<>(); private final boolean hasDistinct; @Setter private boolean hasDistinct; private final Collection<ExpressionSegment> expressions = new LinkedList<>(); } sharding-core/src/main/antlr4/imports/DQLBase.g4 +1 −1 File changed.Contains only whitespace changes. Show changes Loading
sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/extractor/impl/SelectClauseExtractor.java +15 −18 Original line number Diff line number Diff line Loading @@ -17,18 +17,16 @@ package io.shardingsphere.core.parsing.antlr.extractor.impl; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNodeImpl; import com.google.common.base.Optional; import io.shardingsphere.core.parsing.antlr.extractor.OptionalSQLSegmentExtractor; import io.shardingsphere.core.parsing.antlr.extractor.util.ExtractorUtils; import io.shardingsphere.core.parsing.antlr.extractor.util.RuleName; import io.shardingsphere.core.parsing.antlr.sql.segment.SelectClauseSegment; import io.shardingsphere.core.parsing.antlr.sql.segment.expr.ExpressionSegment; import io.shardingsphere.core.parsing.lexer.token.DefaultKeyword; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNodeImpl; /** * Select clause extractor. Loading @@ -38,27 +36,22 @@ import io.shardingsphere.core.parsing.lexer.token.DefaultKeyword; */ public final class SelectClauseExtractor implements OptionalSQLSegmentExtractor { private ExpressionExtractor expressionExtractor = new ExpressionExtractor(); @Override public Optional<SelectClauseSegment> extract(final ParserRuleContext ancestorNode) { Optional<ParserRuleContext> selectClauseNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.SELECT_CLAUSE); if (!selectClauseNode.isPresent()) { return Optional.absent(); } boolean hasDistinct = false; if (2 < selectClauseNode.get().getChildCount()) { if (DefaultKeyword.DISTINCT.name().equalsIgnoreCase(selectClauseNode.get().getChild(1).getText())) { hasDistinct = true; } } Optional<ParserRuleContext> selectExpressionNode = ExtractorUtils.findFirstChildNode(selectClauseNode.get(), RuleName.SELECT_EXPRS); if (!selectExpressionNode.isPresent()) { Optional<ParserRuleContext> selectExpressionsNode = ExtractorUtils.findFirstChildNode(selectClauseNode.get(), RuleName.SELECT_EXPRS); if (!selectExpressionsNode.isPresent()) { return Optional.absent(); } SelectClauseSegment result = new SelectClauseSegment(selectExpressionNode.get().getStart().getStartIndex(), selectExpressionNode.get().getStop().getStopIndex() + 2); result.setHasDistinct(hasDistinct); ExpressionExtractor expressionExtractor = new ExpressionExtractor(); for (int i = 0; i < selectExpressionNode.get().getChildCount(); i++) { ParseTree childNode = selectExpressionNode.get().getChild(i); SelectClauseSegment result = new SelectClauseSegment( selectExpressionsNode.get().getStart().getStartIndex(), selectExpressionsNode.get().getStop().getStopIndex() + 2, hasDistinct(selectClauseNode.get())); for (int i = 0; i < selectExpressionsNode.get().getChildCount(); i++) { ParseTree childNode = selectExpressionsNode.get().getChild(i); if (childNode instanceof TerminalNodeImpl) { continue; } Loading @@ -69,4 +62,8 @@ public final class SelectClauseExtractor implements OptionalSQLSegmentExtractor } return Optional.of(result); } private boolean hasDistinct(final ParserRuleContext selectClauseNode) { return selectClauseNode.getChildCount() > 2 && DefaultKeyword.DISTINCT.name().equalsIgnoreCase(selectClauseNode.getChild(1).getText()); } }
sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/sql/segment/SelectClauseSegment.java +2 −4 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antlr.sql.segment; import io.shardingsphere.core.parsing.antlr.sql.segment.expr.ExpressionSegment; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import java.util.Collection; import java.util.LinkedList; Loading @@ -39,8 +38,7 @@ public final class SelectClauseSegment implements SQLSegment { private final int selectListLastPosition; private final Collection<ExpressionSegment> expressions = new LinkedList<>(); private final boolean hasDistinct; @Setter private boolean hasDistinct; private final Collection<ExpressionSegment> expressions = new LinkedList<>(); }
sharding-core/src/main/antlr4/imports/DQLBase.g4 +1 −1 File changed.Contains only whitespace changes. Show changes