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

lancelly pushed a commit to branch BinaryTransformer
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit c039ee4925aeca67f003e44468ea435da406f916
Author: lancelly <[email protected]>
AuthorDate: Tue Nov 28 15:41:58 2023 +0800

    accelerate Binary compare
---
 .../fragment/FragmentInstanceContext.java          |  1 +
 .../binary/CompareBinaryColumnTransformer.java     | 36 ++++++++++------------
 .../transformation/dag/util/TransformUtils.java    | 16 ++++------
 3 files changed, 23 insertions(+), 30 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index dcba7d71648..195986aae3f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -417,6 +417,7 @@ public class FragmentInstanceContext extends QueryContext {
         allDriversClosed.await();
         break;
       } catch (InterruptedException e) {
+        Thread.currentThread().interrupt();
         LOGGER.warn(
             "Interrupted when await on allDriversClosed, FragmentInstance Id 
is {}", this.getId());
       }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/CompareBinaryColumnTransformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/CompareBinaryColumnTransformer.java
index 917ff174647..cdd9d3e3712 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/CompareBinaryColumnTransformer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/CompareBinaryColumnTransformer.java
@@ -20,10 +20,9 @@
 package org.apache.iotdb.db.queryengine.transformation.dag.column.binary;
 
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ColumnTransformer;
-import org.apache.iotdb.db.queryengine.transformation.dag.util.TransformUtils;
-import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.read.common.block.column.Column;
 import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.RunLengthEncodedColumn;
 import org.apache.iotdb.tsfile.read.common.type.Type;
 import org.apache.iotdb.tsfile.read.common.type.TypeEnum;
 
@@ -37,33 +36,34 @@ public abstract class CompareBinaryColumnTransformer 
extends BinaryColumnTransfo
   @Override
   protected void doTransform(
       Column leftColumn, Column rightColumn, ColumnBuilder builder, int 
positionCount) {
+    // if either column is all null, append nullCount
+    if ((leftColumn.mayHaveNull() && leftColumn instanceof 
RunLengthEncodedColumn)
+        || (rightColumn.mayHaveNull() && rightColumn instanceof 
RunLengthEncodedColumn)) {
+      builder.appendNull(positionCount);
+      return;
+    }
     for (int i = 0; i < positionCount; i++) {
       if (!leftColumn.isNull(i) && !rightColumn.isNull(i)) {
         boolean flag = false;
         // compare binary type
-        if (leftTransformer.getType().getTypeEnum().equals(TypeEnum.BINARY)) {
+        if (TypeEnum.BINARY.equals(leftTransformer.getType().getTypeEnum())) {
           flag =
               transform(
-                  TransformUtils.compare(
-                      leftTransformer
-                          .getType()
-                          .getBinary(leftColumn, i)
-                          .getStringValue(TSFileConfig.STRING_CHARSET),
-                      rightTransformer
-                          .getType()
-                          .getBinary(rightColumn, i)
-                          .getStringValue(TSFileConfig.STRING_CHARSET)));
-        } else if 
(leftTransformer.getType().getTypeEnum().equals(TypeEnum.BOOLEAN)) {
+                  leftTransformer
+                      .getType()
+                      .getBinary(leftColumn, i)
+                      
.compareTo(rightTransformer.getType().getBinary(rightColumn, i)));
+        } else if 
(TypeEnum.BOOLEAN.equals(leftTransformer.getType().getTypeEnum())) {
           flag =
               transform(
                   Boolean.compare(
                       leftTransformer.getType().getBoolean(leftColumn, i),
                       rightTransformer.getType().getBoolean(rightColumn, i)));
         } else {
-          double left = leftTransformer.getType().getDouble(leftColumn, i);
-          double right = rightTransformer.getType().getDouble(rightColumn, i);
+          final double left = leftTransformer.getType().getDouble(leftColumn, 
i);
+          final double right = 
rightTransformer.getType().getDouble(rightColumn, i);
           if (!Double.isNaN(left) && !Double.isNaN(right)) {
-            flag = transform(compare(left, right));
+            flag = transform(Double.compare(left, right));
           }
         }
         returnType.writeBoolean(builder, flag);
@@ -83,10 +83,6 @@ public abstract class CompareBinaryColumnTransformer extends 
BinaryColumnTransfo
     throw new UnsupportedOperationException("Unsupported Type");
   }
 
-  protected int compare(double d1, double d2) {
-    return Double.compare(d1, d2);
-  }
-
   /**
    * Transform int value of flag to corresponding boolean value.
    *
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/util/TransformUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/util/TransformUtils.java
index 6eedeb7ec1c..518b8f3b8b7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/util/TransformUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/util/TransformUtils.java
@@ -80,21 +80,17 @@ public class TransformUtils {
 
       switch (constantOperand.getDataType()) {
         case INT32:
-          return new IntColumn(1, Optional.of(new boolean[] {false}), new 
int[] {(int) value});
+          return new IntColumn(1, Optional.empty(), new int[] {(int) value});
         case INT64:
-          return new LongColumn(1, Optional.of(new boolean[] {false}), new 
long[] {(long) value});
+          return new LongColumn(1, Optional.empty(), new long[] {(long) 
value});
         case FLOAT:
-          return new FloatColumn(
-              1, Optional.of(new boolean[] {false}), new float[] {(float) 
value});
+          return new FloatColumn(1, Optional.empty(), new float[] {(float) 
value});
         case DOUBLE:
-          return new DoubleColumn(
-              1, Optional.of(new boolean[] {false}), new double[] {(double) 
value});
+          return new DoubleColumn(1, Optional.empty(), new double[] {(double) 
value});
         case TEXT:
-          return new BinaryColumn(
-              1, Optional.of(new boolean[] {false}), new Binary[] {(Binary) 
value});
+          return new BinaryColumn(1, Optional.empty(), new Binary[] {(Binary) 
value});
         case BOOLEAN:
-          return new BooleanColumn(
-              1, Optional.of(new boolean[] {false}), new boolean[] {(boolean) 
value});
+          return new BooleanColumn(1, Optional.empty(), new boolean[] 
{(boolean) value});
         default:
           throw new UnSupportedDataTypeException(
               "Unsupported type: " + constantOperand.getDataType());

Reply via email to