You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2024/05/22 08:19:39 UTC
(iotdb) 01/02: add literal serialize and desrialize method
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 e8924d98a0aa839d1b97d295e441047772837617
Author: Beyyes <cg...@foxmail.com>
AuthorDate: Wed May 22 15:59:18 2024 +0800
add literal serialize and desrialize method
---
.../db/relational/sql/tree/BinaryLiteral.java | 27 ++++++++++++++++++++++
.../db/relational/sql/tree/BooleanLiteral.java | 20 ++++++++++++++++
.../db/relational/sql/tree/DecimalLiteral.java | 20 ++++++++++++++++
.../db/relational/sql/tree/DoubleLiteral.java | 21 +++++++++++++++++
.../iotdb/db/relational/sql/tree/Expression.java | 27 +++++++++++++++++++---
.../db/relational/sql/tree/GenericLiteral.java | 21 +++++++++++++++++
.../iotdb/db/relational/sql/tree/LongLiteral.java | 22 ++++++++++++++++++
.../iotdb/db/relational/sql/tree/NullLiteral.java | 16 +++++++++++++
.../relational/sql/tree/TableExpressionType.java | 15 ++++++++++--
9 files changed, 184 insertions(+), 5 deletions(-)
diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BinaryLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BinaryLiteral.java
index b46bd344733..cbaae8740f2 100644
--- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BinaryLiteral.java
+++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BinaryLiteral.java
@@ -20,10 +20,14 @@
package org.apache.iotdb.db.relational.sql.tree;
import org.apache.iotdb.db.relational.sql.parser.ParsingException;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import com.google.common.base.CharMatcher;
import com.google.common.io.BaseEncoding;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.Arrays;
import static java.util.Locale.ENGLISH;
@@ -103,4 +107,27 @@ public class BinaryLiteral extends Literal {
return Arrays.equals(value, ((BinaryLiteral) other).value);
}
+
+ // =============== serialize =================
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.BINARY_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.value.length, stream);
+ for (byte b : value) {
+ ReadWriteIOUtils.write(b, stream);
+ }
+ }
+
+ public BinaryLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ int length = ReadWriteIOUtils.readInt(byteBuffer);
+ this.value = new byte[length];
+ for (int i = 0; i < length; i++) {
+ value[i] = ReadWriteIOUtils.readByte(byteBuffer);
+ }
+ }
}
diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BooleanLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BooleanLiteral.java
index 608115ea122..72af330efbb 100644
--- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BooleanLiteral.java
+++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/BooleanLiteral.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 com.google.common.base.Preconditions.checkArgument;
@@ -84,4 +89,19 @@ public class BooleanLiteral extends Literal {
return value == ((BooleanLiteral) other).value;
}
+
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.BOOLEAN_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.value, stream);
+ }
+
+ public BooleanLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ this.value = ReadWriteIOUtils.readBool(byteBuffer);
+ }
}
diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DecimalLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DecimalLiteral.java
index 5c92a12d0f5..69156e9a7f9 100644
--- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DecimalLiteral.java
+++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DecimalLiteral.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;
@@ -73,4 +78,19 @@ public class DecimalLiteral extends Literal {
DecimalLiteral otherLiteral = (DecimalLiteral) other;
return value.equals(otherLiteral.value);
}
+
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.DECIMAL_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.value, stream);
+ }
+
+ public DecimalLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ this.value = ReadWriteIOUtils.readString(byteBuffer);
+ }
}
diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DoubleLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DoubleLiteral.java
index 7d911f32a32..df1f0ea624c 100644
--- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DoubleLiteral.java
+++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/DoubleLiteral.java
@@ -19,6 +19,12 @@
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 static java.util.Objects.requireNonNull;
public class DoubleLiteral extends Literal {
@@ -77,4 +83,19 @@ public class DoubleLiteral extends Literal {
return value == ((DoubleLiteral) other).value;
}
+
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.DOUBLE_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.value, stream);
+ }
+
+ public DoubleLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ this.value = ReadWriteIOUtils.readDouble(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 adece7d04c7..a396caf8d59 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
@@ -73,15 +73,36 @@ public abstract class Expression extends Node {
Expression expression;
switch (type) {
- case 24:
- expression = new SymbolReference(byteBuffer);
- break;
case 15:
expression = new ComparisonExpression(byteBuffer);
break;
+ case 16:
+ expression = new BinaryLiteral(byteBuffer);
+ break;
+ case 17:
+ expression = new BooleanLiteral(byteBuffer);
+ break;
+ case 18:
+ expression = new DecimalLiteral(byteBuffer);
+ break;
+ case 19:
+ expression = new DoubleLiteral(byteBuffer);
+ break;
+ case 20:
+ expression = new GenericLiteral(byteBuffer);
+ break;
+ case 21:
+ expression = new LongLiteral(byteBuffer);
+ break;
+ case 22:
+ expression = new NullLiteral(byteBuffer);
+ break;
case 23:
expression = new StringLiteral(byteBuffer);
break;
+ case 24:
+ expression = new SymbolReference(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/GenericLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/GenericLiteral.java
index d487ab4cf0a..60a5906a0ea 100644
--- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/GenericLiteral.java
+++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/GenericLiteral.java
@@ -20,7 +20,11 @@
package org.apache.iotdb.db.relational.sql.tree;
import org.apache.iotdb.db.relational.sql.parser.ParsingException;
+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;
@@ -100,4 +104,21 @@ public class GenericLiteral extends Literal {
return value.equals(otherLiteral.value) && type.equals(otherLiteral.type);
}
+
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.GENERIC_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.type, stream);
+ ReadWriteIOUtils.write(this.value, stream);
+ }
+
+ public GenericLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ this.type = ReadWriteIOUtils.readString(byteBuffer);
+ this.value = ReadWriteIOUtils.readString(byteBuffer);
+ }
}
diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LongLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LongLiteral.java
index 88472eb1f25..768c29d9203 100644
--- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LongLiteral.java
+++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LongLiteral.java
@@ -20,6 +20,11 @@
package org.apache.iotdb.db.relational.sql.tree;
import org.apache.iotdb.db.relational.sql.parser.ParsingException;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
import static java.util.Objects.requireNonNull;
@@ -106,4 +111,21 @@ public class LongLiteral extends Literal {
return Long.parseLong(value);
}
}
+
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.LONG_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {
+ ReadWriteIOUtils.write(this.value, stream);
+ ReadWriteIOUtils.write(this.parsedValue, stream);
+ }
+
+ public LongLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ this.value = ReadWriteIOUtils.readString(byteBuffer);
+ this.parsedValue = ReadWriteIOUtils.readLong(byteBuffer);
+ }
}
diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/NullLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/NullLiteral.java
index 167cd54ddc8..19a873cef0d 100644
--- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/NullLiteral.java
+++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/NullLiteral.java
@@ -19,6 +19,10 @@
package org.apache.iotdb.db.relational.sql.tree;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
import static java.util.Objects.requireNonNull;
public class NullLiteral extends Literal {
@@ -57,4 +61,16 @@ public class NullLiteral extends Literal {
public boolean shallowEquals(Node other) {
return sameClass(this, other);
}
+
+ @Override
+ public TableExpressionType getExpressionType() {
+ return TableExpressionType.NULL_LITERAL;
+ }
+
+ @Override
+ public void serialize(DataOutputStream stream) throws IOException {}
+
+ public NullLiteral(ByteBuffer byteBuffer) {
+ super(null);
+ }
}
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 e3d99d4d104..e4d0124ab77 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,9 +20,20 @@
package org.apache.iotdb.db.relational.sql.tree;
public enum TableExpressionType {
- SYMBOL_REFERENCE((short) 24),
+ BETWEEN((short) 11),
+ IN_PREDICATE((short) 12),
+ LOGICAL_EXPRESSION((short) 13),
+ NOT_EXPRESSION((short) 14),
COMPARISON((short) 15),
- STRING_LITERAL((short) 23);
+ BINARY_LITERAL((short) 16),
+ BOOLEAN_LITERAL((short) 17),
+ DECIMAL_LITERAL((short) 18),
+ DOUBLE_LITERAL((short) 19),
+ GENERIC_LITERAL((short) 20),
+ LONG_LITERAL((short) 21),
+ NULL_LITERAL((short) 22),
+ STRING_LITERAL((short) 23),
+ SYMBOL_REFERENCE((short) 24);
TableExpressionType(short type) {
this.type = type;