From 00dac651882c2f727e1373f52198af61ba00ba6a Mon Sep 17 00:00:00 2001 From: shuke <37901441+shuke987@users.noreply.github.com> Date: Wed, 1 Jul 2026 14:55:52 +0800 Subject: [PATCH 1/2] [fix](regression) materialize JDBC array results --- .../doris/regression/util/JdbcUtils.groovy | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy index bac8a2087d5a29..aa87850cb6f530 100644 --- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy +++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy @@ -129,7 +129,7 @@ class JdbcUtils { byte[] bytes = resultSet.getBytes(i) row.add(bytes == null ? null : bytesToHex(bytes)) } else { - row.add(resultSet.getObject(i)) + row.add(materializeObject(resultSet.getObject(i))) } } rows.add(row) @@ -148,7 +148,7 @@ class JdbcUtils { try { if (isPreparedStatement) { // For prepared statements, use getObject to get the value - row.add(resultSet.getObject(i)) + row.add(materializeObject(resultSet.getObject(i))) } else { int jdbcType = resultSet.metaData.getColumnType(i) if (jdbcType == Types.TIME @@ -172,7 +172,7 @@ class JdbcUtils { byte[] bytes = resultSet.getBytes(i) row.add(bytes == null ? null : bytesToHex(bytes)) } else { - row.add(resultSet.getObject(i)) + row.add(materializeObject(resultSet.getObject(i))) } } } catch (Throwable t) { @@ -180,7 +180,7 @@ class JdbcUtils { if(resultSet.getBytes(i) != null){ row.add(new String(resultSet.getBytes(i))) } else { - row.add(resultSet.getObject(i)) + row.add(materializeObject(resultSet.getObject(i))) } } catch (Throwable t2) { /** @@ -190,7 +190,7 @@ class JdbcUtils { at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) at org.apache.doris.regression.util.JdbcUtils$_toStringList_closure5.doCall(JdbcUtils.groovy:163) */ - row.add(resultSet.getObject(i)) + row.add(materializeObject(resultSet.getObject(i))) } } } @@ -200,6 +200,24 @@ class JdbcUtils { } } + private static Object materializeObject(Object value) { + if (value instanceof java.sql.Array) { + return materializeObject(((java.sql.Array) value).getArray()) + } + if (value instanceof byte[]) { + return bytesToHex((byte[]) value) + } + if (value != null && value.getClass().isArray()) { + List values = new ArrayList<>() + int length = java.lang.reflect.Array.getLength(value) + for (int i = 0; i < length; i++) { + values.add(materializeObject(java.lang.reflect.Array.get(value, i))) + } + return values + } + return value + } + // Detect if a JDBC column type is binary-like private static boolean isBinaryJdbcType(int jdbcType) { return jdbcType == Types.BINARY From 5576309527d95d50d0cfa12e0f692950ec214dad Mon Sep 17 00:00:00 2001 From: shuke <37901441+shuke987@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:29:14 +0800 Subject: [PATCH 2/2] [fix](regression) keep Arrow JDBC array text format --- .../apache/doris/regression/util/JdbcUtils.groovy | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy index aa87850cb6f530..0cc63c5a05a006 100644 --- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy +++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/JdbcUtils.groovy @@ -201,20 +201,12 @@ class JdbcUtils { } private static Object materializeObject(Object value) { - if (value instanceof java.sql.Array) { - return materializeObject(((java.sql.Array) value).getArray()) + if (value instanceof java.sql.Array || value instanceof java.sql.Struct) { + return value.toString() } if (value instanceof byte[]) { return bytesToHex((byte[]) value) } - if (value != null && value.getClass().isArray()) { - List values = new ArrayList<>() - int length = java.lang.reflect.Array.getLength(value) - for (int i = 0; i < length; i++) { - values.add(materializeObject(java.lang.reflect.Array.get(value, i))) - } - return values - } return value }