Commit 8dbbf26e authored by terrymanu's avatar terrymanu
Browse files

add DAL type and refactor show,describe into DAL

parent dc36e721
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ public enum SQLType {
    TCL,
    
    /**
     * Other SQL.
     * Database administrator Language.
     */
    OTHER
    DAL
}
+6 −6
Original line number Diff line number Diff line
@@ -29,11 +29,11 @@ import io.shardingjdbc.core.jdbc.adapter.AbstractShardingPreparedStatementAdapte
import io.shardingjdbc.core.jdbc.core.connection.ShardingConnection;
import io.shardingjdbc.core.jdbc.core.resultset.GeneratedKeysResultSet;
import io.shardingjdbc.core.jdbc.core.resultset.ShardingResultSet;
import io.shardingjdbc.core.merger.DALMergeEngine;
import io.shardingjdbc.core.merger.MergeEngine;
import io.shardingjdbc.core.merger.SelectMergeEngine;
import io.shardingjdbc.core.merger.ShowMergeEngine;
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowStatement;
import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.core.routing.PreparedStatementRoutingEngine;
@@ -121,8 +121,8 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
            MergeEngine mergeEngine;
            if (routeResult.getSqlStatement() instanceof SelectStatement) {
                mergeEngine = new SelectMergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement());
            } else if (routeResult.getSqlStatement() instanceof ShowStatement) {
                mergeEngine = new ShowMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (ShowStatement) routeResult.getSqlStatement());
            } else if (routeResult.getSqlStatement() instanceof DALStatement) {
                mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (DALStatement) routeResult.getSqlStatement());
            } else {
                throw new UnsupportedOperationException(String.format("Cannot support type '%s'", routeResult.getSqlStatement().getType()));
            }
@@ -285,8 +285,8 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
        MergeEngine mergeEngine = null;
        if (routeResult.getSqlStatement() instanceof SelectStatement) {
            mergeEngine = new SelectMergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement());
        } else if (routeResult.getSqlStatement() instanceof ShowStatement) {
            mergeEngine = new ShowMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (ShowStatement) routeResult.getSqlStatement());
        } else if (routeResult.getSqlStatement() instanceof DALStatement) {
            mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (DALStatement) routeResult.getSqlStatement());
        }
        if (null != mergeEngine) {
            currentResultSet = new ShardingResultSet(resultSets, mergeEngine.merge(), this);
+7 −7
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

package io.shardingjdbc.core.jdbc.core.statement;

import com.google.common.base.Optional;
import io.shardingjdbc.core.constant.SQLType;
import io.shardingjdbc.core.executor.type.statement.StatementExecutor;
import io.shardingjdbc.core.executor.type.statement.StatementUnit;
@@ -24,17 +25,16 @@ import io.shardingjdbc.core.jdbc.adapter.AbstractStatementAdapter;
import io.shardingjdbc.core.jdbc.core.connection.ShardingConnection;
import io.shardingjdbc.core.jdbc.core.resultset.GeneratedKeysResultSet;
import io.shardingjdbc.core.jdbc.core.resultset.ShardingResultSet;
import io.shardingjdbc.core.merger.DALMergeEngine;
import io.shardingjdbc.core.merger.MergeEngine;
import io.shardingjdbc.core.merger.SelectMergeEngine;
import io.shardingjdbc.core.merger.ShowMergeEngine;
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowStatement;
import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.core.routing.SQLExecutionUnit;
import io.shardingjdbc.core.routing.SQLRouteResult;
import io.shardingjdbc.core.routing.StatementRoutingEngine;
import com.google.common.base.Optional;
import lombok.AccessLevel;
import lombok.Getter;

@@ -101,8 +101,8 @@ public class ShardingStatement extends AbstractStatementAdapter {
            MergeEngine mergeEngine;
            if (routeResult.getSqlStatement() instanceof SelectStatement) {
                mergeEngine = new SelectMergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement());
            } else if (routeResult.getSqlStatement() instanceof ShowStatement) {
                mergeEngine = new ShowMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (ShowStatement) routeResult.getSqlStatement());
            } else if (routeResult.getSqlStatement() instanceof DALStatement) {
                mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (DALStatement) routeResult.getSqlStatement());
            } else {
                throw new UnsupportedOperationException(String.format("Cannot support type '%s'", routeResult.getSqlStatement().getType()));
            }
@@ -260,8 +260,8 @@ public class ShardingStatement extends AbstractStatementAdapter {
        MergeEngine mergeEngine = null;
        if (routeResult.getSqlStatement() instanceof SelectStatement) {
            mergeEngine = new SelectMergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement());
        } else if (routeResult.getSqlStatement() instanceof ShowStatement) {
            mergeEngine = new ShowMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (ShowStatement) routeResult.getSqlStatement());
        } else if (routeResult.getSqlStatement() instanceof DALStatement && !resultSets.isEmpty()) {
            mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSets, (DALStatement) routeResult.getSqlStatement());
        }
        if (null != mergeEngine) {
            currentResultSet = new ShardingResultSet(resultSets, mergeEngine.merge(), this);
+8 −7
Original line number Diff line number Diff line
@@ -20,8 +20,9 @@ package io.shardingjdbc.core.merger;
import io.shardingjdbc.core.merger.show.ShowDatabasesResultSetMerger;
import io.shardingjdbc.core.merger.show.ShowOtherResultSetMerger;
import io.shardingjdbc.core.merger.show.ShowTablesResultSetMerger;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowType;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement;
import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.rule.ShardingRule;
import lombok.RequiredArgsConstructor;

@@ -30,25 +31,25 @@ import java.sql.SQLException;
import java.util.List;

/**
 * Show result set merge engine.
 * DAL result set merge engine.
 *
 * @author zhangliang
 */
@RequiredArgsConstructor
public final class ShowMergeEngine implements MergeEngine {
public final class DALMergeEngine implements MergeEngine {
    
    private final ShardingRule shardingRule;
    
    private final List<ResultSet> resultSets;
    
    private final ShowStatement showStatement;
    private final DALStatement dalStatement;
    
    @Override
    public ResultSetMerger merge() throws SQLException {
        if (ShowType.DATABASES == showStatement.getShowType()) {
        if (dalStatement instanceof ShowDatabasesStatement) {
            return new ShowDatabasesResultSetMerger();
        }
        if (ShowType.TABLES == showStatement.getShowType()) {
        if (dalStatement instanceof ShowTablesStatement) {
            return new ShowTablesResultSetMerger(shardingRule, resultSets);
        }
        return new ShowOtherResultSetMerger(resultSets.get(0));
+23 −7
Original line number Diff line number Diff line
@@ -25,15 +25,17 @@ import io.shardingjdbc.core.parsing.lexer.token.Assist;
import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword;
import io.shardingjdbc.core.parsing.lexer.token.Keyword;
import io.shardingjdbc.core.parsing.lexer.token.TokenType;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.DescStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowType;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.DescribeStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowColumnsStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowOtherStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.UseStatement;
import io.shardingjdbc.core.parsing.parser.exception.SQLParsingException;
import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.DMLStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.core.parsing.parser.sql.ignore.IgnoreStatement;
import io.shardingjdbc.core.parsing.parser.sql.tcl.TCLStatement;
import lombok.RequiredArgsConstructor;

@@ -72,13 +74,13 @@ public final class SQLJudgeEngine {
                    return new TCLStatement();
                }
                if (DefaultKeyword.USE == tokenType) {
                    return new IgnoreStatement();
                    return new UseStatement();
                }
                if (DefaultKeyword.DESC == tokenType) {
                    return new DescStatement();
                    return new DescribeStatement();
                }
                if (MySQLKeyword.SHOW == tokenType) {
                    return new ShowStatement(ShowType.OTHER);
                    return getShowStatement(lexerEngine);
                }
            }
            if (tokenType instanceof Assist && Assist.END == tokenType) {
@@ -87,4 +89,18 @@ public final class SQLJudgeEngine {
            lexerEngine.nextToken();
        }
    }
    
    private SQLStatement getShowStatement(final LexerEngine lexerEngine) {
        lexerEngine.nextToken();
        if (MySQLKeyword.DATABASES == lexerEngine.getCurrentToken().getType()) {
            return new ShowDatabasesStatement();
        }
        if (MySQLKeyword.TABLES == lexerEngine.getCurrentToken().getType()) {
            return new ShowTablesStatement();
        }
        if (MySQLKeyword.COLUMNS == lexerEngine.getCurrentToken().getType()) {
            return new ShowColumnsStatement();
        }
        return new ShowOtherStatement();
    }
}
Loading