This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch force_ci/alter_column_datatype
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/force_ci/alter_column_datatype
by this push:
new 831a3dfae9d disable altering from TEXT to STRING & add aggregation
support
831a3dfae9d is described below
commit 831a3dfae9d2ce69b09bc9bba1e81cdf6d06586d
Author: Tian Jiang <[email protected]>
AuthorDate: Mon Jan 13 13:33:01 2025 +0800
disable altering from TEXT to STRING & add aggregation support
---
.../it/schema/IoTDBAlterColumnTypeIT.java | 23 +++++++++++++--
.../confignode/persistence/schema/ConfigMTree.java | 3 +-
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 2 +-
.../execution/exchange/SharedTsBlockQueue.java | 15 ++++++++++
.../exchange/source/LocalSourceHandle.java | 15 ++++++++++
.../execution/operator/source/SeriesScanUtil.java | 18 ++++++++++++
.../relational/aggregation/ExtremeAccumulator.java | 16 +++++-----
.../relational/aggregation/FirstAccumulator.java | 11 ++++---
.../relational/aggregation/FirstByAccumulator.java | 8 ++---
.../relational/aggregation/LastAccumulator.java | 12 +++++---
.../relational/aggregation/LastByAccumulator.java | 8 ++---
.../relational/aggregation/MaxAccumulator.java | 8 ++---
.../relational/aggregation/MinAccumulator.java | 8 ++---
.../read/reader/chunk/MemAlignedPageReader.java | 19 +++++++++++-
.../reader/chunk/MemAlignedChunkLoaderTest.java | 2 +-
.../read/reader/chunk/MemChunkLoaderTest.java | 12 ++++----
.../apache/iotdb/commons/utils/MetadataUtils.java | 34 ++++++++++++++++++++++
17 files changed, 170 insertions(+), 44 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java
index 737b9c46af5..873e951d4af 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBAlterColumnTypeIT.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.relational.it.schema;
+import org.apache.iotdb.commons.utils.MetadataUtils;
import org.apache.iotdb.isession.ITableSession;
import org.apache.iotdb.isession.SessionDataSet;
import org.apache.iotdb.it.env.EnvFactory;
@@ -71,6 +72,9 @@ public class IoTDBAlterColumnTypeIT {
typesToTest.remove(TSDataType.VECTOR);
typesToTest.remove(TSDataType.UNKNOWN);
+ // doWriteAndAlter(TSDataType.INT32, TSDataType.FLOAT, false);
+ // doWriteAndAlter(TSDataType.INT32, TSDataType.FLOAT, true);
+
for (TSDataType from : typesToTest) {
for (TSDataType to : typesToTest) {
System.out.printf("testing %s to %s%n", from, to);
@@ -104,7 +108,7 @@ public class IoTDBAlterColumnTypeIT {
}
// alter the type to "to"
- boolean isCompatible = to.isCompatible(from);
+ boolean isCompatible = MetadataUtils.canAlter(from, to);
if (isCompatible) {
session.executeNonQueryStatement(
"ALTER TABLE write_and_alter_column_type ALTER COLUMN s1 SET DATA
TYPE " + to);
@@ -170,6 +174,21 @@ public class IoTDBAlterColumnTypeIT {
assertEquals(genValue(newType, 2).toString(),
rec.getFields().get(1).toString());
}
+ dataSet =
+ session.executeQueryStatement(
+ "select min(s1),max(s1),first(s1),last(s1) from
write_and_alter_column_type");
+ rec = dataSet.next();
+ for (int i = 0; i < 4; i++) {
+ if (newType == TSDataType.BLOB) {
+ assertEquals(genValue(newType, i % 2 + 1),
rec.getFields().get(i).getBinaryV());
+ } else if (newType == TSDataType.DATE) {
+ assertEquals(genValue(newType, i % 2 + 1),
rec.getFields().get(i).getDateV());
+ } else {
+ assertEquals(genValue(newType, i % 2 + 1).toString(),
rec.getFields().get(i).toString());
+ }
+ }
+ assertFalse(dataSet.hasNext());
+
session.executeNonQueryStatement("DROP TABLE
write_and_alter_column_type");
}
}
@@ -198,7 +217,7 @@ public class IoTDBAlterColumnTypeIT {
"CREATE TABLE IF NOT EXISTS just_alter_column_type (s1 " + from +
")");
// alter the type to "to"
- boolean isCompatible = to.isCompatible(from);
+ boolean isCompatible = MetadataUtils.canAlter(from, to);
if (isCompatible) {
session.executeNonQueryStatement(
"ALTER TABLE just_alter_column_type ALTER COLUMN s1 SET DATA TYPE
" + to);
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
index 5c6babfea32..958e9ec00d5 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.commons.schema.table.TableNodeStatus;
import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
+import org.apache.iotdb.commons.utils.MetadataUtils;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.commons.utils.ThriftConfigNodeSerDeUtils;
import org.apache.iotdb.confignode.persistence.schema.mnode.IConfigMNode;
@@ -882,7 +883,7 @@ public class ConfigMTree {
if (columnSchema.getColumnCategory() != TsTableColumnCategory.FIELD) {
throw new SemanticException("Can only alter datatype of FIELD columns");
}
- if (!dataType.isCompatible(columnSchema.getDataType())) {
+ if (!MetadataUtils.canAlter(columnSchema.getDataType(), dataType)) {
throw new SemanticException(
String.format(
"New type %s is not compatible with the existing one %s",
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 08ec1372910..ba68a0eb23b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -638,7 +638,7 @@ public class IoTDBConfig {
private long cacheFileReaderClearPeriod = 100000;
/** the max executing time of query in ms. Unit: millisecond */
- private long queryTimeoutThreshold = 60000;
+ private long queryTimeoutThreshold = 60000000;
/** the max time to live of a session in ms. Unit: millisecond */
private int sessionTimeoutThreshold = 0;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java
index b3b94f66282..91029d2a414 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/SharedTsBlockQueue.java
@@ -29,7 +29,9 @@ import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;
import org.apache.commons.lang3.Validate;
+import org.apache.tsfile.block.column.Column;
import org.apache.tsfile.read.common.block.TsBlock;
+import org.apache.tsfile.read.common.block.column.TimeColumn;
import org.apache.tsfile.utils.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -214,6 +216,19 @@ public class SharedTsBlockQueue {
* the returned future of last invocation completes.
*/
public ListenableFuture<Void> add(TsBlock tsBlock) {
+ StringBuilder tsBlockBuilder = new StringBuilder();
+ for (Column column : tsBlock.getAllColumns()) {
+ tsBlockBuilder.append("[");
+ for (int i = 0; i < column.getPositionCount(); i++) {
+ if (column instanceof TimeColumn) {
+ tsBlockBuilder.append(column.getLong(i)).append(",");
+ } else {
+ tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(",");
+ }
+ }
+ tsBlockBuilder.append("] ");
+ }
+ LOGGER.warn("[addTsBlock] TsBlock:{}", tsBlockBuilder);
if (closed) {
// queue may have been closed
return immediateVoidFuture();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java
index 4da89f72d07..8bf9d75bacc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/LocalSourceHandle.java
@@ -29,7 +29,9 @@ import org.apache.iotdb.rpc.TSStatusCode;
import com.google.common.util.concurrent.ListenableFuture;
import org.apache.commons.lang3.Validate;
+import org.apache.tsfile.block.column.Column;
import org.apache.tsfile.read.common.block.TsBlock;
+import org.apache.tsfile.read.common.block.column.TimeColumn;
import org.apache.tsfile.read.common.block.column.TsBlockSerde;
import org.apache.tsfile.utils.RamUsageEstimator;
import org.slf4j.Logger;
@@ -141,6 +143,19 @@ public class LocalSourceHandle implements ISourceHandle {
@Override
public ByteBuffer getSerializedTsBlock() throws IoTDBException {
TsBlock tsBlock = receive();
+ StringBuilder tsBlockBuilder = new StringBuilder();
+ for (Column column : tsBlock.getAllColumns()) {
+ tsBlockBuilder.append("[");
+ for (int i = 0; i < column.getPositionCount(); i++) {
+ if (column instanceof TimeColumn) {
+ tsBlockBuilder.append(column.getLong(i)).append(",");
+ } else {
+ tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(",");
+ }
+ }
+ tsBlockBuilder.append("] ");
+ }
+ LOGGER.warn("[GetSerializedTsBlock] TsBlock:{}", tsBlockBuilder);
if (tsBlock != null) {
long startTime = System.nanoTime();
try {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index 00f16bdcf29..178839b5ac0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -35,6 +35,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.read.reader.common.MergeRead
import
org.apache.iotdb.db.storageengine.dataregion.read.reader.common.PriorityMergeReader;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.tsfile.block.column.Column;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.AbstractAlignedTimeSeriesMetadata;
import org.apache.tsfile.file.metadata.IChunkMetadata;
@@ -47,6 +48,7 @@ import org.apache.tsfile.read.TimeValuePair;
import org.apache.tsfile.read.common.block.TsBlock;
import org.apache.tsfile.read.common.block.TsBlockBuilder;
import org.apache.tsfile.read.common.block.TsBlockUtil;
+import org.apache.tsfile.read.common.block.column.TimeColumn;
import org.apache.tsfile.read.filter.basic.Filter;
import org.apache.tsfile.read.reader.IPageReader;
import org.apache.tsfile.read.reader.IPointReader;
@@ -57,6 +59,8 @@ import org.apache.tsfile.utils.Accountable;
import org.apache.tsfile.utils.RamUsageEstimator;
import org.apache.tsfile.utils.TsPrimitiveType;
import org.apache.tsfile.write.UnSupportedDataTypeException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.Serializable;
@@ -75,6 +79,7 @@ import static
org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.BUI
public class SeriesScanUtil implements Accountable {
+ private static final Logger LOGGER =
LoggerFactory.getLogger(SeriesScanUtil.class);
protected final FragmentInstanceContext context;
// The path of the target series which will be scanned.
@@ -1300,6 +1305,19 @@ public class SeriesScanUtil implements Accountable {
if (!ascending) {
tsBlock.reverse();
}
+ StringBuilder tsBlockBuilder = new StringBuilder();
+ for (Column column : tsBlock.getAllColumns()) {
+ tsBlockBuilder.append("[");
+ for (int i = 0; i < column.getPositionCount(); i++) {
+ if (column instanceof TimeColumn) {
+ tsBlockBuilder.append(column.getLong(i)).append(",");
+ } else {
+ tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(",");
+ }
+ }
+ tsBlockBuilder.append("] ");
+ }
+ LOGGER.warn("[getAllSatisfiedPageData] TsBlock:{}", tsBlockBuilder);
return tsBlock;
} finally {
long time = System.nanoTime() - startTime;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/ExtremeAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/ExtremeAccumulator.java
index cdcd08295b6..592ccaf4a9b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/ExtremeAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/ExtremeAccumulator.java
@@ -118,20 +118,20 @@ public class ExtremeAccumulator implements
TableAccumulator {
switch (seriesDataType) {
case INT32:
- updateIntResult((int) statistics[0].getMaxValue());
- updateIntResult((int) statistics[0].getMinValue());
+ updateIntResult(((Number) statistics[0].getMaxValue()).intValue());
+ updateIntResult(((Number) statistics[0].getMinValue()).intValue());
break;
case INT64:
- updateLongResult((long) statistics[0].getMaxValue());
- updateLongResult((long) statistics[0].getMinValue());
+ updateLongResult(((Number) statistics[0].getMaxValue()).longValue());
+ updateLongResult(((Number) statistics[0].getMinValue()).longValue());
break;
case FLOAT:
- updateFloatResult((float) statistics[0].getMaxValue());
- updateFloatResult((float) statistics[0].getMinValue());
+ updateFloatResult(((Number) statistics[0].getMaxValue()).floatValue());
+ updateFloatResult(((Number) statistics[0].getMinValue()).floatValue());
break;
case DOUBLE:
- updateDoubleResult((double) statistics[0].getMaxValue());
- updateDoubleResult((double) statistics[0].getMinValue());
+ updateDoubleResult(((Number)
statistics[0].getMaxValue()).doubleValue());
+ updateDoubleResult(((Number)
statistics[0].getMinValue()).doubleValue());
break;
case TEXT:
case STRING:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
index 8b364c58fbe..13503401b96 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
@@ -207,20 +207,23 @@ public class FirstAccumulator implements TableAccumulator
{
switch (seriesDataType) {
case INT32:
case DATE:
- updateIntFirstValue((int) statistics[0].getFirstValue(),
statistics[0].getStartTime());
+ updateIntFirstValue(
+ ((Number) statistics[0].getFirstValue()).intValue(),
statistics[0].getStartTime());
break;
case INT64:
- updateLongFirstValue((long) statistics[0].getFirstValue(),
statistics[0].getStartTime());
+ updateLongFirstValue(
+ ((Number) statistics[0].getFirstValue()).longValue(),
statistics[0].getStartTime());
break;
case TIMESTAMP:
updateLongFirstValue(statistics[0].getStartTime(),
statistics[0].getStartTime());
break;
case FLOAT:
- updateFloatFirstValue((float) statistics[0].getFirstValue(),
statistics[0].getStartTime());
+ updateFloatFirstValue(
+ ((Number) statistics[0].getFirstValue()).floatValue(),
statistics[0].getStartTime());
break;
case DOUBLE:
updateDoubleFirstValue(
- (double) statistics[0].getFirstValue(),
statistics[0].getStartTime());
+ ((Number) statistics[0].getFirstValue()).doubleValue(),
statistics[0].getStartTime());
break;
case TEXT:
case BLOB:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
index 096091ccdb2..184bb31b074 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
@@ -263,17 +263,17 @@ public class FirstByAccumulator implements
TableAccumulator {
switch (xDataType) {
case INT32:
case DATE:
- xResult.setInt((int) xStatistics.getFirstValue());
+ xResult.setInt(((Number)
xStatistics.getFirstValue()).intValue());
break;
case INT64:
case TIMESTAMP:
- xResult.setLong((long) xStatistics.getFirstValue());
+ xResult.setLong(((Number)
xStatistics.getFirstValue()).longValue());
break;
case FLOAT:
- xResult.setFloat((float) statistics[0].getFirstValue());
+ xResult.setFloat(((Number)
statistics[0].getFirstValue()).floatValue());
break;
case DOUBLE:
- xResult.setDouble((double) statistics[0].getFirstValue());
+ xResult.setDouble(((Number)
statistics[0].getFirstValue()).doubleValue());
break;
case TEXT:
case BLOB:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
index f5c2addd3ca..4160eba8d1d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
@@ -226,19 +226,23 @@ public class LastAccumulator implements TableAccumulator {
switch (seriesDataType) {
case INT32:
case DATE:
- updateIntLastValue((int) statistics[0].getLastValue(),
statistics[0].getEndTime());
+ updateIntLastValue(
+ ((Number) statistics[0].getLastValue()).intValue(),
statistics[0].getEndTime());
break;
case INT64:
- updateLongLastValue((long) statistics[0].getLastValue(),
statistics[0].getEndTime());
+ updateLongLastValue(
+ ((Number) statistics[0].getLastValue()).longValue(),
statistics[0].getEndTime());
break;
case TIMESTAMP:
updateLongLastValue(statistics[0].getEndTime(),
statistics[0].getEndTime());
break;
case FLOAT:
- updateFloatLastValue((float) statistics[0].getLastValue(),
statistics[0].getEndTime());
+ updateFloatLastValue(
+ ((Number) statistics[0].getLastValue()).floatValue(),
statistics[0].getEndTime());
break;
case DOUBLE:
- updateDoubleLastValue((double) statistics[0].getLastValue(),
statistics[0].getEndTime());
+ updateDoubleLastValue(
+ ((Number) statistics[0].getLastValue()).doubleValue(),
statistics[0].getEndTime());
break;
case TEXT:
case BLOB:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
index 0db645d270b..10705984742 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
@@ -287,17 +287,17 @@ public class LastByAccumulator implements
TableAccumulator {
switch (xDataType) {
case INT32:
case DATE:
- xResult.setInt((int) xStatistics.getLastValue());
+ xResult.setInt(((Number) xStatistics.getLastValue()).intValue());
break;
case INT64:
case TIMESTAMP:
- xResult.setLong((long) xStatistics.getLastValue());
+ xResult.setLong(((Number)
xStatistics.getLastValue()).longValue());
break;
case FLOAT:
- xResult.setFloat((float) statistics[0].getLastValue());
+ xResult.setFloat(((Number)
statistics[0].getLastValue()).floatValue());
break;
case DOUBLE:
- xResult.setDouble((double) statistics[0].getLastValue());
+ xResult.setDouble(((Number)
statistics[0].getLastValue()).doubleValue());
break;
case TEXT:
case BLOB:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
index 1d07fab3809..9853650610f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
@@ -206,19 +206,19 @@ public class MaxAccumulator implements TableAccumulator {
switch (seriesDataType) {
case INT32:
case DATE:
- updateIntMaxValue((int) statistics[0].getMaxValue());
+ updateIntMaxValue(((Number) statistics[0].getMaxValue()).intValue());
break;
case INT64:
- updateLongMaxValue((long) statistics[0].getMaxValue());
+ updateLongMaxValue(((Number) statistics[0].getMaxValue()).longValue());
break;
case TIMESTAMP:
updateLongMaxValue(statistics[0].getEndTime());
break;
case FLOAT:
- updateFloatMaxValue((float) statistics[0].getMaxValue());
+ updateFloatMaxValue(((Number)
statistics[0].getMaxValue()).floatValue());
break;
case DOUBLE:
- updateDoubleMaxValue((double) statistics[0].getMaxValue());
+ updateDoubleMaxValue(((Number)
statistics[0].getMaxValue()).doubleValue());
break;
case TEXT:
case BLOB:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
index 7f86d73f783..d73d3001c19 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
@@ -206,19 +206,19 @@ public class MinAccumulator implements TableAccumulator {
switch (seriesDataType) {
case INT32:
case DATE:
- updateIntMinValue((int) statistics[0].getMinValue());
+ updateIntMinValue(((Number) statistics[0].getMinValue()).intValue());
break;
case INT64:
- updateLongMinValue((long) statistics[0].getMinValue());
+ updateLongMinValue(((Number) statistics[0].getMinValue()).longValue());
break;
case TIMESTAMP:
updateLongMinValue(statistics[0].getStartTime());
break;
case FLOAT:
- updateFloatMinValue((float) statistics[0].getMinValue());
+ updateFloatMinValue(((Number)
statistics[0].getMinValue()).floatValue());
break;
case DOUBLE:
- updateDoubleMinValue((double) statistics[0].getMinValue());
+ updateDoubleMinValue(((Number)
statistics[0].getMinValue()).doubleValue());
break;
case TEXT:
case BLOB:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
index 473cd7366c3..37bcc7c6a5d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
@@ -28,11 +28,14 @@ import org.apache.tsfile.read.common.BatchData;
import org.apache.tsfile.read.common.BatchDataFactory;
import org.apache.tsfile.read.common.block.TsBlock;
import org.apache.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.tsfile.read.common.block.column.TimeColumn;
import org.apache.tsfile.read.filter.basic.Filter;
import org.apache.tsfile.read.filter.factory.FilterFactory;
import org.apache.tsfile.read.reader.IPageReader;
import org.apache.tsfile.read.reader.series.PaginationController;
import org.apache.tsfile.utils.TsPrimitiveType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.Serializable;
@@ -96,10 +99,24 @@ public class MemAlignedPageReader implements IPageReader {
// build value column
buildValueColumns(satisfyInfo, readEndIndex);
-
+ StringBuilder tsBlockBuilder = new StringBuilder();
+ for (Column column : tsBlock.getAllColumns()) {
+ tsBlockBuilder.append("[");
+ for (int i = 0; i < column.getPositionCount(); i++) {
+ if (column instanceof TimeColumn) {
+ tsBlockBuilder.append(column.getLong(i)).append(",");
+ } else {
+ tsBlockBuilder.append(column.getTsPrimitiveType(i)).append(",");
+ }
+ }
+ tsBlockBuilder.append("] ");
+ }
+ LOGGER.warn("[memAlignedPageReader] TsBlock:{}", tsBlockBuilder);
return builder.build();
}
+ private static final Logger LOGGER =
LoggerFactory.getLogger(MemAlignedPageReader.class);
+
private boolean[] buildSatisfyInfoArray() {
if (recordFilter == null || recordFilter.allSatisfy(this)) {
boolean[] satisfyInfo = new boolean[tsBlock.getPositionCount()];
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
index e94a75f55a7..3ab77538b1f 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
@@ -82,7 +82,7 @@ public class MemAlignedChunkLoaderTest {
Mockito.when(statistics6.hasNullValue(2)).thenReturn(true);
Statistics timeStatistics = Mockito.mock(Statistics.class);
- Mockito.when(timeStatistics.getCount()).thenReturn(2L);
+ Mockito.when(timeStatistics.getCount()).thenReturn(2);
Mockito.when(chunkMetadata1.getStatistics()).thenReturn(timeStatistics);
Mockito.when(chunkMetadata1.getTimeStatistics()).thenReturn(timeStatistics);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
index a9bdc453d7a..af91f1ddebc 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
@@ -67,7 +67,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getChunkMetaData()).thenReturn(chunkMetadata1);
Mockito.when(chunk.getPointReader()).thenReturn(null);
Statistics statistics = Mockito.mock(Statistics.class);
- Mockito.when(statistics.getCount()).thenReturn(2L);
+ Mockito.when(statistics.getCount()).thenReturn(2);
Mockito.when(chunkMetadata1.getStatistics()).thenReturn(statistics);
Mockito.when(chunkMetadata1.getDataType()).thenReturn(TSDataType.BOOLEAN);
@@ -135,7 +135,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getChunkMetaData()).thenReturn(chunkMetadata1);
Mockito.when(chunk.getPointReader()).thenReturn(null);
Statistics statistics = Mockito.mock(Statistics.class);
- Mockito.when(statistics.getCount()).thenReturn(2L);
+ Mockito.when(statistics.getCount()).thenReturn(2);
Mockito.when(chunkMetadata1.getStatistics()).thenReturn(statistics);
Mockito.when(chunkMetadata1.getDataType()).thenReturn(TSDataType.INT32);
@@ -203,7 +203,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getChunkMetaData()).thenReturn(chunkMetadata1);
Mockito.when(chunk.getPointReader()).thenReturn(null);
Statistics statistics = Mockito.mock(Statistics.class);
- Mockito.when(statistics.getCount()).thenReturn(2L);
+ Mockito.when(statistics.getCount()).thenReturn(2);
Mockito.when(chunkMetadata1.getStatistics()).thenReturn(statistics);
Mockito.when(chunkMetadata1.getDataType()).thenReturn(TSDataType.INT64);
@@ -271,7 +271,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getChunkMetaData()).thenReturn(chunkMetadata1);
Mockito.when(chunk.getPointReader()).thenReturn(null);
Statistics statistics = Mockito.mock(Statistics.class);
- Mockito.when(statistics.getCount()).thenReturn(2L);
+ Mockito.when(statistics.getCount()).thenReturn(2);
Mockito.when(chunkMetadata1.getStatistics()).thenReturn(statistics);
Mockito.when(chunkMetadata1.getDataType()).thenReturn(TSDataType.FLOAT);
@@ -339,7 +339,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getChunkMetaData()).thenReturn(chunkMetadata1);
Mockito.when(chunk.getPointReader()).thenReturn(null);
Statistics statistics = Mockito.mock(Statistics.class);
- Mockito.when(statistics.getCount()).thenReturn(2L);
+ Mockito.when(statistics.getCount()).thenReturn(2);
Mockito.when(chunkMetadata1.getStatistics()).thenReturn(statistics);
Mockito.when(chunkMetadata1.getDataType()).thenReturn(TSDataType.DOUBLE);
@@ -407,7 +407,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getChunkMetaData()).thenReturn(chunkMetadata1);
Mockito.when(chunk.getPointReader()).thenReturn(null);
Statistics statistics = Mockito.mock(Statistics.class);
- Mockito.when(statistics.getCount()).thenReturn(2L);
+ Mockito.when(statistics.getCount()).thenReturn(2);
Mockito.when(chunkMetadata1.getStatistics()).thenReturn(statistics);
Mockito.when(chunkMetadata1.getDataType()).thenReturn(TSDataType.TEXT);
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/MetadataUtils.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/MetadataUtils.java
new file mode 100644
index 00000000000..17a1d3feebe
--- /dev/null
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/MetadataUtils.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.commons.utils;
+
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.file.metadata.statistics.Statistics;
+
+public class MetadataUtils {
+
+ private MetadataUtils() {
+ // util class
+ }
+
+ public static boolean canAlter(TSDataType from, TSDataType to) {
+ return Statistics.canMerge(from, to);
+ }
+}