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;
