From 7f210e2555af6326f1fe018712bd5f142e9d2766 Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Fri, 21 Nov 2025 11:55:23 +0800 Subject: [PATCH 1/8] update --- .../apache/doris/jdbc/ClickHouseJdbcExecutor.java | 2 ++ .../org/apache/doris/jdbc/DB2JdbcExecutor.java | 2 ++ .../org/apache/doris/jdbc/GbaseJdbcExecutor.java | 3 +++ .../org/apache/doris/jdbc/OracleJdbcExecutor.java | 5 +++++ .../apache/doris/jdbc/PostgreSQLJdbcExecutor.java | 2 ++ .../apache/doris/jdbc/SQLServerJdbcExecutor.java | 2 ++ .../apache/doris/jdbc/SapHanaJdbcExecutor.java | 2 ++ .../org/apache/doris/jdbc/TrinoJdbcExecutor.java | 2 ++ .../org/apache/doris/catalog/JdbcResource.java | 5 ++++- .../datasource/jdbc/JdbcExternalCatalog.java | 3 ++- .../doris/datasource/jdbc/client/JdbcClient.java | 2 ++ .../datasource/jdbc/client/JdbcClientConfig.java | 15 +++++++++++++++ .../datasource/jdbc/client/JdbcDB2Client.java | 3 +++ .../datasource/jdbc/client/JdbcGbaseClient.java | 4 ++++ .../datasource/jdbc/client/JdbcMySQLClient.java | 13 ++++++++----- .../datasource/jdbc/client/JdbcOracleClient.java | 2 ++ .../jdbc/client/JdbcPostgreSQLClient.java | 4 +++- .../jdbc/client/JdbcSQLServerClient.java | 2 ++ .../datasource/jdbc/client/JdbcSapHanaClient.java | 4 +++- 19 files changed, 68 insertions(+), 9 deletions(-) diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java index a3bb9b7b261b67..55d9d81a9c4f21 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java @@ -88,6 +88,8 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla return resultSet.getObject(columnIndex + 1, String.class); case ARRAY: return convertArrayToList(resultSet.getArray(columnIndex + 1).getArray()); + case VARBINARY: + return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/DB2JdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/DB2JdbcExecutor.java index a95970af23f8d7..b08797d21acfe7 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/DB2JdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/DB2JdbcExecutor.java @@ -81,6 +81,8 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case VARCHAR: case STRING: return resultSet.getObject(columnIndex + 1, String.class); + case VARBINARY: + return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java index e8e29a8178fb82..f9d9f612dd3094 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java @@ -73,6 +73,9 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case STRING: String stringVal = (String) resultSet.getObject(columnIndex + 1); return resultSet.wasNull() ? null : stringVal; + case VARBINARY: + byte[] bytesVal = resultSet.getBytes(columnIndex + 1); + return resultSet.wasNull() ? null : bytesVal; default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/OracleJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/OracleJdbcExecutor.java index 344e88b96c2095..e46ef1e676ea93 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/OracleJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/OracleJdbcExecutor.java @@ -101,6 +101,8 @@ private Object newGetColumnValue(int columnIndex, ColumnType type, String[] repl case VARCHAR: case STRING: return resultSet.getObject(columnIndex + 1); + case VARBINARY: + return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } @@ -142,6 +144,9 @@ private Object oldGetColumnValue(int columnIndex, ColumnType type, String[] repl case STRING: Object stringVal = resultSet.getObject(columnIndex + 1); return resultSet.wasNull() ? null : stringVal; + case VARBINARY: + byte[] bytesVal = resultSet.getBytes(columnIndex + 1); + return resultSet.wasNull() ? null : bytesVal; default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java index c25bcec9a497f1..77c1c5b305bd18 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java @@ -87,6 +87,8 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case VARCHAR: case STRING: return resultSet.getObject(columnIndex + 1); + case VARBINARY: + return resultSet.getObject(columnIndex + 1, byte[].class); case ARRAY: java.sql.Array array = resultSet.getArray(columnIndex + 1); return array == null ? null : convertArrayToList(array.getArray()); diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java index 6679395d5510c6..bcb38f7de96988 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java @@ -87,6 +87,8 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case VARCHAR: case STRING: return resultSet.getObject(columnIndex + 1); + case VARBINARY: + return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java index 442e4efceda503..e2d4b463c9f3fc 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java @@ -93,6 +93,8 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case VARCHAR: case STRING: return resultSet.getObject(columnIndex + 1); + case VARBINARY: + return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/TrinoJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/TrinoJdbcExecutor.java index 0ffb00f9261676..2e59449af5eae2 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/TrinoJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/TrinoJdbcExecutor.java @@ -98,6 +98,8 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla } return Arrays.asList(dataArray); } + case VARBINARY: + return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java index 839260120de7a6..1859c09200cd6e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java @@ -27,6 +27,7 @@ import org.apache.doris.common.plugin.CloudPluginDownloader.PluginType; import org.apache.doris.common.proc.BaseProcResult; import org.apache.doris.common.util.Util; +import org.apache.doris.datasource.CatalogProperty; import org.apache.doris.datasource.ExternalCatalog; import com.google.common.base.Preconditions; @@ -134,7 +135,8 @@ public class JdbcResource extends Resource { CONNECTION_POOL_MAX_WAIT_TIME, CONNECTION_POOL_KEEP_ALIVE, TEST_CONNECTION, - ExternalCatalog.USE_META_CACHE + ExternalCatalog.USE_META_CACHE, + CatalogProperty.ENABLE_MAPPING_VARBINARY ).build(); // The default value of optional properties @@ -155,6 +157,7 @@ public class JdbcResource extends Resource { OPTIONAL_PROPERTIES_DEFAULT_VALUE.put(TEST_CONNECTION, "true"); OPTIONAL_PROPERTIES_DEFAULT_VALUE.put(ExternalCatalog.USE_META_CACHE, String.valueOf(ExternalCatalog.DEFAULT_USE_META_CACHE)); + OPTIONAL_PROPERTIES_DEFAULT_VALUE.put(CatalogProperty.ENABLE_MAPPING_VARBINARY, "false"); } // timeout for both connection and read. 10 seconds is long enough. diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java index 6cf28f5da37a2b..817649fda746ed 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java @@ -251,7 +251,8 @@ private JdbcClient createJdbcClient() { .setConnectionPoolMaxSize(getConnectionPoolMaxSize()) .setConnectionPoolMaxLifeTime(getConnectionPoolMaxLifeTime()) .setConnectionPoolMaxWaitTime(getConnectionPoolMaxWaitTime()) - .setConnectionPoolKeepAlive(isConnectionPoolKeepAlive()); + .setConnectionPoolKeepAlive(isConnectionPoolKeepAlive()) + .setEnableMappingVarbinary(getEnableMappingVarbinary()); return JdbcClient.createJdbcClient(jdbcClientConfig); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java index d723371c13e347..ec89fc9d2b1305 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java @@ -67,6 +67,7 @@ public abstract class JdbcClient { protected boolean isOnlySpecifiedDatabase; protected Map includeDatabaseMap; protected Map excludeDatabaseMap; + protected boolean enableMappingVarbinary; public static JdbcClient createJdbcClient(JdbcClientConfig jdbcClientConfig) { String dbType = parseDbType(jdbcClientConfig.getJdbcUrl()); @@ -111,6 +112,7 @@ protected JdbcClient(JdbcClientConfig jdbcClientConfig) { this.dbType = parseDbType(jdbcUrl); initializeClassLoader(jdbcClientConfig); initializeDataSource(jdbcClientConfig); + this.enableMappingVarbinary = jdbcClientConfig.isEnableMappingVarbinary(); } protected void setJdbcDriverSystemProperties() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClientConfig.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClientConfig.java index 85f3bd8f256d8b..1b67e639ca6da8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClientConfig.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClientConfig.java @@ -19,6 +19,7 @@ package org.apache.doris.datasource.jdbc.client; import org.apache.doris.catalog.JdbcResource; +import org.apache.doris.datasource.CatalogProperty; import com.google.common.collect.Maps; @@ -39,6 +40,9 @@ public class JdbcClientConfig implements Cloneable { private int connectionPoolMaxWaitTime; private int connectionPoolMaxLifeTime; private boolean connectionPoolKeepAlive; + // Whether to enable mapping BINARY to doris VARBINARY + // default: false, mapping to doris string type + private boolean enableMappingVarbinary; private Map includeDatabaseMap; private Map excludeDatabaseMap; @@ -61,6 +65,8 @@ public JdbcClientConfig() { this.includeDatabaseMap = Maps.newHashMap(); this.excludeDatabaseMap = Maps.newHashMap(); this.customizedProperties = Maps.newHashMap(); + this.enableMappingVarbinary = Boolean.parseBoolean( + JdbcResource.getDefaultPropertyValue(CatalogProperty.ENABLE_MAPPING_VARBINARY)); } @Override @@ -226,6 +232,15 @@ public JdbcClientConfig setExcludeDatabaseMap(Map excludeDataba return this; } + public JdbcClientConfig setEnableMappingVarbinary(boolean enableMappingVarbinary) { + this.enableMappingVarbinary = enableMappingVarbinary; + return this; + } + + public boolean isEnableMappingVarbinary() { + return enableMappingVarbinary; + } + public void setCustomizedProperties(Map customizedProperties) { this.customizedProperties = customizedProperties; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcDB2Client.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcDB2Client.java index 666b2b0f2a9ded..95730fbb5ac2ff 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcDB2Client.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcDB2Client.java @@ -103,6 +103,9 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "LONG VARGRAPHIC": case "XML": return ScalarType.createStringType(); + case "BLOB": + return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) + : ScalarType.createStringType(); default: return Type.UNSUPPORTED; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java index 6121ef2dbfc2fb..0d29414520de85 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java @@ -147,6 +147,10 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case Types.VARCHAR: case Types.LONGVARCHAR: return ScalarType.createStringType(); + case Types.BINARY: + case Types.VARBINARY: + return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) + : ScalarType.createStringType(); default: return Type.UNSUPPORTED; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java index 0c18ebaf7b7709..129c2e04a3a6bc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java @@ -283,9 +283,14 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { return ScalarType.createCharType(fieldSchema.requiredColumnSize()); case "VARCHAR": return ScalarType.createVarcharType(fieldSchema.requiredColumnSize()); + case "TINYBLOB": + case "BLOB": + case "MEDIUMBLOB": + case "LONGBLOB": case "BINARY": case "VARBINARY": - return ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()); + return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) + : ScalarType.createStringType(); case "BIT": if (fieldSchema.requiredColumnSize() == 1) { return Type.BOOLEAN; @@ -298,10 +303,6 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "TEXT": case "MEDIUMTEXT": case "LONGTEXT": - case "TINYBLOB": - case "BLOB": - case "MEDIUMBLOB": - case "LONGBLOB": case "STRING": case "SET": case "ENUM": @@ -421,6 +422,8 @@ private Type dorisTypeToDoris(JdbcFieldSchema fieldSchema) { return ScalarType.createHllType(); case "BITMAP": return Type.BITMAP; + case "VARBINARY": + return ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()); default: return Type.UNSUPPORTED; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java index 82daa179f0f8cf..6f0363685dff06 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java @@ -225,6 +225,8 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "CLOB": return ScalarType.createStringType(); case "BLOB": + return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) + : ScalarType.createStringType(); case "NCLOB": case "BFILE": case "BINARY_FLOAT": diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java index fe1e365d1ac8d5..099b7cc1437b09 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java @@ -165,10 +165,12 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "macaddr": case "varbit": case "uuid": - case "bytea": case "json": case "jsonb": return ScalarType.createStringType(); + case "bytea": // https://www.postgresql.org/docs/12/datatype-binary.html#DATATYPE-BINARY-TABLE + return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) + : ScalarType.createStringType(); default: { if (fieldSchema.getDataType() == Types.ARRAY && pgType.startsWith("_")) { return convertArrayType(fieldSchema); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java index e737d5fd236718..d4cb6a092ade34 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSQLServerClient.java @@ -90,6 +90,8 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "image": case "binary": case "varbinary": + return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) + : ScalarType.createStringType(); default: return Type.UNSUPPORTED; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java index e89b6268b900f7..8615a049eba005 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java @@ -89,9 +89,11 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "NCLOB": case "TEXT": case "BINTEXT": + return ScalarType.createStringType(); case "BINARY": case "VARBINARY": - return ScalarType.createStringType(); + return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) + : ScalarType.createStringType(); case "BLOB": case "ST_GEOMETRY": case "ST_POINT": From c3decaad6572492de5f556ec5a2788c5bd7748aa Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Fri, 21 Nov 2025 15:39:54 +0800 Subject: [PATCH 2/8] update test case --- .../org/apache/doris/datasource/jdbc/client/JdbcClient.java | 4 +++- .../suites/external_table_p0/jdbc/test_jdbc_query_tvf.groovy | 3 ++- .../jdbc/type_test/select/test_mysql_all_types_select.groovy | 3 ++- .../type_test/select/test_mysql_varbinary_with_udf.groovy | 3 ++- .../jdbc/type_test/tvf/test_mysql_all_types_tvf.groovy | 3 ++- .../binary_functions/test_binary_function.groovy | 3 ++- .../encryption_digest/test_binary_for_digest.groovy | 3 ++- 7 files changed, 15 insertions(+), 7 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java index ec89fc9d2b1305..53dd8820c6e6f8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java @@ -67,7 +67,8 @@ public abstract class JdbcClient { protected boolean isOnlySpecifiedDatabase; protected Map includeDatabaseMap; protected Map excludeDatabaseMap; - protected boolean enableMappingVarbinary; + // protected boolean enableMappingVarbinary; + protected boolean enableMappingVarbinary = true; // used test case public static JdbcClient createJdbcClient(JdbcClientConfig jdbcClientConfig) { String dbType = parseDbType(jdbcClientConfig.getJdbcUrl()); @@ -113,6 +114,7 @@ protected JdbcClient(JdbcClientConfig jdbcClientConfig) { initializeClassLoader(jdbcClientConfig); initializeDataSource(jdbcClientConfig); this.enableMappingVarbinary = jdbcClientConfig.isEnableMappingVarbinary(); + this.enableMappingVarbinary = true; // used test case } protected void setJdbcDriverSystemProperties() { diff --git a/regression-test/suites/external_table_p0/jdbc/test_jdbc_query_tvf.groovy b/regression-test/suites/external_table_p0/jdbc/test_jdbc_query_tvf.groovy index 367cea49d1af63..bc4a552ebbe611 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_jdbc_query_tvf.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_jdbc_query_tvf.groovy @@ -36,7 +36,8 @@ suite("test_jdbc_query_tvf", "p0,external,external_docker") { "password"="123456", "jdbc_url" = "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test", "driver_url" = "${driver_url}", - "driver_class" = "com.mysql.cj.jdbc.Driver" + "driver_class" = "com.mysql.cj.jdbc.Driver", + "enable.mapping.varbinary" = "true" );""" order_qt_sql """desc function query('catalog' = '${catalog_name}', 'query' = 'select * from doris_test.all_types') """ diff --git a/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.groovy b/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.groovy index c081dcf064f31c..e9396412062166 100644 --- a/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.groovy +++ b/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.groovy @@ -31,7 +31,8 @@ suite("test_mysql_all_types_select", "p0,external,mysql,external_docker,external "password"="123456", "jdbc_url" = "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false", "driver_url" = "${driver_url}", - "driver_class" = "com.mysql.cj.jdbc.Driver" + "driver_class" = "com.mysql.cj.jdbc.Driver", + "enable.mapping.varbinary" = "true" );""" sql """use mysql_all_type_test.doris_test""" diff --git a/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_varbinary_with_udf.groovy b/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_varbinary_with_udf.groovy index c40388637e48eb..f452ad460cb65e 100644 --- a/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_varbinary_with_udf.groovy +++ b/regression-test/suites/external_table_p0/jdbc/type_test/select/test_mysql_varbinary_with_udf.groovy @@ -31,7 +31,8 @@ suite("test_mysql_varbinary_with_udf", "p0,external,mysql,external_docker,extern "password"="123456", "jdbc_url" = "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false", "driver_url" = "${driver_url}", - "driver_class" = "com.mysql.cj.jdbc.Driver" + "driver_class" = "com.mysql.cj.jdbc.Driver", + "enable.mapping.varbinary" = "true" );""" sql """use mysql_varbinary_udf_catalog.test_varbinary_db""" diff --git a/regression-test/suites/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.groovy b/regression-test/suites/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.groovy index 1604ad631b2647..23f3ef9ad53349 100644 --- a/regression-test/suites/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.groovy +++ b/regression-test/suites/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.groovy @@ -30,7 +30,8 @@ suite("test_mysql_all_types_tvf", "p0,external,mysql,external_docker,external_do "password"="123456", "jdbc_url" = "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false", "driver_url" = "${driver_url}", - "driver_class" = "com.mysql.cj.jdbc.Driver" + "driver_class" = "com.mysql.cj.jdbc.Driver", + "enable.mapping.varbinary" = "true" );""" qt_desc_tvf_all_types_null """desc function query('catalog' = 'mysql_all_type_tvf_test', 'query' = 'select * from all_types_nullable')""" diff --git a/regression-test/suites/query_p0/sql_functions/binary_functions/test_binary_function.groovy b/regression-test/suites/query_p0/sql_functions/binary_functions/test_binary_function.groovy index 276bda73edfcaa..e97ce9f74b415f 100644 --- a/regression-test/suites/query_p0/sql_functions/binary_functions/test_binary_function.groovy +++ b/regression-test/suites/query_p0/sql_functions/binary_functions/test_binary_function.groovy @@ -38,7 +38,8 @@ suite("test_binary_function", "p0,external,mysql,external_docker,external_docker "password"="123456", "jdbc_url" = "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false", "driver_url" = "${driver_url}", - "driver_class" = "com.mysql.cj.jdbc.Driver" + "driver_class" = "com.mysql.cj.jdbc.Driver", + "enable.mapping.varbinary" = "true" );""" connect("root", "123456", "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false") { diff --git a/regression-test/suites/query_p0/sql_functions/encryption_digest/test_binary_for_digest.groovy b/regression-test/suites/query_p0/sql_functions/encryption_digest/test_binary_for_digest.groovy index 38bf99601ac76a..f76463ca1742ba 100644 --- a/regression-test/suites/query_p0/sql_functions/encryption_digest/test_binary_for_digest.groovy +++ b/regression-test/suites/query_p0/sql_functions/encryption_digest/test_binary_for_digest.groovy @@ -36,7 +36,8 @@ suite("test_binary_for_digest", "p0,external,mysql,external_docker,external_dock "password"="123456", "jdbc_url" = "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false", "driver_url" = "${driver_url}", - "driver_class" = "com.mysql.cj.jdbc.Driver" + "driver_class" = "com.mysql.cj.jdbc.Driver", + "enable.mapping.varbinary" = "true" );""" connect("root", "123456", "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false") { From ad86f58a9ff38eb397a6313e08197d5c326d70d6 Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Mon, 24 Nov 2025 11:47:13 +0800 Subject: [PATCH 3/8] cases --- .../doris/jdbc/PostgreSQLJdbcExecutor.java | 2 +- .../jdbc/test_jdbc_query_tvf.out | 2 +- .../jdbc/test_pg_jdbc_catalog.out | 9 ++++++++- .../ctas/test_mysql_all_types_ctas.out | 14 +++++++------- .../select/test_mysql_all_types_select.out | 4 ++-- .../select/test_pg_all_types_select.out | 8 ++++---- .../type_test/tvf/test_mysql_all_types_tvf.out | 4 ++-- .../jdbc/test_pg_jdbc_catalog.groovy | 18 +++++++++++++++++- .../ctas/test_mysql_all_types_ctas.groovy | 7 ++++--- 9 files changed, 46 insertions(+), 22 deletions(-) diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java index 77c1c5b305bd18..1c0ecb6919b919 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/PostgreSQLJdbcExecutor.java @@ -88,7 +88,7 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case STRING: return resultSet.getObject(columnIndex + 1); case VARBINARY: - return resultSet.getObject(columnIndex + 1, byte[].class); + return resultSet.getBytes(columnIndex + 1); case ARRAY: java.sql.Array array = resultSet.getArray(columnIndex + 1); return array == null ? null : convertArrayToList(array.getArray()); diff --git a/regression-test/data/external_table_p0/jdbc/test_jdbc_query_tvf.out b/regression-test/data/external_table_p0/jdbc/test_jdbc_query_tvf.out index 6c415dd43bcd0c..76911221065061 100644 --- a/regression-test/data/external_table_p0/jdbc/test_jdbc_query_tvf.out +++ b/regression-test/data/external_table_p0/jdbc/test_jdbc_query_tvf.out @@ -4,7 +4,7 @@ bigint bigint Yes true \N NONE bigint_u largeint Yes true \N NONE binary varbinary(12) Yes true \N NONE bit text Yes true \N NONE -blob text Yes true \N NONE +blob varbinary(65535) Yes true \N NONE boolean tinyint Yes true \N NONE char char(5) Yes true \N NONE date date Yes true \N NONE diff --git a/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out index 983c4060bfb848..d31ed8039dc22b 100644 --- a/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out +++ b/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out @@ -2148,7 +2148,7 @@ true abc def 2022-10-11 1.234 1 2 99 2022-10-22T10:59:59 34.123 2 980dd890-f7fe-4fff-999d-873516108b2e -- !wkb_test -- -1 \\x01030000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000 +1 0x01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000 -- !dt_test -- 2023-06-16T12:34:56.123 2023-06-16T12:34:56.123 @@ -2310,3 +2310,10 @@ mysql 123 abc 234 bcd +-- !varbinary_test -- +1 0x01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000 + +-- !varbinary_test_after_insert -- +1 0x01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000 +3 0x0101000000000000000000F03F0000000000000040 + diff --git a/regression-test/data/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.out b/regression-test/data/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.out index f6dd5e4a1b6538..08f0d21f6ee4cf 100644 --- a/regression-test/data/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.out +++ b/regression-test/data/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.out @@ -1,14 +1,14 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select_all_types_nullable -- -\N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N -0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 0 0 0 0 0 0 0.0 0 0.00 0.00000 0E-10 0E-30 1901 00:00:00 00:00:00 00:00:00 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 0x {} 0x00 Value1 -0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 -128 -32768 -8388608 -2147483648 -9223372036854775808 -1.797693134862316e+308 -3.40282E38 -9999999999 -9999999.99 -9999999999999.99999 -9999999999999999999999999999.9999999999 -99999999999999999999999999999999999.999999999999999999999999999999 1901 -838:59:59 -838:59:59 -838:59:59 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 0x {} 0x00 Value1 -255 65535 16777215 4294967295 18446744073709551615 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 1.797693134862316e+308 3.40282E38 1 127 32767 8388607 2147483647 9223372036854775807 1.797693134862316e+308 3.40282E38 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 2155 838:59:59 838:59:59 838:59:59 9999-12-31 9999-12-31T23:59:59 2038-01-19T03:14:07 2038-01-19T03:14:07.499 2038-01-19T03:14:07.499999 zzzz abcdefgh max 0x6D6178424C4F42 {"key": "maxJSON"} Option1,Option2,Option3 0x3F Value3 +\N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N +0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 0 0 0 0 0 0 0.0 0 0.00 0.00000 0E-10 0E-30 1901 00:00:00 00:00:00 00:00:00 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 {} 0x00 Value1 +0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 -128 -32768 -8388608 -2147483648 -9223372036854775808 -1.797693134862316e+308 -3.40282E38 -9999999999 -9999999.99 -9999999999999.99999 -9999999999999999999999999999.9999999999 -99999999999999999999999999999999999.999999999999999999999999999999 1901 -838:59:59 -838:59:59 -838:59:59 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 {} 0x00 Value1 +255 65535 16777215 4294967295 18446744073709551615 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 1.797693134862316e+308 3.40282E38 1 127 32767 8388607 2147483647 9223372036854775807 1.797693134862316e+308 3.40282E38 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 2155 838:59:59 838:59:59 838:59:59 9999-12-31 9999-12-31T23:59:59 2038-01-19T03:14:07 2038-01-19T03:14:07.499 2038-01-19T03:14:07.499999 zzzz abcdefgh max {"key": "maxJSON"} Option1,Option2,Option3 0x3F Value3 -- !select_all_types_non_nullable -- -0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 0 0 0 0 0 0 0.0 0 0.00 0.00000 0E-10 0E-30 1901 00:00:00 00:00:00 00:00:00 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 0x {} 0x00 Value1 -0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 -128 -32768 -8388608 -2147483648 -9223372036854775808 -1.797693134862316e+308 -3.40282E38 -9999999999 -9999999.99 -9999999999999.99999 -9999999999999999999999999999.9999999999 -99999999999999999999999999999999999.999999999999999999999999999999 1901 -838:59:59 -838:59:59 -838:59:59 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 0x {} 0x00 Value1 -255 65535 16777215 4294967295 18446744073709551615 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 1.797693134862316e+308 3.40282E38 1 127 32767 8388607 2147483647 9223372036854775807 1.797693134862316e+308 3.40282E38 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 2155 838:59:59 838:59:59 838:59:59 9999-12-31 9999-12-31T23:59:59 2038-01-19T03:14:07 2038-01-19T03:14:07.499 2038-01-19T03:14:07.499999 zzzz abcdefgh max 0x6D6178424C4F42 {"key": "maxJSON"} Option1,Option2,Option3 0x3F Value3 +0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 0 0 0 0 0 0 0.0 0 0.00 0.00000 0E-10 0E-30 1901 00:00:00 00:00:00 00:00:00 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 {} 0x00 Value1 +0 0 0 0 0 0 0.00 0.00000 0E-10 0E-30 0 0.0 0 -128 -32768 -8388608 -2147483648 -9223372036854775808 -1.797693134862316e+308 -3.40282E38 -9999999999 -9999999.99 -9999999999999.99999 -9999999999999999999999999999.9999999999 -99999999999999999999999999999999999.999999999999999999999999999999 1901 -838:59:59 -838:59:59 -838:59:59 1000-01-01 1000-01-01T00:00 1970-01-01T00:00:01 1970-01-01T00:00:01 1970-01-01T00:00:01 {} 0x00 Value1 +255 65535 16777215 4294967295 18446744073709551615 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 1.797693134862316e+308 3.40282E38 1 127 32767 8388607 2147483647 9223372036854775807 1.797693134862316e+308 3.40282E38 9999999999 9999999.99 9999999999999.99999 9999999999999999999999999999.9999999999 99999999999999999999999999999999999.999999999999999999999999999999 2155 838:59:59 838:59:59 838:59:59 9999-12-31 9999-12-31T23:59:59 2038-01-19T03:14:07 2038-01-19T03:14:07.499 2038-01-19T03:14:07.499999 zzzz abcdefgh max {"key": "maxJSON"} Option1,Option2,Option3 0x3F Value3 -- !select_varchar -- a diff --git a/regression-test/data/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.out b/regression-test/data/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.out index 755fb31d80a8cc..5d7e2cc76b3af5 100644 --- a/regression-test/data/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.out +++ b/regression-test/data/external_table_p0/jdbc/type_test/select/test_mysql_all_types_select.out @@ -37,7 +37,7 @@ timestamp3 datetime(6) Yes true \N char char(5) Yes true \N varchar varchar(10) Yes true \N text text Yes true \N -blob text Yes true \N +blob varbinary(65535) Yes true \N json text Yes true \N set text Yes true \N bit text Yes true \N @@ -89,7 +89,7 @@ timestamp3 datetime(6) No true \N char char(5) No true \N varchar varchar(10) No true \N text text No true \N -blob text No true \N +blob varbinary(65535) No true \N json text No true \N set text No true \N bit text No true \N diff --git a/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out b/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out index d1bcb12492450b..a24ace4f6cad54 100644 --- a/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out +++ b/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out @@ -15,7 +15,7 @@ timestamp_val datetime(6) Yes true \N timestamptz_val datetime(6) Yes true \N interval_val text Yes true \N bool_val boolean Yes true \N -bytea_val text Yes true \N +bytea_val varbinary(2147483647) Yes true \N inet_val text Yes true \N cidr_val text Yes true \N macaddr_val text Yes true \N @@ -27,9 +27,9 @@ circle_val text Yes true \N uuid_val text Yes true \N -- !select_all_types_null -- -1 32767 2147483647 9223372036854775807 9999999999999999999.9999999999 3.4028235e+38 1.7976931348623157E308 X 65535 1000000 1 years 2 mons 3 days 4 hours 5 mins 6.0 secs true \\xdeadbeef 192.168.0.1/24 192.168.0.0/16 08:00:2b:01:02:03 {"key": "max", "array": [1, 2, 3]} {"key": "max", "array": [1, 2, 3]} (10.0,20.0) {1.0,-2.0,3.0} <(0.0,0.0),1.0> a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 -2 -32768 -2147483648 -9223372036854775808 -9999999999999999999.9999999999 -3.4028235e+38 -1.7976931348623157E308 A 0 0 4713-01-01T00:00 4713-01-01T08:00 -178000000 years 0 mons 0 days 0 hours 0 mins 0.0 secs false \\x 0.0.0.0 0.0.0.0/0 00:00:00:00:00:00 {"key": "min"} {"key": "min"} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 -3 0 0 0 0E-10 0.0 0.0 0 0 0 years 0 mons 0 days 0 hours 0 mins 0.0 secs false \\x ::1 ::1/128 00:00:00:00:00:00 {} {} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 +1 32767 2147483647 9223372036854775807 9999999999999999999.9999999999 3.402823E38 1.797693134862316e+308 X 65535 1000000 1 years 2 mons 3 days 4 hours 5 mins 6.0 secs true 0xDEADBEEF 192.168.0.1/24 192.168.0.0/16 08:00:2b:01:02:03 {"key": "max", "array": [1, 2, 3]} {"key": "max", "array": [1, 2, 3]} (10.0,20.0) {1.0,-2.0,3.0} <(0.0,0.0),1.0> a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 +2 -32768 -2147483648 -9223372036854775808 -9999999999999999999.9999999999 -3.402823E38 -1.797693134862316e+308 A 0 0 4713-01-01T00:00 4713-01-01T08:00 -178000000 years 0 mons 0 days 0 hours 0 mins 0.0 secs false 0x 0.0.0.0 0.0.0.0/0 00:00:00:00:00:00 {"key": "min"} {"key": "min"} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 +3 0 0 0 0E-10 0.0 0 0 0 0 years 0 mons 0 days 0 hours 0 mins 0.0 secs false 0x ::1 ::1/128 00:00:00:00:00:00 {} {} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 4 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N -- !select_all_types_multi_block -- diff --git a/regression-test/data/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.out b/regression-test/data/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.out index e0b544ecb3e99f..4ef8e60977869b 100644 --- a/regression-test/data/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.out +++ b/regression-test/data/external_table_p0/jdbc/type_test/tvf/test_mysql_all_types_tvf.out @@ -37,7 +37,7 @@ timestamp3 datetime(6) Yes true \N NONE char char(5) Yes true \N NONE varchar varchar(10) Yes true \N NONE text text Yes true \N NONE -blob text Yes true \N NONE +blob varbinary(65535) Yes true \N NONE json text Yes true \N NONE set char(23) Yes true \N NONE bit text Yes true \N NONE @@ -89,7 +89,7 @@ timestamp3 datetime(6) Yes true \N NONE char char(5) Yes true \N NONE varchar varchar(10) Yes true \N NONE text text Yes true \N NONE -blob text Yes true \N NONE +blob varbinary(65535) Yes true \N NONE json text Yes true \N NONE set char(23) Yes true \N NONE bit text Yes true \N NONE diff --git a/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy index e18d31b5e59f5a..e452407d994bb5 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy @@ -247,6 +247,22 @@ suite("test_pg_jdbc_catalog", "p0,external,pg,external_docker,external_docker_pg sql """ switch ${catalog_name} """ sql """ use ${ex_schema_name} """ order_qt_test_old """ select * from test3 order by id; """ - sql """ drop catalog if exists ${catalog_name} """ + + sql """ drop catalog if exists test_pg_with_varbinary """ + sql """create catalog if not exists test_pg_with_varbinary properties( + "type"="jdbc", + "user"="postgres", + "password"="123456", + "jdbc_url" = "jdbc:postgresql://${externalEnvIp}:${pg_port}/postgres?currentSchema=doris_test&useSSL=false", + "driver_url" = "${driver_url}", + "driver_class" = "org.postgresql.Driver", + "enable.mapping.varbinary" = "true" + );""" + + sql """use catalog_pg_test """ + order_qt_varbinary_test """ select * from wkb_test order by id; """ + sql """ insert into wkb_test values (3, X'0101000000000000000000F03F0000000000000040'); """ + order_qt_varbinary_test_after_insert """ select * from wkb_test order by id; """ + } } diff --git a/regression-test/suites/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.groovy b/regression-test/suites/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.groovy index 40243f2a1e61a2..b1571066e03656 100644 --- a/regression-test/suites/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.groovy +++ b/regression-test/suites/external_table_p0/jdbc/type_test/ctas/test_mysql_all_types_ctas.groovy @@ -35,16 +35,17 @@ suite("test_mysql_all_types_ctas", "p0,external,mysql,external_docker,external_d "password"="123456", "jdbc_url" = "jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test?useSSL=false", "driver_url" = "${driver_url}", - "driver_class" = "com.mysql.cj.jdbc.Driver" + "driver_class" = "com.mysql.cj.jdbc.Driver", + "enable.mapping.varbinary" = "true" );""" sql """use internal.test_mysql_all_types_ctas;""" - sql """create table all_types_nullable properties("replication_num" = "1") as select * EXCEPT(`binary`,`varbinary`) from mysql_all_type_ctas_test.doris_test.all_types_nullable;""" + sql """create table all_types_nullable properties("replication_num" = "1") as select * EXCEPT(`blob`,`binary`,`varbinary`) from mysql_all_type_ctas_test.doris_test.all_types_nullable;""" qt_select_all_types_nullable """select * from internal.test_mysql_all_types_ctas.all_types_nullable order by 1;""" - sql """create table all_types_non_nullable properties("replication_num" = "1") as select * EXCEPT(`binary`,`varbinary`) from mysql_all_type_ctas_test.doris_test.all_types_non_nullable;""" + sql """create table all_types_non_nullable properties("replication_num" = "1") as select * EXCEPT(`blob`,`binary`,`varbinary`) from mysql_all_type_ctas_test.doris_test.all_types_non_nullable;""" if (!isCloudMode()) { qt_select_all_types_non_nullable """select * from internal.test_mysql_all_types_ctas.all_types_non_nullable order by 1;""" From 9dbe55f1b57b999856e758b2af96ef6d5d174cb8 Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Mon, 24 Nov 2025 16:54:58 +0800 Subject: [PATCH 4/8] add cases --- .../jdbc/test_db2_jdbc_catalog.out | 12 +++++++ .../jdbc/test_sqlserver_jdbc_catalog.out | 17 ++++++++++ .../jdbc/test_db2_jdbc_catalog.groovy | 33 +++++++++++++++++++ .../jdbc/test_sqlserver_jdbc_catalog.groovy | 7 ++++ 4 files changed, 69 insertions(+) diff --git a/regression-test/data/external_table_p0/jdbc/test_db2_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_db2_jdbc_catalog.out index 3e9e74f6a66ee1..a8ad8fd71abaf5 100644 --- a/regression-test/data/external_table_p0/jdbc/test_db2_jdbc_catalog.out +++ b/regression-test/data/external_table_p0/jdbc/test_db2_jdbc_catalog.out @@ -70,3 +70,15 @@ mysql -- !select_xml_tvf -- 1000 Gambardella MatthewXML Developers GuideComputer44.952000-10-01An in-depth look at creating application\n with XML +-- !varbinary_desc -- +BLOB_COLUMN varbinary(1048576) Yes true \N +ID_COLUMN int No true \N + +-- !varbinary_select -- +1 0x48656C6C6F20576F726C6421 + +-- !varbinary_select_after_insert -- +1 0x48656C6C6F20576F726C6421 +2 0x48656C6C6F20576F726C6421 +3 \N + diff --git a/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out index af2b6f9d2b33eb..a62d9bce1d497b 100644 --- a/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out +++ b/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out @@ -149,3 +149,20 @@ information_schema mysql sys +-- !desc -- +binary_value varbinary(20) Yes true \N +bit_value boolean No true \N +id int No true \N +varbinary_value varbinary(20) Yes true \N + +-- !query -- +1 false 0x4D616B6520446F72697320477265617421000000 0x4D616B6520446F72697320477265617421 +2 true 0x4D616B6520446F72697320477265617421000000 0x4D616B6520446F72697320477265617421 +3 true 0x4D616B6520446F72697320477265617421000000 0x4D616B6520446F72697320477265617421 + +-- !query_after_insert -- +1 false 0x4D616B6520446F72697320477265617421000000 0x4D616B6520446F72697320477265617421 +2 true 0x4D616B6520446F72697320477265617421000000 0x4D616B6520446F72697320477265617421 +3 true 0x4D616B6520446F72697320477265617421000000 0x4D616B6520446F72697320477265617421 +4 true 0xABAB000000000000000000000000000000000000 0xAB + diff --git a/regression-test/suites/external_table_p0/jdbc/test_db2_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_db2_jdbc_catalog.groovy index fe3850d9917840..bfd6bdb720e83d 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_db2_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_db2_jdbc_catalog.groovy @@ -269,7 +269,40 @@ suite("test_db2_jdbc_catalog", "p0,external,db2,external_docker,external_docker_ sql """ drop catalog if exists ${catalog_name} """ + + db2_docker """CREATE TABLE doris_test.VARBINARY_TABLE ( + id_column INT GENERATED ALWAYS AS IDENTITY, + blob_column BLOB + );""" + + db2_docker """INSERT INTO doris_test.VARBINARY_TABLE ( + blob_column + ) VALUES ( + BLOB(X'48656C6C6F20576F726C6421') -- 'Hello World!' + );""" + + sql """drop catalog if exists test_db2_varbinary """ + + sql """create catalog if not exists test_db2_varbinary properties( + "type"="jdbc", + "user"="db2inst1", + "password"="123456", + "jdbc_url" = "jdbc:db2://${externalEnvIp}:${db2_port}/doris:allowNextOnExhaustedResultSet=1;resultSetHoldability=1;", + "driver_url" = "${driver_url}", + "driver_class" = "com.ibm.db2.jcc.DB2Driver", + "enable.mapping.varbinary" = "true" + );""" + + sql """switch test_db2_varbinary""" + sql """ use ${ex_db_name}""" + order_qt_varbinary_desc """ desc VARBINARY_TABLE; """ + order_qt_varbinary_select """ select * from VARBINARY_TABLE order by ID_COLUMN;""" + sql """ insert into VARBINARY_TABLE (blob_column) values (X'48656C6C6F20576F726C6421'); """ + sql """ insert into VARBINARY_TABLE (blob_column) values (NULL); """ + order_qt_varbinary_select_after_insert """ select * from VARBINARY_TABLE order by ID_COLUMN; """ + db2_docker "DROP TABLE IF EXISTS doris_test.sample_table;" + db2_docker "DROP TABLE IF EXISTS doris_test.VARBINARY_TABLE;" db2_docker "DROP SCHEMA doris_test restrict;" db2_docker "DROP TABLE IF EXISTS test.books;" db2_docker "DROP SCHEMA test restrict;" diff --git a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy index b693cd0cad4b0e..c6e3c3f698ddc3 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy @@ -98,6 +98,13 @@ suite("test_sqlserver_jdbc_catalog", "p0,external,sqlserver,external_docker,exte order_qt_sql """ show databases from ${catalog_name} """ + sql """ switch ${catalog_name} """ + sql """ use ${ex_db_name} """ + + order_qt_desc """ desc test_binary; """ + order_qt_query """ select * from test_binary order by id; """ + sql """ insert into test_binary values (4, 4, X"ABAB", X"AB") """ + order_qt_query_after_insert """ select * from test_binary order by id; """ sql """ drop catalog if exists ${catalog_name} """ } } From b90ee6d59af797d7cc030fd8a50e52b01e3d37e1 Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Mon, 24 Nov 2025 16:56:46 +0800 Subject: [PATCH 5/8] update --- .../org/apache/doris/datasource/jdbc/client/JdbcClient.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java index 53dd8820c6e6f8..ec89fc9d2b1305 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java @@ -67,8 +67,7 @@ public abstract class JdbcClient { protected boolean isOnlySpecifiedDatabase; protected Map includeDatabaseMap; protected Map excludeDatabaseMap; - // protected boolean enableMappingVarbinary; - protected boolean enableMappingVarbinary = true; // used test case + protected boolean enableMappingVarbinary; public static JdbcClient createJdbcClient(JdbcClientConfig jdbcClientConfig) { String dbType = parseDbType(jdbcClientConfig.getJdbcUrl()); @@ -114,7 +113,6 @@ protected JdbcClient(JdbcClientConfig jdbcClientConfig) { initializeClassLoader(jdbcClientConfig); initializeDataSource(jdbcClientConfig); this.enableMappingVarbinary = jdbcClientConfig.isEnableMappingVarbinary(); - this.enableMappingVarbinary = true; // used test case } protected void setJdbcDriverSystemProperties() { From 316841eab0aa91e12d309966afbca3626422a042 Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Mon, 24 Nov 2025 20:31:14 +0800 Subject: [PATCH 6/8] update case --- .../jdbc/test_pg_jdbc_catalog.out | 2 +- .../type_test/select/test_pg_all_types_select.out | 8 ++++---- .../jdbc/test_pg_jdbc_catalog.groovy | 2 +- .../jdbc/test_sqlserver_jdbc_catalog.groovy | 14 +++++++++++++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out index d31ed8039dc22b..f92fb5d694a67b 100644 --- a/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out +++ b/regression-test/data/external_table_p0/jdbc/test_pg_jdbc_catalog.out @@ -2148,7 +2148,7 @@ true abc def 2022-10-11 1.234 1 2 99 2022-10-22T10:59:59 34.123 2 980dd890-f7fe-4fff-999d-873516108b2e -- !wkb_test -- -1 0x01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000 +1 \\x01030000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000 -- !dt_test -- 2023-06-16T12:34:56.123 2023-06-16T12:34:56.123 diff --git a/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out b/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out index a24ace4f6cad54..863f5e8e36e59b 100644 --- a/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out +++ b/regression-test/data/external_table_p0/jdbc/type_test/select/test_pg_all_types_select.out @@ -15,7 +15,7 @@ timestamp_val datetime(6) Yes true \N timestamptz_val datetime(6) Yes true \N interval_val text Yes true \N bool_val boolean Yes true \N -bytea_val varbinary(2147483647) Yes true \N +bytea_val text Yes true \N inet_val text Yes true \N cidr_val text Yes true \N macaddr_val text Yes true \N @@ -27,9 +27,9 @@ circle_val text Yes true \N uuid_val text Yes true \N -- !select_all_types_null -- -1 32767 2147483647 9223372036854775807 9999999999999999999.9999999999 3.402823E38 1.797693134862316e+308 X 65535 1000000 1 years 2 mons 3 days 4 hours 5 mins 6.0 secs true 0xDEADBEEF 192.168.0.1/24 192.168.0.0/16 08:00:2b:01:02:03 {"key": "max", "array": [1, 2, 3]} {"key": "max", "array": [1, 2, 3]} (10.0,20.0) {1.0,-2.0,3.0} <(0.0,0.0),1.0> a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 -2 -32768 -2147483648 -9223372036854775808 -9999999999999999999.9999999999 -3.402823E38 -1.797693134862316e+308 A 0 0 4713-01-01T00:00 4713-01-01T08:00 -178000000 years 0 mons 0 days 0 hours 0 mins 0.0 secs false 0x 0.0.0.0 0.0.0.0/0 00:00:00:00:00:00 {"key": "min"} {"key": "min"} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 -3 0 0 0 0E-10 0.0 0 0 0 0 years 0 mons 0 days 0 hours 0 mins 0.0 secs false 0x ::1 ::1/128 00:00:00:00:00:00 {} {} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 +1 32767 2147483647 9223372036854775807 9999999999999999999.9999999999 3.402823E38 1.797693134862316e+308 X 65535 1000000 1 years 2 mons 3 days 4 hours 5 mins 6.0 secs true \\xdeadbeef 192.168.0.1/24 192.168.0.0/16 08:00:2b:01:02:03 {"key": "max", "array": [1, 2, 3]} {"key": "max", "array": [1, 2, 3]} (10.0,20.0) {1.0,-2.0,3.0} <(0.0,0.0),1.0> a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 +2 -32768 -2147483648 -9223372036854775808 -9999999999999999999.9999999999 -3.402823E38 -1.797693134862316e+308 A 0 0 4713-01-01T00:00 4713-01-01T08:00 -178000000 years 0 mons 0 days 0 hours 0 mins 0.0 secs false \\x 0.0.0.0 0.0.0.0/0 00:00:00:00:00:00 {"key": "min"} {"key": "min"} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 +3 0 0 0 0E-10 0.0 0 0 0 0 years 0 mons 0 days 0 hours 0 mins 0.0 secs false \\x ::1 ::1/128 00:00:00:00:00:00 {} {} (0.0,0.0) {1.0,1.0,0.0} <(0.0,0.0),0.0> 00000000-0000-0000-0000-000000000000 4 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N -- !select_all_types_multi_block -- diff --git a/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy index e452407d994bb5..3326dac9d061c7 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_pg_jdbc_catalog.groovy @@ -258,7 +258,7 @@ suite("test_pg_jdbc_catalog", "p0,external,pg,external_docker,external_docker_pg "driver_class" = "org.postgresql.Driver", "enable.mapping.varbinary" = "true" );""" - + sql """ switch test_pg_with_varbinary """ sql """use catalog_pg_test """ order_qt_varbinary_test """ select * from wkb_test order by id; """ sql """ insert into wkb_test values (3, X'0101000000000000000000F03F0000000000000040'); """ diff --git a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy index c6e3c3f698ddc3..dfd931c800f650 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy @@ -98,7 +98,19 @@ suite("test_sqlserver_jdbc_catalog", "p0,external,sqlserver,external_docker,exte order_qt_sql """ show databases from ${catalog_name} """ - sql """ switch ${catalog_name} """ + + sql """ drop catalog if exists test_sqlserver_jdbc_catalog_binary """ + + sql """ create catalog if not exists test_sqlserver_jdbc_catalog_binary properties( + "type"="jdbc", + "user"="sa", + "password"="Doris123456", + "jdbc_url" = "jdbc:sqlserver://${externalEnvIp}:${sqlserver_port};encrypt=false;databaseName=doris_test;trustServerCertificate=false", + "driver_url" = "${driver_url}", + "driver_class" = "com.microsoft.sqlserver.jdbc.SQLServerDriver", + "enable.mapping.binary" = "true" + );""" + sql """ switch test_sqlserver_jdbc_catalog_binary """ sql """ use ${ex_db_name} """ order_qt_desc """ desc test_binary; """ From 9ae516e2b91b46ccb8e3b487426613ac82f383ba Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Tue, 25 Nov 2025 15:20:35 +0800 Subject: [PATCH 7/8] update code --- .../java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java | 2 -- .../main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java | 3 --- .../main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java | 2 -- .../apache/doris/datasource/jdbc/client/JdbcGbaseClient.java | 4 ---- .../doris/datasource/jdbc/client/JdbcSapHanaClient.java | 4 +--- .../external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy | 2 +- 6 files changed, 2 insertions(+), 15 deletions(-) diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java index 55d9d81a9c4f21..a3bb9b7b261b67 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/ClickHouseJdbcExecutor.java @@ -88,8 +88,6 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla return resultSet.getObject(columnIndex + 1, String.class); case ARRAY: return convertArrayToList(resultSet.getArray(columnIndex + 1).getArray()); - case VARBINARY: - return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java index f9d9f612dd3094..e8e29a8178fb82 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/GbaseJdbcExecutor.java @@ -73,9 +73,6 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case STRING: String stringVal = (String) resultSet.getObject(columnIndex + 1); return resultSet.wasNull() ? null : stringVal; - case VARBINARY: - byte[] bytesVal = resultSet.getBytes(columnIndex + 1); - return resultSet.wasNull() ? null : bytesVal; default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java index e2d4b463c9f3fc..442e4efceda503 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SapHanaJdbcExecutor.java @@ -93,8 +93,6 @@ protected Object getColumnValue(int columnIndex, ColumnType type, String[] repla case VARCHAR: case STRING: return resultSet.getObject(columnIndex + 1); - case VARBINARY: - return resultSet.getObject(columnIndex + 1, byte[].class); default: throw new IllegalArgumentException("Unsupported column type: " + type.getType()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java index 0d29414520de85..6121ef2dbfc2fb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcGbaseClient.java @@ -147,10 +147,6 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case Types.VARCHAR: case Types.LONGVARCHAR: return ScalarType.createStringType(); - case Types.BINARY: - case Types.VARBINARY: - return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) - : ScalarType.createStringType(); default: return Type.UNSUPPORTED; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java index 8615a049eba005..e89b6268b900f7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcSapHanaClient.java @@ -89,11 +89,9 @@ protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) { case "NCLOB": case "TEXT": case "BINTEXT": - return ScalarType.createStringType(); case "BINARY": case "VARBINARY": - return enableMappingVarbinary ? ScalarType.createVarbinaryType(fieldSchema.requiredColumnSize()) - : ScalarType.createStringType(); + return ScalarType.createStringType(); case "BLOB": case "ST_GEOMETRY": case "ST_POINT": diff --git a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy index dfd931c800f650..703029beed922e 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.groovy @@ -108,7 +108,7 @@ suite("test_sqlserver_jdbc_catalog", "p0,external,sqlserver,external_docker,exte "jdbc_url" = "jdbc:sqlserver://${externalEnvIp}:${sqlserver_port};encrypt=false;databaseName=doris_test;trustServerCertificate=false", "driver_url" = "${driver_url}", "driver_class" = "com.microsoft.sqlserver.jdbc.SQLServerDriver", - "enable.mapping.binary" = "true" + "enable.mapping.varbinary" = "true" );""" sql """ switch test_sqlserver_jdbc_catalog_binary """ sql """ use ${ex_db_name} """ From 3edc670ed878a3fda5b963b39fa1b5d4cb9a779e Mon Sep 17 00:00:00 2001 From: zhangstar333 Date: Wed, 26 Nov 2025 14:31:39 +0800 Subject: [PATCH 8/8] update case --- .../oracle/init/03-create-table.sql | 5 +++++ .../docker-compose/oracle/init/04-insert.sql | 4 ++++ .../select/test_oracle_all_types_select.out | 22 ++++++++++++++++--- .../test_oracle_all_types_select.groovy | 18 +++++++++++++++ .../manager/test_manager_interface_3.groovy | 9 +++++--- 5 files changed, 52 insertions(+), 6 deletions(-) diff --git a/docker/thirdparties/docker-compose/oracle/init/03-create-table.sql b/docker/thirdparties/docker-compose/oracle/init/03-create-table.sql index 028d95930cfc8e..7b1601ca302d2a 100644 --- a/docker/thirdparties/docker-compose/oracle/init/03-create-table.sql +++ b/docker/thirdparties/docker-compose/oracle/init/03-create-table.sql @@ -258,3 +258,8 @@ create table doris_test.extreme_test_multi_block ( t7 interval day(3) to second(6) ); +CREATE TABLE doris_test.varbinary_test( +"id" NUMBER(5,0), +"NAME" VARCHAR2(20), +"BLOB_COL" BLOB +); diff --git a/docker/thirdparties/docker-compose/oracle/init/04-insert.sql b/docker/thirdparties/docker-compose/oracle/init/04-insert.sql index e727e107f86346..7dd0afe0bd9c05 100644 --- a/docker/thirdparties/docker-compose/oracle/init/04-insert.sql +++ b/docker/thirdparties/docker-compose/oracle/init/04-insert.sql @@ -155,4 +155,8 @@ SELECT t1, t2, t3, t4, t5, t6, t7 FROM doris_test.extreme_test; +INSERT INTO doris_test.varbinary_test VALUES (1, 'empty', EMPTY_BLOB()); +INSERT INTO doris_test.varbinary_test VALUES (2, 'NULL', NULL); +INSERT INTO doris_test.varbinary_test VALUES (3, 'normal', HEXTORAW('48656C6C6F20576F726C64')); + commit; diff --git a/regression-test/data/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.out b/regression-test/data/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.out index 5bbb8363625546..6e196d63614ce5 100644 --- a/regression-test/data/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.out +++ b/regression-test/data/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.out @@ -36,10 +36,26 @@ T7 text Yes true \N -- !select_all_types_null -- \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N --2147483648 -9999999999999999999999999999999999999 -99999999999999999999999999999999999999 -9999999.99 -2147483648 -32768 -999.99 -3.402823466E38 -3.0E38 -3.402823466E38 -99 -9999 -999999999 -999999999999999999 -999 -99999 -9999999999 -9999999999999999999 A ������ B ������ S -999.99 -99900 -0.0000999 0001-01-01T00:00 0001-01-01T00:00 0001-01-01T00:00 0001-01-01T00:00 0001-01-01T00:00 -99-11 -99 23:59:59.999999 -0 0 0 0.00 0 0 0.00 0.0 0.0 0.0 0 0 0 0 0 0 0 0 \N \N \N 0.00 0 0E-7 1970-01-01T00:00 1970-01-01T00:00 1970-01-01T00:00 1970-01-01T00:00 1970-01-01T00:00 0-0 0 0:0:0.0 -2147483647 9999999999999999999999999999999999999 99999999999999999999999999999999999999 999999.99 2147483647 32767 999.99 3.402823466E38 3.0E38 3.402823466E38 99 9999 999999999 999999999999999999 999 99999 9999999999 9999999999999999999 Z ������ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ������ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 999.99 99900 0.0000999 9999-12-31T00:00 9999-12-31T23:59:59.999 9999-12-31T23:59:59.999999 9999-12-31T23:59:59.999999 9999-12-31T23:59:59.999999 99-11 99 23:59:59.999999 +-2147483648 -9999999999999999999999999999999999999 -99999999999999999999999999999999999999 -9999999.99 -2147483648 -32768 -999.99 -3.402823466e+38 -3e+38 -3.402823466e+38 -99 -9999 -999999999 -999999999999999999 -999 -99999 -9999999999 -9999999999999999999 A ������ B ������ S -999.99 -99900 -0.0000999 0001-01-01T00:00 0001-01-01T00:00 0001-01-01T00:00 0001-01-01T00:00 0001-01-01T00:00 -99-11 -99 23:59:59.999999 +0 0 0 0.00 0 0 0.00 0 0 0 0 0 0 0 0 0 0 0 \N \N \N 0.00 0 0E-7 1970-01-01T00:00 1970-01-01T00:00 1970-01-01T00:00 1970-01-01T00:00 1970-01-01T00:00 0-0 0 0:0:0.0 +2147483647 9999999999999999999999999999999999999 99999999999999999999999999999999999999 999999.99 2147483647 32767 999.99 3.402823466e+38 3e+38 3.402823466e+38 99 9999 999999999 999999999999999999 999 99999 9999999999 9999999999999999999 Z ������ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ������ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 999.99 99900 0.0000999 9999-12-31T00:00 9999-12-31T23:59:59.999 9999-12-31T23:59:59.999999 9999-12-31T23:59:59.999999 9999-12-31T23:59:59.999999 99-11 99 23:59:59.999999 -- !select_all_types_multi_block -- 4100 +-- !desc -- +BLOB_COL varbinary(4000) Yes true \N +NAME text Yes true \N +id int Yes true \N + +-- !select_varbinary_types -- +1 empty 0x +2 NULL \N +3 normal 0x48656C6C6F20576F726C64 + +-- !select_varbinary_types2 -- +1 empty 0x +2 NULL \N +3 normal 0x48656C6C6F20576F726C64 +4 insert 0xAB + diff --git a/regression-test/suites/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.groovy b/regression-test/suites/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.groovy index 89eb4a8a93b99a..317e30088f539a 100644 --- a/regression-test/suites/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.groovy +++ b/regression-test/suites/external_table_p0/jdbc/type_test/select/test_oracle_all_types_select.groovy @@ -43,5 +43,23 @@ suite("test_oracle_all_types_select", "p0,external,oracle,external_docker,extern qt_select_all_types_multi_block """select count(*) from DORIS_TEST.EXTREME_TEST_MULTI_BLOCK;""" sql """drop catalog if exists oracle_all_type_test """ + + + sql """drop catalog if exists oracle_varbinary_type_test """ + sql """create catalog if not exists oracle_varbinary_type_test properties( + "type"="jdbc", + "user"="doris_test", + "password"="123456", + "jdbc_url" = "jdbc:oracle:thin:@${externalEnvIp}:${oracle_port}:${SID}", + "driver_url" = "${driver_url}", + "driver_class" = "oracle.jdbc.driver.OracleDriver", + "enable.mapping.varbinary"="true" + );""" + + sql """use oracle_varbinary_type_test.DORIS_TEST""" + order_qt_desc "desc VARBINARY_TEST;" + qt_select_varbinary_types "select * from VARBINARY_TEST order by id;" + sql """ insert into VARBINARY_TEST values (4,"insert",X"AB");""" + qt_select_varbinary_types2 "select * from VARBINARY_TEST order by id;" } } diff --git a/regression-test/suites/manager/test_manager_interface_3.groovy b/regression-test/suites/manager/test_manager_interface_3.groovy index 7f7edabf3653d2..28ffa19a4acc13 100644 --- a/regression-test/suites/manager/test_manager_interface_3.groovy +++ b/regression-test/suites/manager/test_manager_interface_3.groovy @@ -424,7 +424,8 @@ suite('test_manager_interface_3',"p0") { x ++ } } - assertTrue(x == 20) + log.info("x1 = ${x}") + assertTrue(x == 21) connect(user, "${pwd}", url) { result = sql """ show resources """ @@ -435,7 +436,8 @@ suite('test_manager_interface_3',"p0") { x ++ } } - assertTrue(x == 20) + log.info("x2 = ${x}") + assertTrue(x == 21) } checkNereidsExecute("show all grants"); @@ -478,7 +480,8 @@ suite('test_manager_interface_3',"p0") { x ++ } } - assertTrue(x == 20) + log.info("x3 = ${x}") + assertTrue(x == 21) } sql """ drop RESOURCE if exists ${resource_name} """ sql """drop user if exists ${user}"""