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 b354e0884f4 fix isFailed in analysis and type conversion
b354e0884f4 is described below

commit b354e0884f4bfa79798085c135fbc4d16bb29243
Author: jt2594838 <[email protected]>
AuthorDate: Wed Jul 3 18:10:39 2024 +0800

    fix isFailed in analysis and type conversion
---
 .../iotdb/session/it/IoTDBSessionRelationalIT.java | 55 ++++++++++++++++++++++
 .../plan/parser/StatementGenerator.java            |  8 +++-
 .../plan/relational/analyzer/Analysis.java         |  2 +-
 .../fetcher/TableHeaderSchemaValidator.java        |  6 ++-
 .../plan/statement/crud/InsertBaseStatement.java   |  8 ++++
 .../plan/statement/crud/InsertTabletStatement.java |  6 +--
 .../schema/table/column/TsTableColumnCategory.java | 13 +++++
 7 files changed, 90 insertions(+), 8 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionRelationalIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionRelationalIT.java
index 9fcd9777943..a7439f8b1af 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionRelationalIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionRelationalIT.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.itbase.category.LocalStandaloneIT;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
 
+import org.apache.iotdb.session.Session;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.read.common.RowRecord;
 import org.apache.tsfile.write.record.Tablet;
@@ -69,6 +70,60 @@ public class IoTDBSessionRelationalIT {
     EnvFactory.getEnv().cleanClusterEnvironment();
   }
 
+  public static void main(String[] args)
+      throws IoTDBConnectionException, StatementExecutionException {
+    try (ISession session =
+        new 
Session.Builder().host("127.0.0.1").port(6667).sqlDialect(TABLE_SQL_DIALECT).build())
 {
+      session.open();
+      try {
+        session.executeNonQueryStatement("DROP DATABASE db1");
+      } catch (Exception ignored) {
+
+      }
+      session.executeNonQueryStatement("CREATE DATABASE db1");
+      session.executeNonQueryStatement("USE db1");
+      session.executeNonQueryStatement(
+          "CREATE TABLE table1 (id1 string id, attr1 string attribute, "
+              + "m1 double "
+              + "measurement)");
+
+      List<IMeasurementSchema> schemaList = new ArrayList<>();
+      schemaList.add(new MeasurementSchema("id1", TSDataType.STRING));
+      schemaList.add(new MeasurementSchema("attr1", TSDataType.STRING));
+      schemaList.add(new MeasurementSchema("m1", TSDataType.DOUBLE));
+      final List<ColumnType> columnTypes =
+          Arrays.asList(ColumnType.ID, ColumnType.ATTRIBUTE, 
ColumnType.MEASUREMENT);
+
+      Tablet tablet = new Tablet("table1", schemaList, columnTypes, 10);
+
+      long timestamp = System.currentTimeMillis();
+
+      for (long row = 0; row < 15; row++) {
+        int rowIndex = tablet.rowSize++;
+        tablet.addTimestamp(rowIndex, timestamp + row);
+        tablet.addValue("id1", rowIndex, "id:" + row);
+        tablet.addValue("attr1", rowIndex, "attr:" + row);
+        tablet.addValue("m1", rowIndex, row * 1.0);
+        if (tablet.rowSize == tablet.getMaxRowNumber()) {
+          session.insertRelationalTablet(tablet, true);
+          tablet.reset();
+        }
+        timestamp++;
+      }
+
+      if (tablet.rowSize != 0) {
+        session.insertRelationalTablet(tablet);
+        tablet.reset();
+      }
+
+      SessionDataSet dataSet = session.executeQueryStatement("select count(*) 
from table1");
+      while (dataSet.hasNext()) {
+        RowRecord rowRecord = dataSet.next();
+        assertEquals(15L, rowRecord.getFields().get(0).getLongV());
+      }
+    }
+  }
+
   @Test
   @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void insertRelationalTabletTest()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
index 81ca4337270..37441d0ce43 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
@@ -110,8 +110,11 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.tsfile.write.record.Tablet.ColumnType;
 
-/** Convert SQL and RPC requests to {@link Statement}. */
+/**
+ * Convert SQL and RPC requests to {@link Statement}.
+ */
 public class StatementGenerator {
 
   private static final PerformanceOverviewMetrics PERFORMANCE_OVERVIEW_METRICS 
=
@@ -347,7 +350,8 @@ public class StatementGenerator {
           new TsTableColumnCategory[insertTabletReq.columnCategories.size()];
       for (int i = 0; i < columnCategories.length; i++) {
         columnCategories[i] =
-            
TsTableColumnCategory.deserialize(insertTabletReq.getColumnCategories().get(i));
+            TsTableColumnCategory.fromTsFileColumnType(
+                
ColumnType.values()[insertTabletReq.getColumnCategories().get(i)]);
       }
       insertStatement.setColumnCategories(columnCategories);
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
index 891b6e86c4b..b0c2d49ce5f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
@@ -593,7 +593,7 @@ public class Analysis implements IAnalysis {
 
   @Override
   public boolean isFailed() {
-    return false;
+    return failStatus != null;
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
index 4f12a12fa26..dfd4a5febe9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
@@ -65,6 +65,7 @@ public class TableHeaderSchemaValidator {
   }
 
   private static class TableHeaderSchemaValidatorHolder {
+
     private static final TableHeaderSchemaValidator INSTANCE = new 
TableHeaderSchemaValidator();
   }
 
@@ -121,14 +122,15 @@ public class TableHeaderSchemaValidator {
           // check and validate column data type and category
           if (!columnSchema.getType().equals(UnknownType.UNKNOWN)
               && !TypeFactory.getType(existingColumn.getDataType())
-                  .equals(columnSchema.getType())) {
+              .equals(columnSchema.getType())) {
             throw new SemanticException(
                 String.format("Wrong data type at column %s.", 
columnSchema.getName()));
           }
           if (columnSchema.getColumnCategory() != null
               && 
!existingColumn.getColumnCategory().equals(columnSchema.getColumnCategory())) {
             throw new SemanticException(
-                String.format("Wrong category at column %s.", 
columnSchema.getName()));
+                String.format("Wrong category at column %s : %s/%s", 
columnSchema.getName(),
+                    columnSchema.getColumnCategory(), 
existingColumn.getColumnCategory()));
           }
         }
       }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
index 0df33592d88..15f238e3e75 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
@@ -262,6 +262,14 @@ public abstract class InsertBaseStatement extends 
Statement {
   }
 
   public List<Integer> getIdColumnIndices() {
+    if (idColumnIndices == null && columnCategories != null) {
+      idColumnIndices = new ArrayList<>();
+      for (int i = 0; i < columnCategories.length; i++) {
+        if (columnCategories[i].equals(TsTableColumnCategory.ID)) {
+          idColumnIndices.add(i);
+        }
+      }
+    }
     return idColumnIndices;
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
index c41cd0775bb..5ad2c48cf14 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
@@ -459,10 +459,10 @@ public class InsertTabletStatement extends 
InsertBaseStatement implements ISchem
       deviceIDs = new IDeviceID[rowCount];
     }
     if (deviceIDs[rowIdx] == null) {
-      String[] deviceIdSegments = new String[idColumnIndices.size() + 1];
+      String[] deviceIdSegments = new String[getIdColumnIndices().size() + 1];
       deviceIdSegments[0] = this.devicePath.getFullPath();
-      for (int i = 0; i < idColumnIndices.size(); i++) {
-        final Integer columnIndex = idColumnIndices.get(i);
+      for (int i = 0; i < getIdColumnIndices().size(); i++) {
+        final Integer columnIndex = getIdColumnIndices().get(i);
         deviceIdSegments[i + 1] = ((Object[]) 
columns[columnIndex])[rowIdx].toString();
       }
       deviceIDs[rowIdx] = Factory.DEFAULT_FACTORY.create(deviceIdSegments);
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
index 3cd29519949..c46168a101e 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
@@ -88,4 +88,17 @@ public enum TsTableColumnCategory {
         throw new IllegalArgumentException("Unsupported column type in TsFile: 
" + this);
     }
   }
+
+  public static TsTableColumnCategory fromTsFileColumnType(ColumnType 
columnType) {
+    switch (columnType) {
+      case MEASUREMENT:
+        return MEASUREMENT;
+      case ID:
+        return ID;
+      case ATTRIBUTE:
+        return ATTRIBUTE;
+      default:
+        throw new IllegalArgumentException("Unknown column type: " + 
columnType);
+    }
+  }
 }

Reply via email to