This is an automated email from the ASF dual-hosted git repository. hxd pushed a commit to branch change-doc in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 2e7194bc66f4bb1c2b7151466906611a7b7c0fbf Merge: a93a8b7 a7ac8c1 Author: xiangdong huang <[email protected]> AuthorDate: Wed Jun 10 15:36:46 2020 +0800 merge master docs/SystemDesign/DataQuery/AggregationQuery.md | 22 + docs/SystemDesign/DataQuery/AlignByDeviceQuery.md | 4 +- docs/SystemDesign/DataQuery/GroupByQuery.md | 25 +- .../DML Data Manipulation Language.md | 82 ++++ docs/UserGuide/Operation Manual/SQL Reference.md | 5 +- docs/zh/SystemDesign/DataQuery/AggregationQuery.md | 20 + .../SystemDesign/DataQuery/AlignByDeviceQuery.md | 4 +- docs/zh/SystemDesign/DataQuery/GroupByQuery.md | 24 +- .../DML Data Manipulation Language.md | 85 +++- .../zh/UserGuide/Operation Manual/SQL Reference.md | 5 +- .../iotdb/flink/tsfile/RowRowRecordParser.java | 2 +- .../org/apache/iotdb/jdbc/IoTDBConnection.java | 7 +- .../java/org/apache/iotdb/jdbc/IoTDBStatement.java | 9 +- server/pom.xml | 10 + .../org/apache/iotdb/db/qp/strategy/SqlBase.g4 | 22 +- .../org/apache/iotdb/db/auth/AuthorityChecker.java | 2 +- .../iotdb/db/auth/authorizer/BasicAuthorizer.java | 73 ++- .../iotdb/db/auth/authorizer/IAuthorizer.java | 186 ++++---- .../apache/iotdb/db/auth/entity/PathPrivilege.java | 26 +- .../java/org/apache/iotdb/db/auth/entity/Role.java | 35 +- .../java/org/apache/iotdb/db/auth/entity/User.java | 51 ++- .../iotdb/db/auth/role/BasicRoleManager.java | 18 + .../apache/iotdb/db/auth/role/IRoleManager.java | 30 +- .../iotdb/db/auth/user/BasicUserManager.java | 20 + .../apache/iotdb/db/auth/user/IUserManager.java | 96 ++-- .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 15 +- .../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 37 +- .../db/conf/adapter/IoTDBConfigDynamicAdapter.java | 2 +- .../org/apache/iotdb/db/engine/StorageEngine.java | 82 +++- .../iotdb/db/engine/merge/task/MergeFileTask.java | 8 +- .../iotdb/db/engine/merge/task/MergeTask.java | 4 +- .../db/engine/modification/ModificationFile.java | 40 +- .../engine/storagegroup/StorageGroupProcessor.java | 187 ++++++-- .../iotdb/db/engine/storagegroup/TsFileLock.java | 111 +++++ .../db/engine/storagegroup/TsFileResource.java | 112 ++++- .../iotdb/db/engine/upgrade/UpgradeTask.java | 8 +- .../version/SimpleFileVersionController.java | 1 - .../iotdb/db/engine/version/VersionController.java | 1 + .../org/apache/iotdb/db/metadata/MManager.java | 202 +++++++-- .../java/org/apache/iotdb/db/metadata/MTree.java | 111 +++-- .../org/apache/iotdb/db/metadata/MetaUtils.java | 2 +- .../iotdb/db/metadata/mnode/InternalMNode.java | 2 +- .../{LeafMNode.java => MeasurementMNode.java} | 57 +-- .../apache/iotdb/db/qp/constant/SQLConstant.java | 3 + .../apache/iotdb/db/qp/executor/IPlanExecutor.java | 3 +- .../apache/iotdb/db/qp/executor/PlanExecutor.java | 190 +++++--- .../org/apache/iotdb/db/qp/logical/Operator.java | 2 +- .../iotdb/db/qp/logical/crud/QueryOperator.java | 27 +- .../qp/logical/sys/LoadConfigurationOperator.java | 13 +- .../apache/iotdb/db/qp/physical/PhysicalPlan.java | 127 +++++- .../iotdb/db/qp/physical/crud/AggregationPlan.java | 10 + .../db/qp/physical/crud/AlignByDevicePlan.java | 15 +- .../iotdb/db/qp/physical/crud/DeletePlan.java | 21 +- ...oupByFillPlan.java => GroupByTimeFillPlan.java} | 4 +- .../{GroupByPlan.java => GroupByTimePlan.java} | 7 +- .../iotdb/db/qp/physical/crud/InsertPlan.java | 28 +- .../db/qp/physical/crud/InsertTabletPlan.java | 6 +- .../iotdb/db/qp/physical/sys/AuthorPlan.java | 189 +++++++- .../db/qp/physical/sys/CreateTimeSeriesPlan.java | 8 +- .../iotdb/db/qp/physical/sys/DataAuthPlan.java | 53 ++- .../db/qp/physical/sys/DeleteStorageGroupPlan.java | 36 ++ .../db/qp/physical/sys/DeleteTimeSeriesPlan.java | 48 +- .../db/qp/physical/sys/LoadConfigurationPlan.java | 102 ++++- .../db/qp/physical/sys/SetStorageGroupPlan.java | 4 +- .../iotdb/db/qp/physical/sys/SetTTLPlan.java | 29 ++ .../db/qp/physical/sys/ShowChildPathsPlan.java | 2 +- .../db/qp/physical/sys/ShowTimeSeriesPlan.java | 31 ++ .../iotdb/db/qp/strategy/LogicalGenerator.java | 39 +- .../iotdb/db/qp/strategy/PhysicalGenerator.java | 91 ++-- .../db/query/aggregation/AggregateResult.java | 7 +- .../iotdb/db/query/control/FileReaderManager.java | 4 +- .../db/query/dataset/AlignByDeviceDataSet.java | 42 +- .../db/query/dataset/ShowTimeSeriesResult.java | 79 +++- .../iotdb/db/query/dataset/SingleDataSet.java | 4 +- .../dataset/groupby/GroupByEngineDataSet.java | 16 +- .../query/dataset/groupby/GroupByFillDataSet.java | 10 +- .../query/dataset/groupby/GroupByTimeDataSet.java | 96 ++++ .../groupby/GroupByWithValueFilterDataSet.java | 26 +- .../groupby/GroupByWithoutValueFilterDataSet.java | 16 +- .../dataset/groupby/LocalGroupByExecutor.java | 11 +- .../db/query/executor/AggregationExecutor.java | 30 +- .../iotdb/db/query/executor/FillQueryExecutor.java | 9 +- .../iotdb/db/query/executor/IQueryRouter.java | 4 +- .../iotdb/db/query/executor/LastQueryExecutor.java | 6 +- .../iotdb/db/query/executor/QueryRouter.java | 78 +++- .../apache/iotdb/db/query/executor/fill/IFill.java | 15 +- .../db/query/executor/fill/LastPointReader.java | 17 +- .../iotdb/db/query/executor/fill/LinearFill.java | 39 +- .../iotdb/db/query/reader/series/SeriesReader.java | 8 +- .../org/apache/iotdb/db/service/JMXService.java | 2 +- .../org/apache/iotdb/db/service/RPCService.java | 2 + .../org/apache/iotdb/db/service/TSServiceImpl.java | 37 +- .../org/apache/iotdb/db/utils/FilePathUtils.java | 87 ++++ .../org/apache/iotdb/db/utils/OpenFileNumUtil.java | 2 +- .../org/apache/iotdb/db/utils/SerializeUtils.java | 497 +++++++++++++++++++++ .../org/apache/iotdb/db/utils/UpgradeUtils.java | 4 +- .../writelog/manager/MultiFileLogNodeManager.java | 4 +- .../db/writelog/node/ExclusiveWriteLogNode.java | 4 +- .../iotdb/db/engine/storagegroup/TTLTest.java | 3 +- .../iotdb/db/integration/IoTDBAddSubDeviceIT.java | 203 +++++++++ .../apache/iotdb/db/integration/IoTDBLastIT.java | 12 +- .../iotdb/db/metadata/MManagerAdvancedTest.java | 62 ++- .../iotdb/db/metadata/MManagerImproveTest.java | 4 +- .../org/apache/iotdb/db/metadata/MTreeTest.java | 77 ++-- .../java/org/apache/iotdb/db/qp/PlannerTest.java | 2 +- .../apache/iotdb/db/qp/plan/PhysicalPlanTest.java | 120 +++-- .../db/query/dataset/GroupByLevelDataSetTest.java | 169 +++++++ .../db/query/dataset/GroupByTimeDataSetTest.java | 186 ++++++++ .../query/executor/GroupByEngineDataSetTest.java | 62 +-- .../org/apache/iotdb/db/tools/WalCheckerTest.java | 4 +- .../iotdb/db/writelog/io/LogWriterReaderTest.java | 2 +- .../db/writelog/io/MultiFileLogReaderTest.java | 2 +- .../java/org/apache/iotdb/rpc/TSStatusCode.java | 9 + service-rpc/src/main/thrift/cluster.thrift | 387 ++++++++++++++++ .../java/org/apache/iotdb/session/Session.java | 9 +- .../apache/iotdb/tsfile/common/cache/LRUCache.java | 10 +- .../apache/iotdb/tsfile/read/TimeValuePair.java | 1 - .../apache/iotdb/tsfile/read/common/RowRecord.java | 8 + .../iotdb/tsfile/utils/ReadWriteIOUtils.java | 9 + 119 files changed, 4523 insertions(+), 907 deletions(-) diff --cc server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AlignByDevicePlan.java index cce4b5d,5fde38f..cf1e550 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AlignByDevicePlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AlignByDevicePlan.java @@@ -39,8 -39,7 +39,8 @@@ public class AlignByDevicePlan extends // to record the real type of the measurement private Map<String, TSDataType> measurementDataTypeMap; - private GroupByPlan groupByPlan; + private GroupByTimePlan groupByTimePlan; ++ private FillQueryPlan fillQueryPlan; private AggregationPlan aggregationPlan; @@@ -98,13 -97,13 +98,14 @@@ this.measurementDataTypeMap = measurementDataTypeMap; } - public GroupByPlan getGroupByPlan() { - return groupByPlan; ++ + public GroupByTimePlan getGroupByTimePlan() { + return groupByTimePlan; } - public void setGroupByPlan(GroupByPlan groupByPlan) { - this.groupByPlan = groupByPlan; - this.setOperatorType(OperatorType.GROUPBY); + public void setGroupByTimePlan(GroupByTimePlan groupByTimePlan) { + this.groupByTimePlan = groupByTimePlan; + this.setOperatorType(OperatorType.GROUPBYTIME); } public FillQueryPlan getFillQueryPlan() { diff --cc server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java index 4a78844,cff982c..7ce9df9 --- 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 @@@ -276,7 -281,20 +281,19 @@@ public class PhysicalGenerator } } - + protected PhysicalPlan generateLoadConfigurationPlan(LoadConfigurationOperatorType type) + throws QueryProcessException { + switch (type) { + case GLOBAL: + return new LoadConfigurationPlan(LoadConfigurationPlanType.GLOBAL); + case LOCAL: + return new LoadConfigurationPlan(LoadConfigurationPlanType.LOCAL); + default: + throw new QueryProcessException( + String.format("Unrecognized load configuration operator type, %s", type.name())); + } + } /** * get types for path list @@@ -325,22 -343,31 +342,32 @@@ throw new QueryProcessException("Group By Fill only support last_value function"); } } - ((GroupByFillPlan) queryPlan).setFillType(queryOperator.getFillTypes()); - } else if (queryOperator.isGroupBy()) { - queryPlan = new GroupByPlan(); - ((GroupByPlan) queryPlan).setInterval(queryOperator.getUnit()); - ((GroupByPlan) queryPlan).setSlidingStep(queryOperator.getSlidingStep()); - ((GroupByPlan) queryPlan).setLeftCRightO(queryOperator.isLeftCRightO()); + ((GroupByTimeFillPlan) queryPlan).setFillType(queryOperator.getFillTypes()); + } else if (queryOperator.isGroupByTime()) { + queryPlan = new GroupByTimePlan(); + ((GroupByTimePlan) queryPlan).setInterval(queryOperator.getUnit()); + ((GroupByTimePlan) queryPlan).setSlidingStep(queryOperator.getSlidingStep()); + ((GroupByTimePlan) queryPlan).setLeftCRightO(queryOperator.isLeftCRightO()); if (!queryOperator.isLeftCRightO()) { - ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime() + 1); - ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime() + 1); + ((GroupByTimePlan) queryPlan).setStartTime(queryOperator.getStartTime() + 1); + ((GroupByTimePlan) queryPlan).setEndTime(queryOperator.getEndTime() + 1); } else { - ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime()); - ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime()); + ((GroupByTimePlan) queryPlan).setStartTime(queryOperator.getStartTime()); + ((GroupByTimePlan) queryPlan).setEndTime(queryOperator.getEndTime()); } - ((GroupByPlan) queryPlan) + ((GroupByTimePlan) queryPlan) .setAggregations(queryOperator.getSelectOperator().getAggregations()); + + ((GroupByTimePlan) queryPlan).setLevel(queryOperator.getLevel()); + + if (queryOperator.getLevel() >= 0) { + for (int i = 0; i < queryOperator.getSelectOperator().getAggregations().size(); i++) { + if (!SQLConstant.COUNT + .equals(queryOperator.getSelectOperator().getAggregations().get(i))) { + throw new QueryProcessException("group by level only support count now."); + } + } + } } else if (queryOperator.isFill()) { queryPlan = new FillQueryPlan(); FilterOperator timeFilter = queryOperator.getFilterOperator();
