This is an automated email from the ASF dual-hosted git repository. jt2594838 pushed a commit to branch delete_with_attribute in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c79a4e16071907a6b0063e354d26579e325dc602 Author: Tian Jiang <[email protected]> AuthorDate: Wed Jul 1 10:28:14 2026 +0800 add test --- .../relational/it/db/it/IoTDBDeletionTableIT.java | 74 +++++++++++++++++++--- .../queryengine/plan/analyze/AnalyzeUtilsTest.java | 3 +- 2 files changed, 68 insertions(+), 9 deletions(-) diff --git a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java index 66d0e3a6a0d..a180a2e4a5f 100644 --- a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBDeletionTableIT.java @@ -248,14 +248,6 @@ public class IoTDBDeletionTableIT { assertEquals("701: The column 's1' does not exist or is not a tag column", e.getMessage()); } - try { - statement.execute("DELETE FROM vehicle1 WHERE attr1 = 'text'"); - fail("should not reach here!"); - } catch (SQLException e) { - assertEquals( - "701: The column 'attr1' does not exist or is not a tag column", e.getMessage()); - } - try { statement.execute("DELETE FROM vehicle1 WHERE s3 = 'text'"); fail("should not reach here!"); @@ -335,6 +327,72 @@ public class IoTDBDeletionTableIT { } } + @Test + public void testDeleteDataByAttributeFilter() throws SQLException { + try (Connection connection = EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT); + Statement statement = connection.createStatement()) { + statement.execute("use test"); + statement.execute( + "CREATE TABLE delete_by_attr(deviceId STRING TAG, attr1 ATTRIBUTE, attr2 ATTRIBUTE, s1 INT32 FIELD)"); + statement.execute( + "INSERT INTO delete_by_attr(time, deviceId, attr1, attr2, s1) VALUES " + + "(1, 'd1', 'red', 'small', 1)," + + "(2, 'd1', 'red', 'small', 2)," + + "(1, 'd2', 'red', 'large', 3)," + + "(2, 'd2', 'red', 'large', 4)," + + "(1, 'd3', 'blue', 'small', 5)," + + "(2, 'd3', 'blue', 'small', 6)"); + + statement.execute("DELETE FROM delete_by_attr WHERE attr1 = 'red' AND attr2 = 'small'"); + + try (ResultSet resultSet = + statement.executeQuery("SELECT deviceId, s1 FROM delete_by_attr ORDER BY deviceId, s1")) { + assertTrue(resultSet.next()); + assertEquals("d2", resultSet.getString(1)); + assertEquals(3, resultSet.getInt(2)); + assertTrue(resultSet.next()); + assertEquals("d2", resultSet.getString(1)); + assertEquals(4, resultSet.getInt(2)); + assertTrue(resultSet.next()); + assertEquals("d3", resultSet.getString(1)); + assertEquals(5, resultSet.getInt(2)); + assertTrue(resultSet.next()); + assertEquals("d3", resultSet.getString(1)); + assertEquals(6, resultSet.getInt(2)); + assertFalse(resultSet.next()); + } + } + } + + @Test + public void testDeleteDataByAttributeFilterRejectsTooManyDevices() throws SQLException { + try (Connection connection = EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT); + Statement statement = connection.createStatement()) { + statement.execute("use test"); + statement.execute( + "CREATE TABLE delete_by_attr_limit(deviceId STRING TAG, attr1 ATTRIBUTE, s1 INT32 FIELD)"); + final StringBuilder builder = + new StringBuilder("INSERT INTO delete_by_attr_limit(time, deviceId, attr1, s1) VALUES "); + for (int i = 0; i <= 1000; i++) { + if (i > 0) { + builder.append(','); + } + builder.append("(1, 'd").append(i).append("', 'same', ").append(i).append(')'); + } + statement.execute(builder.toString()); + + try { + statement.execute("DELETE FROM delete_by_attr_limit WHERE attr1 = 'same'"); + fail("should not reach here!"); + } catch (SQLException e) { + assertTrue(e.getMessage().contains("Too many devices (1001)")); + assertTrue(e.getMessage().contains("limit is 1000")); + assertTrue(e.getMessage().contains("attr1")); + assertTrue(e.getMessage().contains("Please remove all attribute filters")); + } + } + } + @Test public void test() throws SQLException { int testId = 2; diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtilsTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtilsTest.java index ace46de6d0d..915006a8286 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtilsTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtilsTest.java @@ -69,7 +69,8 @@ public class AnalyzeUtilsTest { new LongLiteral("100")); List<TableDeletionEntry> entries = - AnalyzeUtils.parseExpressions2ModEntries(expression, table, "db", new MPPQueryContext(new QueryId("1"))); + AnalyzeUtils.parseExpressions2ModEntries( + expression, table, "db", new MPPQueryContext(new QueryId("1"))); assertEquals(1, entries.size()); assertEquals(Long.MIN_VALUE, entries.get(0).getStartTime());
