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

Reply via email to