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

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


The following commit(s) were added to 
refs/heads/support_correlated_scalar_subquery by this push:
     new 6faee6f51aa fix typo in failFunctionTransformer
6faee6f51aa is described below

commit 6faee6f51aa3809f4a140dafd2cd59aa15e4215b
Author: lancelly <[email protected]>
AuthorDate: Sun Jan 26 11:07:17 2025 +0800

    fix typo in failFunctionTransformer
---
 .../execution/operator/process/FilterAndProjectOperator.java   |  3 +++
 .../plan/relational/metadata/TableMetadataImpl.java            |  3 +++
 .../iterative/rule/TransformCorrelatedScalarSubquery.java      |  2 ++
 .../dag/column/FailFunctionColumnTransformer.java              | 10 +++++++++-
 4 files changed, 17 insertions(+), 1 deletion(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
index c759c3a0fdf..df186534df4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java
@@ -24,6 +24,7 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.AbstractCaseWhenThenColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ColumnTransformer;
+import 
org.apache.iotdb.db.queryengine.transformation.dag.column.FailFunctionColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.BinaryColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.leaf.IdentityColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.leaf.LeafColumnTransformer;
@@ -407,6 +408,8 @@ public class FilterAndProjectOperator implements 
ProcessOperator {
                       .getElseTransformer()));
       childMaxLevel = Math.max(childMaxLevel, childCount + 2);
       return childMaxLevel;
+    } else if (columnTransformer instanceof FailFunctionColumnTransformer) {
+      return 0;
     } else {
       throw new UnsupportedOperationException("Unsupported ColumnTransformer");
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
index 607b1c37135..10b980ec053 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
@@ -72,6 +72,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import static 
org.apache.iotdb.db.queryengine.transformation.dag.column.FailFunctionColumnTransformer.FAIL_FUNCTION_NAME;
 import static org.apache.tsfile.read.common.type.BinaryType.TEXT;
 import static org.apache.tsfile.read.common.type.BooleanType.BOOLEAN;
 import static org.apache.tsfile.read.common.type.DateType.DATE;
@@ -541,6 +542,8 @@ public class TableMetadataImpl implements Metadata {
                 + " must have at least two arguments, and first argument must 
be char type.");
       }
       return STRING;
+    } else if (FAIL_FUNCTION_NAME.equalsIgnoreCase(functionName)) {
+      return UNKNOWN;
     }
 
     // builtin aggregation function
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/TransformCorrelatedScalarSubquery.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/TransformCorrelatedScalarSubquery.java
index d1171f75ec4..3dcb42f5ddd 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/TransformCorrelatedScalarSubquery.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/TransformCorrelatedScalarSubquery.java
@@ -91,6 +91,8 @@ import static 
org.apache.tsfile.read.common.type.LongType.INT64;
  * </pre>
  *
  * <p>This must be run after aggregation decorrelation rules.
+ *
+ * <p>This rule is used to support non-aggregation scalar subquery.
  */
 public class TransformCorrelatedScalarSubquery implements 
Rule<CorrelatedJoinNode> {
   private static final Pattern<CorrelatedJoinNode> PATTERN =
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/FailFunctionColumnTransformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/FailFunctionColumnTransformer.java
index 0c52fee6f77..41632d7be1a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/FailFunctionColumnTransformer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/FailFunctionColumnTransformer.java
@@ -21,6 +21,7 @@ package 
org.apache.iotdb.db.queryengine.transformation.dag.column;
 
 import org.apache.iotdb.db.exception.sql.SemanticException;
 
+import org.apache.tsfile.read.common.block.column.NullColumn;
 import org.apache.tsfile.read.common.type.Type;
 
 /**
@@ -44,7 +45,14 @@ public class FailFunctionColumnTransformer extends 
ColumnTransformer {
 
   @Override
   public void evaluateWithSelection(boolean[] selection) {
-    throw new SemanticException(errorMsg);
+    // if there is true value in selection, throw exception
+    for (boolean b : selection) {
+      if (b) {
+        throw new SemanticException(errorMsg);
+      }
+    }
+    // Result of fail function should be ignored, we just fake the output here.
+    initializeColumnCache(new NullColumn(1));
   }
 
   @Override

Reply via email to