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());
