This is an automated email from the ASF dual-hosted git repository.

haonan 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 55dc0478376 Fix division by zero error when flush memtable (#15045)
55dc0478376 is described below

commit 55dc0478376769d768eb12e638b94c988d9615cc
Author: Haonan <[email protected]>
AuthorDate: Mon Mar 10 12:24:44 2025 +0800

    Fix division by zero error when flush memtable (#15045)
---
 .../it/db/it/IoTDBFlushQueryTableIT.java           | 30 +++++++++++++++-------
 .../db/utils/datastructure/AlignedTVList.java      |  9 ++++---
 2 files changed, 27 insertions(+), 12 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBFlushQueryTableIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBFlushQueryTableIT.java
index 1ad8427b6f3..85af3ad0ff7 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBFlushQueryTableIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBFlushQueryTableIT.java
@@ -27,7 +27,6 @@ import org.apache.iotdb.itbase.env.BaseEnv;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
@@ -179,22 +178,35 @@ public class IoTDBFlushQueryTableIT {
   }
 
   @Test
-  @Ignore
   public void testFlushNotExistGroupNoData() {
-    try (final Connection connection = EnvFactory.getEnv().getConnection();
+    try (final Connection connection =
+            EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
         final Statement statement = connection.createStatement()) {
-      statement.execute("CREATE DATABASE root.noexist.nodatagroup1");
+      statement.execute("CREATE DATABASE noexist_nodatagroup1");
       try {
-        statement.execute(
-            "FLUSH 
root.noexist.nodatagroup1,root.notExistGroup1,root.notExistGroup2");
+        statement.execute("FLUSH 
noexist_nodatagroup1,notExistGroup1,notExistGroup2");
       } catch (final SQLException sqe) {
-        String expectedMsg =
-            "322: 322: Database root.notExistGroup1,root.notExistGroup2 does 
not exist";
-        sqe.printStackTrace();
+        String expectedMsg = "Database notExistGroup1,notExistGroup2 does not 
exist";
         assertTrue(sqe.getMessage().contains(expectedMsg));
       }
     } catch (Exception e) {
       fail(e.getMessage());
     }
   }
+
+  @Test
+  public void testFlushTableAfterDropColumn() {
+    try (Connection connection = 
EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
+        Statement statement = connection.createStatement()) {
+      statement.execute("create database db1");
+      statement.execute("use db1");
+      statement.execute("create table t2(s1 text field, s2 text field)");
+      statement.execute("insert into t2(time,s2) values(2,'t1')");
+      statement.execute("alter table t2 drop column s2");
+      statement.execute("flush");
+      statement.execute("insert into t2(time,s1) values(2,'t1')");
+    } catch (Exception e) {
+      fail(e.getMessage());
+    }
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
index 5d8a2bfe5ac..23295d0065c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
@@ -1481,12 +1481,15 @@ public abstract class AlignedTVList extends TVList {
     if (largestBinaryChunkSize == 0) {
       return largestPrimitivePointSize;
     }
-    int avgPointSizeOfLargestBinaryColumn =
-        (int) largestBinaryChunkSize / 
getColumnValueCnt(largestBinaryColumnIndex);
+    int columnValueCnt = getColumnValueCnt(largestBinaryColumnIndex);
+    if (columnValueCnt == 0) {
+      return largestPrimitivePointSize;
+    }
+    int avgPointSizeOfLargestBinaryColumn = (int) largestBinaryChunkSize / 
columnValueCnt;
     return Math.max(avgPointSizeOfLargestBinaryColumn, 
largestPrimitivePointSize);
   }
 
-  public int getColumnValueCnt(int columnIndex) {
+  private int getColumnValueCnt(int columnIndex) {
     int pointNum = 0;
     if (bitMaps == null || bitMaps.get(columnIndex) == null) {
       pointNum = rowCount;

Reply via email to