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

jiangtian pushed a commit to branch revert_write_time_onlt
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit a4bf7d84f2dcbdd4f9988964f4c50ddb153bbcaa
Author: Tian Jiang <[email protected]>
AuthorDate: Thu Feb 27 09:46:27 2025 +0800

    Revert "Allow to write time column only (#14703)"
    
    This reverts commit 43ed88f49093d72b4f2f24cc7ca33b075eb2c2ea.
---
 .../relational/it/db/it/IoTDBInsertTableIT.java    | 11 +++--
 .../it/session/IoTDBSessionRelationalIT.java       | 34 ---------------
 .../iotdb/session/it/IoTDBSessionSimpleIT.java     | 48 ----------------------
 .../java/org/apache/iotdb/session/Session.java     | 15 +++----
 .../protocol/thrift/impl/ClientRPCServiceImpl.java |  2 +-
 .../plan/planner/plan/node/write/InsertNode.java   |  2 -
 .../planner/plan/node/write/InsertRowNode.java     |  3 --
 .../node/write/RelationalInsertTabletNode.java     |  8 ----
 .../fetcher/TableHeaderSchemaValidator.java        |  4 ++
 .../plan/relational/sql/ast/InsertRows.java        |  3 --
 .../plan/statement/crud/InsertBaseStatement.java   | 28 ++++---------
 .../plan/statement/crud/InsertRowStatement.java    |  3 --
 .../dataregion/memtable/AbstractMemTable.java      | 24 ++++++-----
 13 files changed, 39 insertions(+), 146 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
index 7a997965e9c..0d003f6e442 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBInsertTableIT.java
@@ -886,7 +886,13 @@ public class IoTDBInsertTableIT {
       // only tag
       st1.execute("insert into sg21(tag1) values('1')");
       // only time
-      st1.execute("insert into sg21(time) values(1)");
+      try {
+        st1.execute("insert into sg21(time) values(1)");
+      } catch (SQLException e) {
+        assertEquals(
+            "305: [INTERNAL_SERVER_ERROR(305)] Exception occurred: \"insert 
into sg21(time) values(1)\". executeStatement failed. No column other than Time 
present, please check the request",
+            e.getMessage());
+      }
       // sleep a while to avoid the same timestamp between two insertions
       Thread.sleep(10);
       // only attribute
@@ -906,9 +912,6 @@ public class IoTDBInsertTableIT {
       assertFalse(rs1.next());
 
       rs1 = st1.executeQuery("select time, ss1, ss2 from sg21 order by time");
-      assertTrue(rs1.next());
-      assertEquals(1, rs1.getLong("time"));
-
       assertTrue(rs1.next());
       rs1.getString("ss1");
       assertTrue(rs1.wasNull());
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
index 942d8ee2a70..431eb9d6d10 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
@@ -623,40 +623,6 @@ public class IoTDBSessionRelationalIT {
     }
   }
 
-  @Test
-  public void insertTimeOnlyTest() throws IoTDBConnectionException, 
StatementExecutionException {
-    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
-      session.executeNonQueryStatement("USE \"db1\"");
-      session.executeNonQueryStatement("CREATE TABLE IF NOT EXISTS time_only 
(time time)");
-
-      List<IMeasurementSchema> schemaList = Collections.emptyList();
-      final List<ColumnCategory> columnTypes = Collections.emptyList();
-
-      Tablet tablet =
-          new Tablet(
-              "time_only",
-              IMeasurementSchema.getMeasurementNameList(schemaList),
-              IMeasurementSchema.getDataTypeList(schemaList),
-              columnTypes);
-
-      long timestamp = 0;
-      for (int row = 0; row < 10; row++) {
-        tablet.addTimestamp(row, timestamp++);
-      }
-      session.insert(tablet);
-      tablet.reset();
-
-      for (int i = 0; i < 10; i++) {
-        session.executeNonQueryStatement(
-            String.format("INSERT INTO time_only (time) VALUES (%d)", 
timestamp++));
-      }
-
-      SessionDataSet dataSet = session.executeQueryStatement("select 
count(time) from time_only");
-      RowRecord rec = dataSet.next();
-      assertEquals(20, rec.getFields().get(0).getLongV());
-    }
-  }
-
   @Test
   public void insertRelationalTabletWithCacheLeaderTest()
       throws IoTDBConnectionException, StatementExecutionException {
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
index e5bcbb169a4..4b7e5d8d9f6 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
@@ -48,7 +48,6 @@ import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.TSRecord;
 import org.apache.tsfile.write.record.Tablet;
-import org.apache.tsfile.write.record.Tablet.ColumnCategory;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.junit.After;
@@ -1944,52 +1943,6 @@ public class IoTDBSessionSimpleIT {
     }
   }
 
-  @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
-  public void insertTimeOnlyTest() throws IoTDBConnectionException, 
StatementExecutionException {
-    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
-
-      List<IMeasurementSchema> schemaList = Collections.emptyList();
-      final List<ColumnCategory> columnTypes = Collections.emptyList();
-
-      Tablet tablet =
-          new Tablet(
-              "root.sg1.d1",
-              IMeasurementSchema.getMeasurementNameList(schemaList),
-              IMeasurementSchema.getDataTypeList(schemaList),
-              columnTypes);
-
-      long timestamp = 0;
-      for (int row = 0; row < 10; row++) {
-        tablet.addTimestamp(row, timestamp++);
-      }
-      session.insertTablet(tablet);
-      tablet.setDeviceId("root.sg1.d2");
-      session.insertAlignedTablet(tablet);
-      tablet.reset();
-
-      try {
-        session.executeNonQueryStatement(
-            String.format("INSERT INTO root.sg1.d3 (time) VALUES (%d)", 
timestamp++));
-        fail("Exception expected");
-      } catch (StatementExecutionException e) {
-        assertEquals(
-            "701: InsertStatement should contain at least one measurement", 
e.getMessage());
-      }
-
-      try {
-        session.executeNonQueryStatement(
-            String.format("INSERT INTO root.sg1.d4 (time) ALIGNED VALUES 
(%d)", timestamp++));
-      } catch (StatementExecutionException e) {
-        assertEquals(
-            "701: InsertStatement should contain at least one measurement", 
e.getMessage());
-      }
-
-      SessionDataSet dataSet = session.executeQueryStatement("select count(*) 
from root.sg1.**");
-      assertFalse(dataSet.hasNext());
-    }
-  }
-
   @Test
   @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void insertMinMaxTimeTest() throws IoTDBConnectionException, 
StatementExecutionException {
@@ -2153,7 +2106,6 @@ public class IoTDBSessionSimpleIT {
   }
 
   @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void testWriteRestartAndDeleteDB()
       throws IoTDBConnectionException, StatementExecutionException {
     try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
diff --git 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
index e35237b754a..6908cad0632 100644
--- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -2964,17 +2964,12 @@ public class Session implements ISession {
 
     TSInsertTabletReq request = new TSInsertTabletReq();
 
-    if (tablet.getSchemas().isEmpty()) {
-      request.measurements = Collections.emptyList();
-      request.types = Collections.emptyList();
-    } else {
-      for (IMeasurementSchema measurementSchema : tablet.getSchemas()) {
-        if (measurementSchema.getMeasurementName() == null) {
-          throw new IllegalArgumentException("measurement should be non null 
value");
-        }
-        request.addToMeasurements(measurementSchema.getMeasurementName());
-        request.addToTypes(measurementSchema.getType().ordinal());
+    for (IMeasurementSchema measurementSchema : tablet.getSchemas()) {
+      if (measurementSchema.getMeasurementName() == null) {
+        throw new IllegalArgumentException("measurement should be non null 
value");
       }
+      request.addToMeasurements(measurementSchema.getMeasurementName());
+      request.addToTypes(measurementSchema.getType().ordinal());
     }
 
     request.setPrefixPath(tablet.getDeviceId());
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 1b9b10e6c07..121f37bf2ea 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -2243,7 +2243,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
       // Step 1: transfer from TSInsertTabletReq to Statement
       InsertTabletStatement statement = 
StatementGenerator.createStatement(req);
       // return success when this statement is empty because server doesn't 
need to execute it
-      if (statement.isEmpty() && !req.isWriteToTable()) {
+      if (statement.isEmpty()) {
         return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
       }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
index 1f1c267075f..0e69264a95d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
@@ -403,8 +403,6 @@ public abstract class InsertNode extends SearchNode {
           idColumnIndices.add(i);
         }
       }
-    } else {
-      idColumnIndices = Collections.emptyList();
     }
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowNode.java
index bbaeeecb4e6..d62703a608c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertRowNode.java
@@ -166,9 +166,6 @@ public class InsertRowNode extends InsertNode implements 
WALEntryValue {
 
   @Override
   public TSDataType[] getDataTypes() {
-    if (dataTypes == null) {
-      dataTypes = new TSDataType[0];
-    }
     if (isNeedInferType) {
       TSDataType[] predictedDataTypes = new TSDataType[dataTypes.length];
       for (int i = 0; i < dataTypes.length; i++) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
index 741bf29b83c..70321743453 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
@@ -372,12 +372,4 @@ public class RelationalInsertTabletNode extends 
InsertTabletNode {
       startOffset = endOffset;
     }
   }
-
-  @Override
-  public boolean allMeasurementFailed() {
-    if (measurements != null && measurements.length > 0) {
-      return failedMeasurementNumber >= measurements.length;
-    }
-    return false;
-  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
index f8417e6c596..8b47d38e1dc 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
@@ -102,6 +102,10 @@ public class TableHeaderSchemaValidator {
         .takeReadLock(context, SchemaLockType.VALIDATE_VS_DELETION);
 
     final List<ColumnSchema> inputColumnList = tableSchema.getColumns();
+    if (inputColumnList == null || inputColumnList.isEmpty()) {
+      throw new IllegalArgumentException(
+          "No column other than Time present, please check the request");
+    }
     // Get directly if there is a table because we do not want "addColumn" to 
affect
     // original writings
     TsTable table =
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertRows.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertRows.java
index f665362edb6..c55c02da057 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertRows.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertRows.java
@@ -143,9 +143,6 @@ public class InsertRows extends WrappedInsertStatement {
 
       @Override
       public List<Object[]> getAttributeValueList() {
-        if (insertRowStatement.getColumnCategories() == null) {
-          return Collections.singletonList(new Object[0]);
-        }
         List<Object> attributeValueList = new ArrayList<>();
         for (int i = 0; i < insertRowStatement.getColumnCategories().length; 
i++) {
           if (insertRowStatement.getColumnCategories()[i] == 
TsTableColumnCategory.ATTRIBUTE) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
index 3d294e0c1b6..af95bc4edb9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
@@ -310,8 +310,6 @@ public abstract class InsertBaseStatement extends Statement 
{
           idColumnIndices.add(i);
         }
       }
-    } else if (columnCategories == null) {
-      return Collections.emptyList();
     }
     return idColumnIndices;
   }
@@ -544,18 +542,7 @@ public abstract class InsertBaseStatement extends 
Statement {
       throw new ArrayIndexOutOfBoundsException(pos);
     }
 
-    String[] tmpMeasurements = new String[measurements.length + 1];
-    System.arraycopy(measurements, 0, tmpMeasurements, 0, pos);
-    tmpMeasurements[pos] = columnSchema.getName();
-    System.arraycopy(measurements, pos, tmpMeasurements, pos + 1, 
measurements.length - pos);
-    measurements = tmpMeasurements;
-
-    if (measurementSchemas == null) {
-      measurementSchemas = new MeasurementSchema[measurements.length];
-      measurementSchemas[pos] =
-          new MeasurementSchema(
-              columnSchema.getName(), 
InternalTypeManager.getTSDataType(columnSchema.getType()));
-    } else {
+    if (measurementSchemas != null) {
       final MeasurementSchema[] tmp = new 
MeasurementSchema[measurementSchemas.length + 1];
       System.arraycopy(measurementSchemas, 0, tmp, 0, pos);
       tmp[pos] =
@@ -565,9 +552,15 @@ public abstract class InsertBaseStatement extends 
Statement {
       measurementSchemas = tmp;
     }
 
+    String[] tmpMeasurements = new String[measurements.length + 1];
+    System.arraycopy(measurements, 0, tmpMeasurements, 0, pos);
+    tmpMeasurements[pos] = columnSchema.getName();
+    System.arraycopy(measurements, pos, tmpMeasurements, pos + 1, 
measurements.length - pos);
+    measurements = tmpMeasurements;
+
     if (dataTypes == null) {
       // sql insertion
-      dataTypes = new TSDataType[measurements.length];
+      dataTypes = new TSDataType[measurements.length + 1];
       dataTypes[pos] = 
InternalTypeManager.getTSDataType(columnSchema.getType());
     } else {
       final TSDataType[] tmpTypes = new TSDataType[dataTypes.length + 1];
@@ -578,7 +571,7 @@ public abstract class InsertBaseStatement extends Statement 
{
     }
 
     if (columnCategories == null) {
-      columnCategories = new TsTableColumnCategory[measurements.length];
+      columnCategories = new TsTableColumnCategory[measurements.length + 1];
       columnCategories[pos] = columnSchema.getColumnCategory();
     } else {
       final TsTableColumnCategory[] tmpCategories =
@@ -656,9 +649,6 @@ public abstract class InsertBaseStatement extends Statement 
{
 
   @TableModel
   public List<String> getAttributeColumnNameList() {
-    if (getColumnCategories() == null) {
-      return Collections.emptyList();
-    }
     final List<String> attributeColumnNameList = new ArrayList<>();
     for (int i = 0; i < getColumnCategories().length; i++) {
       if (getColumnCategories()[i] == TsTableColumnCategory.ATTRIBUTE) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowStatement.java
index 699e71ad831..cdf37fd2e1f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertRowStatement.java
@@ -206,9 +206,6 @@ public class InsertRowStatement extends InsertBaseStatement 
implements ISchemaVa
    */
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   public void transferType(ZoneId zoneId) throws QueryProcessException {
-    if (measurementSchemas == null) {
-      return;
-    }
 
     for (int i = 0; i < measurementSchemas.length; i++) {
       // null when time series doesn't exist
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
index ffb7d22acf6..db6fdb3d8ea 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
@@ -240,7 +240,9 @@ public abstract class AbstractMemTable implements IMemTable 
{
       schemaList.add(schema);
       dataTypes.add(schema.getType());
     }
-
+    if (schemaList.isEmpty()) {
+      return 0;
+    }
     memSize +=
         MemUtils.getAlignedRowRecordSize(dataTypes, values, 
insertRowNode.getColumnCategories());
     writeAlignedRow(insertRowNode.getDeviceID(), schemaList, 
insertRowNode.getTime(), values);
@@ -332,18 +334,18 @@ public abstract class AbstractMemTable implements 
IMemTable {
       InsertTabletNode insertTabletNode, int start, int end, TSStatus[] 
results) {
 
     List<IMeasurementSchema> schemaList = new ArrayList<>();
-    if (insertTabletNode.getMeasurementSchemas() != null) {
-      for (int i = 0; i < insertTabletNode.getMeasurementSchemas().length; 
i++) {
-        if (insertTabletNode.getColumns()[i] == null
-            || (insertTabletNode.getColumnCategories() != null
-                && insertTabletNode.getColumnCategories()[i] != 
TsTableColumnCategory.FIELD)) {
-          schemaList.add(null);
-        } else {
-          schemaList.add(insertTabletNode.getMeasurementSchemas()[i]);
-        }
+    for (int i = 0; i < insertTabletNode.getMeasurementSchemas().length; i++) {
+      if (insertTabletNode.getColumns()[i] == null
+          || (insertTabletNode.getColumnCategories() != null
+              && insertTabletNode.getColumnCategories()[i] != 
TsTableColumnCategory.FIELD)) {
+        schemaList.add(null);
+      } else {
+        schemaList.add(insertTabletNode.getMeasurementSchemas()[i]);
       }
     }
-
+    if (schemaList.isEmpty()) {
+      return;
+    }
     final List<Pair<IDeviceID, Integer>> deviceEndOffsetPair =
         insertTabletNode.splitByDevice(start, end);
     int splitStart = start;

Reply via email to