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