This is an automated email from the ASF dual-hosted git repository. caogaofei pushed a commit to branch beyyes-tmp/table-model-debug in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit b3d8e15f251e609d2dcbdf1aaeb1d4d929498764 Author: Beyyes <[email protected]> AuthorDate: Sun Jun 2 21:27:43 2024 +0800 add some lacked serialize expression method, debug the logic of TableModelPredicate --- .../confignode1conf/iotdb-common.properties | 7 +- .../plan/planner/plan/TableModelTimePredicate.java | 5 +- .../plan/planner/plan/TimePredicate.java | 11 ++- .../plan/planner/plan/TreeModelTimePredicate.java | 2 + .../datanode1conf/iotdb-common.properties | 4 ++ .../datanode2conf/iotdb-common.properties | 4 ++ .../relational/sql/tree/ComparisonExpression.java | 17 +++-- .../iotdb/db/relational/sql/tree/Expression.java | 80 ++++++++++++++++++++-- .../iotdb/db/relational/sql/tree/LongLiteral.java | 22 ++++++ .../db/relational/sql/tree/SymbolReference.java | 22 ++++++ .../relational/sql/tree/TableExpressionType.java | 25 ++++++- 11 files changed, 183 insertions(+), 16 deletions(-) diff --git a/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties b/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties index 8981b21285b..daaa91deec8 100644 --- a/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties +++ b/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties @@ -16,12 +16,13 @@ # specific language governing permissions and limitations # under the License. # - +data_region_group_extension_policy=CUSTOM +default_data_region_group_num_per_database=2 +schema_replication_factor=2 +data_replication_factor=2 timestamp_precision=ms data_region_consensus_protocol_class=org.apache.iotdb.consensus.iot.IoTConsensus schema_region_consensus_protocol_class=org.apache.iotdb.consensus.ratis.RatisConsensus -schema_replication_factor=3 -data_replication_factor=3 udf_lib_dir=target/confignode1/ext/udf trigger_lib_dir=target/confignode1/ext/trigger pipe_lib_dir=target/confignode1/ext/pipe diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java index 31607976d18..a79fabd435b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java @@ -23,10 +23,10 @@ import org.apache.iotdb.db.queryengine.plan.analyze.PredicateUtils; import org.apache.iotdb.db.relational.sql.tree.Expression; import org.apache.tsfile.read.filter.basic.Filter; +import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.util.Objects; public class TableModelTimePredicate implements TimePredicate { @@ -39,7 +39,8 @@ public class TableModelTimePredicate implements TimePredicate { @Override public void serialize(DataOutputStream stream) throws IOException { - throw new UnsupportedEncodingException(); + ReadWriteIOUtils.write((byte) 1, stream); + Expression.serialize(timePredicate, stream); } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java index 04cf67ed3aa..0bccff5f6a1 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java @@ -22,6 +22,7 @@ package org.apache.iotdb.db.queryengine.plan.planner.plan; import org.apache.iotdb.db.queryengine.plan.expression.Expression; import org.apache.tsfile.read.filter.basic.Filter; +import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; import java.io.IOException; @@ -34,7 +35,13 @@ public interface TimePredicate { Filter convertPredicateToTimeFilter(); static TimePredicate deserialize(ByteBuffer byteBuffer) { - // TODO will return another kind of TimePredicate like TableModelTimePredicate in the future - return new TreeModelTimePredicate(Expression.deserialize(byteBuffer)); + // 0 for tree model, 1 for table model + byte type = ReadWriteIOUtils.readByte(byteBuffer); + if (type == 0) { + return new TreeModelTimePredicate(Expression.deserialize(byteBuffer)); + } else { + return new TableModelTimePredicate( + org.apache.iotdb.db.relational.sql.tree.Expression.deserialize(byteBuffer)); + } } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java index 5b9e90cd8d0..5cc00125aa7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.queryengine.plan.analyze.PredicateUtils; import org.apache.iotdb.db.queryengine.plan.expression.Expression; import org.apache.tsfile.read.filter.basic.Filter; +import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; import java.io.IOException; @@ -38,6 +39,7 @@ public class TreeModelTimePredicate implements TimePredicate { @Override public void serialize(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write((byte) 0, stream); Expression.serialize(timePredicate, stream); } diff --git a/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties b/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties index 143c0e0b7f0..3d3eaf513d5 100644 --- a/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties +++ b/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties @@ -16,6 +16,10 @@ # specific language governing permissions and limitations # under the License. # +data_region_group_extension_policy=CUSTOM +default_data_region_group_num_per_database=2 +schema_replication_factor=2 +data_replication_factor=2 timestamp_precision=ms udf_lib_dir=target/datanode1/ext/udf trigger_lib_dir=target/datanode1/ext/trigger diff --git a/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties b/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties index 9cf060d61fd..a50caf80e30 100644 --- a/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties +++ b/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties @@ -16,6 +16,10 @@ # specific language governing permissions and limitations # under the License. # +data_region_group_extension_policy=CUSTOM +default_data_region_group_num_per_database=2 +schema_replication_factor=2 +data_replication_factor=2 timestamp_precision=ms udf_lib_dir=target/datanode2/ext/udf trigger_lib_dir=target/datanode2/ext/trigger 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..372fbe5ef64 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); + serialize(left, stream); + serialize(right, stream); } public ComparisonExpression(ByteBuffer byteBuffer) { super(null); operator = Operator.values()[ReadWriteIOUtils.readInt(byteBuffer)]; - left = null; - right = null; + left = deserialize(byteBuffer); + right = 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..ca2460f4046 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( @@ -68,11 +71,80 @@ 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 0: + // 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 7: + // expression = new FunctionCall(byteBuffer); + // break; + // case 8: + // expression = new Identifier(byteBuffer); + // break; + // case 9: + // expression = new Cast(byteBuffer); + // break; + // case 10: + // expression = new GenericDataType(byteBuffer); + // break; + // case 11: + // expression = new BetweenPredicate(byteBuffer); + // break; + // case 12: + // expression = new InPredicate(byteBuffer); + // break; + // case 13: + // expression = new LogicalExpression(byteBuffer); + // break; + // case 14: + // expression = new NotExpression(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/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/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..9edbe98112c 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,30 @@ package org.apache.iotdb.db.relational.sql.tree; public enum TableExpressionType { - LITERAL((short) 1); + 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), + FUNCTION_CALL((short) 7), + IDENTIFIER((short) 8), + CAST((short) 9), + GENERIC_DATA_TYPE((short) 10), + BETWEEN((short) 11), + IN_PREDICATE((short) 12), + LOGICAL_EXPRESSION((short) 13), + NOT_EXPRESSION((short) 14), + COMPARISON((short) 15), + 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;
