未验证 提交 605bfd7d 编写于 作者: ShardingSphere's avatar ShardingSphere 提交者: GitHub

Merge pull request #764 from tuohai666/dev

for #675 fix bug that DAL didn't merge
...@@ -75,7 +75,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler { ...@@ -75,7 +75,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler {
private int columnCount; private int columnCount;
private boolean isDQL; private boolean isMerged;
private boolean hasMoreResultValueFlag; private boolean hasMoreResultValueFlag;
...@@ -84,7 +84,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler { ...@@ -84,7 +84,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler {
routingEngine = new StatementRoutingEngine(ShardingRuleRegistry.getInstance().getShardingRule(), ShardingRuleRegistry.getInstance().getShardingMetaData(), databaseType, showSQL); routingEngine = new StatementRoutingEngine(ShardingRuleRegistry.getInstance().getShardingRule(), ShardingRuleRegistry.getInstance().getShardingMetaData(), databaseType, showSQL);
connections = new ArrayList<>(1024); connections = new ArrayList<>(1024);
resultSets = new ArrayList<>(1024); resultSets = new ArrayList<>(1024);
isDQL = false; isMerged = false;
hasMoreResultValueFlag = true; hasMoreResultValueFlag = true;
} }
...@@ -105,6 +105,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler { ...@@ -105,6 +105,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler {
private CommandResponsePackets execute(final SQLStatement sqlStatement, final SQLExecutionUnit sqlExecutionUnit) { private CommandResponsePackets execute(final SQLStatement sqlStatement, final SQLExecutionUnit sqlExecutionUnit) {
switch (sqlStatement.getType()) { switch (sqlStatement.getType()) {
case DQL: case DQL:
case DAL:
return executeQuery(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSqlUnit().getSql()); return executeQuery(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSqlUnit().getSql());
case DML: case DML:
case DDL: case DDL:
...@@ -228,8 +229,8 @@ public final class SQLExecuteBackendHandler implements BackendHandler { ...@@ -228,8 +229,8 @@ public final class SQLExecuteBackendHandler implements BackendHandler {
if (SQLType.DML == sqlStatement.getType()) { if (SQLType.DML == sqlStatement.getType()) {
return mergeDML(headPackets); return mergeDML(headPackets);
} }
if (SQLType.DQL == sqlStatement.getType()) { if (SQLType.DQL == sqlStatement.getType() || SQLType.DAL == sqlStatement.getType()) {
return mergeDQL(sqlStatement, packets); return mergeDQLorDAL(sqlStatement, packets);
} }
return packets.get(0); return packets.get(0);
} }
...@@ -245,7 +246,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler { ...@@ -245,7 +246,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler {
return new CommandResponsePackets(new OKPacket(1, affectedRows, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, "")); return new CommandResponsePackets(new OKPacket(1, affectedRows, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
} }
private CommandResponsePackets mergeDQL(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets) { private CommandResponsePackets mergeDQLorDAL(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets) {
List<QueryResult> queryResults = new ArrayList<>(packets.size()); List<QueryResult> queryResults = new ArrayList<>(packets.size());
for (int i = 0; i < packets.size(); i++) { for (int i = 0; i < packets.size(); i++) {
// TODO replace to a common PacketQueryResult // TODO replace to a common PacketQueryResult
...@@ -253,7 +254,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler { ...@@ -253,7 +254,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler {
} }
try { try {
mergedResult = MergeEngineFactory.newInstance(ShardingRuleRegistry.getInstance().getShardingRule(), queryResults, sqlStatement).merge(); mergedResult = MergeEngineFactory.newInstance(ShardingRuleRegistry.getInstance().getShardingRule(), queryResults, sqlStatement).merge();
isDQL = true; isMerged = true;
} catch (final SQLException ex) { } catch (final SQLException ex) {
return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage())); return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage()));
} }
...@@ -282,7 +283,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler { ...@@ -282,7 +283,7 @@ public final class SQLExecuteBackendHandler implements BackendHandler {
* @throws SQLException sql exception * @throws SQLException sql exception
*/ */
public boolean hasMoreResultValue() throws SQLException { public boolean hasMoreResultValue() throws SQLException {
if (!isDQL || !hasMoreResultValueFlag) { if (!isMerged || !hasMoreResultValueFlag) {
return false; return false;
} }
if (!mergedResult.next()) { if (!mergedResult.next()) {
......
...@@ -79,7 +79,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler { ...@@ -79,7 +79,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
private final List<ColumnType> columnTypes; private final List<ColumnType> columnTypes;
private boolean isDQL; private boolean isMerged;
private boolean hasMoreResultValueFlag; private boolean hasMoreResultValueFlag;
...@@ -89,7 +89,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler { ...@@ -89,7 +89,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
connections = new ArrayList<>(1024); connections = new ArrayList<>(1024);
resultSets = new ArrayList<>(1024); resultSets = new ArrayList<>(1024);
columnTypes = new ArrayList<>(32); columnTypes = new ArrayList<>(32);
isDQL = false; isMerged = false;
hasMoreResultValueFlag = true; hasMoreResultValueFlag = true;
} }
...@@ -111,6 +111,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler { ...@@ -111,6 +111,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
private CommandResponsePackets execute(final SQLStatement sqlStatement, final SQLExecutionUnit sqlExecutionUnit) { private CommandResponsePackets execute(final SQLStatement sqlStatement, final SQLExecutionUnit sqlExecutionUnit) {
switch (sqlStatement.getType()) { switch (sqlStatement.getType()) {
case DQL: case DQL:
case DAL:
return executeQuery(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSqlUnit().getSql()); return executeQuery(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSqlUnit().getSql());
case DML: case DML:
case DDL: case DDL:
...@@ -265,8 +266,8 @@ public final class StatementExecuteBackendHandler implements BackendHandler { ...@@ -265,8 +266,8 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
if (SQLType.DML == sqlStatement.getType()) { if (SQLType.DML == sqlStatement.getType()) {
return mergeDML(headPackets); return mergeDML(headPackets);
} }
if (SQLType.DQL == sqlStatement.getType()) { if (SQLType.DQL == sqlStatement.getType() || SQLType.DAL == sqlStatement.getType()) {
return mergeDQL(sqlStatement, packets); return mergeDQLorDAL(sqlStatement, packets);
} }
return packets.get(0); return packets.get(0);
} }
...@@ -282,7 +283,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler { ...@@ -282,7 +283,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
return new CommandResponsePackets(new OKPacket(1, affectedRows, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, "")); return new CommandResponsePackets(new OKPacket(1, affectedRows, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
} }
private CommandResponsePackets mergeDQL(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets) { private CommandResponsePackets mergeDQLorDAL(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets) {
List<QueryResult> queryResults = new ArrayList<>(packets.size()); List<QueryResult> queryResults = new ArrayList<>(packets.size());
for (int i = 0; i < packets.size(); i++) { for (int i = 0; i < packets.size(); i++) {
// TODO replace to a common PacketQueryResult // TODO replace to a common PacketQueryResult
...@@ -290,7 +291,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler { ...@@ -290,7 +291,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
} }
try { try {
mergedResult = MergeEngineFactory.newInstance(ShardingRuleRegistry.getInstance().getShardingRule(), queryResults, sqlStatement).merge(); mergedResult = MergeEngineFactory.newInstance(ShardingRuleRegistry.getInstance().getShardingRule(), queryResults, sqlStatement).merge();
isDQL = true; isMerged = true;
} catch (final SQLException ex) { } catch (final SQLException ex) {
return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage())); return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage()));
} }
...@@ -319,7 +320,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler { ...@@ -319,7 +320,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
* @throws SQLException sql exception * @throws SQLException sql exception
*/ */
public boolean hasMoreResultValue() throws SQLException { public boolean hasMoreResultValue() throws SQLException {
if (!isDQL || !hasMoreResultValueFlag) { if (!isMerged || !hasMoreResultValueFlag) {
return false; return false;
} }
if (!mergedResult.next()) { if (!mergedResult.next()) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册