This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 25fdd854519 [Bug](branch-20) fix udf return array_string type has 
error in branch-20 (#41004)
25fdd854519 is described below

commit 25fdd854519e0f6c4354ddbd584c56ef0c96a567
Author: zhangstar333 <87313068+zhangstar...@users.noreply.github.com>
AuthorDate: Thu Sep 19 19:59:51 2024 +0800

    [Bug](branch-20) fix udf return array_string type has error in branch-20 
(#41004)
    
    when return type is array_string, the nested column string offset is
    should be cumulative, start with offset[row-1]
    instead of equal to 0
    this bug only in branch-2.0
---
 .../src/main/java/org/apache/doris/udf/UdfConvert.java         | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git 
a/fe/be-java-extensions/java-udf/src/main/java/org/apache/doris/udf/UdfConvert.java
 
b/fe/be-java-extensions/java-udf/src/main/java/org/apache/doris/udf/UdfConvert.java
index 7b3a151f006..aefaf511fb1 100644
--- 
a/fe/be-java-extensions/java-udf/src/main/java/org/apache/doris/udf/UdfConvert.java
+++ 
b/fe/be-java-extensions/java-udf/src/main/java/org/apache/doris/udf/UdfConvert.java
@@ -1292,7 +1292,8 @@ public class UdfConvert {
             int num = data.size();
             int[] offsets = new int[num];
             byte[][] byteRes = new byte[num][];
-            int offset = 0;
+            int oldOffsetNum = UdfUtils.UNSAFE.getInt(null, strOffsetAddr + 
((hasPutElementNum - 1) * 4L));
+            int offset = oldOffsetNum;
             for (int i = 0; i < num; ++i) {
                 String value = data.get(i);
                 if (value == null) {
@@ -1304,23 +1305,22 @@ public class UdfConvert {
                 offset += byteRes[i].length;
                 offsets[i] = offset;
             }
-            int oldOffsetNum = UdfUtils.UNSAFE.getInt(null, strOffsetAddr + 
((hasPutElementNum - 1) * 4L));
             int oldSzie = 0;
             if (num > 0) {
                 oldSzie = offsets[num - 1];
             }
             byte[] bytes = new byte[oldSzie];
-            long bytesAddr = JNINativeMethod.resizeStringColumn(dataAddr, 
oldOffsetNum + oldSzie);
+            long bytesAddr = JNINativeMethod.resizeStringColumn(dataAddr, 
oldSzie);
             int dst = 0;
             for (int i = 0; i < num; i++) {
                 for (int j = 0; j < byteRes[i].length; j++) {
                     bytes[dst++] = byteRes[i][j];
                 }
             }
-            UdfUtils.copyMemory(offsets, UdfUtils.INT_ARRAY_OFFSET, null, 
strOffsetAddr + (4L * oldOffsetNum),
+            UdfUtils.copyMemory(offsets, UdfUtils.INT_ARRAY_OFFSET, null, 
strOffsetAddr + (4L * hasPutElementNum),
                     num * 4L);
             UdfUtils.copyMemory(bytes, UdfUtils.BYTE_ARRAY_OFFSET, null, 
bytesAddr + oldOffsetNum,
-                    oldSzie);
+                    oldSzie - oldOffsetNum);
             hasPutElementNum = hasPutElementNum + num;
         }
         UdfUtils.UNSAFE.putLong(null, offsetsAddr + 8L * row, 
hasPutElementNum);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to