You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2024/10/22 02:41:44 UTC
(iotdb) branch master updated: Fix column length may be 0 when using cache fetch
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 8bf22945c15 Fix column length may be 0 when using cache fetch
8bf22945c15 is described below
commit 8bf22945c1517d354489288a3c9aca7c80778cfc
Author: FearfulTomcat27 <14...@qq.com>
AuthorDate: Tue Oct 22 10:41:38 2024 +0800
Fix column length may be 0 when using cache fetch
---
.../org/apache/iotdb/db/it/query/IoTDBCaseWhenThenIT.java | 12 ++++++++++++
.../iotdb/relational/it/db/it/IoTDBCaseWhenThenTableIT.java | 8 ++++++++
.../dag/column/binary/LogicAndColumnTransformer.java | 2 +-
.../dag/column/binary/LogicOrColumnTransformer.java | 2 +-
.../dag/column/multi/LogicalAndMultiColumnTransformer.java | 2 +-
.../dag/column/multi/LogicalOrMultiColumnTransformer.java | 2 +-
.../dag/column/multi/MappableUDFColumnTransformer.java | 2 +-
7 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBCaseWhenThenIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBCaseWhenThenIT.java
index e1a548ff6c1..e2c60bd644e 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBCaseWhenThenIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBCaseWhenThenIT.java
@@ -888,6 +888,18 @@ public class IoTDBCaseWhenThenIT {
resultSetEqualTest(sql, expectedHeader, retArray);
}
+ @Test
+ public void testKind1Logic() {
+ String sql =
+ "select case when s3 >= 0 and s3 < 20 and s4 >= 50 and s4 < 60 then 'just so so~~~' when s3 >= 20 and s3 < 40 and s4 >= 70 and s4 < 80 then 'very well~~~' end as result from root.sg.d2";
+ String[] expectedHeader = new String[] {TIMESTAMP_STR, "result"};
+ String[] retArray =
+ new String[] {
+ "0,null,", "1000000,just so so~~~,", "20000000,null,", "210000000,very well~~~,",
+ };
+ resultSetEqualTest(sql, expectedHeader, retArray);
+ }
+
@Test
public void testMultipleSatisfyCase() {
// Test the result when two when clause are satisfied
diff --git a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBCaseWhenThenTableIT.java b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBCaseWhenThenTableIT.java
index 94d87b01ce2..58f25866a65 100644
--- a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBCaseWhenThenTableIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBCaseWhenThenTableIT.java
@@ -660,4 +660,12 @@ public class IoTDBCaseWhenThenTableIT {
};
tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE);
}
+
+ @Test
+ public void testKind1Logic() {
+ String sql =
+ "select case when s3 >= 0 and s3 < 20 and s4 >= 50 and s4 < 60 then 'just so so~~~' when s3 >= 20 and s3 < 40 and s4 >= 70 and s4 < 80 then 'very well~~~' end from table2";
+ String[] retArray = new String[] {"null,", "just so so~~~,", "null,", "very well~~~,"};
+ tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE);
+ }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicAndColumnTransformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicAndColumnTransformer.java
index e5471e1ddeb..7a68e5fa030 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicAndColumnTransformer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicAndColumnTransformer.java
@@ -36,8 +36,8 @@ public class LogicAndColumnTransformer extends LogicBinaryColumnTransformer {
boolean[] selectionCopy = selection.clone();
leftTransformer.evaluateWithSelection(selectionCopy);
- Column leftColumn = leftTransformer.getColumn();
int positionCount = leftTransformer.getColumnCachePositionCount();
+ Column leftColumn = leftTransformer.getColumn();
for (int i = 0; i < positionCount; i++) {
if (!leftColumn.isNull(i) && !leftColumn.getBoolean(i)) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicOrColumnTransformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicOrColumnTransformer.java
index 5971c1dc4e1..064ad6974da 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicOrColumnTransformer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/binary/LogicOrColumnTransformer.java
@@ -36,8 +36,8 @@ public class LogicOrColumnTransformer extends LogicBinaryColumnTransformer {
boolean[] selectionCopy = selection.clone();
leftTransformer.evaluateWithSelection(selectionCopy);
- Column leftColumn = leftTransformer.getColumn();
int positionCount = leftTransformer.getColumnCachePositionCount();
+ Column leftColumn = leftTransformer.getColumn();
for (int i = 0; i < positionCount; i++) {
if (!leftColumn.isNull(i) && leftColumn.getBoolean(i)) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java
index d7b6315ce72..321f03b186b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalAndMultiColumnTransformer.java
@@ -54,7 +54,7 @@ public class LogicalAndMultiColumnTransformer extends LogicalMultiColumnTransfor
}
}
- int positionCount = columnTransformerList.get(0).getColumnCachePositionCount();
+ int positionCount = childrenColumns.get(0).getPositionCount();
ColumnBuilder builder = returnType.createColumnBuilder(positionCount);
for (int i = 0; i < positionCount; i++) {
if (selection[i]) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java
index d1778b13426..9164ec578ee 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/LogicalOrMultiColumnTransformer.java
@@ -54,7 +54,7 @@ public class LogicalOrMultiColumnTransformer extends LogicalMultiColumnTransform
}
}
- int positionCount = columnTransformerList.get(0).getColumnCachePositionCount();
+ int positionCount = childColumns.get(0).getPositionCount();
ColumnBuilder builder = returnType.createColumnBuilder(positionCount);
for (int i = 0; i < positionCount; i++) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/MappableUDFColumnTransformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/MappableUDFColumnTransformer.java
index ff8e317dd7a..440585eed78 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/MappableUDFColumnTransformer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/multi/MappableUDFColumnTransformer.java
@@ -67,7 +67,7 @@ public class MappableUDFColumnTransformer extends ColumnTransformer {
columns[i] = inputColumnTransformers[i].getColumn();
}
// construct input TsBlock with columns
- int positionCount = inputColumnTransformers[0].getColumnCachePositionCount();
+ int positionCount = columns[0].getPositionCount();
ColumnBuilder builder = returnType.createColumnBuilder(positionCount);
// executor UDF and cache result
executor.execute(columns, builder);