You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2024/05/26 02:40:59 UTC
(shardingsphere) branch master updated: Fix federation query binary type data query (#31346)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 2a9dabb0624 Fix federation query binary type data query (#31346)
2a9dabb0624 is described below
commit 2a9dabb062443a0d8c04a7c12b6b1ab81b1a7586
Author: niu niu <zi...@aliyun.com>
AuthorDate: Sun May 26 10:40:52 2024 +0800
Fix federation query binary type data query (#31346)
* Fix federation query binary type data query
* Format code
* Fix
---
.../resultset/SQLFederationResultSet.java | 2 +-
.../converter/impl/MySQLColumnTypeConverter.java | 2 +-
.../test/e2e/engine/type/dql/BaseDQLE2EIT.java | 5 ++++
.../resources/cases/dql/dql-integration-select.xml | 28 ++++++++++++++++++++++
4 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java
index 2c846c79f3d..5462768eed7 100644
--- a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java
+++ b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java
@@ -103,7 +103,7 @@ public final class SQLFederationResultSet extends AbstractUnsupportedOperationRe
public boolean next() {
boolean result = enumerator.moveNext();
if (result && null != enumerator.current()) {
- currentRows = enumerator.current().getClass().isArray() ? (Object[]) enumerator.current() : new Object[]{enumerator.current()};
+ currentRows = enumerator.current().getClass().isArray() && !(enumerator.current() instanceof byte[]) ? (Object[]) enumerator.current() : new Object[]{enumerator.current()};
} else {
currentRows = new Object[]{};
}
diff --git a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/converter/impl/MySQLColumnTypeConverter.java b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/converter/impl/MySQLColumnTypeConverter.java
index 270655f1df4..9f620ca7ebc 100644
--- a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/converter/impl/MySQLColumnTypeConverter.java
+++ b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/converter/impl/MySQLColumnTypeConverter.java
@@ -36,7 +36,7 @@ public final class MySQLColumnTypeConverter implements SQLFederationColumnTypeCo
@Override
public int convertColumnType(final int columnType) {
if (SqlTypeName.BOOLEAN.getJdbcOrdinal() == columnType) {
- return SqlTypeName.BIGINT.getJdbcOrdinal();
+ return SqlTypeName.VARCHAR.getJdbcOrdinal();
}
return columnType;
}
diff --git a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dql/BaseDQLE2EIT.java b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dql/BaseDQLE2EIT.java
index 356e00e898c..193bfed4034 100644
--- a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dql/BaseDQLE2EIT.java
+++ b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dql/BaseDQLE2EIT.java
@@ -126,6 +126,9 @@ public abstract class BaseDQLE2EIT {
for (int i = 0; i < actualResultSetMetaData.getColumnCount(); i++) {
assertThat(actualResultSetMetaData.getColumnLabel(i + 1), is(expectedResultSetMetaData.getColumnLabel(i + 1)));
assertThat(actualResultSetMetaData.getColumnName(i + 1), is(expectedResultSetMetaData.getColumnName(i + 1)));
+ if ("db_tbl_sql_federation".equals(testParam.getScenario())) {
+ continue;
+ }
if ("jdbc".equals(testParam.getAdapter()) && "Cluster".equals(testParam.getMode())) {
// FIXME correct columnType with proxy adapter
assertThat(actualResultSetMetaData.getColumnType(i + 1), is(expectedResultSetMetaData.getColumnType(i + 1)));
@@ -185,6 +188,8 @@ public abstract class BaseDQLE2EIT {
? expectedResultSet.getTimestamp(i + 1).toLocalDateTime().format(DateTimeFormatterFactory.getStandardFormatter())
: actualValue;
assertThat(String.valueOf(convertedActualValue), is(String.valueOf(convertedExpectedValue)));
+ } else if (actualValue instanceof String && expectedValue instanceof byte[]) {
+ assertThat(actualValue, is(new String((byte[]) expectedValue)));
} else {
assertThat(String.valueOf(actualValue), is(String.valueOf(expectedValue)));
}
diff --git a/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select.xml b/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select.xml
index 2b3e2ddf492..28f6989dcf9 100644
--- a/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select.xml
+++ b/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select.xml
@@ -276,4 +276,32 @@
<test-case sql="SELECT result.max_datetime FROM (SELECT MAX(type_datetime) AS max_datetime FROM t_product_extend) result" db-types="MySQL" scenario-types="db_tbl_sql_federation">
<assertion expected-data-source-name="read_dataset" />
</test-case>
+
+ <test-case sql="SELECT type_bit FROM t_product_extend" db-types="MySQL" scenario-types="db_tbl_sql_federation">
+ <assertion expected-data-source-name="read_dataset" />
+ </test-case>
+
+ <test-case sql="SELECT type_blob FROM t_product_extend" db-types="MySQL" scenario-types="db_tbl_sql_federation">
+ <assertion expected-data-source-name="read_dataset" />
+ </test-case>
+
+ <test-case sql="SELECT type_mediumblob FROM t_product_extend" db-types="MySQL" scenario-types="db_tbl_sql_federation">
+ <assertion expected-data-source-name="read_dataset" />
+ </test-case>
+
+ <test-case sql="SELECT type_longblob FROM t_product_extend" db-types="MySQL" scenario-types="db_tbl_sql_federation">
+ <assertion expected-data-source-name="read_dataset" />
+ </test-case>
+
+ <test-case sql="SELECT type_binary FROM t_product_extend" db-types="MySQL" scenario-types="db_tbl_sql_federation">
+ <assertion expected-data-source-name="read_dataset" />
+ </test-case>
+
+ <test-case sql="SELECT type_varbinary FROM t_product_extend" db-types="MySQL" scenario-types="db_tbl_sql_federation">
+ <assertion expected-data-source-name="read_dataset" />
+ </test-case>
+
+ <test-case sql="SELECT type_bit, type_blob, type_mediumblob, type_longblob, type_binary, type_varbinary FROM t_product_extend" db-types="MySQL" scenario-types="db_tbl_sql_federation">
+ <assertion expected-data-source-name="read_dataset" />
+ </test-case>
</integration-test-cases>