This is an automated email from the ASF dual-hosted git repository. rong pushed a commit to branch iotdb-3029 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d3c8af74ba907e05d589bac13dba928b014bb5b7 Author: Steve Yurong Su <[email protected]> AuthorDate: Thu Apr 28 21:53:01 2022 +0800 [IOTDB-3029] The prefix path generated by the select into target sequence contains * and ** currently unchecked --- docs/UserGuide/Process-Data/Select-Into.md | 6 +++--- docs/zh/UserGuide/Process-Data/Select-Into.md | 8 ++++---- .../apache/iotdb/db/integration/IoTDBSelectIntoIT.java | 6 +----- .../iotdb/db/qp/logical/crud/SelectIntoOperator.java | 15 +++++++++++++++ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/docs/UserGuide/Process-Data/Select-Into.md b/docs/UserGuide/Process-Data/Select-Into.md index 3e86c201b6..1754d10588 100644 --- a/docs/UserGuide/Process-Data/Select-Into.md +++ b/docs/UserGuide/Process-Data/Select-Into.md @@ -235,11 +235,11 @@ When the target aligned timeseries are not existed, the system will automaticall ### Other Restrictions * The number of source series in the `select` clause and the number of target series in the `into` clause must be the same. -* The `select *` clause is not supported. -* The target series in the `into` clause do not need to be created in advance. -* When the target series in the `into` clause already exist, you need to ensure that the source series in the `select` clause and the target series in the `into` clause have the same data types. +* The `select *` and `select **` clause are not supported. +* The target series in the `into` clause do not need to be created in advance. When the target series in the `into` clause already exist, you need to ensure that the source series in the `select` clause and the target series in the `into` clause have the same data types. * The target series in the `into` clause must be different from each other. * Only one prefix path of a series is allowed in the `from` clause. +* `*` and `**` are not allowed in the `from` clause. * Aligned Timeseries has not been supported in Time series generating function query(including UDF query)/ Arithmetic query / Nested query yet. An error message is expected if you use these types of query with Aligned Timeseries selected in the `select` clause. diff --git a/docs/zh/UserGuide/Process-Data/Select-Into.md b/docs/zh/UserGuide/Process-Data/Select-Into.md index b1ca5a8ccb..6f9afc64e6 100644 --- a/docs/zh/UserGuide/Process-Data/Select-Into.md +++ b/docs/zh/UserGuide/Process-Data/Select-Into.md @@ -236,12 +236,12 @@ intoPath ### 其他限制 * `select`子句中的源序列和`into`子句中的目标序列数量必须相同 -* `select`子句不支持带 `*` 查询 -* `into`子句中的目标序列不必预先创建(可使用自动创建schema功能) -* 当`into`子句中的目标序列已存在时,您需要保证`select`子句中的源序列和`into`子句中的目标序列的数据类型一致 +* `select`子句不支持带 `*`/`**` 查询 +* `into`子句中的目标序列不必预先创建(可使用自动创建schema功能),但是当`into`子句中的目标序列已存在时,您需要保证`select`子句中的源序列和`into`子句中的目标序列的数据类型一致 * `into`子句中的目标序列必须是互不相同的 * `from`子句只允许有一列序列前缀 -* 由于时间序列生成函数查询(UDF查询)/ 数学表达式查询 / 嵌套查询 尚不支持对齐时间序列(Aligned Timeseries),所以如果您在`select`子句中使用了上述查询,并且对应操作数包含对齐时间序列,会提示错误。 +* `from`子句不支持带 `*`/`**` +* 由于时间序列生成函数查询(UDF查询)/ 数学表达式查询 / 嵌套查询 尚不支持对齐时间序列(Aligned Timeseries),所以如果您在`select`子句中使用了上述查询,并且对应操作数包含对齐时间序列,会提示错误 diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java index 1c120ca48f..d784fc7914 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java @@ -543,11 +543,7 @@ public class IoTDBSelectIntoIT { statement.execute("select s1 into target from root.sg.*"); fail(); } catch (SQLException throwable) { - assertTrue( - throwable - .getMessage() - .contains( - "the number of source paths and the number of target paths should be the same")); + assertTrue(throwable.getMessage().contains("* and ** are not allowed in a target path.")); } try (Connection connection = diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java index 09231c961a..555bf0bebb 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java @@ -67,6 +67,9 @@ public class SelectIntoOperator extends Operator { "select into: target paths in into clause should be different."); } + checkWildcardsInPartialPaths(intoPaths); + checkWildcardsInPartialPaths(queryOperator.getFromComponent().getPrefixPaths()); + if (queryOperator.isAlignByDevice()) { throw new LogicalOperatorException("select into: align by device clauses are not supported."); } @@ -100,6 +103,18 @@ public class SelectIntoOperator extends Operator { } } + private void checkWildcardsInPartialPaths(List<PartialPath> paths) + throws LogicalOperatorException { + for (PartialPath path : paths) { + for (String node : path.getNodes()) { + if ("*".equals(node) || "**".equals(node)) { + throw new LogicalOperatorException( + "select into: * and ** are not allowed in a target path."); + } + } + } + } + public void setQueryOperator(QueryOperator queryOperator) { this.queryOperator = queryOperator; }
