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 15d6a3a9238 add serialize and deserialize for expression
15d6a3a9238 is described below
commit 15d6a3a923852ad4d37a0c5641bef85c1db007ee
Author: Beyyes <[email protected]>
AuthorDate: Wed May 22 15:37:03 2024 +0800
add serialize and deserialize for expression
---
.../plan/relational/planner/node/FilterNode.java | 10 ++++++++--
.../relational/sql/tree/ComparisonExpression.java | 17 ++++++++++++----
.../iotdb/db/relational/sql/tree/Expression.java | 15 +++++++++++---
.../db/relational/sql/tree/StringLiteral.java | 23 ++++++++++++++++++++++
.../db/relational/sql/tree/SymbolReference.java | 22 +++++++++++++++++++++
.../relational/sql/tree/TableExpressionType.java | 4 +++-
6 files changed, 81 insertions(+), 10 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java
index 87cbfe2edee..04744b552f7 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java
@@ -21,6 +21,7 @@ package
org.apache.iotdb.db.queryengine.plan.relational.planner.node;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleChildProcessNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
@@ -58,10 +59,15 @@ public class FilterNode extends SingleChildProcessNode {
protected void serializeAttributes(ByteBuffer byteBuffer) {}
@Override
- protected void serializeAttributes(DataOutputStream stream) throws
IOException {}
+ protected void serializeAttributes(DataOutputStream stream) throws
IOException {
+ PlanNodeType.TABLE_FILTER_NODE.serialize(stream);
+ Expression.serialize(predicate, stream);
+ }
public static FilterNode deserialize(ByteBuffer byteBuffer) {
- return null;
+ Expression predicate = Expression.deserialize(byteBuffer);
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new FilterNode(planNodeId, null, predicate);
}
public Expression getPredicate() {
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 3c55d8a6c62..37dd245fb19 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
@@ -26,6 +26,7 @@ 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;
@@ -174,14 +175,22 @@ public class ComparisonExpression extends Expression {
}
// =============== serialize =================
- protected void serialize(DataOutputStream stream) {
- // stream.write();
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.COMPARISON;
+ }
+
+ @Override
+ protected void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(operator.ordinal(), stream);
+ Expression.serialize(left, stream);
+ Expression.serialize(right, stream);
}
public ComparisonExpression(ByteBuffer byteBuffer) {
super(null);
operator = Operator.values()[ReadWriteIOUtils.readInt(byteBuffer)];
- left = null;
- right = null;
+ left = Expression.deserialize(byteBuffer);
+ right = Expression.deserialize(byteBuffer);
}
}
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 bcd5916e0bd..adece7d04c7 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
@@ -46,12 +46,15 @@ public abstract class Expression extends Node {
}
public TableExpressionType getExpressionType() {
- return null;
+ throw new UnsupportedOperationException(
+ "getExpressionType is not implemented yet: " +
this.getClass().getSimpleName());
}
+ // TODO make abstract later
protected void serialize(ByteBuffer byteBuffer) {}
- protected void serialize(DataOutputStream stream) {}
+ // TODO make abstract later
+ protected void serialize(DataOutputStream stream) throws IOException {}
public static void serialize(Expression expression, ByteBuffer byteBuffer) {
ReadWriteIOUtils.write(
@@ -70,9 +73,15 @@ public abstract class Expression extends Node {
Expression expression;
switch (type) {
- case 0:
+ case 24:
+ expression = new SymbolReference(byteBuffer);
+ break;
+ case 15:
expression = new ComparisonExpression(byteBuffer);
break;
+ case 23:
+ expression = new StringLiteral(byteBuffer);
+ break;
default:
throw new IllegalArgumentException("Invalid expression type: " + type);
}
diff --git
a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java
b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java
index f5012f36995..106e7a5346b 100644
---
a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java
+++
b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java
@@ -19,6 +19,11 @@
package org.apache.iotdb.db.relational.sql.tree;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.Objects;
import static java.util.Objects.requireNonNull;
@@ -79,4 +84,22 @@ public class StringLiteral extends Literal {
return Objects.equals(value, ((StringLiteral) other).value);
}
+
+ // =============== serialize =================
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.STRING_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.value, stream);
+ ReadWriteIOUtils.write(this.length, stream);
+ }
+
+ public StringLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ this.value = ReadWriteIOUtils.readString(byteBuffer);
+ this.length = ReadWriteIOUtils.readInt(byteBuffer);
+ }
}
diff --git
a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java
b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java
index 3d93a0dd33e..de49e8a23c5 100644
---
a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java
+++
b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java
@@ -19,8 +19,13 @@
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.List;
import java.util.Objects;
@@ -63,4 +68,21 @@ public class SymbolReference extends Expression {
public int hashCode() {
return Objects.hash(name);
}
+
+ // =============== serialize =================
+
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.SYMBOL_REFERENCE;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.name, stream);
+ }
+
+ public SymbolReference(ByteBuffer byteBuffer) {
+ super(null);
+ this.name = ReadWriteIOUtils.readString(byteBuffer);
+ }
}
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 ed3b6ff420c..e3d99d4d104 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,7 +20,9 @@
package org.apache.iotdb.db.relational.sql.tree;
public enum TableExpressionType {
- LITERAL((short) 1);
+ SYMBOL_REFERENCE((short) 24),
+ COMPARISON((short) 15),
+ STRING_LITERAL((short) 23);
TableExpressionType(short type) {
this.type = type;