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

haonan pushed a commit to branch pr2956
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 4d031f9084f5244d237e06c200d7b9bd7398f392
Merge: e302aba 42a04ac
Author: HTHou <[email protected]>
AuthorDate: Thu Apr 22 18:35:49 2021 +0800

    merge master

 .github/workflows/main-unix.yml                    |   2 +
 antlr/pom.xml                                      |   2 +-
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4   |  22 +-
 cli/pom.xml                                        |   4 +-
 client-cpp/pom.xml                                 |   2 +-
 client-cpp/src/main/Session.h                      |   9 +-
 client-py/README.md                                |   2 +-
 client-py/iotdb/utils/SessionDataSet.py            |  10 +-
 client-py/pom.xml                                  |   2 +-
 client-py/release.sh                               |   3 +
 client-py/tests/test_dataframe.py                  |  21 +
 cluster/pom.xml                                    |  14 +-
 .../resources/conf/iotdb-cluster.properties        |  62 +-
 cluster/src/assembly/resources/sbin/add-node.sh    |  25 +-
 .../java/org/apache/iotdb/cluster/ClientMain.java  |   5 +-
 .../java/org/apache/iotdb/cluster/ClusterMain.java |   4 +-
 .../cluster/client/sync/SyncClientAdaptor.java     |   6 +-
 .../apache/iotdb/cluster/config/ClusterConfig.java |  14 +-
 .../iotdb/cluster/config/ClusterDescriptor.java    |   5 -
 .../iotdb/cluster/coordinator/Coordinator.java     |  76 +-
 .../iotdb/cluster/log/applier/BaseApplier.java     |   4 +-
 .../iotdb/cluster/log/catchup/CatchUpTask.java     |  48 +-
 .../iotdb/cluster/log/catchup/LogCatchUpTask.java  |   4 +-
 .../cluster/log/manage/CommittedEntryManager.java  |  12 +-
 .../serializable/SyncLogDequeSerializer.java       |   4 +-
 .../apache/iotdb/cluster/metadata/CMManager.java   | 173 ++++-
 .../apache/iotdb/cluster/metadata/MetaPuller.java  |  21 +-
 .../cluster/partition/slot/SlotPartitionTable.java |   5 +-
 .../cluster/query/ClusterPhysicalGenerator.java    |   7 +
 .../iotdb/cluster/query/ClusterPlanRouter.java     |  11 +-
 .../iotdb/cluster/query/LocalQueryExecutor.java    |  20 +-
 .../cluster/query/reader/ClusterReaderFactory.java |  16 +-
 .../apache/iotdb/cluster/server/ClientServer.java  |   1 +
 .../iotdb/cluster/server/DataClusterServer.java    |   6 +-
 .../iotdb/cluster/server/MetaClusterServer.java    |   6 +-
 .../caller/PullMeasurementSchemaHandler.java       |  13 +-
 .../cluster/server/member/DataGroupMember.java     |  41 +-
 .../cluster/server/member/MetaGroupMember.java     |  13 -
 .../iotdb/cluster/server/member/RaftMember.java    | 108 ++-
 .../cluster/server/service/BaseAsyncService.java   |  19 +-
 .../cluster/server/service/BaseSyncService.java    |  23 +-
 .../apache/iotdb/cluster/utils/PartitionUtils.java |   8 +-
 .../apache/iotdb/cluster/utils/StatusUtils.java    |   3 +-
 .../cluster/client/async/AsyncClientPoolTest.java  |  41 +-
 .../cluster/client/async/AsyncDataClientTest.java  |  18 +
 .../client/async/AsyncDataHeartbeatClientTest.java |  18 +
 .../cluster/client/async/AsyncMetaClientTest.java  |  18 +
 .../client/async/AsyncMetaHeartbeatClientTest.java |  18 +
 .../cluster/client/sync/SyncClientAdaptorTest.java |   7 +-
 .../org/apache/iotdb/cluster/common/IoTDBTest.java |   6 +-
 .../org/apache/iotdb/cluster/common/TestUtils.java |   9 +-
 .../iotdb/cluster/log/LogDispatcherTest.java       |  10 +-
 .../cluster/log/snapshot/DataSnapshotTest.java     |   8 +
 .../cluster/partition/SlotPartitionTableTest.java  |   2 +-
 .../query/ClusterAggregateExecutorTest.java        |   4 +-
 .../query/ClusterDataQueryExecutorTest.java        |  13 +-
 .../cluster/query/ClusterFillExecutorTest.java     |   4 +-
 .../cluster/query/ClusterPlanExecutorTest.java     |   2 +-
 .../cluster/query/ClusterQueryRouterTest.java      |  12 +-
 .../ClusterGroupByNoVFilterDataSetTest.java        |   2 +-
 .../groupby/ClusterGroupByVFilterDataSetTest.java  |   2 +-
 .../caller/PullMeasurementSchemaHandlerTest.java   |  12 +-
 .../cluster/server/member/DataGroupMemberTest.java |  12 +-
 .../cluster/server/member/MetaGroupMemberTest.java |  14 +-
 .../cluster/server/member/RaftMemberTest.java      |   9 +-
 cluster/src/test/resources/logback.xml             |   2 +-
 .../resources/node1conf/iotdb-cluster.properties   |   2 +-
 .../resources/node2conf/iotdb-cluster.properties   |   2 +-
 .../resources/node3conf/iotdb-cluster.properties   |   2 +-
 code-coverage/pom.xml                              |   2 +-
 compile-tools/pom.xml                              |   2 +-
 compile-tools/thrift/pom.xml                       |   2 +-
 cross-tests/pom.xml                                |   2 +-
 distribution/pom.xml                               |   2 +-
 docker/ReadMe.md                                   |  50 +-
 .../src/main/Dockerfile-0.11.3                     |  40 +-
 docker/src/main/Dockerfile-0.12.0-cluster          |  53 ++
 docker/src/main/Dockerfile-0.12.0-node             |  45 ++
 docs/Development/VoteRelease.md                    |   8 +-
 docs/Download/README.md                            |  57 +-
 docs/SystemDesign/TsFile/Format.md                 |  12 +-
 ...-Languages.md => Programming-Cpp-Native-API.md} | 111 ++-
 docs/UserGuide/API/Programming-Go-Native-API.md    |  65 ++
 docs/UserGuide/API/Programming-JDBC.md             |  12 +-
 ...ative-API.md => Programming-Java-Native-API.md} | 167 +++--
 .../UserGuide/API/Programming-Python-Native-API.md | 102 ++-
 docs/UserGuide/API/Programming-TsFile-API.md       | 163 +++--
 docs/UserGuide/Advanced-Features/Triggers.md       | 781 ++++++++++++++++++++
 .../UDF-User-Defined-Function.md                   |   8 +-
 docs/UserGuide/Appendix/SQL-Reference.md           |  30 +-
 docs/UserGuide/Cluster/Cluster-Setup-Example.md    |  47 ++
 docs/UserGuide/Cluster/Cluster-Setup.md            |  11 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |  24 +-
 .../UserGuide/Ecosystem Integration/Hive TsFile.md |   8 +-
 .../Ecosystem Integration/MapReduce TsFile.md      |   2 +-
 .../UserGuide/Ecosystem Integration/Spark IoTDB.md |   8 +-
 .../Ecosystem Integration/Spark TsFile.md          |   2 +-
 .../Ecosystem Integration/Zeppelin-IoTDB.md        |   2 +-
 .../DDL-Data-Definition-Language.md                |  42 +-
 .../DML-Data-Manipulation-Language.md              |  11 +-
 docs/UserGuide/QuickStart/WayToGetIoTDB.md         |   2 +-
 docs/UserGuide/UDF/Triggers.md                     | 100 ---
 docs/zh/Development/VoteRelease.md                 |   8 +-
 docs/zh/Download/README.md                         |  55 +-
 docs/zh/SystemDesign/TsFile/Format.md              |  12 +-
 ...-Languages.md => Programming-Cpp-Native-API.md} | 122 +---
 docs/zh/UserGuide/API/Programming-Go-Native-API.md |  65 ++
 docs/zh/UserGuide/API/Programming-JDBC.md          |  18 +-
 ...ative-API.md => Programming-Java-Native-API.md} | 128 +++-
 .../UserGuide/API/Programming-Python-Native-API.md | 220 ++++++
 docs/zh/UserGuide/API/Programming-TsFile-API.md    | 160 +++--
 docs/zh/UserGuide/Advanced-Features/Triggers.md    | 799 +++++++++++++++++++++
 .../UDF-User-Defined-Function.md                   |  14 +-
 docs/zh/UserGuide/Appendix/SQL-Reference.md        |  30 +-
 docs/zh/UserGuide/Cluster/Cluster-Setup-Example.md |  46 ++
 docs/zh/UserGuide/Cluster/Cluster-Setup.md         |  11 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |  24 +-
 .../UserGuide/Ecosystem Integration/Hive TsFile.md |   8 +-
 .../Ecosystem Integration/MapReduce TsFile.md      |   2 +-
 .../UserGuide/Ecosystem Integration/Spark IoTDB.md |   8 +-
 .../Ecosystem Integration/Spark TsFile.md          |   2 +-
 .../Ecosystem Integration/Zeppelin-IoTDB.md        |   2 +-
 .../DDL-Data-Definition-Language.md                |  39 +
 .../DML-Data-Manipulation-Language.md              |  10 +-
 docs/zh/UserGuide/QuickStart/WayToGetIoTDB.md      |   2 +-
 docs/zh/UserGuide/UDF/Triggers.md                  | 100 ---
 example/client-cpp-example/pom.xml                 |   2 +-
 example/flink/pom.xml                              |   2 +-
 example/hadoop/pom.xml                             |   6 +-
 .../apache/iotdb/hadoop/tsfile/TsFileHelper.java   |   5 +-
 example/jdbc/pom.xml                               |   2 +-
 example/kafka/pom.xml                              |   4 +-
 example/kafka/readme.md                            |   4 +-
 example/mqtt/pom.xml                               |   2 +-
 example/pom.xml                                    |   3 +-
 example/pulsar/pom.xml                             |   2 +-
 example/rocketmq/pom.xml                           |   2 +-
 example/rocketmq/readme.md                         |   4 +-
 example/session/pom.xml                            |   2 +-
 .../org/apache/iotdb/DataMigrationExample.java     |   3 +-
 .../main/java/org/apache/iotdb/SessionExample.java |   6 +-
 .../org/apache/iotdb/VectorSessionExample.java     | 337 +++++++++
 example/{udf => trigger}/pom.xml                   |   6 +-
 .../org/apache/iotdb/trigger/TriggerExample.java   | 127 ++++
 example/tsfile/pom.xml                             |   2 +-
 example/tsfile/readme.md                           |   2 +-
 .../apache/iotdb/tsfile/TsFileWriteWithTablet.java |   5 +-
 example/udf/pom.xml                                |   4 +-
 flink-iotdb-connector/pom.xml                      |   2 +-
 flink-tsfile-connector/pom.xml                     |   2 +-
 grafana/pom.xml                                    |   2 +-
 hadoop/README.md                                   |   2 +-
 hadoop/pom.xml                                     |   4 +-
 .../iotdb/hadoop/tsfile/TsFileTestHelper.java      |   3 +-
 hive-connector/pom.xml                             |   6 +-
 .../org/apache/iotdb/hive/TsFileTestHelper.java    |   3 +-
 jdbc/README.md                                     |   4 +-
 jdbc/pom.xml                                       |   2 +-
 pom.xml                                            |   5 +-
 server/pom.xml                                     |  12 +-
 .../resources/conf/iotdb-engine.properties         | 300 ++++----
 .../org/apache/iotdb/db/auth/AuthorityChecker.java |  26 +-
 .../org/apache/iotdb/db/concurrent/ThreadName.java |   5 +-
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  53 ++
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |   5 +
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  32 +
 .../org/apache/iotdb/db/engine/StorageEngine.java  |   9 +-
 .../db/engine/cache/CacheHitRatioMonitor.java      |  28 +
 .../engine/cache/CacheHitRatioMonitorMXBean.java   |  10 +
 .../db/engine/cache/TimeSeriesMetadataCache.java   |   5 +-
 .../compaction/CompactionMergeTaskPoolManager.java |  38 +-
 .../db/engine/compaction/TsFileManagement.java     |  22 +-
 .../level/LevelCompactionTsFileManagement.java     | 277 +++----
 .../no/NoCompactionTsFileManagement.java           | 132 ++--
 .../engine/compaction/utils/CompactionUtils.java   |  25 +-
 .../iotdb/db/engine/flush/MemTableFlushTask.java   | 101 ++-
 .../iotdb/db/engine/flush/NotifyFlushMemTable.java |   4 +-
 .../iotdb/db/engine/memtable/AbstractMemTable.java | 190 +++--
 .../apache/iotdb/db/engine/memtable/IMemTable.java |  15 +-
 .../db/engine/memtable/IWritableMemChunk.java      |  43 +-
 .../db/engine/memtable/PrimitiveMemTable.java      |   9 +-
 .../iotdb/db/engine/memtable/WritableMemChunk.java |  87 ++-
 .../db/engine/merge/manage/MergeResource.java      |  12 +-
 .../iotdb/db/engine/merge/task/MergeFileTask.java  |  17 +-
 .../db/engine/merge/task/MergeMultiChunkTask.java  |   6 +-
 .../iotdb/db/engine/merge/task/MergeTask.java      |   5 +-
 .../db/engine/querycontext/QueryDataSource.java    |  12 +-
 .../db/engine/querycontext/ReadOnlyMemChunk.java   | 106 ++-
 .../engine/storagegroup/StorageGroupProcessor.java | 190 ++---
 .../db/engine/storagegroup/TsFileProcessor.java    | 164 +++--
 .../db/engine/storagegroup/TsFileResource.java     | 141 +++-
 .../iotdb/db/engine/trigger/api/Trigger.java       | 116 +++
 .../db/engine/trigger/api/TriggerAttributes.java   |  98 +++
 .../db/engine/trigger/executor/TriggerEngine.java  | 114 +++
 .../trigger/{api => executor}/TriggerEvent.java    |  26 +-
 .../engine/trigger/executor/TriggerExecutor.java   | 242 +++++++
 .../engine/trigger/service/TriggerClassLoader.java |  55 ++
 .../trigger/service/TriggerClassLoaderManager.java |  94 +++
 .../trigger/service/TriggerLogReader.java}         |  30 +-
 .../engine/trigger/service/TriggerLogWriter.java   |  68 ++
 .../service/TriggerRegistrationInformation.java}   |  49 +-
 .../service/TriggerRegistrationService.java        | 447 ++++++++++++
 .../TriggerExecutionException.java}                |  17 +-
 .../TriggerManagementException.java}               |  17 +-
 ...eption.java => AlignedTimeseriesException.java} |  19 +-
 .../metadata/DuplicatedTemplateException.java}     |  20 +-
 .../metadata/StorageGroupNotSetException.java      |   4 +
 .../metadata/UndefinedTemplateException.java}      |  20 +-
 .../apache/iotdb/db/metadata/MLogTxtWriter.java    |  36 +-
 .../org/apache/iotdb/db/metadata/MManager.java     | 637 ++++++++++++++--
 .../java/org/apache/iotdb/db/metadata/MTree.java   | 389 ++++++++--
 .../apache/iotdb/db/metadata/MeasurementMeta.java  |  14 +-
 .../org/apache/iotdb/db/metadata/MetaUtils.java    |  24 +
 .../iotdb/db/metadata/MetadataOperationType.java   |   2 +
 .../org/apache/iotdb/db/metadata/PartialPath.java  |   6 +-
 .../iotdb/db/metadata/VectorPartialPath.java       |  68 ++
 .../iotdb/db/metadata/logfile/MLogWriter.java      |  38 +-
 .../org/apache/iotdb/db/metadata/mnode/MNode.java  |  94 +++
 .../iotdb/db/metadata/mnode/MeasurementMNode.java  |  31 +-
 .../iotdb/db/metadata/mnode/StorageGroupMNode.java |  26 +-
 .../iotdb/db/metadata/template/Template.java       | 170 +++++
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  | 189 +++--
 .../org/apache/iotdb/db/qp/logical/Operator.java   |  17 +-
 .../db/qp/logical/sys/CreateTriggerOperator.java   |   2 +-
 .../db/qp/logical/sys/ShowTriggersOperator.java    |  12 -
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |  84 ++-
 .../iotdb/db/qp/physical/crud/AggregationPlan.java |   5 +
 .../db/qp/physical/crud/CreateTemplatePlan.java    | 240 +++++++
 .../iotdb/db/qp/physical/crud/FillQueryPlan.java   |   5 +
 .../iotdb/db/qp/physical/crud/GroupByTimePlan.java |   2 +
 .../db/qp/physical/crud/InsertMultiTabletPlan.java |   9 +
 .../iotdb/db/qp/physical/crud/InsertRowPlan.java   | 110 +--
 .../physical/crud/InsertRowsOfOneDevicePlan.java   |   9 +
 .../iotdb/db/qp/physical/crud/InsertRowsPlan.java  |  10 +
 .../db/qp/physical/crud/InsertTabletPlan.java      |  94 ++-
 .../iotdb/db/qp/physical/crud/LastQueryPlan.java   |   5 +
 .../iotdb/db/qp/physical/crud/QueryIndexPlan.java  |   5 +
 .../iotdb/db/qp/physical/crud/QueryPlan.java       |  14 +
 .../db/qp/physical/crud/RawDataQueryPlan.java      |  63 +-
 .../db/qp/physical/crud/SetDeviceTemplatePlan.java |  94 +++
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |   5 +
 .../qp/physical/sys/AutoCreateDeviceMNodePlan.java |  87 +++
 .../physical/sys/CreateAlignedTimeSeriesPlan.java  | 259 +++++++
 .../qp/physical/sys/CreateMultiTimeSeriesPlan.java |   7 +-
 .../db/qp/physical/sys/CreateTriggerPlan.java      |  96 ++-
 .../iotdb/db/qp/physical/sys/DropTriggerPlan.java  |  31 +-
 .../db/qp/physical/sys/MeasurementMNodePlan.java   |   9 +-
 .../physical/sys/SetUsingDeviceTemplatePlan.java   |  83 +++
 .../iotdb/db/qp/physical/sys/ShowTriggersPlan.java |  10 +-
 .../iotdb/db/qp/physical/sys/StartTriggerPlan.java |  31 +-
 .../iotdb/db/qp/physical/sys/StopTriggerPlan.java  |  31 +-
 .../db/qp/physical/sys/StorageGroupMNodePlan.java  |  36 +-
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    | 170 +----
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |  92 ++-
 .../iotdb/db/query/context/QueryContext.java       |   4 +-
 .../db/query/dataset/AlignByDeviceDataSet.java     |  25 +-
 .../dataset/RawQueryDataSetWithValueFilter.java    |   8 +-
 .../dataset/RawQueryDataSetWithoutValueFilter.java | 143 +++-
 .../iotdb/db/query/executor/QueryRouter.java       |  10 +
 .../db/query/executor/fill/LastPointReader.java    |  34 +-
 .../iotdb/db/query/reader/chunk/MemPageReader.java |   6 +-
 .../chunk/metadata/DiskChunkMetadataLoader.java    |  17 +-
 .../chunk/metadata/MemChunkMetadataLoader.java     |  15 +-
 .../query/reader/series/SeriesAggregateReader.java |   2 +-
 .../reader/series/SeriesRawDataBatchReader.java    |   4 +-
 .../iotdb/db/query/reader/series/SeriesReader.java | 129 ++--
 .../reader/series/SeriesReaderByTimestamp.java     |   4 +-
 .../query/reader/series/SeriesReaderFactory.java   |  94 +++
 .../db/query/reader/series/VectorSeriesReader.java | 144 ++++
 .../query/timegenerator/ServerTimeGenerator.java   |   7 +
 .../row/ElasticSerializableRowRecordList.java      |  13 +-
 .../iotdb/db/rescon/PrimitiveArrayManager.java     |   7 +-
 .../org/apache/iotdb/db/rescon/SystemInfo.java     |  16 +
 .../apache/iotdb/db/rescon/TVListAllocator.java    |  15 +-
 .../java/org/apache/iotdb/db/service/IoTDB.java    |   2 +
 .../org/apache/iotdb/db/service/ServiceType.java   |   4 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 148 +++-
 .../api/Configuration.java}                        |  17 +-
 .../api/TriggerEvent.java => sink/api/Event.java}  |  17 +-
 .../TriggerEvent.java => sink/api/Handler.java}    |  19 +-
 .../exception/SinkException.java}                  |  16 +-
 .../local/LocalIoTDBConfiguration.java}            |  35 +-
 .../local/LocalIoTDBEvent.java}                    |  22 +-
 .../iotdb/db/sink/local/LocalIoTDBHandler.java     | 104 +++
 .../iotdb/db/sink/mqtt/MQTTConfiguration.java      |  74 ++
 .../org/apache/iotdb/db/sink/mqtt/MQTTEvent.java   |  51 +-
 .../org/apache/iotdb/db/sink/mqtt/MQTTHandler.java |  85 +++
 .../apache/iotdb/db/tools/TsFileRewriteTool.java   |  39 +-
 .../org/apache/iotdb/db/tools/mlog/MLogParser.java |   4 +
 .../db/tools/upgrade/TsFileOnlineUpgradeTool.java  |  15 +-
 .../org/apache/iotdb/db/utils/CommonUtils.java     |   3 +
 .../org/apache/iotdb/db/utils/FileLoaderUtils.java |  36 +-
 .../java/org/apache/iotdb/db/utils/MemUtils.java   | 119 +--
 .../java/org/apache/iotdb/db/utils/MergeUtils.java |  27 +-
 .../apache/iotdb/db/utils/QueryDataSetUtils.java   |  19 +
 .../java/org/apache/iotdb/db/utils/QueryUtils.java |   8 +-
 .../org/apache/iotdb/db/utils/SchemaUtils.java     |   4 +-
 .../org/apache/iotdb/db/utils/SerializeUtils.java  |  74 ++
 .../apache/iotdb/db/utils/TypeInferenceUtils.java  |   2 +
 .../iotdb/db/utils/datastructure/TVList.java       |  59 +-
 .../iotdb/db/utils/datastructure/VectorTVList.java | 653 +++++++++++++++++
 .../windowing/api/Evaluator.java}                  |  18 +-
 .../iotdb/db/utils/windowing/api/Window.java       |  70 ++
 .../windowing/configuration/Configuration.java}    |  21 +-
 .../SlidingSizeWindowConfiguration.java            |  61 ++
 .../SlidingTimeWindowConfiguration.java            |  61 ++
 .../windowing/exception/WindowingException.java}   |  16 +-
 .../SlidingSizeWindowEvaluationHandler.java        |  58 ++
 .../SlidingTimeWindowEvaluationHandler.java        |  78 ++
 .../handler/SlidingWindowEvaluationHandler.java    | 124 ++++
 .../windowing/runtime/WindowEvaluationTask.java}   |  32 +-
 .../runtime/WindowEvaluationTaskPoolManager.java   |  99 +++
 .../utils/windowing/window/EvictableBatchList.java | 173 +++++
 .../db/utils/windowing/window/WindowImpl.java      | 204 ++++++
 .../iotdb/db/writelog/recover/LogReplayer.java     |  27 +-
 .../apache/iotdb/db/auth/AuthorityCheckerTest.java |  21 +-
 .../db/engine/compaction/CompactionChunkTest.java  |   8 +-
 .../compaction/LevelCompactionCacheTest.java       |   2 +-
 .../engine/compaction/LevelCompactionLogTest.java  |   2 +-
 .../compaction/LevelCompactionMergeTest.java       |  75 +-
 .../engine/compaction/LevelCompactionModsTest.java |  45 +-
 .../compaction/LevelCompactionMoreDataTest.java    |   2 +-
 .../LevelCompactionTsFileManagementTest.java       |  69 ++
 .../NoCompactionTsFileManagementTest.java          |  71 +-
 .../db/engine/memtable/MemTableFlushTaskTest.java  |  57 ++
 .../db/engine/memtable/MemTableTestUtils.java      |  81 ++-
 .../db/engine/memtable/MemtableBenchmark.java      |   1 -
 .../db/engine/memtable/PrimitiveMemTableTest.java  | 130 +++-
 .../db/engine/modification/DeletionQueryTest.java  |  10 +-
 .../storagegroup/StorageGroupProcessorTest.java    |  56 +-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |  18 +-
 .../engine/storagegroup/TsFileProcessorTest.java   |  72 +-
 .../db/engine/trigger/example/Accumulator.java     |  95 +++
 .../iotdb/db/engine/trigger/example/Counter.java   |  96 +++
 .../iotdb/db/integration/IOTDBGroupByIT.java       |  19 +
 .../db/integration/IOTDBInsertAlignedValuesIT.java | 149 ++++
 .../apache/iotdb/db/integration/IOTDBInsertIT.java |   2 +-
 .../iotdb/db/integration/IoTDBCompressTypeIT.java  |   5 -
 .../iotdb/db/integration/IoTDBDeletionIT.java      |  12 +-
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |   6 +-
 .../db/integration/IoTDBFlushQueryMergeIT.java     |   4 +-
 .../iotdb/db/integration/IoTDBGroupByFillIT.java   |  97 ++-
 .../db/integration/IoTDBSequenceDataQueryIT.java   |   6 +-
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |   8 +-
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   |   4 +
 .../apache/iotdb/db/integration/IoTDBTagIT.java    |  40 +-
 .../db/integration/IoTDBTriggerExecutionIT.java    | 553 ++++++++++++++
 .../db/integration/IoTDBTriggerManagementIT.java   | 500 +++++++++++++
 .../apache/iotdb/db/integration/IoTDBTtlIT.java    |   2 +-
 .../aggregation/IoTDBAggregationByLevelIT.java     |  21 +
 .../db/integration/auth/IoTDBAuthorizationIT.java  |  37 +
 .../iotdb/db/metadata/MManagerBasicTest.java       | 535 +++++++++++++-
 .../iotdb/db/metadata/MManagerImproveTest.java     |  17 +-
 .../iotdb/db/qp/physical/InsertRowPlanTest.java    | 246 +++++++
 .../iotdb/db/qp/physical/InsertTabletPlanTest.java | 264 +++++++
 .../db/qp/physical/PhysicalPlanSerializeTest.java  |  44 ++
 .../iotdb/db/qp/physical/PhysicalPlanTest.java     |  22 +-
 .../reader/series/SeriesAggregateReaderTest.java   |   6 +-
 .../reader/series/SeriesReaderByTimestampTest.java |   6 +-
 .../query/reader/series/SeriesReaderTestUtil.java  |   3 +-
 .../apache/iotdb/db/sink/LocalIoTDBSinkTest.java   | 217 ++++++
 .../org/apache/iotdb/db/sink/MQTTSinkTest.java     | 204 ++++++
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  12 +-
 .../org/apache/iotdb/db/utils/MemUtilsTest.java    |   2 +-
 .../db/utils/datastructure/VectorTVListTest.java   | 143 ++++
 .../SlidingSizeWindowEvaluationHandlerTest.java    | 184 +++++
 .../SlidingTimeWindowEvaluationHandlerTest.java    | 226 ++++++
 .../iotdb/db/writelog/recover/LogReplayerTest.java |  22 +-
 .../db/writelog/recover/SeqTsFileRecoverTest.java  |   3 +-
 .../writelog/recover/UnseqTsFileRecoverTest.java   |   5 +-
 server/src/test/resources/iotdb-engine.properties  |  36 +-
 service-rpc/pom.xml                                |   2 +-
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |   4 +
 session/pom.xml                                    |   2 +-
 .../java/org/apache/iotdb/session/Session.java     | 174 ++++-
 .../apache/iotdb/session/SessionConnection.java    |  60 ++
 .../org/apache/iotdb/session/SessionUtils.java     | 133 +++-
 .../iotdb/session/IoTDBSessionComplexIT.java       |  62 +-
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java |  57 +-
 .../apache/iotdb/session/SessionCacheLeaderUT.java |   5 +-
 .../java/org/apache/iotdb/session/SessionUT.java   |  52 +-
 site/pom.xml                                       |   2 +-
 site/src/main/.vuepress/config.js                  |  74 +-
 spark-iotdb-connector/Readme.md                    |   8 +-
 spark-iotdb-connector/pom.xml                      |   2 +-
 spark-tsfile/README.md                             |   6 +-
 spark-tsfile/pom.xml                               |   4 +-
 .../iotdb/spark/tsfile/NarrowConverter.scala       |   4 +-
 .../apache/iotdb/spark/tsfile/WideConverter.scala  |   5 +-
 thrift-cluster/pom.xml                             |   2 +-
 thrift-cluster/src/main/thrift/cluster.thrift      |   8 +-
 thrift-sync/pom.xml                                |   2 +-
 thrift/pom.xml                                     |   2 +-
 thrift/src/main/thrift/rpc.thrift                  |  31 +
 tsfile/README.md                                   |   2 +-
 tsfile/pom.xml                                     |   2 +-
 .../iotdb/tsfile/encoding/decoder/Decoder.java     |   4 +
 .../iotdb/tsfile/file/header/ChunkHeader.java      |  15 +-
 .../iotdb/tsfile/file/metadata/ChunkMetadata.java  |  22 +-
 .../iotdb/tsfile/file/metadata/IChunkMetadata.java |  74 ++
 .../metadata/ITimeSeriesMetadata.java}             |  23 +-
 .../tsfile/file/metadata/TimeseriesMetadata.java   |  23 +-
 .../tsfile/file/metadata/VectorChunkMetadata.java  | 178 +++++
 .../file/metadata/VectorTimeSeriesMetadata.java    |  97 +++
 .../tsfile/file/metadata/enums/TSDataType.java     |   8 +-
 .../file/metadata/statistics/Statistics.java       |  96 +--
 .../file/metadata/statistics/TimeStatistics.java   | 161 +++++
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  38 +-
 .../apache/iotdb/tsfile/read/common/BatchData.java |  60 ++
 .../org/apache/iotdb/tsfile/read/common/Chunk.java |   5 +-
 .../read/controller/IChunkMetadataLoader.java      |   8 +-
 .../tsfile/read/controller/IMetadataQuerier.java   |   6 +-
 .../read/controller/MetadataQuerierByFileImpl.java |  13 +-
 .../expression/impl/SingleSeriesExpression.java    |   4 +
 .../iotdb/tsfile/read/filter/ValueFilter.java      | 106 +++
 .../iotdb/tsfile/read/filter/operator/In.java      |   6 +-
 .../query/executor/ExecutorWithTimeGenerator.java  |   4 +-
 .../tsfile/read/query/executor/TsFileExecutor.java |   4 +-
 .../query/timegenerator/TsFileTimeGenerator.java   |   4 +-
 .../tsfile/read/reader/chunk/ChunkReader.java      |   8 +-
 .../read/reader/chunk/VectorChunkReader.java       | 262 +++++++
 .../tsfile/read/reader/page/TimePageReader.java    |  92 +++
 .../tsfile/read/reader/page/ValuePageReader.java   | 218 ++++++
 .../tsfile/read/reader/page/VectorChunkReader.java |  18 +-
 .../tsfile/read/reader/page/VectorPageReader.java  | 122 ++++
 .../reader/series/AbstractFileSeriesReader.java    |  14 +-
 .../read/reader/series/EmptyFileSeriesReader.java  |   6 +-
 .../read/reader/series/FileSeriesReader.java       |   9 +-
 .../reader/series/FileSeriesReaderByTimestamp.java |  13 +-
 .../java/org/apache/iotdb/tsfile/utils/Binary.java |   2 +
 .../java/org/apache/iotdb/tsfile/utils/BitMap.java | 121 ++++
 .../org/apache/iotdb/tsfile/utils/PublicBAOS.java  |   4 +
 .../apache/iotdb/tsfile/utils/TsPrimitiveType.java |  88 +++
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |  13 +-
 .../tsfile/write/chunk/ChunkGroupWriterImpl.java   |   6 +-
 .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java  |  32 +-
 .../tsfile/write/chunk/IChunkGroupWriter.java      |   4 +-
 .../iotdb/tsfile/write/chunk/IChunkWriter.java     |  15 +-
 .../iotdb/tsfile/write/chunk/TimeChunkWriter.java  | 255 +++++++
 .../iotdb/tsfile/write/chunk/ValueChunkWriter.java | 252 +++++++
 .../tsfile/write/chunk/VectorChunkWriterImpl.java  | 202 ++++++
 .../apache/iotdb/tsfile/write/page/PageWriter.java |   6 +-
 .../iotdb/tsfile/write/page/TimePageWriter.java    | 177 +++++
 .../page/{PageWriter.java => ValuePageWriter.java} | 160 +++--
 .../apache/iotdb/tsfile/write/record/Tablet.java   | 251 +++++--
 .../write/record/datapoint/BooleanDataPoint.java   |   2 +-
 .../write/record/datapoint/DoubleDataPoint.java    |   2 +-
 .../write/record/datapoint/FloatDataPoint.java     |   2 +-
 .../write/record/datapoint/IntDataPoint.java       |   2 +-
 .../write/record/datapoint/LongDataPoint.java      |   2 +-
 .../write/record/datapoint/StringDataPoint.java    |   2 +-
 .../tsfile/write/schema/IMeasurementSchema.java    |  77 ++
 .../tsfile/write/schema/MeasurementSchema.java     |  89 ++-
 .../apache/iotdb/tsfile/write/schema/Schema.java   |  25 +-
 .../write/schema/VectorMeasurementSchema.java      | 370 ++++++++++
 .../write/writer/RestorableTsFileIOWriter.java     |  17 +-
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |  39 +-
 ...easurementChunkMetadataListMapIteratorTest.java |  13 +-
 .../tsfile/read/controller/ChunkLoaderTest.java    |   7 +-
 .../query/timegenerator/ReaderByTimestampTest.java |   4 +-
 .../iotdb/tsfile/read/reader/ReaderTest.java       |   6 +-
 .../org/apache/iotdb/tsfile/utils/BitMapTest.java  |  67 ++
 .../org/apache/iotdb/tsfile/utils/RecordUtils.java |   4 +-
 .../tsfile/write/DefaultDeviceTemplateTest.java    |   5 +-
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     |   3 +-
 .../write/schema/converter/SchemaBuilderTest.java  |  17 +-
 .../write/writer/RestorableTsFileIOWriterTest.java |   5 +-
 .../tsfile/write/writer/TestTsFileOutput.java}     |  49 +-
 .../tsfile/write/writer/TimeChunkWriterTest.java   | 111 +++
 .../tsfile/write/writer/TimePageWriterTest.java    | 171 +++++
 .../tsfile/write/writer/ValueChunkWriterTest.java  | 109 +++
 .../tsfile/write/writer/ValuePageWriterTest.java   | 291 ++++++++
 .../write/writer/VectorChunkWriterImplTest.java    | 178 +++++
 .../write/writer/VectorMeasurementSchemaStub.java  | 128 ++++
 zeppelin-interpreter/pom.xml                       |   2 +-
 475 files changed, 22624 insertions(+), 3655 deletions(-)

diff --cc antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
index c77b4cf,a7b2fc9..c753069
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
@@@ -378,12 -382,13 +382,17 @@@ measurementNam
      ;
  
  insertValuesSpec
 +    :(COMMA? insertMultiValue)*
 +    ;
 +
 +insertMultiValue
-     : LR_BRACKET dateFormat (COMMA constant)+ RR_BRACKET
-     | LR_BRACKET INT (COMMA constant)+ RR_BRACKET
+     : LR_BRACKET dateFormat (COMMA measurementValue)+ RR_BRACKET
+     | LR_BRACKET INT (COMMA measurementValue)+ RR_BRACKET
+     ;
+ 
+ measurementValue
+     : constant
+     | LR_BRACKET constant (COMMA constant)+ RR_BRACKET
      ;
  
  setCol
diff --cc docs/zh/UserGuide/IoTDB-SQL-Language/DML-Data-Manipulation-Language.md
index 7a2b321,c25e204..5563a04
--- a/docs/zh/UserGuide/IoTDB-SQL-Language/DML-Data-Manipulation-Language.md
+++ b/docs/zh/UserGuide/IoTDB-SQL-Language/DML-Data-Manipulation-Language.md
@@@ -47,15 -47,9 +47,15 @@@ IoTDB > insert into root.ln.wf02.wt02(t
  INSERT语句还可以支持在同一个时间点下多列数据的插入,同时向2时间点插入上述两个时间序列的值,多列数据插入示例代码如下:
  
  ```
- IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (2, 
false, 'v2')
+ IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) values (2, 
false, 'v2')
  ```
  
 +此外,INSERT语句支持一次性插入多行数据,同时向2个不同时间点插入上述时间序列的值,示例代码如下:
 +
 +```
 +IoTDB > insert into root.ln.wf02.wt02(timestamp, status, hardware) VALUES (3, 
false, 'v3'),(4, true, 'v4')
 +```
 +
  插入数据后我们可以使用SELECT语句简单查询已插入的数据。
  
  ```
diff --cc server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index 12f2b7b,b88a09f..22b7cba
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@@ -1886,23 -1756,20 +1756,25 @@@ public class IoTDBSqlVisitor extends Sq
    }
  
    private void parseInsertValuesSpec(InsertValuesSpecContext ctx, 
InsertOperator insertOp) {
 -    long timestamp;
 -    if (ctx.dateFormat() != null) {
 -      timestamp = parseTimeFormat(ctx.dateFormat().getText());
 -    } else {
 -      timestamp = Long.parseLong(ctx.INT().getText());
 -    }
 -    insertOp.setTime(timestamp);
 +    List<InsertMultiValueContext> insertMultiValues = ctx.insertMultiValue();
      List<String> valueList = new ArrayList<>();
 -    List<MeasurementValueContext> values = ctx.measurementValue();
 -    for (MeasurementValueContext value : values) {
 -      for (ConstantContext counstant : value.constant()) {
 -        valueList.add(counstant.getText());
 +    Long[] timeArray = new Long[insertMultiValues.size()];
 +    for (int i = 0; i < insertMultiValues.size(); i++) {
 +      long timestamp;
 +      if (insertMultiValues.get(i).dateFormat() != null) {
 +        timestamp = 
parseTimeFormat(insertMultiValues.get(i).dateFormat().getText());
 +      } else {
 +        timestamp = Long.parseLong(insertMultiValues.get(i).INT().getText());
 +      }
 +      timeArray[i] = timestamp;
-       List<ConstantContext> values = insertMultiValues.get(i).constant();
-       for (ConstantContext value : values) {
-         valueList.add(value.getText());
++      List<MeasurementValueContext> values = 
insertMultiValues.get(i).measurementValue();
++      for (MeasurementValueContext value : values) {
++        for (ConstantContext counstant : value.constant()) {
++          valueList.add(counstant.getText());
++        }
        }
      }
 +    insertOp.setTime(timeArray);
      insertOp.setValueList(valueList.toArray(new String[0]));
    }
  
diff --cc 
server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index bde2f51,7b8c0ac..b3ef8fe
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@@ -235,33 -232,22 +234,41 @@@ public class PhysicalGenerator 
        case INSERT:
          InsertOperator insert = (InsertOperator) operator;
          paths = insert.getSelectedPaths();
+         int measurementsNum = 0;
+         for (String measurement : insert.getMeasurementList()) {
+           if (measurement.startsWith("(") && measurement.endsWith(")")) {
+             measurementsNum += measurement.replace("(", "").replace(")", 
"").split(",").length;
+           } else {
+             measurementsNum++;
+           }
+         }
 -        if (measurementsNum != insert.getValueList().length) {
 +        if (insert.getValueList().length % insert.getMeasurementList().length 
!= 0) {
            throw new SQLParserException(
                String.format(
                    "the measurementList's size %d is not consistent with the 
valueList's size %d",
-                   insert.getMeasurementList().length, 
insert.getValueList().length));
+                   measurementsNum, insert.getValueList().length));
          }
 -        return new InsertRowPlan(
 -            paths.get(0), insert.getTime(), insert.getMeasurementList(), 
insert.getValueList());
 +        if (insert.getMeasurementList().length == 
insert.getValueList().length) {
 +          return new InsertRowPlan(
 +              paths.get(0),
 +              insert.getTime()[0],
 +              insert.getMeasurementList(),
 +              insert.getValueList());
 +        }
 +        InsertRowsPlan insertRowsPlan = new InsertRowsPlan();
 +        for (int i = 0; i < insert.getTime().length; i++) {
 +          insertRowsPlan.addOneInsertRowPlan(
 +              new InsertRowPlan(
 +                  paths.get(0),
 +                  insert.getTime()[i],
 +                  insert.getMeasurementList(),
 +                  Arrays.copyOfRange(
 +                      insert.getValueList(),
 +                      i * insert.getMeasurementList().length,
 +                      (i + 1) * insert.getMeasurementList().length)),
 +              i);
 +        }
 +        return insertRowsPlan;
        case MERGE:
          if (operator.getTokenIntType() == SQLConstant.TOK_FULL_MERGE) {
            return new MergePlan(OperatorType.FULL_MERGE);

Reply via email to