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;
+  }
+}

Reply via email to