Unverified Commit 66268e51 authored by 张亮's avatar 张亮 Committed by GitHub
Browse files

Merge pull request #1690 from codefairy08/dev

some update
parents 428e69dd 20157769
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -17,13 +17,17 @@

package io.shardingsphere.core.parsing.antlr.extractor.impl.definition.column;

import java.util.Collection;
import java.util.Iterator;

import org.antlr.v4.runtime.ParserRuleContext;

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.SQLSegment;
import io.shardingsphere.core.parsing.parser.exception.SQLParsingUnsupportedException;
import org.antlr.v4.runtime.ParserRuleContext;
import io.shardingsphere.core.parsing.antlr.sql.segment.definition.column.alter.RenameColumnSegment;

/**
 * Rename column definition extractor.
@@ -33,11 +37,16 @@ import org.antlr.v4.runtime.ParserRuleContext;
public final class RenameColumnDefinitionExtractor implements OptionalSQLSegmentExtractor {
    
    @Override
    public Optional<SQLSegment> extract(final ParserRuleContext ancestorNode) {
    public Optional<RenameColumnSegment> extract(final ParserRuleContext ancestorNode) {
        Optional<ParserRuleContext> modifyColumnNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.RENAME_COLUMN);
        if (!modifyColumnNode.isPresent()) {
            return Optional.absent();
        }
        throw new SQLParsingUnsupportedException("Unsupported SQL statement of rename column definition");
        Collection<ParserRuleContext> columnNodes = ExtractorUtils.getAllDescendantNodes(modifyColumnNode.get(), RuleName.COLUMN_NAME);
        if (2 != columnNodes.size()) {
            return Optional.absent();
        }
        Iterator<ParserRuleContext> iterator = columnNodes.iterator();
        return Optional.of(new RenameColumnSegment(iterator.next().getText(), iterator.next().getText()));
    }
}
+12 −5
Original line number Diff line number Diff line
@@ -17,13 +17,16 @@

package io.shardingsphere.core.parsing.antlr.extractor.impl.definition.table;

import org.antlr.v4.runtime.ParserRuleContext;

import com.google.common.base.Optional;

import io.shardingsphere.core.parsing.antlr.extractor.OptionalSQLSegmentExtractor;
import io.shardingsphere.core.parsing.antlr.extractor.impl.TableNameExtractor;
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.SQLSegment;
import io.shardingsphere.core.parsing.parser.exception.SQLParsingUnsupportedException;
import org.antlr.v4.runtime.ParserRuleContext;
import io.shardingsphere.core.parsing.antlr.sql.segment.table.RenameTableSegment;
import io.shardingsphere.core.parsing.antlr.sql.segment.table.TableSegment;

/**
 * Rename table extractor.
@@ -33,11 +36,15 @@ import org.antlr.v4.runtime.ParserRuleContext;
public final class RenameTableExtractor implements OptionalSQLSegmentExtractor {
    
    @Override
    public Optional<SQLSegment> extract(final ParserRuleContext ancestorNode) {
    public Optional<RenameTableSegment> extract(final ParserRuleContext ancestorNode) {
        Optional<ParserRuleContext> renameTableNode = ExtractorUtils.findFirstChildNode(ancestorNode, RuleName.RENAME_TABLE);
        if (!renameTableNode.isPresent()) {
            return Optional.absent();
        }
        throw new SQLParsingUnsupportedException("Unsupported SQL statement of rename table");
        Optional<TableSegment> tableSegment = new TableNameExtractor().extract(renameTableNode.get());
        if (tableSegment.isPresent()) {
            return Optional.of(new RenameTableSegment(tableSegment.get().getName()));
        }
        return Optional.absent();
    }
}
+43 −0
Original line number Diff line number Diff line
/*
 * Copyright 2016-2018 shardingsphere.io.
 * <p>
 * Licensed 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.
 * </p>
 */

package io.shardingsphere.core.parsing.antlr.filler.impl;

import io.shardingsphere.core.metadata.table.ShardingTableMetaData;
import io.shardingsphere.core.parsing.antlr.filler.SQLStatementFiller;
import io.shardingsphere.core.parsing.antlr.sql.segment.table.RenameTableSegment;
import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.AlterTableStatement;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.rule.ShardingRule;

/**
 * Table filler.
 *
 * @author duhongjun
 */
public final class RenameTableFiller implements SQLStatementFiller<RenameTableSegment> {
    
    @Override
    public void fill(final RenameTableSegment sqlSegment, final SQLStatement sqlStatement, final String sql, final ShardingRule shardingRule,
                     final ShardingTableMetaData shardingTableMetaData) {
        if (!(sqlStatement instanceof AlterTableStatement)) {
            return;
        }
        AlterTableStatement alterTableStatement = (AlterTableStatement) sqlStatement;
        alterTableStatement.setNewTableName(sqlSegment.getNewTableName());
    }
}
+4 −3
Original line number Diff line number Diff line
@@ -63,8 +63,8 @@ public final class SelectClauseFiller implements SQLStatementFiller<SelectClause
        }
    }
    
    private void fillDistinct(final SelectClauseSegment selectClauseSegment,
                              final SelectStatement selectStatement, final String sql, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData) {
    private void fillDistinct(final SelectClauseSegment selectClauseSegment, final SelectStatement selectStatement, final String sql, final ShardingRule shardingRule,
                              final ShardingTableMetaData shardingTableMetaData) {
        Iterator<ExpressionSegment> expressionIterator = selectClauseSegment.getExpressions().iterator();
        ExpressionSegment firstExpression = expressionIterator.next();
        ExpressionFiller expressionFiller = new ExpressionFiller();
@@ -111,7 +111,8 @@ public final class SelectClauseFiller implements SQLStatementFiller<SelectClause
        return offset;
    }
    
    private DistinctSelectItem createDistinctCommonItem(final SelectStatement selectStatement, final String sql, final Set<String> distinctColumnNames, final CommonExpressionSegment expressionSegment) {
    private DistinctSelectItem createDistinctCommonItem(final SelectStatement selectStatement, final String sql, final Set<String> distinctColumnNames,
                                                        final CommonExpressionSegment expressionSegment) {
        DistinctSelectItem distinctSelectItem = new DistinctSelectItem(distinctColumnNames, expressionSegment.getAlias());
        String commonExpression = sql.substring(expressionSegment.getStartPosition(), expressionSegment.getEndPosition() + 1);
        int leftParenPosition = commonExpression.indexOf("(");
+9 −1
Original line number Diff line number Diff line
@@ -34,7 +34,15 @@ public final class TableFiller implements SQLStatementFiller<TableSegment> {
    
    @Override
    public void fill(final TableSegment sqlSegment, final SQLStatement sqlStatement, final String sql, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData) {
        if (!(sqlStatement instanceof SelectStatement) || shardingRule.contains(sqlSegment.getName())) {
        boolean fill = false;
        if (shardingRule.contains(sqlSegment.getName())) {
            fill = true;
        } else {
            if(!(sqlStatement instanceof SelectStatement) && sqlStatement.getTables().isEmpty()) {
                fill = true;
            }
        }
        if (fill) {
            sqlStatement.getTables().add(new Table(sqlSegment.getName(), sqlSegment.getAlias()));
            sqlStatement.getSQLTokens().add(sqlSegment.getToken());
        }
Loading