This is an automated email from the ASF dual-hosted git repository. caogaofei pushed a commit to branch new-table-model-debug in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit bec3a903b6d160f404c1ce4b95ed97c08434e501 Author: Beyyes <[email protected]> AuthorDate: Wed May 22 17:02:24 2024 +0800 Merge branch 'ty/TableModelGrammar' of github.com:apache/iotdb into ty/TableModelGrammar --- .../sql/tree/ArithmeticBinaryExpression.java | 24 +++++++++++++++++++ .../sql/tree/ArithmeticUnaryExpression.java | 22 +++++++++++++++++ .../iotdb/db/relational/sql/tree/Expression.java | 20 +++++++++++++++- .../db/relational/sql/tree/InListExpression.java | 28 ++++++++++++++++++++++ .../db/relational/sql/tree/IsNotNullPredicate.java | 18 ++++++++++++++ .../db/relational/sql/tree/IsNullPredicate.java | 18 ++++++++++++++ .../db/relational/sql/tree/LikePredicate.java | 22 +++++++++++++++++ .../relational/sql/tree/TableExpressionType.java | 6 +++++ 8 files changed, 157 insertions(+), 1 deletion(-) diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticBinaryExpression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticBinaryExpression.java index 9bcfeedbc8c..5879fa40018 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticBinaryExpression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticBinaryExpression.java @@ -19,10 +19,15 @@ 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.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @@ -66,6 +71,25 @@ public class ArithmeticBinaryExpression extends Expression { this.right = right; } + public ArithmeticBinaryExpression(ByteBuffer byteBuffer) { + super(null); + this.operator = Operator.values()[ReadWriteIOUtils.readInt(byteBuffer)]; + this.left = Expression.deserialize(byteBuffer); + this.right = Expression.deserialize(byteBuffer); + } + + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.ARITHMETIC_BINARY; + } + + @Override + protected void serialize(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write(operator.ordinal(), stream); + Expression.serialize(left, stream); + Expression.serialize(right, stream); + } + public Operator getOperator() { return operator; } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticUnaryExpression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticUnaryExpression.java index 364acc94a33..1b1425975c1 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticUnaryExpression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ArithmeticUnaryExpression.java @@ -19,10 +19,15 @@ 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.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @@ -47,6 +52,23 @@ public class ArithmeticUnaryExpression extends Expression { this.sign = sign; } + public ArithmeticUnaryExpression(ByteBuffer byteBuffer) { + super(null); + this.value = Expression.deserialize(byteBuffer); + this.sign = Sign.values()[ReadWriteIOUtils.readInt(byteBuffer)]; + } + + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.ARITHMETIC_UNARY; + } + + @Override + protected void serialize(DataOutputStream stream) throws IOException { + Expression.serialize(value, stream); + ReadWriteIOUtils.write(sign.ordinal(), stream); + } + public static ArithmeticUnaryExpression positive( @Nonnull NodeLocation location, Expression value) { return new ArithmeticUnaryExpression( 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 d179eec4aee..260c8b46271 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 @@ -71,8 +71,26 @@ public abstract class Expression extends Node { public static Expression deserialize(ByteBuffer byteBuffer) { short type = ReadWriteIOUtils.readShort(byteBuffer); - Expression expression; + Expression expression = null; switch (type) { + case 1: + expression = new ArithmeticBinaryExpression(byteBuffer); + break; + case 2: + expression = new ArithmeticUnaryExpression(byteBuffer); + break; + case 3: + expression = new LikePredicate(byteBuffer); + break; + case 4: + expression = new InListExpression(byteBuffer); + break; + case 5: + expression = new IsNotNullPredicate(byteBuffer); + break; + case 6: + expression = new IsNullPredicate(byteBuffer); + break; case 11: expression = new BetweenPredicate(byteBuffer); break; diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/InListExpression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/InListExpression.java index f8d263aa7e3..53c0c96f7d3 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/InListExpression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/InListExpression.java @@ -19,8 +19,14 @@ package org.apache.iotdb.db.relational.sql.tree; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; + import com.google.common.collect.ImmutableList; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -44,6 +50,28 @@ public class InListExpression extends Expression { this.values = ImmutableList.copyOf(values); } + public InListExpression(ByteBuffer byteBuffer) { + super(null); + int size = ReadWriteIOUtils.readInt(byteBuffer); + this.values = new ArrayList<>(); + for (int i = 0; i < size; i++) { + values.add(Expression.deserialize(byteBuffer)); + } + } + + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.IN_LIST; + } + + @Override + protected void serialize(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write(values.size(), stream); + for (Expression expression : values) { + Expression.serialize(expression, stream); + } + } + public List<Expression> getValues() { return values; } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNotNullPredicate.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNotNullPredicate.java index 8b8389982e0..bcf1323635f 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNotNullPredicate.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNotNullPredicate.java @@ -21,6 +21,9 @@ package org.apache.iotdb.db.relational.sql.tree; import com.google.common.collect.ImmutableList; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @@ -40,6 +43,21 @@ public class IsNotNullPredicate extends Expression { this.value = requireNonNull(value, "value is null"); } + public IsNotNullPredicate(ByteBuffer byteBuffer) { + super(null); + this.value = Expression.deserialize(byteBuffer); + } + + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.IS_NOT_NULL_PREDICATE; + } + + @Override + protected void serialize(DataOutputStream stream) throws IOException { + Expression.serialize(value, stream); + } + public Expression getValue() { return value; } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNullPredicate.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNullPredicate.java index 81de5b31f01..473b09e26a0 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNullPredicate.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/IsNullPredicate.java @@ -21,6 +21,9 @@ package org.apache.iotdb.db.relational.sql.tree; import com.google.common.collect.ImmutableList; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @@ -40,6 +43,21 @@ public class IsNullPredicate extends Expression { this.value = requireNonNull(value, "value is null"); } + public IsNullPredicate(ByteBuffer byteBuffer) { + super(null); + this.value = Expression.deserialize(byteBuffer); + } + + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.IS_NULL_PREDICATE; + } + + @Override + protected void serialize(DataOutputStream stream) throws IOException { + Expression.serialize(value, stream); + } + public Expression getValue() { return value; } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LikePredicate.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LikePredicate.java index e30fe360492..0a66814cc2a 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LikePredicate.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LikePredicate.java @@ -23,6 +23,9 @@ import com.google.common.collect.ImmutableList; import javax.annotation.Nullable; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -57,6 +60,25 @@ public class LikePredicate extends Expression { this.escape = requireNonNull(escape, "escape is null"); } + public LikePredicate(ByteBuffer byteBuffer) { + super(null); + this.value = Expression.deserialize(byteBuffer); + this.pattern = Expression.deserialize(byteBuffer); + this.escape = Expression.deserialize(byteBuffer); + } + + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.LIKE_PREDICATE; + } + + @Override + protected void serialize(DataOutputStream stream) throws IOException { + Expression.serialize(value, stream); + Expression.serialize(pattern, stream); + Expression.serialize(escape, stream); + } + public Expression getValue() { return value; } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java index e4d0124ab77..722c4024350 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java @@ -20,6 +20,12 @@ package org.apache.iotdb.db.relational.sql.tree; public enum TableExpressionType { + ARITHMETIC_BINARY((short) 1), + ARITHMETIC_UNARY((short) 2), + LIKE_PREDICATE((short) 3), + IN_LIST((short) 4), + IS_NOT_NULL_PREDICATE((short) 5), + IS_NULL_PREDICATE((short) 6), BETWEEN((short) 11), IN_PREDICATE((short) 12), LOGICAL_EXPRESSION((short) 13),
