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

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


The following commit(s) were added to refs/heads/ty/TableModelGrammar by this 
push:
     new e63b3b2f201 support in, not, diff
e63b3b2f201 is described below

commit e63b3b2f2017a2af4888e37a50de8d4583ab4340
Author: Beyyes <[email protected]>
AuthorDate: Thu May 9 22:18:23 2024 +0800

    support in, not, diff
---
 .../relational/metadata/TableMetadataImpl.java     |  4 +--
 .../planner/ir/ExpressionTranslateVisitor.java     | 14 +++++----
 .../ir/GlobalTimePredicateExtractVisitor.java      | 33 ++++++++++++++++------
 3 files changed, 35 insertions(+), 16 deletions(-)

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 70e75e63719..d25e93903cd 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
@@ -114,11 +114,11 @@ public class TableMetadataImpl implements Metadata {
               && isNumericType(argumentTypes.get(0))
               && BOOLEAN.equals(argumentTypes.get(0)))) {
         throw new SemanticException(
-            "Scalar function"
+            "Scalar function "
                 + functionName.toLowerCase(Locale.ENGLISH)
                 + " only supports one numeric data types [INT32, INT64, FLOAT, 
DOUBLE] and one boolean");
       }
-
+      return argumentTypes.get(0);
     } else if 
(BuiltinScalarFunction.ROUND.getFunctionName().equalsIgnoreCase(functionName)) {
       if (!isOneNumericType(argumentTypes) && 
!isTwoNumericType(argumentTypes)) {
         throw new SemanticException(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTranslateVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTranslateVisitor.java
index c7a05609bde..86e83783c6b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTranslateVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTranslateVisitor.java
@@ -21,12 +21,12 @@ import org.apache.iotdb.db.relational.sql.tree.Expression;
 import org.apache.iotdb.db.relational.sql.tree.FunctionCall;
 import org.apache.iotdb.db.relational.sql.tree.Identifier;
 import org.apache.iotdb.db.relational.sql.tree.IfExpression;
+import org.apache.iotdb.db.relational.sql.tree.InListExpression;
 import org.apache.iotdb.db.relational.sql.tree.InPredicate;
 import org.apache.iotdb.db.relational.sql.tree.IsNullPredicate;
 import org.apache.iotdb.db.relational.sql.tree.LikePredicate;
 import org.apache.iotdb.db.relational.sql.tree.Literal;
 import org.apache.iotdb.db.relational.sql.tree.LogicalExpression;
-import org.apache.iotdb.db.relational.sql.tree.NotExpression;
 import org.apache.iotdb.db.relational.sql.tree.NullIfExpression;
 import org.apache.iotdb.db.relational.sql.tree.SearchedCaseExpression;
 import org.apache.iotdb.db.relational.sql.tree.SimpleCaseExpression;
@@ -109,6 +109,13 @@ public class ExpressionTranslateVisitor extends 
RewritingVisitor<PlanBuilder> {
         process(node.getValue(), context), process(node.getValueList(), 
context));
   }
 
+  @Override
+  protected Expression visitInListExpression(InListExpression node, 
PlanBuilder context) {
+    List<Expression> newValues =
+        
node.getValues().stream().map(this::process).collect(Collectors.toList());
+    return new InListExpression(newValues);
+  }
+
   @Override
   protected Expression visitLikePredicate(LikePredicate node, PlanBuilder 
context) {
     return new LikePredicate(
@@ -119,11 +126,6 @@ public class ExpressionTranslateVisitor extends 
RewritingVisitor<PlanBuilder> {
 
   // ============================ not implemented 
=======================================
 
-  @Override
-  protected Expression visitNotExpression(NotExpression node, PlanBuilder 
context) {
-    throw new IllegalStateException(String.format(NOT_SUPPORTED, 
node.getClass().getName()));
-  }
-
   @Override
   protected Expression visitSimpleCaseExpression(SimpleCaseExpression node, 
PlanBuilder context) {
     throw new IllegalStateException(String.format(NOT_SUPPORTED, 
node.getClass().getName()));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/GlobalTimePredicateExtractVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/GlobalTimePredicateExtractVisitor.java
index 2d0b185f617..1aeb8fd24ba 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/GlobalTimePredicateExtractVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/GlobalTimePredicateExtractVisitor.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.planner.ir;
 
+import 
org.apache.iotdb.db.queryengine.plan.expression.UnknownExpressionTypeException;
 import org.apache.iotdb.db.relational.sql.tree.ArithmeticBinaryExpression;
 import org.apache.iotdb.db.relational.sql.tree.BetweenPredicate;
 import org.apache.iotdb.db.relational.sql.tree.ComparisonExpression;
@@ -54,6 +55,13 @@ public class GlobalTimePredicateExtractVisitor
   private static final String NOT_SUPPORTED =
       "visit() not implemented for %s in GlobalTimePredicateExtract.";
 
+  /**
+   * Extract global time predicate from query predicate.
+   *
+   * @param predicate raw query predicate
+   * @return Pair, left is globalTimePredicate, right is if hasValueFilter.
+   * @throws UnknownExpressionTypeException unknown expression type
+   */
   public static Pair<Expression, Boolean> extractGlobalTimeFilter(Expression 
predicate) {
     return new GlobalTimePredicateExtractVisitor()
         .process(predicate, new 
GlobalTimePredicateExtractVisitor.Context(true, true));
@@ -178,21 +186,30 @@ public class GlobalTimePredicateExtractVisitor
     return new Pair<>(null, true);
   }
 
-  // ============================ not implemented 
=======================================
-
   @Override
-  protected Pair<Expression, Boolean> visitArithmeticBinary(
-      ArithmeticBinaryExpression node, Context context) {
-    throw new IllegalStateException(String.format(NOT_SUPPORTED, 
node.getClass()));
+  protected Pair<Expression, Boolean> visitInPredicate(InPredicate node, 
Context context) {
+    if (isTimeIdentifier(node.getValue())) {
+      return new Pair<>(node, false);
+    }
+
+    return new Pair<>(null, true);
   }
 
   @Override
-  protected Pair<Expression, Boolean> visitInPredicate(InPredicate node, 
Context context) {
-    throw new IllegalStateException(String.format(NOT_SUPPORTED, 
node.getClass()));
+  protected Pair<Expression, Boolean> visitNotExpression(NotExpression node, 
Context context) {
+    Pair<Expression, Boolean> result =
+        process(node.getValue(), new Context(context.canRewrite, 
context.isFirstOr));
+    if (result.left != null) {
+      return new Pair<>(new NotExpression(result.left), result.right);
+    }
+    return new Pair<>(null, true);
   }
 
+  // ============================ not implemented 
=======================================
+
   @Override
-  protected Pair<Expression, Boolean> visitNotExpression(NotExpression node, 
Context context) {
+  protected Pair<Expression, Boolean> visitArithmeticBinary(
+      ArithmeticBinaryExpression node, Context context) {
     throw new IllegalStateException(String.format(NOT_SUPPORTED, 
node.getClass()));
   }
 

Reply via email to