This is an automated email from the ASF dual-hosted git repository.
qiaojialin 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 eef210c [IOTDB-1060] Support full deletion for delete statement
without where clause (#2276)
eef210c is described below
commit eef210cb9b85f46351ae69367c19e71155b2bbbb
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)
---
.../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 0869ea0..35b8830 100644
--- a/docs/UserGuide/Operation Manual/DML Data Manipulation Language.md
+++ b/docs/UserGuide/Operation Manual/DML Data Manipulation Language.md
@@ -1343,6 +1343,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 53fc53d..3a2e032 100644
--- a/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md
+++ b/docs/zh/UserGuide/Operation Manual/DML Data Manipulation Language.md
@@ -1421,6 +1421,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 ad69a12..980fa64 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
@@ -313,6 +313,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 1b98225..e84d55e 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