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
commit f1d2cce85301d744615a153711330ca91f9307e5 Author: Beyyes <[email protected]> AuthorDate: Wed May 22 10:37:06 2024 +0800 add expression temp impl --- .../relational/planner/ir/RewritingVisitor.java | 19 ++++++++++ .../relational/planner/ir/SerializeVisitor.java | 3 ++ iotdb-core/relational-parser/pom.xml | 6 ++++ .../relational/sql/tree/ComparisonExpression.java | 16 +++++++++ .../iotdb/db/relational/sql/tree/Expression.java | 40 ++++++++++++++++++++++ .../{Expression.java => TableExpressionType.java} | 22 ++++-------- 6 files changed, 91 insertions(+), 15 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/RewritingVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/RewritingVisitor.java index 64a87fa7bf7..6fbe7493c81 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/RewritingVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/RewritingVisitor.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package org.apache.iotdb.db.queryengine.plan.relational.planner.ir; import org.apache.iotdb.db.relational.sql.tree.ArithmeticBinaryExpression; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/SerializeVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/SerializeVisitor.java new file mode 100644 index 00000000000..2ab295c11cb --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/SerializeVisitor.java @@ -0,0 +1,3 @@ +package org.apache.iotdb.db.queryengine.plan.relational.planner.ir; + +public class SerializeVisitor {} diff --git a/iotdb-core/relational-parser/pom.xml b/iotdb-core/relational-parser/pom.xml index e65d4eb10c0..8257f4551e9 100644 --- a/iotdb-core/relational-parser/pom.xml +++ b/iotdb-core/relational-parser/pom.xml @@ -56,5 +56,11 @@ <artifactId>iotdb-relational-grammar</artifactId> <version>1.3.2-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.apache.iotdb</groupId> + <artifactId>tsfile</artifactId> + <version>1.3.2-SNAPSHOT</version> + <scope>compile</scope> + </dependency> </dependencies> </project> diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java index f5a264ed786..3c55d8a6c62 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java @@ -19,10 +19,14 @@ package org.apache.iotdb.db.relational.sql.tree; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; + import com.google.common.collect.ImmutableList; import javax.annotation.Nonnull; +import java.io.DataOutputStream; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @@ -168,4 +172,16 @@ public class ComparisonExpression extends Expression { return operator == ((ComparisonExpression) other).operator; } + + // =============== serialize ================= + protected void serialize(DataOutputStream stream) { + // stream.write(); + } + + public ComparisonExpression(ByteBuffer byteBuffer) { + super(null); + operator = Operator.values()[ReadWriteIOUtils.readInt(byteBuffer)]; + left = null; + right = null; + } } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java index 29ab6b83674..bcd5916e0bd 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java @@ -20,9 +20,14 @@ package org.apache.iotdb.db.relational.sql.tree; import org.apache.iotdb.db.relational.sql.util.ExpressionFormatter; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nullable; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + public abstract class Expression extends Node { protected Expression(@Nullable NodeLocation location) { @@ -39,4 +44,39 @@ public abstract class Expression extends Node { public final String toString() { return ExpressionFormatter.formatExpression(this); } + + public TableExpressionType getExpressionType() { + return null; + } + + protected void serialize(ByteBuffer byteBuffer) {} + + protected void serialize(DataOutputStream stream) {} + + public static void serialize(Expression expression, ByteBuffer byteBuffer) { + ReadWriteIOUtils.write( + expression.getExpressionType().getExpressionTypeInShortEnum(), byteBuffer); + + expression.serialize(byteBuffer); + } + + public static void serialize(Expression expression, DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write(expression.getExpressionType().getExpressionTypeInShortEnum(), stream); + expression.serialize(stream); + } + + public static Expression deserialize(ByteBuffer byteBuffer) { + short type = ReadWriteIOUtils.readShort(byteBuffer); + + Expression expression; + switch (type) { + case 0: + expression = new ComparisonExpression(byteBuffer); + break; + default: + throw new IllegalArgumentException("Invalid expression type: " + type); + } + + return expression; + } } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java similarity index 60% copy from iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java copy to iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java index 29ab6b83674..ed3b6ff420c 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java @@ -19,24 +19,16 @@ package org.apache.iotdb.db.relational.sql.tree; -import org.apache.iotdb.db.relational.sql.util.ExpressionFormatter; +public enum TableExpressionType { + LITERAL((short) 1); -import javax.annotation.Nullable; - -public abstract class Expression extends Node { - - protected Expression(@Nullable NodeLocation location) { - super(location); + TableExpressionType(short type) { + this.type = type; } - /** Accessible for {@link AstVisitor}, use {@link AstVisitor#process(Node, Object)} instead. */ - @Override - public <R, C> R accept(AstVisitor<R, C> visitor, C context) { - return visitor.visitExpression(this, context); - } + private final short type; - @Override - public final String toString() { - return ExpressionFormatter.formatExpression(this); + public short getExpressionTypeInShortEnum() { + return type; } }
