This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch TableModelIngestion
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/TableModelIngestion by this
push:
new 5076a5cf4ba add tests
5076a5cf4ba is described below
commit 5076a5cf4ba30116d75979d1af0947357288af5f
Author: jt2594838 <[email protected]>
AuthorDate: Fri Jun 21 19:06:37 2024 +0800
add tests
---
.../plan/parser/StatementGeneratorTest.java | 29 +++++++
.../plan/relational/analyzer/AnalyzerTest.java | 48 ++++++++++-
.../plan/statement/StatementTestUtils.java | 92 ++++++++++++++++++++++
3 files changed, 166 insertions(+), 3 deletions(-)
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
index ea36bd2d788..da522be5e5c 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
@@ -19,11 +19,13 @@
package org.apache.iotdb.db.queryengine.plan.parser;
+import java.util.stream.Collectors;
import org.apache.iotdb.common.rpc.thrift.TAggregationType;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.sql.SemanticException;
import
org.apache.iotdb.db.queryengine.plan.expression.binary.GreaterEqualExpression;
@@ -81,6 +83,7 @@ import org.apache.iotdb.session.template.MeasurementNode;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
import org.apache.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.tsfile.write.record.Tablet.ColumnType;
import org.junit.Assert;
import org.junit.Test;
@@ -101,6 +104,7 @@ import static
org.apache.tsfile.file.metadata.enums.CompressionType.SNAPPY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
public class StatementGeneratorTest {
@@ -197,6 +201,31 @@ public class StatementGeneratorTest {
assertEquals(0L, statement.getMinTime());
}
+ @Test
+ public void testInsertRelationalTablet() throws IllegalPathException {
+ List<String> measurements = Arrays.asList("id1", "attr1", "m1");
+ List<TSDataType> dataTypes = Arrays.asList(TSDataType.TEXT,
TSDataType.TEXT, TSDataType.DOUBLE);
+ List<TsTableColumnCategory> columnCategories =
Arrays.asList(TsTableColumnCategory.ID,
+ TsTableColumnCategory.ATTRIBUTE, TsTableColumnCategory.MEASUREMENT);
+ TSInsertTabletReq req =
+ new TSInsertTabletReq(
+ 101L,
+ "root.sg.d1",
+ measurements,
+ ByteBuffer.wrap(new byte[128]),
+ ByteBuffer.wrap(new byte[128]),
+ dataTypes.stream().map(d -> (int)
d.serialize()).collect(Collectors.toList()),
+ 1);
+ req.setColumnCategories(columnCategories.stream().map(c -> (byte)
c.ordinal()).collect(Collectors.toList()));
+ req.setWriteToTable(true);
+
+ final InsertTabletStatement statement =
StatementGenerator.createStatement(req);
+ assertEquals(measurements, Arrays.asList(statement.getMeasurements()));
+ assertEquals(dataTypes, Arrays.asList(statement.getDataTypes()));
+ assertEquals(columnCategories,
Arrays.asList(statement.getColumnCategories()));
+ assertTrue(statement.isWriteToTable());
+ }
+
@Test
public void testInsertTablets() throws IllegalPathException {
TSInsertTabletsReq req =
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index 335d838587e..45a720c8511 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -38,6 +38,8 @@ import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnHandle;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.DeviceEntry;
+import
org.apache.iotdb.db.queryengine.plan.relational.metadata.ITableDeviceSchemaValidation;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.OperatorNotFoundException;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
@@ -50,13 +52,21 @@ import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ProjectNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertTablet;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LogicalExpression;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
+import
org.apache.iotdb.db.queryengine.plan.relational.type.TypeNotFoundException;
+import org.apache.iotdb.db.queryengine.plan.relational.type.TypeSignature;
+import org.apache.iotdb.db.queryengine.plan.statement.StatementTestUtils;
+import
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
import org.apache.iotdb.mpp.rpc.thrift.TRegionRouteReq;
import org.apache.tsfile.file.metadata.IDeviceID;
+import org.apache.tsfile.read.common.type.Type;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import java.time.ZoneId;
@@ -482,10 +492,42 @@ public class AnalyzerTest {
assertEquals(2, ((LogicalExpression)
tableScanNode.getPushDownPredicate()).getTerms().size());
}
+ @Test
+ public void analyzeTablet() {
+
+ TableSchema tableSchema =
+ Metadata mockMetadata = new TestMatadata() {
+ @Override
+ public TableSchema validateTableHeaderSchema(String database,
TableSchema tableSchema,
+ MPPQueryContext context) {
+ return null;
+ }
+
+ @Override
+ public void validateDeviceSchema(ITableDeviceSchemaValidation
schemaValidation,
+ MPPQueryContext context) {
+
+ }
+ };
+
+ InsertTabletStatement insertTabletStatement =
StatementTestUtils.genInsertTabletStatement(true);
+ context = new MPPQueryContext("", queryId, sessionInfo, null, null);
+ actualAnalysis =
analyzeStatement(insertTabletStatement.toRelationalStatement(context),
+ mockMetadata, new SqlParser());
+ logicalQueryPlan =
+ new LogicalPlanner(
+ context, mockMetadata, sessionInfo, getFakePartitionFetcher(),
WarningCollector.NOOP)
+ .plan(actualAnalysis);
+ }
+
public static Analysis analyzeSQL(String sql, Metadata metadata) {
+ SqlParser sqlParser = new SqlParser();
+ Statement statement = sqlParser.createStatement(sql,
ZoneId.systemDefault());
+ return analyzeStatement(statement, metadata, sqlParser);
+ }
+
+ public static Analysis analyzeStatement(Statement statement, Metadata
metadata, SqlParser sqlParser) {
try {
- SqlParser sqlParser = new SqlParser();
- Statement statement = sqlParser.createStatement(sql,
ZoneId.systemDefault());
SessionInfo session =
new SessionInfo(
0, "test", ZoneId.systemDefault(), "testdb",
IClientSession.SqlDialect.TABLE);
@@ -502,7 +544,7 @@ public class AnalyzerTest {
return analyzer.analyze(statement);
} catch (Exception e) {
e.printStackTrace();
- fail(sql + ", " + e.getMessage());
+ fail(statement + ", " + e.getMessage());
}
fail();
return null;
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/statement/StatementTestUtils.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/statement/StatementTestUtils.java
new file mode 100644
index 00000000000..ee4997bb8da
--- /dev/null
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/statement/StatementTestUtils.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.queryengine.plan.statement;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
+import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
+import
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.read.common.type.TypeFactory;
+
+public class StatementTestUtils {
+ private StatementTestUtils() {
+ // util class
+ }
+
+ public static String tableName() {
+ return "table1";
+ }
+
+ public static String[] genColumnNames() {
+ return new String[]{"id1", "attr1", "m1"};
+ }
+
+ public static TSDataType[] genDataTypes() {
+ return new TSDataType[]{TSDataType.TEXT, TSDataType.TEXT,
TSDataType.DOUBLE};
+ }
+
+ public static TsTableColumnCategory[] genColumnCategories() {
+ return new TsTableColumnCategory[]{TsTableColumnCategory.ID,
+ TsTableColumnCategory.ATTRIBUTE, TsTableColumnCategory.MEASUREMENT};
+ }
+
+ public static List<ColumnSchema> genColumnSchema() {
+ String[] columnNames = genColumnNames();
+ TSDataType[] dataTypes = genDataTypes();
+ TsTableColumnCategory[] columnCategories = genColumnCategories();
+
+ List<ColumnSchema> result = new ArrayList<>();
+ for (int i = 0; i < columnNames.length; i++) {
+ result.add(new ColumnSchema(columnNames[i],
TypeFactory.getType(dataTypes[i]), false,
+ columnCategories[i]));
+ }
+ return result;
+ }
+
+ public static TableSchema genTableSchema() {
+ return new TableSchema(tableName(), genColumnSchema());
+ }
+
+ public static InsertTabletStatement genInsertTabletStatement(boolean
writeToTable) {
+ String[] measurements = genColumnNames();
+ TSDataType[] dataTypes = genDataTypes();
+ TsTableColumnCategory[] columnCategories = genColumnCategories();
+
+ Object[] columns = new Object[]{new String[]{"a", "b", "c"}, new
String[]{"x", "y", "z"},
+ new Double[]{1.0, 2.0, 3.0}};
+ long[] timestamps = new long[]{1L, 2L, 3L};
+
+ InsertTabletStatement insertTabletStatement = new InsertTabletStatement();
+ insertTabletStatement.setDevicePath(new PartialPath(new
String[]{tableName()}));
+ insertTabletStatement.setMeasurements(measurements);
+ insertTabletStatement.setDataTypes(dataTypes);
+ insertTabletStatement.setColumnCategories(columnCategories);
+ insertTabletStatement.setColumns(columns);
+ insertTabletStatement.setTimes(timestamps);
+ insertTabletStatement.setWriteToTable(writeToTable);
+
+ return insertTabletStatement;
+ }
+}