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

morningman 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 3126d2e1783 [fix](hive-udf) Fixed the calculation result error in Hive 
bitmap UDF #29073 (#29338)
3126d2e1783 is described below

commit 3126d2e17832325c502775f8ad4361db8cdd35ed
Author: lihuigang <35155212+lihuig...@users.noreply.github.com>
AuthorDate: Sun Dec 31 13:29:20 2023 +0800

    [fix](hive-udf) Fixed the calculation result error in Hive bitmap UDF 
#29073 (#29338)
    
    Co-authored-by: lihuigang <lihuig...@meituan.com>
---
 .../java/org/apache/doris/udf/BitmapAndUDF.java    |   2 +-
 .../java/org/apache/doris/udf/BitmapOrUDF.java     |   2 +-
 .../java/org/apache/doris/udf/BitmapXorUDF.java    |   2 +-
 .../test/java/org/apache/doris/BitmapUDFTest.java  | 113 +++++++++++++++++++++
 4 files changed, 116 insertions(+), 3 deletions(-)

diff --git a/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapAndUDF.java 
b/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapAndUDF.java
index 8b5044b51f3..5950f36d1a4 100644
--- a/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapAndUDF.java
+++ b/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapAndUDF.java
@@ -63,7 +63,7 @@ public class BitmapAndUDF extends GenericUDF {
             BitmapValue bitmapValue0 = 
BitmapValueUtil.deserializeToBitmap(inputBytes0);
             BitmapValue bitmapValue1 = 
BitmapValueUtil.deserializeToBitmap(inputBytes1);
             bitmapValue0.and(bitmapValue1);
-            return BitmapValueUtil.serializeToBytes(bitmapValue1);
+            return BitmapValueUtil.serializeToBytes(bitmapValue0);
         } catch (IOException ioException) {
             throw new RuntimeException(ioException);
         }
diff --git a/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapOrUDF.java 
b/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapOrUDF.java
index 9ed1446d3fb..34e564c72a7 100644
--- a/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapOrUDF.java
+++ b/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapOrUDF.java
@@ -63,7 +63,7 @@ public class BitmapOrUDF extends GenericUDF {
             BitmapValue bitmapValue0 = 
BitmapValueUtil.deserializeToBitmap(inputBytes0);
             BitmapValue bitmapValue1 = 
BitmapValueUtil.deserializeToBitmap(inputBytes1);
             bitmapValue0.or(bitmapValue1);
-            return BitmapValueUtil.serializeToBytes(bitmapValue1);
+            return BitmapValueUtil.serializeToBytes(bitmapValue0);
         } catch (IOException ioException) {
             throw new RuntimeException(ioException);
         }
diff --git a/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapXorUDF.java 
b/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapXorUDF.java
index fa46eeec7a2..91d0e765fed 100644
--- a/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapXorUDF.java
+++ b/fe/hive-udf/src/main/java/org/apache/doris/udf/BitmapXorUDF.java
@@ -63,7 +63,7 @@ public class BitmapXorUDF extends GenericUDF {
             BitmapValue bitmapValue0 = 
BitmapValueUtil.deserializeToBitmap(inputBytes0);
             BitmapValue bitmapValue1 = 
BitmapValueUtil.deserializeToBitmap(inputBytes1);
             bitmapValue0.xor(bitmapValue1);
-            return BitmapValueUtil.serializeToBytes(bitmapValue1);
+            return BitmapValueUtil.serializeToBytes(bitmapValue0);
         } catch (IOException ioException) {
             throw new RuntimeException(ioException);
         }
diff --git a/fe/hive-udf/src/test/java/org/apache/doris/BitmapUDFTest.java 
b/fe/hive-udf/src/test/java/org/apache/doris/BitmapUDFTest.java
new file mode 100644
index 00000000000..fba084a9260
--- /dev/null
+++ b/fe/hive-udf/src/test/java/org/apache/doris/BitmapUDFTest.java
@@ -0,0 +1,113 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris;
+
+import org.apache.doris.common.BitmapValueUtil;
+import org.apache.doris.common.io.BitmapValue;
+import org.apache.doris.udf.BitmapAndUDF;
+import org.apache.doris.udf.BitmapCountUDF;
+import org.apache.doris.udf.BitmapOrUDF;
+import org.apache.doris.udf.BitmapXorUDF;
+
+import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
+import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.BinaryObjectInspector;
+import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.JavaConstantBinaryObjectInspector;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+
+// hive bitmap udf test
+public class BitmapUDFTest {
+
+    private byte[] bitmapValue0Bytes;
+    private byte[] bitmapValue1Bytes;
+
+    private BinaryObjectInspector inputOI0 = new 
JavaConstantBinaryObjectInspector(new byte[0]);
+    private BinaryObjectInspector inputOI1 = new 
JavaConstantBinaryObjectInspector(new byte[0]);
+
+    @Before
+    public void initData() throws IOException {
+        BitmapValue bitmapValue0 = new BitmapValue();
+        BitmapValue bitmapValue1 = new BitmapValue();
+
+        bitmapValue0.add(1);
+        bitmapValue0.add(2);
+
+        bitmapValue1.add(2);
+        bitmapValue1.add(3);
+        bitmapValue1.add(4);
+
+        bitmapValue0Bytes = BitmapValueUtil.serializeToBytes(bitmapValue0);
+        bitmapValue1Bytes = BitmapValueUtil.serializeToBytes(bitmapValue1);
+    }
+
+    @Test
+    public void bitmapAndTest() throws Exception {
+        BitmapAndUDF bitmapAndUDF = new BitmapAndUDF();
+        bitmapAndUDF.initialize(new ObjectInspector[]{inputOI0, inputOI1});
+
+        GenericUDF.DeferredObject[] args = new GenericUDF.DeferredObject[]{new 
GenericUDF.DeferredJavaObject(bitmapValue0Bytes), new 
GenericUDF.DeferredJavaObject(bitmapValue1Bytes)};
+        Object evaluate = bitmapAndUDF.evaluate(args);
+        BitmapValue resultBitmap = 
BitmapValueUtil.deserializeToBitmap((byte[]) evaluate);
+
+        Assert.assertEquals(1, resultBitmap.cardinality());
+        Assert.assertEquals("{2}", resultBitmap.toString());
+    }
+
+    @Test
+    public void bitmapOrTest() throws Exception {
+
+        BitmapOrUDF bitmapOrUDF = new BitmapOrUDF();
+        bitmapOrUDF.initialize(new ObjectInspector[]{inputOI0, inputOI1});
+
+        GenericUDF.DeferredObject[] args = new GenericUDF.DeferredObject[]{new 
GenericUDF.DeferredJavaObject(bitmapValue0Bytes), new 
GenericUDF.DeferredJavaObject(bitmapValue1Bytes)};
+        Object evaluate = bitmapOrUDF.evaluate(args);
+        BitmapValue resultBitmap = 
BitmapValueUtil.deserializeToBitmap((byte[]) evaluate);
+
+        Assert.assertEquals(4, resultBitmap.cardinality());
+        Assert.assertEquals("{1,2,3,4}", resultBitmap.toString());
+    }
+
+    @Test
+    public void bitmapXorTest() throws Exception {
+        BitmapXorUDF bitmapXorUDF = new BitmapXorUDF();
+        bitmapXorUDF.initialize(new ObjectInspector[]{inputOI0, inputOI1});
+
+        GenericUDF.DeferredObject[] args = new GenericUDF.DeferredObject[]{new 
GenericUDF.DeferredJavaObject(bitmapValue0Bytes), new 
GenericUDF.DeferredJavaObject(bitmapValue1Bytes)};
+        Object evaluate = bitmapXorUDF.evaluate(args);
+        BitmapValue resultBitmap = 
BitmapValueUtil.deserializeToBitmap((byte[]) evaluate);
+
+        Assert.assertEquals(3, resultBitmap.cardinality());
+        Assert.assertEquals("{1,3,4}", resultBitmap.toString());
+    }
+
+    @Test
+    public void bitmapCountTest() throws Exception {
+        BitmapCountUDF bitmapCountUDF = new BitmapCountUDF();
+        bitmapCountUDF.initialize(new ObjectInspector[] { inputOI0 });
+        Object evaluate = bitmapCountUDF.evaluate(new 
GenericUDF.DeferredObject[] { new 
GenericUDF.DeferredJavaObject(bitmapValue0Bytes) });
+        Assert.assertEquals(2L, evaluate);
+
+        bitmapCountUDF.initialize(new ObjectInspector[] { inputOI1 });
+        Object evaluate1 = bitmapCountUDF.evaluate(new 
GenericUDF.DeferredObject[] { new 
GenericUDF.DeferredJavaObject(bitmapValue1Bytes) });
+        Assert.assertEquals(3L, evaluate1);
+    }
+}


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

Reply via email to