This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.11
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.11 by this push:
new 65cb4e0 [IOTDB-1060] Support full deletion for delete statement
without where clause (#2276)
65cb4e0 is described below
commit 65cb4e0e3a6b078fc866677b837f38ed63597db9
Author: wshao08 <[email protected]>
AuthorDate: Thu Dec 17 19:45:28 2020 +0800
[IOTDB-1060] Support full deletion for delete statement without where
clause (#2276)
(cherry picked from commit eef210cb9b85f46351ae69367c19e71155b2bbbb)
---
.../Operation Manual/DML Data Manipulation Language.md | 6 ++++++
.../Operation Manual/DML Data Manipulation Language.md | 5 +++++
.../org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 3 +++
.../apache/iotdb/db/integration/IoTDBDeletionIT.java | 18 ++++++++++++++++++
4 files changed, 32 insertions(+)
diff --git a/docs/UserGuide/Operation Manual/DML Data Manipulation Language.md
b/docs/UserGuide/Operation Manual/DML Data Manipulation Language.md
index b6aa4a8..2cff29b 100644
--- a/docs/UserGuide/Operation Manual/DML Data Manipulation Language.md
+++ b/docs/UserGuide/Operation Manual/DML Data Manipulation Language.md
@@ -837,6 +837,12 @@ Msg: 303: Check metadata error: For delete statement,
where clause can only cont
expressions like : time > XXX, time <= XXX, or two atomic expressions
connected by 'AND'
```
+If no "where" clause specified in a delete statement, all the data in a
timeseries will be deleted.
+
+```
+delete from root.ln.wf02.status
+```
+
### Delete Multiple Timeseries
If both the power supply status and hardware version of the ln group wf02
plant wt02 device before 2017-11-01 16:26:00 need to be deleted, [the prefix
path with broader meaning or the path with
star](../Concept/Data%20Model%20and%20Terminology.md) can be used to delete the
data. The SQL statement for this operation is:
diff --git a/docs/zh/UserGuide/Operation Manual/DML Data Manipulation
Language.md b/docs/zh/UserGuide/Operation Manual/DML Data Manipulation
Language.md
index bdd32a9..dec05d2 100644
--- a/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md
+++ b/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md
@@ -890,6 +890,11 @@ Msg: 303: Check metadata error: For delete statement,
where clause can only cont
expressions like : time > XXX, time <= XXX, or two atomic expressions
connected by 'AND'
```
+如果delete语句中未指定where子句,则会删除时间序列中的所有数据。
+```
+delete from root.ln.wf02.status
+```
+
#### 多传感器时间序列值删除
当ln集团wf02子站的wt02设备在2017-11-01
16:26:00之前的供电状态和设备硬件版本都需要删除,此时可以使用含义更广的[前缀路径或带`*`路径](../Concept/Data%20Model%20and%20Terminology.md)进行删除操作,进行此操作的SQL语句为:
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index d87ea82..34415a7 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -295,6 +295,9 @@ public class IoTDBSqlVisitor extends
SqlBaseBaseVisitor<Operator> {
Pair<Long, Long> timeInterval = parseDeleteTimeInterval(deleteDataOp);
deleteDataOp.setStartTime(timeInterval.left);
deleteDataOp.setEndTime(timeInterval.right);
+ } else {
+ deleteDataOp.setStartTime(Long.MIN_VALUE);
+ deleteDataOp.setEndTime(Long.MAX_VALUE);
}
return deleteDataOp;
}
diff --git
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
index 3da375a..1414d13 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
@@ -203,6 +203,24 @@ public class IoTDBDeletionIT {
}
@Test
+ public void testFullDeleteWithoutWhereClause() throws SQLException {
+ try (Connection connection = DriverManager
+ .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
+ "root");
+ Statement statement = connection.createStatement()) {
+ statement.execute("DELETE FROM root.vehicle.d0.s0");
+ try (ResultSet set = statement.executeQuery("SELECT s0 FROM
root.vehicle.d0")) {
+ int cnt = 0;
+ while (set.next()) {
+ cnt++;
+ }
+ assertEquals(0, cnt);
+ }
+ cleanData();
+ }
+ }
+
+ @Test
public void testPartialPathRangeDelete() throws SQLException {
prepareData();
try (Connection connection = DriverManager