This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 9b04df7d7b4 Optimized the error log of devices related operations when
where specifies time/measurement columns
9b04df7d7b4 is described below
commit 9b04df7d7b445aee41deaabb20b638847cba04e1
Author: Caideyipi <[email protected]>
AuthorDate: Thu Dec 5 19:49:26 2024 +0800
Optimized the error log of devices related operations when where specifies
time/measurement columns
---
.../apache/iotdb/relational/it/schema/IoTDBDeviceIT.java | 15 +++++++++++++--
.../plan/relational/analyzer/StatementAnalyzer.java | 10 +---------
.../predicate/schema/CheckSchemaPredicateVisitor.java | 12 ++++++++++--
3 files changed, 24 insertions(+), 13 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
index e7ac5eef74c..95fb1a0fede 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDeviceIT.java
@@ -167,7 +167,9 @@ public class IoTDBDeviceIT {
statement.executeQuery("show devices from table0 where temperature =
37.6");
fail("Show devices shall fail for measurement predicate");
} catch (final Exception e) {
- assertEquals("701: Column 'temperature' cannot be resolved",
e.getMessage());
+ assertEquals(
+ "701: The TIME/MEASUREMENT columns are currently not allowed in
devices related operations",
+ e.getMessage());
}
try {
@@ -217,7 +219,7 @@ public class IoTDBDeviceIT {
try {
statement.execute("update table0 set model = cast(device_id as
int32)");
- fail("Update shall fail for non-exist column");
+ fail("Update shall fail when result type mismatch");
} catch (final Exception e) {
assertEquals(
"507: Result type mismatch for attribute 'model', expected class
org.apache.tsfile.utils.Binary, actual class java.lang.Integer",
@@ -261,6 +263,15 @@ public class IoTDBDeviceIT {
// Test successfully delete data
TestUtils.assertResultSetSize(
statement.executeQuery("select * from table0 where region_id =
'1'"), 1);
+
+ try {
+ statement.executeQuery("delete devices from table0 where time = 1");
+ fail("Delete devices shall fail when specifies non id column");
+ } catch (final Exception e) {
+ assertEquals(
+ "701: The TIME/MEASUREMENT columns are currently not allowed in
devices related operations",
+ e.getMessage());
+ }
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index fdf9c032742..8fdc1d2ae89 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -3003,15 +3003,7 @@ public class StatementAnalyzer {
analyzeTableOutputFields(
node.getTable(),
name,
- new TableSchema(
- originalSchema.getTableName(),
- originalSchema.getColumns().stream()
- .filter(
- columnSchema ->
- columnSchema.getColumnCategory() ==
TsTableColumnCategory.ID
- || columnSchema.getColumnCategory()
- == TsTableColumnCategory.ATTRIBUTE)
- .collect(Collectors.toList()))));
+ new TableSchema(originalSchema.getTableName(),
originalSchema.getColumns())));
final List<Field> fieldList = fields.build();
final Scope scope = createAndAssignScope(node, context, fieldList);
translationMap =
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
index a7b6cec0821..9bcc6f869e3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/predicate/schema/CheckSchemaPredicateVisitor.java
@@ -22,6 +22,7 @@ package
org.apache.iotdb.db.queryengine.plan.relational.analyzer.predicate.schem
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
+import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.BetweenPredicate;
@@ -102,8 +103,15 @@ public class CheckSchemaPredicateVisitor
final TsTableColumnSchema schema =
context.table.getColumnSchema(
node.accept(ExtractPredicateColumnNameVisitor.getInstance(),
null));
- return Objects.isNull(schema)
- || schema.getColumnCategory().equals(TsTableColumnCategory.ATTRIBUTE);
+ if (Objects.isNull(schema)) {
+ return true;
+ }
+ if (schema.getColumnCategory() == TsTableColumnCategory.TIME
+ || schema.getColumnCategory() == TsTableColumnCategory.MEASUREMENT) {
+ throw new SemanticException(
+ "The TIME/MEASUREMENT columns are currently not allowed in devices
related operations");
+ }
+ return schema.getColumnCategory().equals(TsTableColumnCategory.ATTRIBUTE);
}
public static class Context {