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