This is an automated email from the ASF dual-hosted git repository. zykkk pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push: new 5728d1ef7a [fix](jdbc catalog) Fixed mappings with type errors for bool and tinyint(1) (#22091) 5728d1ef7a is described below commit 5728d1ef7a83b12c1e4415d78aff562f1699345b Author: zy-kkk <zhongy...@gmail.com> AuthorDate: Tue Jul 25 22:21:13 2023 +0800 [fix](jdbc catalog) Fixed mappings with type errors for bool and tinyint(1) (#22091) --- be/src/vec/exec/vjdbc_connector.cpp | 3 ++- .../org/apache/doris/catalog/JdbcResource.java | 2 +- .../java/org/apache/doris/udf/JdbcExecutor.java | 24 +++++++++++++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/be/src/vec/exec/vjdbc_connector.cpp b/be/src/vec/exec/vjdbc_connector.cpp index a01809e561..39be3de4da 100644 --- a/be/src/vec/exec/vjdbc_connector.cpp +++ b/be/src/vec/exec/vjdbc_connector.cpp @@ -252,7 +252,8 @@ Status JdbcConnector::_check_type(SlotDescriptor* slot_desc, const std::string& type_str, slot_desc->type().debug_string(), slot_desc->col_name()); switch (slot_desc->type().type) { case TYPE_BOOLEAN: { - if (type_str != "java.lang.Boolean" && type_str != "java.lang.Byte") { + if (type_str != "java.lang.Boolean" && type_str != "java.lang.Byte" && + type_str != "java.lang.Integer") { return Status::InternalError(error_msg); } break; 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 7e6acc0f66..543d721a02 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 @@ -288,7 +288,7 @@ public class JdbcResource extends Resource { // However when tinyInt1isBit=false, GetColumnClassName of MySQL returns java.lang.Boolean, // while that of Doris returns java.lang.Integer. In order to be compatible with both MySQL and Doris, // Jdbc params should set tinyInt1isBit=true&transformedBitIsBoolean=true - newJdbcUrl = checkAndSetJdbcBoolParam(newJdbcUrl, "tinyInt1isBit", "true", "true"); + newJdbcUrl = checkAndSetJdbcBoolParam(newJdbcUrl, "tinyInt1isBit", "true", "false"); newJdbcUrl = checkAndSetJdbcBoolParam(newJdbcUrl, "transformedBitIsBoolean", "true", "true"); // set useUnicode and characterEncoding to false and utf-8 newJdbcUrl = checkAndSetJdbcBoolParam(newJdbcUrl, "useUnicode", "false", "true"); 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 e6ef69196f..1744e34ebc 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 @@ -325,9 +325,8 @@ public class JdbcExecutor { } } - public void copyBatchBooleanResult(Object columnObj, boolean isNullable, int numRows, long nullMapAddr, - long columnAddr) { - Object[] column = (Object[]) columnObj; + public void booleanPutToByte(Object[] column, boolean isNullable, int numRows, long nullMapAddr, long columnAddr, + int startRow) { if (isNullable) { for (int i = 0; i < numRows; i++) { if (column[i] == null) { @@ -343,6 +342,25 @@ public class JdbcExecutor { } } + public void copyBatchBooleanResult(Object columnObj, boolean isNullable, int numRows, long nullMapAddr, + long columnAddr) { + Object[] column = (Object[]) columnObj; + int firstNotNullIndex = 0; + if (isNullable) { + firstNotNullIndex = getFirstNotNullObject(column, numRows, nullMapAddr); + } + if (firstNotNullIndex == numRows) { + return; + } + if (column[firstNotNullIndex] instanceof Boolean) { + booleanPutToByte(column, isNullable, numRows, nullMapAddr, columnAddr, firstNotNullIndex); + } else if (column[firstNotNullIndex] instanceof Integer) { + integerPutToByte(column, isNullable, numRows, nullMapAddr, columnAddr, firstNotNullIndex); + } else if (column[firstNotNullIndex] instanceof Byte) { + bytePutToByte(column, isNullable, numRows, nullMapAddr, columnAddr, firstNotNullIndex); + } + } + private void bigDecimalPutToByte(Object[] column, boolean isNullable, int numRows, long nullMapAddr, long columnAddr, int startRowForNullable) { if (isNullable) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org