This is an automated email from the ASF dual-hosted git repository. menghaoran pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push: new 639e346 Complete missing protocol impl for MySQLColumnDefinition41Packet with COM_FIELD_LIST command (#10276) 639e346 is described below commit 639e346f26593553f9455a19903c821e1acb3dab Author: Liang Zhang <terrym...@163.com> AuthorDate: Sat May 8 00:45:34 2021 +0800 Complete missing protocol impl for MySQLColumnDefinition41Packet with COM_FIELD_LIST command (#10276) --- .../command/query/MySQLColumnDefinition41Packet.java | 18 ++++++++++++++---- .../binary/prepare/MySQLComStmtPrepareExecutor.java | 4 ++-- .../command/query/builder/ResponsePacketBuilder.java | 2 +- .../fieldlist/MySQLComFieldListPacketExecutor.java | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/MySQLColumnDefinition41Packet.java b/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/MySQLColumnDefinition41Packet.java index 53259f1..e46fa80 100644 --- a/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/MySQLColumnDefinition41Packet.java +++ b/shardingsphere-db-protocol/shardingsphere-db-protocol-mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/command/query/MySQLColumnDefinition41Packet.java @@ -62,10 +62,12 @@ public final class MySQLColumnDefinition41Packet implements MySQLPacket { private final int decimals; + private final boolean containDefaultValues; + public MySQLColumnDefinition41Packet(final int sequenceId, final ResultSetMetaData resultSetMetaData, final int columnIndex) throws SQLException { this(sequenceId, resultSetMetaData.getSchemaName(columnIndex), resultSetMetaData.getTableName(columnIndex), resultSetMetaData.getTableName(columnIndex), resultSetMetaData.getColumnLabel(columnIndex), resultSetMetaData.getColumnName(columnIndex), resultSetMetaData.getColumnDisplaySize(columnIndex), - MySQLBinaryColumnType.valueOfJDBCType(resultSetMetaData.getColumnType(columnIndex)), resultSetMetaData.getScale(columnIndex)); + MySQLBinaryColumnType.valueOfJDBCType(resultSetMetaData.getColumnType(columnIndex)), resultSetMetaData.getScale(columnIndex), false); } /* @@ -74,12 +76,14 @@ public final class MySQLColumnDefinition41Packet implements MySQLPacket { * @see <a href="https://github.com/apache/shardingsphere/issues/4358"></a> */ public MySQLColumnDefinition41Packet(final int sequenceId, final String schema, final String table, final String orgTable, - final String name, final String orgName, final int columnLength, final MySQLBinaryColumnType columnType, final int decimals) { - this(sequenceId, 0, schema, table, orgTable, name, orgName, columnLength, columnType, decimals); + final String name, final String orgName, final int columnLength, final MySQLBinaryColumnType columnType, + final int decimals, final boolean containDefaultValues) { + this(sequenceId, 0, schema, table, orgTable, name, orgName, columnLength, columnType, decimals, containDefaultValues); } public MySQLColumnDefinition41Packet(final int sequenceId, final int flags, final String schema, final String table, final String orgTable, - final String name, final String orgName, final int columnLength, final MySQLBinaryColumnType columnType, final int decimals) { + final String name, final String orgName, final int columnLength, final MySQLBinaryColumnType columnType, + final int decimals, final boolean containDefaultValues) { this.sequenceId = sequenceId; characterSet = MySQLServerInfo.CHARSET; this.flags = flags; @@ -91,6 +95,7 @@ public final class MySQLColumnDefinition41Packet implements MySQLPacket { this.columnLength = columnLength; this.columnType = columnType; this.decimals = decimals; + this.containDefaultValues = containDefaultValues; } public MySQLColumnDefinition41Packet(final MySQLPacketPayload payload) { @@ -108,6 +113,7 @@ public final class MySQLColumnDefinition41Packet implements MySQLPacket { flags = payload.readInt2(); decimals = payload.readInt1(); payload.skipReserved(2); + containDefaultValues = false; } @Override @@ -125,5 +131,9 @@ public final class MySQLColumnDefinition41Packet implements MySQLPacket { payload.writeInt2(flags); payload.writeInt1(decimals); payload.writeReserved(2); + if (containDefaultValues) { + payload.writeIntLenenc(0); + payload.writeStringLenenc(""); + } } } diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java index e0b1e97..e54b22b 100644 --- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java +++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java @@ -84,7 +84,7 @@ public final class MySQLComStmtPrepareExecutor implements CommandExecutor { private Collection<DatabasePacket<?>> createParameterColumnDefinition41Packets(final int parameterCount) { Collection<DatabasePacket<?>> result = new LinkedList<>(); for (int i = 0; i < parameterCount; i++) { - result.add(new MySQLColumnDefinition41Packet(++currentSequenceId, "", "", "", "?", "", 0, MySQLBinaryColumnType.MYSQL_TYPE_VAR_STRING, 0)); + result.add(new MySQLColumnDefinition41Packet(++currentSequenceId, "", "", "", "?", "", 0, MySQLBinaryColumnType.MYSQL_TYPE_VAR_STRING, 0, false)); } result.add(new MySQLEofPacket(++currentSequenceId)); return result; @@ -93,7 +93,7 @@ public final class MySQLComStmtPrepareExecutor implements CommandExecutor { private Collection<DatabasePacket<?>> createProjectionColumnDefinition41Packets(final int projectionCount) { Collection<DatabasePacket<?>> result = new LinkedList<>(); for (int i = 0; i < projectionCount; i++) { - result.add(new MySQLColumnDefinition41Packet(++currentSequenceId, "", "", "", "", "", 0, MySQLBinaryColumnType.MYSQL_TYPE_VAR_STRING, 0)); + result.add(new MySQLColumnDefinition41Packet(++currentSequenceId, "", "", "", "", "", 0, MySQLBinaryColumnType.MYSQL_TYPE_VAR_STRING, 0, false)); } result.add(new MySQLEofPacket(++currentSequenceId)); return result; diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/builder/ResponsePacketBuilder.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/builder/ResponsePacketBuilder.java index d6842ff..5a5c784 100644 --- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/builder/ResponsePacketBuilder.java +++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/builder/ResponsePacketBuilder.java @@ -54,7 +54,7 @@ public final class ResponsePacketBuilder { result.add(new MySQLFieldCountPacket(++sequenceId, queryHeader.size())); for (QueryHeader each : queryHeader) { result.add(new MySQLColumnDefinition41Packet(++sequenceId, getColumnFieldDetailFlag(each), each.getSchema(), each.getTable(), each.getTable(), - each.getColumnLabel(), each.getColumnName(), each.getColumnLength(), MySQLBinaryColumnType.valueOfJDBCType(each.getColumnType()), each.getDecimals())); + each.getColumnLabel(), each.getColumnName(), each.getColumnLength(), MySQLBinaryColumnType.valueOfJDBCType(each.getColumnType()), each.getDecimals(), false)); } result.add(new MySQLEofPacket(++sequenceId)); return result; diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java index 002d246..3e2b1bb 100644 --- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java +++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java @@ -71,7 +71,7 @@ public final class MySQLComFieldListPacketExecutor implements CommandExecutor { while (databaseCommunicationEngine.next()) { String columnName = databaseCommunicationEngine.getQueryResponseRow().getCells().iterator().next().getData().toString(); result.add(new MySQLColumnDefinition41Packet( - ++currentSequenceId, schemaName, packet.getTable(), packet.getTable(), columnName, columnName, 100, MySQLBinaryColumnType.MYSQL_TYPE_VARCHAR, 0)); + ++currentSequenceId, schemaName, packet.getTable(), packet.getTable(), columnName, columnName, 100, MySQLBinaryColumnType.MYSQL_TYPE_VARCHAR, 0, true)); } result.add(new MySQLEofPacket(++currentSequenceId)); return result;