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