Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/constant/SQLType.java +2 −2 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ public enum SQLType { TCL, /** * Other SQL. * Database administrator Language. */ OTHER DAL } sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingPreparedStatement.java +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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())); } Loading Loading @@ -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); Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingStatement.java +7 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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())); } Loading Loading @@ -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); Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/ShowMergeEngine.java→sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/DALMergeEngine.java +8 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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)); Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/SQLJudgeEngine.java +23 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/constant/SQLType.java +2 −2 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ public enum SQLType { TCL, /** * Other SQL. * Database administrator Language. */ OTHER DAL }
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingPreparedStatement.java +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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())); } Loading Loading @@ -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); Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingStatement.java +7 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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())); } Loading Loading @@ -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); Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/ShowMergeEngine.java→sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/DALMergeEngine.java +8 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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)); Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/SQLJudgeEngine.java +23 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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(); } }