diff --git a/be/src/vec/exec/vjdbc_connector.cpp b/be/src/vec/exec/vjdbc_connector.cpp index d5427fee49..ece1ddbeab 100644 --- a/be/src/vec/exec/vjdbc_connector.cpp +++ b/be/src/vec/exec/vjdbc_connector.cpp @@ -279,7 +279,7 @@ Status JdbcConnector::_check_type(SlotDescriptor* slot_desc, const std::string& case TYPE_BIGINT: case TYPE_LARGEINT: { if (type_str != "java.lang.Long" && type_str != "java.math.BigDecimal" && - type_str != "java.math.BigInteger" && + type_str != "java.math.BigInteger" && type_str != "java.lang.String" && type_str != "com.clickhouse.data.value.UnsignedInteger" && type_str != "com.clickhouse.data.value.UnsignedLong") { return Status::InternalError(error_msg); diff --git a/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java b/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java index a0f544f17d..ea1a352da5 100644 --- a/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java +++ b/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java @@ -723,6 +723,20 @@ public class JdbcExecutor { } } + private void stringPutToBigInteger(Object[] column, boolean isNullable, int numRows, long nullMapAddr, + long columnAddr, int startRowForNullable) { + BigInteger[] data = new BigInteger[numRows]; + for (int i = 0; i < numRows; i++) { + if (column[i] == null) { + data[i] = null; + UdfUtils.UNSAFE.putByte(nullMapAddr + i, (byte) 1); + } else { + data[i] = new BigInteger((String) column[i]); + } + } + copyBatchDecimalResult(data, isNullable, numRows, columnAddr, 16, startRowForNullable); + } + private void clickHouseUInt64ToLong(Object[] column, boolean isNullable, int numRows, long nullMapAddr, long columnAddr, int startRowForNullable) { if (isNullable) { @@ -754,6 +768,8 @@ public class JdbcExecutor { bigDecimalPutToBigInteger(column, isNullable, numRows, nullMapAddr, columnAddr, firstNotNullIndex); } else if (column[firstNotNullIndex] instanceof BigInteger) { bigIntegerPutToByte(column, isNullable, numRows, nullMapAddr, columnAddr, firstNotNullIndex); + } else if (column[firstNotNullIndex] instanceof String) { + stringPutToBigInteger(column, isNullable, numRows, nullMapAddr, columnAddr, firstNotNullIndex); } else if (column[firstNotNullIndex] instanceof com.clickhouse.data.value.UnsignedLong) { clickHouseUInt64ToLong(column, isNullable, numRows, nullMapAddr, columnAddr, firstNotNullIndex); }