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

jackietien pushed a commit to branch ty/TableIT
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 405eeb2c5c836332f60d137a67cc6eaa49905130
Author: JackieTien97 <[email protected]>
AuthorDate: Tue Jul 23 20:47:11 2024 +0800

    partial
---
 .../relational/ColumnTransformerBuilder.java       | 22 +++++++++++++---------
 .../scalar/SubStringFunctionColumnTransformer.java |  4 ++--
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/relational/ColumnTransformerBuilder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/relational/ColumnTransformerBuilder.java
index d95391632e7..a16994cf35a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/relational/ColumnTransformerBuilder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/relational/ColumnTransformerBuilder.java
@@ -571,11 +571,13 @@ public class ColumnTransformerBuilder
       ColumnTransformer first = this.process(children.get(0), context);
       if (children.size() == 2) {
         if (isLongLiteral(children.get(1))) {
+          int startIndex = (int) ((LongLiteral) 
children.get(1)).getParsedValue();
+          if (startIndex <= 0) {
+            throw new SemanticException(
+                "Argument exception,the scalar function [SUBSTRING] 
beginPosition and length must be greater than 0");
+          }
           return new SubStringFunctionColumnTransformer(
-              first.getType(),
-              first,
-              (int) ((LongLiteral) children.get(1)).getParsedValue(),
-              Integer.MAX_VALUE);
+              first.getType(), first, startIndex, Integer.MAX_VALUE);
         } else {
           return new SubString2ColumnTransformer(
               first.getType(), first, this.process(children.get(1), context));
@@ -583,11 +585,13 @@ public class ColumnTransformerBuilder
       } else {
         // size == 3
         if (isLongLiteral(children.get(1)) && isLongLiteral(children.get(2))) {
-          return new SubStringFunctionColumnTransformer(
-              first.getType(),
-              first,
-              (int) ((LongLiteral) children.get(1)).getParsedValue(),
-              (int) ((LongLiteral) children.get(2)).getParsedValue());
+          int startIndex = (int) ((LongLiteral) 
children.get(1)).getParsedValue();
+          int length = (int) ((LongLiteral) children.get(2)).getParsedValue();
+          if (startIndex <= 0 || length <= 0) {
+            throw new SemanticException(
+                "Argument exception,the scalar function [SUBSTRING] 
beginPosition and length must be greater than 0");
+          }
+          return new SubStringFunctionColumnTransformer(first.getType(), 
first, startIndex, length);
         } else {
           return new SubString3ColumnTransformer(
               first.getType(),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/scalar/SubStringFunctionColumnTransformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/scalar/SubStringFunctionColumnTransformer.java
index e33acd12e1b..0b567d799b6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/scalar/SubStringFunctionColumnTransformer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/scalar/SubStringFunctionColumnTransformer.java
@@ -30,8 +30,8 @@ import org.apache.tsfile.utils.BytesUtils;
 
 public class SubStringFunctionColumnTransformer extends UnaryColumnTransformer 
{
 
-  private int beginPosition;
-  private int endPosition;
+  private final int beginPosition;
+  private final int endPosition;
   public static final String EMPTY_STRING = "";
 
   public SubStringFunctionColumnTransformer(

Reply via email to