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 56080ee2f58 Revert "Allow to write time column only (#14703)" (#14967)
56080ee2f58 is described below
commit 56080ee2f588ee1351460e12196923d2097690f4
Author: Jiang Tian <[email protected]>
AuthorDate: Thu Feb 27 11:54:07 2025 +0800
Revert "Allow to write time column only (#14703)" (#14967)
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 da1fc323684..dd0f7338c57 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;