Commit c4cf80b2 authored by terrymanu's avatar terrymanu
Browse files

for #2084, selectClause => selectItems

parent 1c1d7df2
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -23,23 +23,23 @@ import org.apache.shardingsphere.core.parse.antlr.extractor.api.OptionalSQLSegme
import org.apache.shardingsphere.core.parse.antlr.extractor.impl.dml.select.item.SelectItemExtractor;
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.SelectClauseSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.SelectItemsSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.SelectItemSegment;

/**
 * Select clause extractor.
 * Select items extractor.
 *
 * @author duhongjun
 * @author panjuan
 */
public final class SelectClauseExtractor implements OptionalSQLSegmentExtractor {
public final class SelectItemsExtractor implements OptionalSQLSegmentExtractor {
    
    private final SelectItemExtractor selectItemExtractor = new SelectItemExtractor();
    
    @Override
    public Optional<SelectClauseSegment> extract(final ParserRuleContext ancestorNode) {
    public Optional<SelectItemsSegment> extract(final ParserRuleContext ancestorNode) {
        ParserRuleContext selectItemsNode = ExtractorUtils.getFirstChildNode(ancestorNode, RuleName.SELECT_ITEMS);
        SelectClauseSegment result = new SelectClauseSegment(selectItemsNode.getStart().getStartIndex(), selectItemsNode.getStop().getStopIndex(), hasDistinct(ancestorNode));
        SelectItemsSegment result = new SelectItemsSegment(selectItemsNode.getStart().getStartIndex(), selectItemsNode.getStop().getStopIndex(), hasDistinct(ancestorNode));
        Optional<ParserRuleContext> unqualifiedShorthandNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.UNQUALIFIED_SHORTHAND);
        if (unqualifiedShorthandNode.isPresent()) {
            setUnqualifiedShorthandSelectItemSegment(unqualifiedShorthandNode.get(), result);
@@ -48,23 +48,23 @@ public final class SelectClauseExtractor implements OptionalSQLSegmentExtractor
        return Optional.of(result);
    }
    
    private void setUnqualifiedShorthandSelectItemSegment(final ParserRuleContext unqualifiedShorthandNode, final SelectClauseSegment selectClauseSegment) {
    private void setUnqualifiedShorthandSelectItemSegment(final ParserRuleContext unqualifiedShorthandNode, final SelectItemsSegment selectItemsSegment) {
        Optional<? extends SelectItemSegment> unqualifiedShorthandSelectItemSegment = selectItemExtractor.extract(unqualifiedShorthandNode);
        if (unqualifiedShorthandSelectItemSegment.isPresent()) {
            selectClauseSegment.getSelectItems().add(unqualifiedShorthandSelectItemSegment.get());
            selectItemsSegment.getSelectItems().add(unqualifiedShorthandSelectItemSegment.get());
        }
    }
    
    private void setSelectItemSegment(final ParserRuleContext selectClauseNode, final SelectClauseSegment selectClauseSegment) {
        for (ParserRuleContext each : ExtractorUtils.getAllDescendantNodes(selectClauseNode, RuleName.SELECT_ITEM)) {
    private void setSelectItemSegment(final ParserRuleContext ancestorNode, final SelectItemsSegment selectItemsSegment) {
        for (ParserRuleContext each : ExtractorUtils.getAllDescendantNodes(ancestorNode, RuleName.SELECT_ITEM)) {
            Optional<? extends SelectItemSegment> selectItemSegment = selectItemExtractor.extract(each);
            if (selectItemSegment.isPresent()) {
                selectClauseSegment.getSelectItems().add(selectItemSegment.get());
                selectItemsSegment.getSelectItems().add(selectItemSegment.get());
            }
        }
    }
    
    private boolean hasDistinct(final ParserRuleContext selectClauseNode) {
        return ExtractorUtils.findFirstChildNode(ExtractorUtils.getFirstChildNode(selectClauseNode, RuleName.SELECT_SPECIFICATION), RuleName.DISTINCT).isPresent();
    private boolean hasDistinct(final ParserRuleContext ancestorNode) {
        return ExtractorUtils.findFirstChildNode(ExtractorUtils.getFirstChildNode(ancestorNode, RuleName.SELECT_SPECIFICATION), RuleName.DISTINCT).isPresent();
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ 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.SelectClauseSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.SelectItemsSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.WhereSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.expr.SubquerySegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.order.GroupBySegment;
@@ -56,9 +56,9 @@ public final class SubqueryExtractor implements OptionalSQLSegmentExtractor {
            parentNode = parentNode.getParent();
        }
        SubquerySegment result = new SubquerySegment(subqueryNode.getStart().getStartIndex(), subqueryNode.getStop().getStopIndex(), subqueryInFrom);
        Optional<SelectClauseSegment> selectClauseSegment = new SelectClauseExtractor().extract(subqueryNode);
        if (selectClauseSegment.isPresent()) {
            result.setSelectClauseSegment(selectClauseSegment.get());
        Optional<SelectItemsSegment> selectItemsSegment = new SelectItemsExtractor().extract(subqueryNode);
        if (selectItemsSegment.isPresent()) {
            result.setSelectItemsSegment(selectItemsSegment.get());
        }
        Optional<WhereSegment> whereSegment = selectWhereExtractor.extract(subqueryNode);
        if (whereSegment.isPresent()) {
+6 −6
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ import lombok.Setter;
import org.apache.shardingsphere.core.metadata.table.ShardingTableMetaData;
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.SelectClauseSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.SelectItemsSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.AggregationDistinctSelectItemSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.AggregationSelectItemSegment;
import org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.item.ColumnSelectItemSegment;
@@ -39,19 +39,19 @@ import java.util.LinkedHashSet;
import java.util.Set;

/**
 * Select clause filler.
 * Select items filler.
 *
 * @author duhongjun
 */
@Setter
public final class SelectClauseFiller implements SQLSegmentFiller<SelectClauseSegment>, ShardingTableMetaDataAwareFiller {
public final class SelectItemsFiller implements SQLSegmentFiller<SelectItemsSegment>, ShardingTableMetaDataAwareFiller {
    
    private ShardingTableMetaData shardingTableMetaData;
    
    private SelectItemFiller selectItemFiller;
    
    @Override
    public void fill(final SelectClauseSegment sqlSegment, final SQLStatement sqlStatement) {
    public void fill(final SelectItemsSegment sqlSegment, final SQLStatement sqlStatement) {
        selectItemFiller = new SelectItemFiller(shardingTableMetaData);
        SelectStatement selectStatement = (SelectStatement) sqlStatement;
        selectStatement.setFirstSelectItemStartIndex(sqlSegment.getFirstSelectItemStartIndex());
@@ -67,8 +67,8 @@ public final class SelectClauseFiller implements SQLSegmentFiller<SelectClauseSe
        }
    }
    
    private void fillDistinct(final SelectClauseSegment selectClauseSegment, final SelectStatement selectStatement) {
        Iterator<SelectItemSegment> selectItemSegmentIterator = selectClauseSegment.getSelectItems().iterator();
    private void fillDistinct(final SelectItemsSegment selectItemsSegment, final SelectStatement selectStatement) {
        Iterator<SelectItemSegment> selectItemSegmentIterator = selectItemsSegment.getSelectItems().iterator();
        SelectItemSegment firstSelectItemSegment = selectItemSegmentIterator.next();
        Set<String> distinctColumnNames = new LinkedHashSet<>();
        DistinctSelectItem distinctSelectItem = null;
+2 −2
Original line number Diff line number Diff line
@@ -35,8 +35,8 @@ public final class SubqueryFiller implements SQLSegmentFiller<SubquerySegment> {
        SelectStatement subqueryStatement = new SelectStatement();
        subqueryStatement.setParentStatement(selectStatement);
        selectStatement.getSubqueryStatements().add(subqueryStatement);
        if (sqlSegment.getSelectClauseSegment().isPresent()) {
            new SelectClauseFiller().fill(sqlSegment.getSelectClauseSegment().get(), subqueryStatement);
        if (sqlSegment.getSelectItemsSegment().isPresent()) {
            new SelectItemsFiller().fill(sqlSegment.getSelectItemsSegment().get(), subqueryStatement);
        }
        if (sqlSegment.getWhereSegment().isPresent()) {
           // new WhereFiller().fill(sqlSegment.getWhereSegment().get(), subqueryStatement, sql);
+2 −2
Original line number Diff line number Diff line
@@ -26,14 +26,14 @@ import java.util.Collection;
import java.util.LinkedList;

/**
 * Select clause segment.
 * Select items segment.
 * 
 * @author duhongjun
 * @author panjuan
 */
@RequiredArgsConstructor
@Getter
public final class SelectClauseSegment implements SQLSegment {
public final class SelectItemsSegment implements SQLSegment {
    
    private final int firstSelectItemStartIndex;
    
Loading