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 2fb12634036 implement expression serialization (#12572)
2fb12634036 is described below
commit 2fb126340367506a625021eadfefb3d4146b2e16
Author: Marcos_Zyk <[email protected]>
AuthorDate: Wed May 22 17:02:05 2024 +0800
implement expression serialization (#12572)
---
.../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),