This is an automated email from the ASF dual-hosted git repository.
lancelly pushed a change to branch support_uncorrelated_quantified_comparison
in repository https://gitbox.apache.org/repos/asf/iotdb.git
from 981fdb6a58a fix conflicts
add bdf36ba1907 Skip subquery plan if subqueryExpression List is empty for
efficiency (#14647)
add 2d436e06897 Optimized the error code when table/column does not exist
& Reduced some unnecessary IT execution
add 04df3e279a2 Fixed the un-renamed ID/MEASUREMENTs in some non-runnable
ITs
add 7f0ac972839 Pipe: Fix NPE caused by forced type conversion and fix
IoTDBipipeTypeConversionISessionIT of table model (#14667)
add a5e13fd8f7c Pipe: report linked tsfile size & Subscription: decrease
reference count for other enriched events & add logging to observe possible
stuck situations (#14668)
add c8d7c5dfea9 Reopen drop column and delete devices operations
add 937df761e31 IoTConsensusV2: Fix some consensus group missing due to
recover failed or blocked (#14613)
add 5bd1eadea76 Clone value array when insert non aligned tablet with null
(#14643)
add 01e1420fa0a Add Memory Threshold (#14597)
add 82c85483572 Ignore the DatabaseNotExistsException for
adjustMaxRegionGroupNum when querying dataRegionGroupCount (#14669)
add 3ac203c4e79 Pipe: Implement table meta/deletion sync & Fix the bug
that delete data node's pattern is not parsed / pipe transferred delete data
node's progressIndex is not binded & Implement mem control for schema snapshot
parser (#14156)
add b349f565fd8 Pipe/Load: Fixed the issue where the TsFileResource of the
PlainDeviceTimeIndex type was judged to be empty (triggered by IoTDB loading
TsFiles in v3 and the tsfiles are syned to other clusters) (#14692)
add 97a08c880fb Pipe Plugin: intro class annotations for pipe plugin &
tree/table model isolation for drop/show pipe plugin operations (#14673)
add f2e20b54408 Modify tablet usage & don't cache TableSchema map in
default option (#14635)
add f129298c9e8 Pipe: Fix PipeWriteBackSink using toTPipeTransferReq
causing NPE due to uninitialized buffer (#14672)
add 701a5156e7a Pipe: Optimize the process of collecting
PipeTsFileInsertionEvent in table model to reduce unnecessary parsing of TsFile
(#14697)
add b4edfdf1d68 IoTConsensusV2: Accelerate follower receive dispatch based
on TPCx case
add b51f63c7108 Load: Fix some issues during loading tsfiles of old
version (#14649)
add c65b8264156 Pipe: strict check for synonym pipe parameters to avoid
ambiguity (#14694)
add a11401b494f add repair data for table model (#14705)
add c3df7d54496 Renaming the IT Methods of the IoTDB REST Service Table
Model (#14681)
add 6cb9035e8f6 Pipe IT: Added flush for assertData on targetEnv to avoid
IoTV2 batch mode lead to large delay (#14707)
add 42878058f11 [RATISCONSENSUS] Bump ratis version to 3.1.3 (#14709)
add 6961e2154a7 Fix NPE when concurrent closing mod files (#14708)
add 8e7605f80db Fix cache invalidation failure and add retry (#14711)
add 44e9725ab94 Publish build scans to develocity.apache.org (#14701)
add c3baa7a4978 Subscription: fix `hasNext` method in tablet batch to
support multiple tsfile in the same batch (#14715)
add 6036cabd9dc Implemented access control for
pipe/subscription/table/database
add 3072ae5a668 Implement distinct in AggFunction
add 49a91ecd348 Add more user-friendly error messages for the last and
last_by aggregation
add 141b7ba634c Extend Region & Remove Region & Reconstruct Region (#14634)
add 231a4f3da68 merge master
No new revisions were added by this update.
Summary of changes:
.github/workflows/cluster-it-1c1d.yml | 2 +-
.github/workflows/cluster-it-1c1d1a.yml | 2 +-
.github/workflows/cluster-it-1c3d.yml | 2 +-
.github/workflows/compile-check.yml | 2 +-
.github/workflows/daily-it.yml | 2 +-
.github/workflows/daily-ut.yml | 2 +-
.github/workflows/dependency-check.yml | 2 +-
.github/workflows/pipe-it-2cluster.yml | 2 +-
.github/workflows/sonar-codecov.yml | 2 +-
.github/workflows/table-cluster-it-1c1d.yml | 2 +-
.github/workflows/table-cluster-it-1c3d.yml | 2 +-
.github/workflows/unit-test.yml | 2 +-
.github/workflows/vulnerability-check.yml | 2 +-
.mvn/develocity.xml | 3 +-
.mvn/extensions.xml | 4 +-
.../java/org/apache/iotdb/CountPointProcessor.java | 2 +
.../iotdb/AlignedTimeseriesSessionExample.java | 67 +--
.../org/apache/iotdb/SessionConcurrentExample.java | 23 -
.../main/java/org/apache/iotdb/SessionExample.java | 107 +---
.../org/apache/iotdb/trigger/LoggerTrigger.java | 12 +-
.../iotdb/trigger/StatisticsUpdaterTrigger.java | 4 +-
.../java/org/apache/iotdb/it/env/EnvFactory.java | 5 +
.../iotdb/it/env/cluster/env/AbstractEnv.java | 9 +
.../iotdb/it/env/cluster/node/AINodeWrapper.java | 5 +
.../it/env/cluster/node/AbstractNodeWrapper.java | 12 +
.../it/env/cluster/node/ConfigNodeWrapper.java | 5 +
.../iotdb/it/env/cluster/node/DataNodeWrapper.java | 5 +
.../iotdb/it/env/remote/env/RemoteServerEnv.java | 5 +
.../org/apache/iotdb/it/utils/TsFileGenerator.java | 87 +--
.../iotdb/it/utils/TsFileTableGenerator.java | 78 +--
.../java/org/apache/iotdb/itbase/env/BaseEnv.java | 3 +
...ionMigrateDataNodeCrashITFrameworkForIoTV1.java | 2 +-
...ionMigrateDataNodeCrashITFrameworkForIoTV2.java | 2 +-
...oTDBRegionOperationReliabilityITFramework.java} | 174 +++---
.../IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java | 157 +++++
.../commit/IoTDBRegionReconstructForIoTV1IT.java | 141 +++++
.../IoTDBRegionMigrateNormalITForIoTV2Batch.java | 4 +-
.../IoTDBRegionMigrateOtherITForIoTV2Batch.java | 4 +-
.../IoTDBRegionMigrateNormalITForIoTV2Stream.java | 4 +-
.../IoTDBRegionMigrateOtherITForIoTV2Stream.java | 4 +-
.../IoTDBRegionMigrateDataNodeCrashForIoTV1IT.java | 4 +-
...TDBRegionMigrateDataNodeCrashForIoTV2Batch.java | 4 +-
...DBRegionMigrateDataNodeCrashForIoTV2Stream.java | 4 +-
.../IoTDBRegionMigrateClusterCrashIoTV1IT.java | 4 +-
.../IoTDBRegionMigrateConfigNodeCrashIoTV1IT.java | 4 +-
.../IoTDBRegionMigrateClusterCrashIoTV2Batch.java | 4 +-
...oTDBRegionMigrateConfigNodeCrashIoTV2Batch.java | 4 +-
.../IoTDBRegionMigrateClusterCrashIoTV2Stream.java | 4 +-
...TDBRegionMigrateConfigNodeCrashIoTV2Stream.java | 4 +-
.../IoTDBRemoveDataNodeITFramework.java | 22 +-
.../org/apache/iotdb/db/it/IoTDBLoadTsFileIT.java | 2 +-
.../iotdb/db/it/IoTDBLoadTsFileWithModIT.java | 172 ++++++
.../it/IoTDBSyntaxConventionStringLiteralIT.java | 3 +-
.../org/apache/iotdb/db/it/utils/TestUtils.java | 176 +++++-
.../pipe/it/autocreate/IoTDBPipeAutoDropIT.java | 10 +-
.../pipe/it/autocreate/IoTDBPipeIdempotentIT.java | 93 +++
.../pipe/it/autocreate/IoTDBPipeNullValueIT.java | 28 +-
.../pipe/it/manual/IoTDBPipeReqAutoSliceIT.java | 8 +-
.../pipe/it/manual/IoTDBPipeTableManualIT.java | 293 ++++++++++
.../manual/IoTDBPipeTypeConversionISessionIT.java | 10 +-
.../pipe/it/tablemodel/IoTDBPipeAutoDropIT.java | 10 +-
.../pipe/it/tablemodel/IoTDBPipeDataSinkIT.java | 41 +-
.../pipe/it/tablemodel/IoTDBPipeProtocolIT.java | 1 -
.../pipe/it/tablemodel/IoTDBPipeSyntaxIT.java | 2 +-
.../IoTDBPipeTypeConversionISessionIT.java | 97 +++-
.../iotdb/pipe/it/tablemodel/TableModelUtils.java | 38 +-
.../relational/it/db/it/IoTDBDeletionTableIT.java | 2 +-
.../relational/it/db/it/IoTDBInsertTableIT.java | 2 +-
.../udf/IoTDBUserDefinedAggregateFunctionIT.java | 53 +-
.../IoTDBAlignByDeviceWithTemplateTableIT.java | 4 +-
.../scalar/IoTDBFormatFunctionTableIT.java | 21 +-
...oTDBNoSelectExpressionAfterAnalyzedTableIT.java | 6 +-
.../query/old/query/IoTDBNullValueFillTableIT.java | 327 -----------
.../it/query/old/query/IoTDBResultSetTableIT.java | 2 +-
.../query/old/query/IoTDBSelectSchemaTableIT.java | 22 +-
.../it/query/recent/IoTDBTableAggregationIT.java | 644 ++++++++++++++++++++-
.../it/rest/it/IoTDBRestServiceCaseWhenThenIT.java | 7 +-
.../it/rest/it/IoTDBRestServiceFlushQueryIT.java | 6 +-
.../relational/it/rest/it/IoTDBRestServiceIT.java | 3 +-
...IT.java => IoTDBRestServiceInsertValuesIT.java} | 20 +-
.../iotdb/relational/it/schema/IoTDBDeviceIT.java | 47 +-
.../iotdb/relational/it/schema/IoTDBTableIT.java | 122 ++--
.../it/session/IoTDBSessionRelationalIT.java | 29 +-
.../iotdb/session/it/IoTDBSessionComplexIT.java | 8 +-
.../iotdb/session/it/IoTDBSessionSimpleIT.java | 78 ++-
.../session/it/IoTDBSessionSyntaxConventionIT.java | 18 +-
.../org/apache/iotdb/session/it/SessionIT.java | 32 +-
.../it/local/IoTDBSubscriptionDataTypeIT.java | 8 +-
.../java/org/apache/iotdb/util/MagicUtils.java | 61 ++
.../java/org/apache/iotdb/pipe/api/PipePlugin.java | 37 ++
.../iotdb/pipe/api/annotation/TableModel.java | 23 +-
.../iotdb/pipe/api/annotation/TreeModel.java | 23 +-
.../parameter/PipeParameterValidator.java | 42 +-
.../org/apache/iotdb/tool/tsfile/ExportTsFile.java | 3 -
.../java/org/apache/iotdb/rpc/TSStatusCode.java | 3 +
.../java/org/apache/iotdb/session/Session.java | 27 +-
.../payload/SubscriptionSessionDataSet.java | 12 +-
.../apache/iotdb/session/util/SessionUtils.java | 25 +-
.../java/org/apache/iotdb/session/TabletTest.java | 28 +-
.../iotdb/session/util/SessionUtilsTest.java | 16 +-
.../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 16 +-
.../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 | 8 +
.../consensus/request/ConfigPhysicalPlan.java | 10 +-
.../consensus/request/ConfigPhysicalPlanType.java | 2 +
.../request/ConfigPhysicalPlanVisitor.java | 110 +++-
.../write/pipe/payload/PipeCreateTablePlan.java} | 18 +-
.../pipe/payload/PipeDeactivateTemplatePlan.java | 22 +-
.../write/pipe/payload/PipeDeleteDevicesPlan.java | 130 +++++
.../request/write/table/PreCreateTablePlan.java | 11 +-
.../response/pipe/plugin/PipePluginTableResp.java | 27 +-
.../response/pipe/task/PipeTableResp.java | 2 +-
.../iotdb/confignode/manager/ClusterManager.java | 2 +-
.../iotdb/confignode/manager/ConfigManager.java | 38 +-
.../apache/iotdb/confignode/manager/IManager.java | 13 +
.../iotdb/confignode/manager/ProcedureManager.java | 491 ++++++++++++----
.../payload/PipeTransferConfigSnapshotSealReq.java | 32 +-
.../protocol/IoTDBConfigRegionAirGapConnector.java | 8 +
.../protocol/IoTDBConfigRegionConnector.java | 10 +-
.../coordinator/plugin/PipePluginCoordinator.java | 29 +
.../pipe/event/PipeConfigRegionSnapshotEvent.java | 3 +-
.../extractor/ConfigRegionListeningFilter.java | 89 +--
.../pipe/extractor/ConfigRegionListeningQueue.java | 23 +-
.../pipe/extractor/IoTDBConfigRegionExtractor.java | 74 ++-
...ConfigPhysicalPlanTablePatternParseVisitor.java | 135 +++++
...ConfigPhysicalPlanTreePatternParseVisitor.java} | 6 +-
.../receiver/protocol/IoTDBConfigNodeReceiver.java | 170 +++++-
.../PipeConfigPhysicalPlanTSStatusVisitor.java | 76 +++
.../manager/schema/ClusterSchemaManager.java | 126 ++--
.../persistence/executor/ConfigPlanExecutor.java | 1 +
.../confignode/persistence/pipe/PipeInfo.java | 2 +-
.../persistence/pipe/PipePluginInfo.java | 39 +-
.../confignode/persistence/pipe/PipeTaskInfo.java | 7 +-
.../schema/CNPhysicalPlanGenerator.java | 77 ++-
.../confignode/persistence/schema/ConfigMTree.java | 13 +-
.../schema/ConfignodeSnapshotParser.java | 30 +-
.../procedure/env/ConfigNodeProcedureEnv.java | 23 +-
.../procedure/env/RegionMaintainHandler.java | 13 +-
.../impl/pipe/task/CreatePipeProcedureV2.java | 42 +-
.../impl/region/AddRegionPeerProcedure.java | 84 +--
.../impl/region/ReconstructRegionProcedure.java | 209 +++++++
.../impl/region/RegionMigrateProcedure.java | 39 +-
.../impl/region/RegionOperationProcedure.java | 39 +-
.../impl/region/RemoveRegionPeerProcedure.java | 52 +-
.../impl/schema/DeleteDatabaseProcedure.java | 2 +-
.../impl/schema/DeleteTimeSeriesProcedure.java | 4 +-
.../table/AbstractAlterOrDropTableProcedure.java | 10 +-
.../impl/schema/table/AddTableColumnProcedure.java | 16 +-
.../impl/schema/table/CreateTableProcedure.java | 20 +-
.../impl/schema/table/DeleteDevicesProcedure.java | 43 +-
.../schema/table/DropTableColumnProcedure.java | 21 +-
.../impl/schema/table/DropTableProcedure.java | 24 +-
.../schema/table/RenameTableColumnProcedure.java | 18 +-
.../schema/table/SetTablePropertiesProcedure.java | 18 +-
.../impl/trigger/CreateTriggerProcedure.java | 9 +-
.../procedure/state/ReconstructRegionState.java | 10 +-
.../procedure/store/ProcedureFactory.java | 40 +-
.../confignode/procedure/store/ProcedureType.java | 12 +-
.../thrift/ConfigNodeRPCServiceProcessor.java | 24 +
.../request/ConfigPhysicalPlanSerDeTest.java | 40 ++
.../response/pipe/PipePluginTableRespTest.java | 4 +-
.../connector/PipeConfigNodeThriftRequestTest.java | 12 +-
...igPhysicalPlanTablePatternParseVisitorTest.java | 133 +++++
...igPhysicalPlanTreePatternParseVisitorTest.java} | 44 +-
.../pipe/annotation/PipePluginAnnotationTest.java} | 23 +-
.../pipe/receiver/PipeEnrichedProcedureTest.java | 194 +++++++
.../schema/table/AddTableColumnProcedureTest.java | 8 +-
.../schema/table/CreateTableProcedureTest.java | 5 +-
.../schema/table/DeleteDevicesProcedureTest.java | 5 +-
.../schema/table/DropTableColumnProcedureTest.java | 4 +-
.../impl/schema/table/DropTableProcedureTest.java | 4 +-
.../table/RenameTableColumnProcedureTest.java | 4 +-
.../table/SetTablePropertiesProcedureTest.java | 6 +-
.../apache/iotdb/consensus/pipe/PipeConsensus.java | 57 +-
.../apache/iotdb/consensus/ratis/RatisClient.java | 6 +-
.../apache/iotdb/consensus/ratis/utils/Utils.java | 1 +
.../dataregion/DataExecutionVisitor.java | 9 +-
.../schemaregion/SchemaRegionStateMachine.java | 15 +-
.../pipe/agent/plugin/PipeDataNodePluginAgent.java | 20 +-
.../dataregion/PipeDataRegionPluginAgent.java | 49 ++
.../agent/task/connection/PipeEventCollector.java | 35 +-
.../PipeTransferDataNodeHandshakeV1Req.java | 10 +-
.../evolvable/request/PipeTransferPlanNodeReq.java | 18 +-
.../request/PipeTransferSchemaSnapshotSealReq.java | 94 ++-
.../request/PipeTransferTabletInsertNodeReqV2.java | 2 +-
.../request/PipeTransferTsFileSealWithModReq.java | 42 +-
.../airgap/IoTDBDataNodeAirGapConnector.java | 4 +
.../airgap/IoTDBDataRegionAirGapConnector.java | 4 +
.../airgap/IoTDBSchemaRegionAirGapConnector.java | 19 +-
.../protocol/legacy/IoTDBLegacyPipeConnector.java | 2 +
.../connector/protocol/opcua/OpcUaConnector.java | 4 +
.../connector/protocol/opcua/OpcUaNameSpace.java | 36 +-
.../pipeconsensus/PipeConsensusAsyncConnector.java | 4 +
.../pipeconsensus/PipeConsensusSyncConnector.java | 4 +
.../async/IoTDBDataRegionAsyncConnector.java | 4 +
.../thrift/sync/IoTDBDataNodeSyncConnector.java | 4 +
.../thrift/sync/IoTDBDataRegionSyncConnector.java | 4 +
.../thrift/sync/IoTDBSchemaRegionConnector.java | 26 +-
.../protocol/websocket/WebSocketConnector.java | 2 +
.../protocol/writeback/WriteBackConnector.java | 197 ++++++-
.../util/builder/PipeTableModeTsFileBuilder.java | 6 +-
.../util/builder/PipeTreeModelTsFileBuilder.java | 4 +-
.../sorter/PipeTableModelTabletEventSorter.java | 54 +-
.../sorter/PipeTreeModelTabletEventSorter.java | 24 +-
.../pipe/consensus/deletion/DeletionResource.java | 2 +-
.../db/pipe/event/common/PipeInsertionEvent.java | 5 +-
.../common/deletion/PipeDeleteDataNodeEvent.java | 24 +-
.../db/pipe/event/common/row/PipeRowCollector.java | 2 +-
.../schema/PipeSchemaRegionSnapshotEvent.java | 75 ++-
.../schema/PipeSchemaSerializableEventType.java | 15 +-
.../common/tablet/PipeRawTabletInsertionEvent.java | 2 +-
.../tablet/parser/TabletInsertionEventParser.java | 8 +-
.../TabletInsertionEventTreePatternParser.java | 13 +-
.../scan/TsFileInsertionEventScanParser.java | 42 +-
.../table/TsFileInsertionEventTableParser.java | 2 +-
.../dataregion/DataRegionListeningFilter.java | 21 +-
.../dataregion/IoTDBDataRegionExtractor.java | 136 +++--
...oricalDataRegionTsFileAndDeletionExtractor.java | 4 +-
.../listener/PipeInsertionDataNodeListener.java | 27 +-
.../schemaregion/IoTDBSchemaRegionExtractor.java | 28 +-
.../PipePlanTablePatternParseVisitor.java | 77 +++
...r.java => PipePlanTreePatternParseVisitor.java} | 7 +-
.../schemaregion/SchemaRegionListeningFilter.java | 87 +--
.../schemaregion/SchemaRegionListeningQueue.java | 8 +-
.../pipe/metric/PipeDataNodeReceiverMetrics.java | 48 +-
.../processor/aggregate/AggregateProcessor.java | 2 +
.../StandardStatisticsOperatorProcessor.java | 2 +
.../processor/TumblingWindowingProcessor.java | 2 +
.../changing/ChangingValueSamplingProcessor.java | 2 +
.../sdt/SwingingDoorTrendingSamplingProcessor.java | 2 +
.../tumbling/TumblingTimeSamplingProcessor.java | 2 +
.../pipeconsensus/PipeConsensusProcessor.java | 4 +
.../schemachange/RenameDatabaseProcessor.java | 2 +
.../twostage/plugin/TwoStageCountProcessor.java | 37 +-
.../pipeconsensus/PipeConsensusReceiver.java | 2 +
.../protocol/thrift/IoTDBDataNodeReceiver.java | 212 +++++--
.../statement/PipeConvertedInsertRowStatement.java | 30 +-
.../PipeConvertedInsertTabletStatement.java | 48 +-
.../visitor/PipePlanToStatementVisitor.java | 54 +-
.../PipeStatementTablePatternParseVisitor.java | 33 +-
...a => PipeStatementTreePatternParseVisitor.java} | 6 +-
...leStatementDataTypeConvertExecutionVisitor.java | 3 +-
...eeStatementDataTypeConvertExecutionVisitor.java | 3 +-
...r.java => PipeTreeStatementToBatchVisitor.java} | 2 +-
.../pipe/resource/memory/PipeMemoryWeightUtil.java | 21 +-
.../resource/tsfile/PipeTsFileResourceManager.java | 5 +-
.../iotdb/db/protocol/client/ConfigNodeClient.java | 29 +
.../impl/DataNodeInternalRPCServiceImpl.java | 2 +
.../execution/executor/RegionWriteExecutor.java | 55 +-
.../schema/source/TableDeviceQuerySource.java | 4 +-
.../relational/aggregation/AccumulatorFactory.java | 246 +++++++-
.../relational/aggregation/AggregationMask.java | 204 +++++++
.../relational/aggregation/AvgAccumulator.java | 122 ++--
.../relational/aggregation/CountAccumulator.java | 22 +-
.../relational/aggregation/CountIfAccumulator.java | 22 +-
.../relational/aggregation/ExtremeAccumulator.java | 94 ++-
.../relational/aggregation/FirstAccumulator.java | 158 +++--
.../relational/aggregation/FirstByAccumulator.java | 164 ++++--
.../aggregation/FirstByDescAccumulator.java | 132 ++++-
.../aggregation/FirstDescAccumulator.java | 126 +++-
.../relational/aggregation/LastAccumulator.java | 140 ++++-
.../relational/aggregation/LastByAccumulator.java | 146 ++++-
.../aggregation/LastByDescAccumulator.java | 150 ++++-
.../aggregation/LastDescAccumulator.java | 144 ++++-
...dAccumulator.java => MaskedRecordIterator.java} | 40 +-
.../relational/aggregation/MaxAccumulator.java | 140 ++++-
.../relational/aggregation/MinAccumulator.java | 140 ++++-
.../relational/aggregation/SumAccumulator.java | 114 +++-
.../relational/aggregation/TableAccumulator.java | 2 +-
.../relational/aggregation/TableAggregator.java | 5 +-
.../aggregation/TableMaxMinByBaseAccumulator.java | 146 +++--
.../aggregation/TableModeAccumulator.java | 192 ++++--
.../aggregation/TableVarianceAccumulator.java | 158 +++--
.../UserDefinedAggregateFunctionAccumulator.java | 8 +-
.../aggregation/grouped/GroupedAccumulator.java | 4 +-
.../aggregation/grouped/GroupedAggregator.java | 6 +-
.../aggregation/grouped/GroupedAvgAccumulator.java | 119 +++-
.../grouped/GroupedCountAccumulator.java | 22 +-
.../grouped/GroupedCountIfAccumulator.java | 22 +-
.../grouped/GroupedExtremeAccumulator.java | 95 ++-
.../grouped/GroupedFirstAccumulator.java | 153 ++++-
.../grouped/GroupedFirstByAccumulator.java | 191 ++++--
.../grouped/GroupedLastAccumulator.java | 133 ++++-
.../grouped/GroupedLastByAccumulator.java | 150 ++++-
.../aggregation/grouped/GroupedMaxAccumulator.java | 141 ++++-
.../grouped/GroupedMaxMinByBaseAccumulator.java | 147 ++++-
.../aggregation/grouped/GroupedMinAccumulator.java | 141 ++++-
.../grouped/GroupedModeAccumulator.java | 246 ++++++--
.../aggregation/grouped/GroupedSumAccumulator.java | 111 +++-
.../GroupedUserDefinedAggregateAccumulator.java | 14 +-
.../grouped/GroupedVarianceAccumulator.java | 159 +++--
.../aggregation/grouped/hash/GroupByHash.java | 2 +
.../aggregation/grouped/hash/MarkDistinctHash.java | 90 +++
.../iotdb/db/queryengine/plan/Coordinator.java | 4 +
.../db/queryengine/plan/analyze/AnalyzeUtils.java | 9 +-
.../queryengine/plan/analyze/AnalyzeVisitor.java | 4 +-
.../analyze/load/LoadTsFileTableSchemaCache.java | 3 +-
.../load/LoadTsFileToTableModelAnalyzer.java | 7 +-
.../load/LoadTsFileToTreeModelAnalyzer.java | 5 +-
.../analyze/load/LoadTsFileTreeSchemaCache.java | 3 +-
.../execution/config/TableConfigTaskVisitor.java | 141 ++++-
.../execution/config/TreeConfigTaskVisitor.java | 30 +-
.../config/executor/ClusterConfigTaskExecutor.java | 139 ++++-
.../config/executor/IConfigTaskExecutor.java | 19 +-
.../config/metadata/DropPipePluginTask.java | 13 +-
.../config/metadata/ShowPipePluginsTask.java | 20 +-
.../ExtendRegionTask.java} | 19 +-
.../metadata/{ => region}/MigrateRegionTask.java | 4 +-
.../ReconstructRegionTask.java} | 19 +-
.../RemoveRegionTask.java} | 19 +-
.../metadata/relational/ShowTablesDetailsTask.java | 47 +-
.../config/metadata/relational/ShowTablesTask.java | 35 +-
.../db/queryengine/plan/parser/ASTVisitor.java | 29 +-
.../plan/planner/LogicalPlanVisitor.java | 7 +-
.../plan/planner/TableOperatorGenerator.java | 11 +-
.../node/metadata/write/CreateTimeSeriesNode.java | 74 +--
.../plan/node/pipe/PipeEnrichedDeleteDataNode.java | 66 ++-
.../plan/node/pipe/PipeEnrichedInsertNode.java | 44 +-
.../plan/node/pipe/PipeEnrichedWritePlanNode.java | 23 +-
.../relational/analyzer/ExpressionAnalyzer.java | 6 +-
.../plan/relational/analyzer/Scope.java | 8 +-
.../relational/analyzer/StatementAnalyzer.java | 106 ++--
.../relational/metadata/TableMetadataImpl.java | 19 +-
.../metadata/fetcher/TableDeviceSchemaFetcher.java | 4 +-
.../fetcher/TableHeaderSchemaValidator.java | 3 +-
.../plan/relational/planner/RelationPlanner.java | 91 +--
.../plan/relational/planner/SubqueryPlanner.java | 51 +-
.../relational/planner/TableLogicalPlanner.java | 15 +-
.../distribute/TableDistributedPlanGenerator.java | 9 +
.../node/schema/CreateOrUpdateTableDeviceNode.java | 14 +-
.../PushAggregationIntoTableScan.java | 4 +
.../relational/sql/ast/AbstractTraverseDevice.java | 8 +
.../plan/relational/sql/ast/AstVisitor.java | 10 +-
.../relational/sql/ast/CreateOrUpdateDevice.java | 31 +-
.../plan/relational/sql/ast/CreatePipe.java | 4 +-
.../plan/relational/sql/ast/Delete.java | 28 +-
.../plan/relational/sql/ast/DeleteDevice.java | 2 -
.../plan/relational/sql/ast/DropColumn.java | 3 -
.../plan/relational/sql/ast/PipeEnriched.java | 8 +-
.../ast/{Statement.java => StartRepairData.java} | 12 +-
.../plan/relational/sql/ast/Statement.java | 4 +-
.../ast/{Statement.java => StopRepairData.java} | 12 +-
.../plan/relational/sql/ast/Update.java | 6 +-
.../plan/relational/sql/parser/AstBuilder.java | 26 +-
.../plan/statement/StatementVisitor.java | 18 +-
.../plan/statement/crud/InsertBaseStatement.java | 22 +-
.../plan/statement/crud/InsertRowStatement.java | 18 +-
.../metadata/pipe/DropPipePluginStatement.java | 17 +-
.../metadata/pipe/ShowPipePluginsStatement.java | 23 +-
.../ExtendRegionStatement.java} | 32 +-
.../{ => region}/MigrateRegionStatement.java | 2 +-
.../ReconstructRegionStatement.java} | 42 +-
.../RemoveRegionStatement.java} | 32 +-
.../plan/statement/pipe/PipeEnrichedStatement.java | 10 +-
.../attribute/DeviceAttributeStore.java | 10 +-
.../attribute/IDeviceAttributeStore.java | 6 +-
.../schemaregion/impl/SchemaRegionMemoryImpl.java | 136 ++---
.../schemaregion/mtree/impl/mem/MemMTreeStore.java | 52 +-
.../mtree/impl/mem/mnode/basic/BasicMNode.java | 22 +-
.../impl/mem/snapshot/MemMTreeSnapshotUtil.java | 37 +-
.../schemaengine/table/InformationSchemaUtils.java | 2 +-
.../db/service/metrics/DataNodeMetricsHelper.java | 4 +-
.../metrics/memory/ConsensusMemoryMetrics.java | 73 +++
.../metrics/memory/GlobalMemoryMetrics.java | 132 +++++
.../metrics/memory/QueryEngineMemoryMetrics.java | 179 ++++++
.../metrics/memory/SchemaEngineMemoryMetrics.java | 124 ++++
.../metrics/memory/StorageEngineMemoryMetrics.java | 210 +++++++
.../metrics/memory/StreamEngineMemoryMetrics.java | 73 +++
.../metrics/memory/ThresholdMemoryMetrics.java | 194 -------
.../db/storageengine/dataregion/DataRegion.java | 2 +
.../task/InsertionCrossSpaceCompactionTask.java | 3 -
.../utils/CompactionTableSchemaCollector.java | 2 +-
.../dataregion/memtable/TsFileProcessor.java | 4 +
.../dataregion/modification/ModificationFile.java | 89 ++-
.../modification/PartitionLevelModFileManager.java | 5 +-
.../dataregion/snapshot/SnapshotTaker.java | 2 +-
.../dataregion/tsfile/TsFileResource.java | 10 +-
.../tsfile/timeindex/ArrayDeviceTimeIndex.java | 20 +
.../db/storageengine/load/LoadTsFileManager.java | 2 +-
.../load/splitter/TsFileSplitter.java | 5 +-
.../broker/SubscriptionPrefetchingQueue.java | 2 +
.../db/subscription/event/SubscriptionEvent.java | 21 +-
.../batch/SubscriptionPipeTabletEventBatch.java | 24 +-
.../db/tools/schema/SRStatementGenerator.java | 203 +++++--
.../tools/schema/SchemaRegionSnapshotParser.java | 32 +-
.../iotdb/db/utils/datastructure/BinaryTVList.java | 6 +-
.../db/utils/datastructure/BooleanTVList.java | 6 +-
.../iotdb/db/utils/datastructure/DoubleTVList.java | 6 +-
.../iotdb/db/utils/datastructure/FloatTVList.java | 6 +-
.../iotdb/db/utils/datastructure/IntTVList.java | 6 +-
.../iotdb/db/utils/datastructure/LongTVList.java | 6 +-
.../connector/PipeDataNodeThriftRequestTest.java | 22 +-
.../PipeStatementTablePatternParseVisitorTest.java | 57 ++
... PipeStatementTreePatternParseVisitorTest.java} | 20 +-
.../pipe/connector/PipeTabletEventSorterTest.java | 61 +-
.../db/pipe/consensus/DeletionResourceTest.java | 39 +-
.../pipe/event/PipeTabletInsertionEventTest.java | 25 +-
.../PipePlanTablePatternParseVisitorTest.java | 129 +++++
...va => PipePlanTreePatternParseVisitorTest.java} | 32 +-
.../annotation/PipePluginAnnotationTest.java} | 23 +-
.../resource/PipeTsFileResourceManagerTest.java | 2 +-
.../plan/relational/analyzer/DistinctTest.java | 91 +++
.../planner/assertions/PlanMatchPattern.java | 6 +
.../storageengine/buffer/BloomFilterCacheTest.java | 5 +-
.../storageengine/dataregion/DataRegionTest.java | 24 +-
.../compaction/CompactionValidationTest.java | 7 +-
.../inner/InnerSpaceCompactionSelectorTest.java | 2 +-
.../TableModelFastCompactionPerformerTest.java | 13 +-
...TableModelReadChunkCompactionPerformerTest.java | 13 +-
...TableModelReadPointCompactionPerformerTest.java | 13 +-
.../modification/ModificationFileTest.java | 90 ++-
.../file/UnsealedTsFileRecoverPerformerTest.java | 4 +-
.../iotdb/db/tools/TsFileAndModSettleToolTest.java | 2 +-
.../iotdb/db/tools/TsFileSelfCheckToolTest.java | 6 +-
.../iotdb/db/tools/TsFileSketchToolTest.java | 10 +-
.../db/utils/SchemaRegionSnapshotParserTest.java | 200 +++++--
iotdb-core/node-commons/pom.xml | 4 +
.../exception}/table/ColumnNotExistsException.java | 2 +-
.../table/TableAlreadyExistsException.java | 2 +-
.../exception}/table/TableNotExistsException.java | 2 +-
.../commons/pipe/agent/plugin/PipePluginAgent.java | 17 +-
.../builtin/connector/PlaceholderConnector.java | 4 +
.../connector/donothing/DoNothingConnector.java | 4 +
.../iotdb/airgap/IoTDBAirGapConnector.java | 4 +
.../consensus/PipeConsensusAsyncConnector.java | 4 +
.../iotdb/thrift/IoTDBLegacyPipeConnector.java | 2 +
.../iotdb/thrift/IoTDBThriftAsyncConnector.java | 5 +
.../iotdb/thrift/IoTDBThriftConnector.java | 4 +
.../iotdb/thrift/IoTDBThriftSslConnector.java | 4 +
.../iotdb/thrift/IoTDBThriftSyncConnector.java | 5 +
.../builtin/connector/opcua/OpcUaConnector.java | 4 +
.../connector/websocket/WebSocketConnector.java | 2 +
.../connector/writeback/WriteBackConnector.java | 4 +
.../extractor/donothing/DoNothingExtractor.java | 4 +
.../builtin/extractor/iotdb/IoTDBExtractor.java | 4 +
.../processor/donothing/DoNothingProcessor.java | 4 +
.../throwing/ThrowingExceptionProcessor.java | 4 +
.../agent/plugin/meta/PipePluginMetaKeeper.java | 47 +-
.../commons/pipe/agent/task/PipeTaskAgent.java | 2 +-
.../commons/pipe/agent/task/meta/PipeMeta.java | 40 --
.../pipe/agent/task/meta/PipeMetaKeeper.java | 6 +-
.../pipe/agent/task/meta/PipeStaticMeta.java | 14 +
.../payload/thrift/request/PipeRequestType.java | 4 +-
.../thrift/request/PipeTransferFileSealReqV2.java | 13 +-
.../connector/protocol/IoTDBAirGapConnector.java | 4 +
.../pipe/connector/protocol/IoTDBConnector.java | 10 +
.../connector/protocol/IoTDBSslSyncConnector.java | 4 +
.../options/PipeInclusionOptions.java | 43 +-
.../pipe/datastructure/pattern/TablePattern.java | 36 +-
.../pipe/datastructure/pattern/TreePattern.java | 33 +-
.../{ => resource}/PersistentResource.java | 2 +-
.../commons/pipe/datastructure/result/Result.java} | 37 +-
.../pipe/datastructure/visibility/Visibility.java | 9 +-
.../visibility/VisibilityTestUtils.java | 135 +++++
.../datastructure/visibility/VisibilityUtils.java | 133 +++++
.../commons/pipe/extractor/IoTDBExtractor.java | 38 +-
.../extractor/IoTDBNonDataRegionExtractor.java | 24 +-
.../commons/pipe/receiver/IoTDBFileReceiver.java | 32 +-
.../apache/iotdb/commons/schema/node/IMNode.java | 18 +-
.../commons/schema/node/visitor/MNodeVisitor.java | 6 +-
.../iotdb/commons/service/metric/enums/Metric.java | 3 +-
.../iotdb/commons/udf/access/RecordIterator.java | 9 +-
.../annotation/PipePluginAnnotationTest.java} | 23 +-
.../db/relational/grammar/sql/RelationalSql.g4 | 11 +-
.../src/main/thrift/confignode.thrift | 31 +
pom.xml | 6 +-
465 files changed, 13805 insertions(+), 4746 deletions(-)
rename
integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/{IoTDBRegionMigrateReliabilityITFramework.java
=> IoTDBRegionOperationReliabilityITFramework.java} (82%)
create mode 100644
integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
create mode 100644
integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionReconstructForIoTV1IT.java
create mode 100644
integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBLoadTsFileWithModIT.java
create mode 100644
integration-test/src/test/java/org/apache/iotdb/pipe/it/manual/IoTDBPipeTableManualIT.java
delete mode 100644
integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/query/IoTDBNullValueFillTableIT.java
rename
integration-test/src/test/java/org/apache/iotdb/relational/it/rest/it/{IoTDBRestServiceInsertAlignedValuesIT.java
=> IoTDBRestServiceInsertValuesIT.java} (96%)
create mode 100644
integration-test/src/test/java/org/apache/iotdb/util/MagicUtils.java
copy
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/agent/plugin/builtin/connector/iotdb/airgap/IoTDBAirGapConnector.java
=>
iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/annotation/TableModel.java
(52%)
copy
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/agent/plugin/builtin/connector/iotdb/airgap/IoTDBAirGapConnector.java
=>
iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/annotation/TreeModel.java
(52%)
copy
iotdb-core/{datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
=>
confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeCreateTablePlan.java}
(58%)
create mode 100644
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/pipe/payload/PipeDeleteDevicesPlan.java
create mode 100644
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/extractor/PipeConfigPhysicalPlanTablePatternParseVisitor.java
rename
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/extractor/{PipeConfigPhysicalPlanPatternParseVisitor.java
=> PipeConfigPhysicalPlanTreePatternParseVisitor.java} (98%)
create mode 100644
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/ReconstructRegionProcedure.java
copy
integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/IoTDBRegionMigrateDataNodeCrashITFrameworkForIoTV1.java
=>
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/RegionOperationProcedure.java
(51%)
copy
iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/PipePlugin.java =>
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/state/ReconstructRegionState.java
(78%)
create mode 100644
iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/extractor/PipeConfigPhysicalPlanTablePatternParseVisitorTest.java
rename
iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/pipe/extractor/{PipeConfigPhysicalPlanPatternParseVisitorTest.java
=> PipeConfigPhysicalPlanTreePatternParseVisitorTest.java} (91%)
copy
iotdb-core/{datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
=>
confignode/src/test/java/org/apache/iotdb/confignode/pipe/annotation/PipePluginAnnotationTest.java}
(60%)
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/schemaregion/PipePlanTablePatternParseVisitor.java
rename
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/schemaregion/{PipePlanPatternParseVisitor.java
=> PipePlanTreePatternParseVisitor.java} (98%)
copy
integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/IoTDBRegionMigrateDataNodeCrashITFrameworkForIoTV1.java
=>
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTablePatternParseVisitor.java
(50%)
rename
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/{PipeStatementPatternParseVisitor.java
=> PipeStatementTreePatternParseVisitor.java} (97%)
rename
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/{PipeStatementToBatchVisitor.java
=> PipeTreeStatementToBatchVisitor.java} (98%)
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/AggregationMask.java
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/{grouped/GroupedAccumulator.java
=> MaskedRecordIterator.java} (55%)
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/grouped/hash/MarkDistinctHash.java
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/{MigrateRegionTask.java
=> region/ExtendRegionTask.java} (69%)
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/{
=> region}/MigrateRegionTask.java (94%)
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/{MigrateRegionTask.java
=> region/ReconstructRegionTask.java} (69%)
rename
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/{MigrateRegionTask.java
=> region/RemoveRegionTask.java} (69%)
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/{Statement.java
=> StartRepairData.java} (72%)
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/{Statement.java
=> StopRepairData.java} (72%)
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/{MigrateRegionStatement.java
=> region/ExtendRegionStatement.java} (68%)
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/{
=> region}/MigrateRegionStatement.java (96%)
copy
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/{MigrateRegionStatement.java
=> region/ReconstructRegionStatement.java} (62%)
rename
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/{MigrateRegionStatement.java
=> region/RemoveRegionStatement.java} (68%)
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/memory/ConsensusMemoryMetrics.java
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/memory/GlobalMemoryMetrics.java
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/memory/QueryEngineMemoryMetrics.java
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/memory/SchemaEngineMemoryMetrics.java
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/memory/StorageEngineMemoryMetrics.java
create mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/memory/StreamEngineMemoryMetrics.java
delete mode 100644
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/memory/ThresholdMemoryMetrics.java
create mode 100644
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/connector/PipeStatementTablePatternParseVisitorTest.java
rename
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/connector/{PipeStatementPatternParseVisitorTest.java
=> PipeStatementTreePatternParseVisitorTest.java} (94%)
create mode 100644
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/extractor/PipePlanTablePatternParseVisitorTest.java
rename
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/extractor/{PipePlanPatternParseVisitorTest.java
=> PipePlanTreePatternParseVisitorTest.java} (94%)
copy
iotdb-core/datanode/src/{main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
=>
test/java/org/apache/iotdb/db/pipe/plugin/annotation/PipePluginAnnotationTest.java}
(60%)
rename
iotdb-core/{datanode/src/main/java/org/apache/iotdb/db/exception/metadata =>
node-commons/src/main/java/org/apache/iotdb/commons/exception}/table/ColumnNotExistsException.java
(95%)
rename
iotdb-core/{datanode/src/main/java/org/apache/iotdb/db/exception/metadata =>
node-commons/src/main/java/org/apache/iotdb/commons/exception}/table/TableAlreadyExistsException.java
(95%)
rename
iotdb-core/{datanode/src/main/java/org/apache/iotdb/db/exception/metadata =>
node-commons/src/main/java/org/apache/iotdb/commons/exception}/table/TableNotExistsException.java
(95%)
rename
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/{
=> resource}/PersistentResource.java (95%)
copy
iotdb-core/{datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
=>
node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/result/Result.java}
(57%)
copy
iotdb-api/pipe-api/src/main/java/org/apache/iotdb/pipe/api/PipePlugin.java =>
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/visibility/Visibility.java
(85%)
create mode 100644
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/visibility/VisibilityTestUtils.java
create mode 100644
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/visibility/VisibilityUtils.java
copy
iotdb-core/{datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
=>
node-commons/src/test/java/org/apache/iotdb/commons/pipe/plugin/annotation/PipePluginAnnotationTest.java}
(60%)