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

jackietien pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit e40a36f16eb79a9201efc5d635a27a80ae6e77c4
Merge: 862e7366e5c cb1bca615d9
Author: JackieTien97 <[email protected]>
AuthorDate: Tue May 28 16:02:40 2024 +0800

    resolve conflicts

 .github/workflows/client-go.yml                    |  56 --
 .github/workflows/client-python.yml                |  58 --
 .../{client-cpp.yml => multi-language-client.yml}  |  92 ++-
 .mvn/wrapper/maven-wrapper.properties              |   4 +-
 README.md                                          |   2 +
 README_ZH.md                                       |   2 +
 .../main/java/org/apache/iotdb/JDBCExample.java    |  25 +-
 .../org/apache/iotdb/DataMigrationExample.java     |   7 +
 .../apache/iotdb/SubscriptionSessionExample.java   | 188 +++--
 .../iotdb/it/env/cluster/ClusterConstant.java      |   1 +
 .../iotdb/it/env/cluster/env/AbstractEnv.java      |  15 +-
 .../iotdb/itbase/runtime/RequestDelegate.java      |  26 +-
 .../org/apache/iotdb/db/it/IoTDBNestedQueryIT.java |  40 +-
 .../org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java |  64 ++
 .../it/IoTDBSyntaxConventionStringLiteralIT.java   |   4 +-
 .../db/it/aggregation/IoTDBAggregationIT.java      | 387 +++++++--
 .../aggregation/IoTDBAggregationSmallDataIT.java   |   4 +-
 .../iotdb/db/it/aggregation/IoTDBVarianceIT.java   |  74 +-
 .../maxby/IoTDBMaxByAlignedSeriesIT.java           |  28 +-
 .../db/it/aggregation/maxby/IoTDBMaxByIT.java      |  62 +-
 .../minby/IoTDBMinByAlignedSeriesIT.java           |  16 +-
 .../db/it/aggregation/minby/IoTDBMinByIT.java      |  50 +-
 .../scalar/IoTDBReplaceFunctionIT.java             |  47 +-
 .../scalar/IoTDBSubStringFunctionIT.java           |  67 +-
 .../iotdb/db/it/query/IoTDBCaseWhenThenIT.java     |   2 +-
 .../query/IoTDBQueryWithComplexValueFilterIT.java  | 235 +++++-
 .../db/it/schema/IoTDBAutoCreateSchemaIT.java      |  57 ++
 .../db/it/udf/IoTDBUDTFBuiltinFunctionIT.java      | 226 +++++-
 .../iotdb/session/it/IoTDBSessionSimpleIT.java     |   2 +-
 .../org/apache/iotdb/session/it/SessionIT.java     | 223 ++++++
 .../it/IoTDBSubscriptionITConstant.java            |  19 +-
 .../it/dual/AbstractSubscriptionDualIT.java        |   3 +
 .../it/dual/IoTDBSubscriptionConsumerGroupIT.java  | 327 +++++++-
 .../it/dual/IoTDBSubscriptionTopicIT.java          | 228 ++++--
 .../it/local/IoTDBSubscriptionBasicIT.java         | 227 ++++--
 .../it/local/IoTDBSubscriptionRestartIT.java       | 103 ++-
 .../java/org/apache/iotdb/udf/api/type/Type.java   |  19 +-
 .../java/org/apache/iotdb/cli/AbstractCli.java     |   3 +-
 .../java/org/apache/iotdb/tool/ExportData.java     |   3 +-
 .../java/org/apache/iotdb/tool/ExportTsFile.java   |  17 +-
 .../java/org/apache/iotdb/tool/ImportData.java     |  41 +-
 iotdb-client/client-py/requirements_dev.txt        |   1 -
 .../org/apache/iotdb/isession/SessionDataSet.java  |  27 +-
 .../iotdb/jdbc/AbstractIoTDBJDBCResultSet.java     |  13 +-
 .../iotdb/jdbc/GroupedLSBWatermarkEncoder.java     |   2 +
 .../org/apache/iotdb/jdbc/IoTDBConnection.java     |   2 +-
 .../apache/iotdb/jdbc/IoTDBDatabaseMetadata.java   |  84 +-
 .../org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java  |  35 +-
 .../iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java     |   7 +-
 .../java/org/apache/iotdb/jdbc/IoTDBStatement.java |  12 +-
 .../iotdb/jdbc/IoTDBDatabaseMetadataTest.java      |   2 +-
 .../org/apache/iotdb/jdbc/IoTDBStatementTest.java  |   2 +-
 iotdb-client/service-rpc/pom.xml                   |   4 +
 .../org/apache/iotdb/rpc/IoTDBJDBCDataSet.java     |  39 +-
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java |  26 +-
 .../rpc/subscription/config/ConsumerConfig.java    |  11 +-
 .../rpc/subscription/config/ConsumerConstant.java  |  22 +-
 .../iotdb/rpc/subscription/config/TopicConfig.java |  37 +-
 .../rpc/subscription/config/TopicConstant.java     |   5 +-
 ...n.java => SubscriptionConnectionException.java} |  21 +-
 .../exception/SubscriptionException.java           |   8 +-
 ... SubscriptionIncompatibleHandlerException.java} |  25 +-
 .../SubscriptionParameterNotValidException.java    |  13 +-
 ...a => SubscriptionRuntimeCriticalException.java} |  24 +-
 ...tion.java => SubscriptionRuntimeException.java} |  23 +-
 ...> SubscriptionRuntimeNonCriticalException.java} |  25 +-
 .../rpc/subscription/payload/EnrichedTablets.java  | 104 ---
 .../subscription/payload/poll/ErrorPayload.java    |  85 ++
 .../subscription/payload/poll/FileInitPayload.java |  75 ++
 .../payload/poll/FilePiecePayload.java             | 123 +++
 .../subscription/payload/poll/FileSealPayload.java |  85 ++
 .../subscription/payload/poll/PollFilePayload.java | 103 +++
 .../rpc/subscription/payload/poll/PollPayload.java |  79 ++
 .../payload/poll/SubscriptionCommitContext.java    | 152 ++++
 .../SubscriptionPollPayload.java}                  |  18 +-
 .../payload/poll/SubscriptionPollRequest.java      | 111 +++
 .../SubscriptionPollRequestType.java}              |  20 +-
 .../payload/poll/SubscriptionPollResponse.java     | 122 +++
 .../SubscriptionPollResponseType.java}             |  25 +-
 .../subscription/payload/poll/TabletsPayload.java  |  92 +++
 .../payload/request/PipeSubscribeCloseReq.java     |   6 +-
 .../payload/request/PipeSubscribeCommitReq.java    |  48 +-
 .../payload/request/PipeSubscribeHandshakeReq.java |  19 +-
 .../payload/request/PipeSubscribeHeartbeatReq.java |   7 +-
 .../payload/request/PipeSubscribePollReq.java      |  46 +-
 .../payload/request/PipeSubscribeRequestType.java  |   8 +-
 .../request/PipeSubscribeRequestVersion.java       |   2 +-
 .../payload/request/PipeSubscribeSubscribeReq.java |   9 +-
 .../request/PipeSubscribeUnsubscribeReq.java       |   8 +-
 .../payload/response/PipeSubscribeCloseResp.java   |   8 +-
 .../payload/response/PipeSubscribeCommitResp.java  |   9 +-
 .../response/PipeSubscribeHandshakeResp.java       |  27 +-
 .../response/PipeSubscribeHeartbeatResp.java       |   8 +-
 .../payload/response/PipeSubscribePollResp.java    |  88 +-
 .../response/PipeSubscribeResponseType.java        |   9 +-
 .../response/PipeSubscribeResponseVersion.java     |   2 +-
 .../response/PipeSubscribeSubscribeResp.java       |   8 +-
 .../response/PipeSubscribeUnsubscribeResp.java     |   8 +-
 .../java/org/apache/iotdb/session/Session.java     |   4 +
 .../apache/iotdb/session/SessionConnection.java    |  15 +-
 .../org/apache/iotdb/session/ThriftConnection.java |   5 +-
 .../session/subscription/AsyncCommitCallback.java  |   2 +-
 .../session/subscription/ConsumeListener.java      |   2 +
 .../subscription/ConsumerHeartbeatWorker.java      |  63 --
 .../subscription/PullConsumerAutoCommitWorker.java |  60 --
 .../session/subscription/SubscriptionConsumer.java | 884 ++++++++++++++-------
 .../subscription/SubscriptionEndpointsSyncer.java  | 132 ---
 .../session/subscription/SubscriptionMessage.java  |  85 --
 .../session/subscription/SubscriptionProvider.java | 295 ++++++-
 .../subscription/SubscriptionProviders.java        | 339 ++++++++
 .../subscription/SubscriptionPullConsumer.java     | 147 ++--
 .../subscription/SubscriptionPushConsumer.java     | 112 ++-
 .../session/subscription/SubscriptionSession.java  |  48 +-
 .../SubscriptionSessionConnection.java             |  73 +-
 .../payload/SubscriptionFileHandler.java           | 105 +++
 .../subscription/payload/SubscriptionMessage.java  | 106 +++
 .../SubscriptionMessageHandler.java}               |   9 +-
 .../payload/SubscriptionMessageType.java}          |  20 +-
 .../{ => payload}/SubscriptionSessionDataSet.java  |  33 +-
 .../SubscriptionSessionDataSetsHandler.java}       |  35 +-
 .../payload/SubscriptionTsFileHandler.java}        |  24 +-
 .../subscription/util/RandomStringGenerator.java}  |  22 +-
 .../subscription/util}/SubscriptionPollTimer.java  |   2 +-
 .../apache/iotdb/session/util/SessionUtils.java    |  29 +
 .../apache/iotdb/session/pool/SessionPoolTest.java |   6 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |   2 +
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4  |   6 +
 .../assembly/resources/sbin/remove-confignode.bat  |  12 +
 .../assembly/resources/sbin/remove-confignode.sh   |  11 +
 .../iotdb/confignode/manager/ClusterManager.java   |   2 +
 .../manager/consensus/ConsensusManager.java        |   1 +
 .../protocol/IoTDBConfigRegionAirGapConnector.java |  51 +-
 .../protocol/IoTDBConfigRegionConnector.java       |  52 +-
 .../apache/iotdb/consensus/iot/IoTConsensus.java   |  20 +-
 .../consensus/iot/IoTConsensusServerImpl.java      |  14 +-
 .../service/IoTConsensusRPCServiceProcessor.java   |   2 +-
 .../assembly/resources/sbin/remove-datanode.bat    |  12 +
 .../src/assembly/resources/sbin/remove-datanode.sh |  11 +
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |   8 +-
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  50 +-
 .../dataregion/DataRegionStateMachine.java         |  65 +-
 .../payload/evolvable/builder/PipeEventBatch.java  |  18 +
 .../builder/PipeTransferBatchReqBuilder.java       |   8 +-
 .../airgap/IoTDBDataNodeAirGapConnector.java       |  20 +-
 .../airgap/IoTDBDataRegionAirGapConnector.java     |  55 +-
 .../airgap/IoTDBSchemaRegionAirGapConnector.java   |  32 +-
 .../async/IoTDBDataRegionAsyncConnector.java       |  11 +-
 .../PipeTransferTabletBatchEventHandler.java       |  19 +-
 .../PipeTransferTabletInsertNodeEventHandler.java  |   8 +-
 .../PipeTransferTabletInsertionEventHandler.java   |   5 +
 .../PipeTransferTsFileInsertionEventHandler.java   |  35 +-
 .../thrift/sync/IoTDBDataNodeSyncConnector.java    |  17 +-
 .../thrift/sync/IoTDBDataRegionSyncConnector.java  | 136 ++--
 .../thrift/sync/IoTDBSchemaRegionConnector.java    |  36 +-
 .../tablet/PipeInsertNodeTabletInsertionEvent.java |  13 +
 .../event/realtime/PipeRealtimeEventFactory.java   |   1 +
 .../realtime/PipeRealtimeDataRegionExtractor.java  |  22 +
 .../visitor/PipeStatementExceptionVisitor.java     |  39 +-
 .../visitor/PipeStatementTSStatusVisitor.java      |  10 +
 .../db/pipe/resource/memory/PipeMemoryManager.java |   2 +-
 .../db/protocol/rest/utils/InsertRowDataUtils.java |   4 +
 .../v1/handler/StatementConstructionHandler.java   |   4 +
 .../v2/handler/StatementConstructionHandler.java   |   4 +
 .../protocol/thrift/impl/ClientRPCServiceImpl.java |  10 +-
 .../aggregation/FirstValueAccumulator.java         |  24 +
 .../aggregation/LastValueAccumulator.java          |  24 +
 .../execution/aggregation/MaxByAccumulator.java    |   6 +
 .../aggregation/MaxMinByBaseAccumulator.java       |  65 +-
 .../execution/aggregation/MaxValueAccumulator.java |  50 ++
 .../execution/aggregation/MinByAccumulator.java    |   6 +
 .../execution/aggregation/MinValueAccumulator.java |  50 ++
 .../execution/load/LoadTsFileRateLimiter.java      |  32 +-
 .../queryengine/execution/memory/MemoryPool.java   |   6 +-
 .../execution/operator/AggregationUtil.java        |   4 +
 .../operator/process/TransformOperator.java        |   4 +
 .../AbstractSeriesAggregationScanOperator.java     |  13 +-
 .../AlignedSeriesAggregationScanOperator.java      |  12 +-
 .../source/SeriesAggregationScanOperator.java      |  12 +-
 .../execution/operator/source/SeriesScanUtil.java  |   4 +
 .../plan/analyze/ExpressionTypeAnalyzer.java       |  31 +-
 .../queryengine/plan/analyze/PredicateUtils.java   |   6 +-
 .../plan/analyze/schema/SchemaValidator.java       |   2 +-
 .../config/executor/ClusterConfigTaskExecutor.java |  10 +-
 .../builtin/helper/ReplaceFunctionHelper.java      |   4 +-
 .../builtin/helper/SubStringFunctionHelper.java    |   4 +-
 .../predicate/ConvertPredicateToFilterVisitor.java |  20 +-
 .../plan/optimization/AggregationPushDown.java     |   2 +-
 .../db/queryengine/plan/parser/ASTVisitor.java     |  49 +-
 .../plan/parser/StatementGenerator.java            |   6 +-
 .../plan/planner/OperatorTreeGenerator.java        |  48 +-
 .../queryengine/plan/planner/TreeModelPlanner.java |  11 +-
 .../planner/plan/node/write/InsertRowNode.java     |  28 +
 .../planner/plan/node/write/InsertTabletNode.java  |  27 +
 .../plan/statement/crud/InsertBaseStatement.java   |   3 +-
 .../crud/InsertMultiTabletsStatement.java          |   3 +-
 .../plan/statement/crud/InsertRowStatement.java    |  14 +-
 .../crud/InsertRowsOfOneDeviceStatement.java       |   5 +-
 .../plan/statement/crud/InsertRowsStatement.java   |   5 +-
 .../plan/statement/literal/BinaryLiteral.java      |  93 +++
 .../plan/statement/literal/Literal.java            |   5 +-
 .../multi/MappableUDFQueryRowTransformer.java      |   4 +
 .../multi/UniversalUDFQueryTransformer.java        |   4 +
 .../dag/transformer/unary/InTransformer.java       |   6 +
 .../transformation/dag/util/LayerCacheUtils.java   |   4 +
 .../row/SerializableRowRecordList.java             |   4 +
 .../datastructure/tv/SerializableTVList.java       |   8 +
 .../db/service/metrics/DataNodeMetricsHelper.java  |   4 +
 .../readchunk/SingleSeriesCompactionExecutor.java  |   4 +
 .../utils/writer/AbstractCompactionWriter.java     |   4 +
 .../impl/RewriteCrossSpaceCompactionSelector.java  |   5 +-
 .../impl/SizeTieredCompactionSelector.java         |   5 +-
 .../memtable/AlignedReadOnlyMemChunk.java          |   4 +
 .../memtable/AlignedWritableMemChunk.java          |   6 +-
 .../dataregion/memtable/ReadOnlyMemChunk.java      |   4 +
 .../dataregion/memtable/TsFileProcessor.java       |  18 +-
 .../dataregion/memtable/WritableMemChunk.java      |  16 +-
 .../read/reader/chunk/MemPageReader.java           |   4 +
 .../rescon/memory/PrimitiveArrayManager.java       |  27 +-
 .../agent/SubscriptionBrokerAgent.java             |  94 ++-
 .../agent/SubscriptionConsumerAgent.java           |   7 +-
 .../subscription/agent/SubscriptionTopicAgent.java |  20 +-
 .../broker/EnrichedTabletsBinaryCache.java         |  62 --
 .../db/subscription/broker/SubscriptionBroker.java | 101 ++-
 .../broker/SubscriptionPrefetchingQueue.java       | 269 ++-----
 .../SubscriptionPrefetchingTabletsQueue.java       | 244 ++++++
 .../broker/SubscriptionPrefetchingTsFileQueue.java | 377 +++++++++
 .../SubscriptionEvent.java}                        | 132 +--
 .../event/SubscriptionEventBinaryCache.java        | 140 ++++
 .../event/SubscriptionTsFileEvent.java             | 247 ++++++
 .../subscription/metric/SubscriptionMetrics.java   |  57 ++
 .../SubscriptionPrefetchingQueueMetrics.java       | 197 +++++
 .../receiver/SubscriptionReceiverV1.java           | 323 +++++---
 .../iotdb/db/tools/TsFileSplitByPartitionTool.java |   4 +
 .../org/apache/iotdb/db/tools/TsFileSplitTool.java |   4 +
 .../org/apache/iotdb/db/utils/CommonUtils.java     |  97 ++-
 .../org/apache/iotdb/db/utils/DateTimeUtils.java   |  53 +-
 .../iotdb/db/utils/EncodingInferenceUtils.java     |   4 +
 .../java/org/apache/iotdb/db/utils/MemUtils.java   |   4 +-
 .../apache/iotdb/db/utils/QueryDataSetUtils.java   |  12 +
 .../org/apache/iotdb/db/utils/SchemaUtils.java     |   4 +
 .../apache/iotdb/db/utils/TimeValuePairUtils.java  |  32 +-
 .../apache/iotdb/db/utils/TypeInferenceUtils.java  |  37 +-
 .../db/utils/datastructure/AlignedTVList.java      |  38 +-
 .../iotdb/db/utils/datastructure/TVList.java       |   8 +
 .../db/utils/windowing/window/WindowImpl.java      |   4 +
 .../dataregion/DataRegionStateMachineTest.java     |  46 +-
 .../org/apache/iotdb/db/qp/sql/ASTVisitorTest.java |  12 +-
 .../operator/AggregationOperatorTest.java          |   6 +-
 .../AlignedSeriesAggregationScanOperatorTest.java  |   3 +-
 .../operator/HorizontallyConcatOperatorTest.java   |   6 +-
 .../execution/operator/LastQueryOperatorTest.java  |  12 +-
 .../operator/LastQuerySortOperatorTest.java        |  12 +-
 .../execution/operator/OperatorMemoryTest.java     |   3 +-
 .../SeriesAggregationScanOperatorTest.java         |   3 +-
 .../SlidingWindowAggregationOperatorTest.java      |   3 +-
 .../operator/UpdateLastCacheOperatorTest.java      |   3 +-
 .../compaction/TestUtilsForAlignedSeries.java      |  12 +
 .../compaction/utils/TsFileGeneratorUtils.java     |   8 +
 .../org/apache/iotdb/db/utils/BlobParserTest.java  |  60 ++
 .../iotdb/db/utils/TypeInferenceUtilsTest.java     |   2 +-
 .../datastructure/PrimitiveArrayManagerTest.java   |   4 +
 .../resources/conf/iotdb-common.properties         |  10 +
 .../async/AsyncPipeDataTransferServiceClient.java  |   4 +
 .../apache/iotdb/commons/conf/CommonConfig.java    |  55 +-
 .../iotdb/commons/conf/CommonDescriptor.java       |  28 +-
 .../iotdb/commons/pipe/config/PipeConfig.java      |  17 +
 .../config/constant/PipeConnectorConstant.java     |   4 +
 .../config/constant/PipeExtractorConstant.java     |   2 +
 .../pipe/connector/client/IoTDBSyncClient.java     |   7 +
 .../pipe/connector/limiter/GlobalRateLimiter.java} |  55 +-
 .../connector/limiter/PipeEndPointRateLimiter.java |  59 ++
 .../connector/protocol/IoTDBAirGapConnector.java   |  48 +-
 .../pipe/connector/protocol/IoTDBConnector.java    |  45 +-
 .../connector/protocol/IoTDBSslSyncConnector.java  |  24 +-
 .../iotdb/commons/pipe/event/EnrichedEvent.java    |   1 +
 .../iotdb/commons/service/metric/enums/Metric.java |   4 +
 .../subscription/config/SubscriptionConfig.java    |  18 +-
 .../commons/subscription/meta/topic/TopicMeta.java |  37 +-
 .../commons/udf/builtin/String/UDTFConcat.java     |   2 +-
 .../commons/udf/builtin/String/UDTFEndsWith.java   |   2 +-
 .../commons/udf/builtin/String/UDTFLower.java      |   2 +-
 .../commons/udf/builtin/String/UDTFStartsWith.java |   2 +-
 .../commons/udf/builtin/String/UDTFStrCompare.java |   4 +-
 .../commons/udf/builtin/String/UDTFStrLength.java  |   2 +-
 .../commons/udf/builtin/String/UDTFStrLocate.java  |   2 +-
 .../iotdb/commons/udf/builtin/String/UDTFTrim.java |   2 +-
 .../commons/udf/builtin/String/UDTFUpper.java      |   2 +-
 .../iotdb/commons/udf/builtin/UDTFBottomK.java     |   8 +-
 .../iotdb/commons/udf/builtin/UDTFConst.java       |  26 +
 .../iotdb/commons/udf/builtin/UDTFSelectK.java     |  27 +-
 .../apache/iotdb/commons/udf/builtin/UDTFTopK.java |   8 +-
 .../commons/udf/utils/UDFDataTypeTransformer.java  |  12 +
 .../org/apache/iotdb/commons/utils/BlobUtils.java  |  60 ++
 293 files changed, 9471 insertions(+), 3216 deletions(-)

diff --cc 
iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java
index 20f5a17eaf7,88ecda05248..81642b3734c
--- 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java
+++ 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java
@@@ -31,9 -32,10 +32,10 @@@ import org.apache.tsfile.utils.DateUtil
  import org.apache.tsfile.utils.ReadWriteIOUtils;
  import org.apache.tsfile.write.UnSupportedDataTypeException;
  import org.apache.tsfile.write.record.Tablet;
 -import org.apache.tsfile.write.schema.MeasurementSchema;
 +import org.apache.tsfile.write.schema.IMeasurementSchema;
  
  import java.nio.ByteBuffer;
+ import java.time.LocalDate;
  import java.util.ArrayList;
  import java.util.List;
  
diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 5c9b26a5022,98c862f27b2..d057b07579a
--- 
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
@@@ -749,9 -709,12 +749,12 @@@ public class ClientRPCServiceImpl imple
                Collections.singletonList(aggregator),
                initTimeRangeIterator(groupByTimeParameter, true, true),
                groupByTimeParameter,
-               DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES);
+               DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
+               !TSDataType.BLOB.equals(dataType)
+                   || (!TAggregationType.LAST_VALUE.equals(aggregationType)
+                       && 
!TAggregationType.FIRST_VALUE.equals(aggregationType)));
      } else {
 -      path = new MeasurementPath(device, measurement, measurementSchema);
 +      path = new NonAlignedFullPath(Factory.DEFAULT_FACTORY.create(device), 
measurementSchema);
        operator =
            new SeriesAggregationScanOperator(
                planNodeId,
diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/PredicateUtils.java
index 58f9bd1f27d,4a8f8d07dc9..14dd65960f6
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/PredicateUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/PredicateUtils.java
@@@ -302,23 -290,9 +304,23 @@@ public class PredicateUtils 
      return predicate.accept(
          new ConvertPredicateToFilterVisitor(),
          new ConvertPredicateToFilterVisitor.Context(
-             allMeasurements, isBuildPlanUseTemplate, typeProvider));
+             allMeasurements, isBuildPlanUseTemplate, typeProvider, zoneId));
    }
  
 +  public static Filter convertPredicateToFilter(
 +      org.apache.iotdb.db.queryengine.plan.relational.sql.tree.Expression 
predicate,
 +      List<String> allMeasurements,
 +      Map<Symbol, ColumnSchema> schemaMap) {
 +    if (predicate == null) {
 +      return null;
 +    }
 +    return predicate.accept(
 +        new org.apache.iotdb.db.queryengine.plan.relational.analyzer.predicate
 +            .ConvertPredicateToFilterVisitor(),
 +        new org.apache.iotdb.db.queryengine.plan.relational.analyzer.predicate
 +            .ConvertPredicateToFilterVisitor.Context(allMeasurements, 
schemaMap));
 +  }
 +
    /**
     * Combine the given conjuncts into a single expression using "and".
     *
diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/predicate/ConvertPredicateToFilterVisitor.java
index 69afeaa7a71,688668e568a..9e011500f62
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/predicate/ConvertPredicateToFilterVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/predicate/ConvertPredicateToFilterVisitor.java
@@@ -400,8 -414,12 +414,12 @@@ public class ConvertPredicateToFilterVi
        if (isBuildPlanUseTemplate) {
          return schemaMap.get(path.getFullPath()).getType();
        } else {
 -        return typeProvider.getType(path.getFullPath());
 +        return typeProvider.getTreeModelType(path.getFullPath());
        }
      }
+ 
+     public ZoneId getZoneId() {
+       return zoneId;
+     }
    }
  }
diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
index 8bef13ca7d2,cc1da9b7ec4..da056f9ec36
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
@@@ -19,12 -19,10 +19,13 @@@
  
  package org.apache.iotdb.db.queryengine.plan.planner;
  
+ import org.apache.iotdb.common.rpc.thrift.TAggregationType;
  import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 +import org.apache.iotdb.commons.path.AlignedFullPath;
  import org.apache.iotdb.commons.path.AlignedPath;
 +import org.apache.iotdb.commons.path.IFullPath;
  import org.apache.iotdb.commons.path.MeasurementPath;
 +import org.apache.iotdb.commons.path.NonAlignedFullPath;
  import org.apache.iotdb.commons.path.PartialPath;
  import org.apache.iotdb.db.conf.IoTDBDescriptor;
  import org.apache.iotdb.db.exception.query.QueryProcessException;
@@@ -597,10 -600,10 +606,11 @@@ public class OperatorTreeGenerator exte
    @Override
    public Operator visitAlignedSeriesAggregationScan(
        AlignedSeriesAggregationScanNode node, LocalExecutionPlanContext 
context) {
 -    AlignedPath seriesPath = node.getAlignedPath();
 +    AlignedFullPath seriesPath =
 +        (AlignedFullPath) IFullPath.convertToIFullPath(node.getAlignedPath());
      boolean ascending = node.getScanOrder() == Ordering.ASC;
      List<Aggregator> aggregators = new ArrayList<>();
+     boolean canUseStatistics = true;
      for (AggregationDescriptor descriptor : 
node.getAggregationDescriptorList()) {
        checkArgument(
            descriptor.getInputExpressions().size() == 1,
@@@ -612,7 -615,11 +622,10 @@@
                  .getPath()
                  .getMeasurement();
          int seriesIndex = 
seriesPath.getMeasurementList().indexOf(inputSeries);
 -        TSDataType seriesDataType =
 -            
seriesPath.getMeasurementSchema().getSubMeasurementsTSDataTypeList().get(seriesIndex);
 +        TSDataType seriesDataType = 
seriesPath.getSchemaList().get(seriesIndex).getType();
+         if (!judgeCanUseStatistics(descriptor.getAggregationType(), 
seriesDataType)) {
+           canUseStatistics = false;
+         }
          aggregators.add(
              new Aggregator(
                  AccumulatorFactory.createAccumulator(
@@@ -2655,14 -2667,16 +2678,18 @@@
    }
  
    private AlignedSeriesAggregationScanOperator createLastQueryScanOperator(
 -      AlignedLastQueryScanNode node, AlignedPath unCachedPath, 
LocalExecutionPlanContext context) {
 +      AlignedLastQueryScanNode node,
 +      AlignedFullPath unCachedPath,
 +      LocalExecutionPlanContext context) {
      // last_time, last_value
      List<Aggregator> aggregators = new ArrayList<>();
+     boolean canUseStatistics = true;
      for (int i = 0; i < unCachedPath.getMeasurementList().size(); i++) {
-       aggregators.addAll(
-           
LastQueryUtil.createAggregators(unCachedPath.getSchemaList().get(i).getType(), 
i));
+       TSDataType dataType = unCachedPath.getSchemaList().get(i).getType();
+       aggregators.addAll(LastQueryUtil.createAggregators(dataType, i));
+       if (TSDataType.BLOB.equals(dataType)) {
+         canUseStatistics = false;
+       }
      }
      ITimeRangeIterator timeRangeIterator = initTimeRangeIterator(null, false, 
false);
      long maxReturnSize = 
calculateMaxAggregationResultSizeForLastQuery(aggregators);
diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
index 9b90ccf7e8c,04bbb4221e6..9b902d0cf44
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
@@@ -16,12 -16,12 +16,13 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
 +
  package org.apache.iotdb.db.utils;
  
- import org.apache.iotdb.commons.utils.TestOnly;
  import org.apache.iotdb.db.exception.query.QueryProcessException;
+ import org.apache.iotdb.db.exception.sql.SemanticException;
  import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
+ import org.apache.iotdb.db.queryengine.plan.statement.literal.BinaryLiteral;
  import org.apache.iotdb.db.utils.constant.SqlConstant;
  import org.apache.iotdb.service.rpc.thrift.TSAggregationQueryReq;
  import org.apache.iotdb.service.rpc.thrift.TSFastLastDataQueryForOneDeviceReq;

Reply via email to