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

hui pushed a commit to branch lmh/disableView
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 6ab215652468ce6d1907ab533d40f9155f49b9e0
Author: Minghui Liu <[email protected]>
AuthorDate: Mon May 29 15:01:32 2023 +0800

    enable use view in ALIGN BY DEVICE & LAST
---
 .../apache/iotdb/db/mpp/plan/analyze/Analysis.java | 11 -----
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  | 21 ++++-----
 .../plan/planner/distribution/SourceRewriter.java  | 55 +++++++---------------
 3 files changed, 24 insertions(+), 63 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
index 58b33dffa2f..6a309e53f80 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
@@ -154,8 +154,6 @@ public class Analysis {
   // not 0 because device is the first column
   private Map<String, List<Integer>> deviceViewInputIndexesMap;
 
-  private Map<String, List<String>> outputDeviceToQueriedDeviceMap;
-
   private Set<Expression> deviceViewOutputExpressions;
 
   // indicates whether DeviceView need special process when rewriteSource in 
DistributionPlan,
@@ -438,15 +436,6 @@ public class Analysis {
     return deviceViewInputIndexesMap;
   }
 
-  public Map<String, List<String>> getOutputDeviceToQueriedDeviceMap() {
-    return outputDeviceToQueriedDeviceMap;
-  }
-
-  public void setOutputDeviceToQueriedDeviceMap(
-      Map<String, List<String>> outputDeviceToQueriedDeviceMap) {
-    this.outputDeviceToQueriedDeviceMap = outputDeviceToQueriedDeviceMap;
-  }
-
   public Set<Expression> getSourceExpressions() {
     return sourceExpressions;
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index cf379e86394..85a8b33422a 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -269,6 +269,14 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
 
       // make sure paths in logical view is fetched
       updateSchemaTreeByViews(analysis, schemaTree);
+      if (analysis.useLogicalView()) {
+        if (queryStatement.isAlignByDevice()) {
+          throw new SemanticException("Views are not supported in ALIGN BY 
DEVICE query yet.");
+        }
+        if (queryStatement.isLastQuery()) {
+          throw new SemanticException("Views are not supported in LAST query 
yet.");
+        }
+      }
 
       // extract global time filter from query filter and determine if there 
is a value filter
       analyzeGlobalTimeFilter(analysis, queryStatement);
@@ -1212,19 +1220,6 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       deviceToOutputColumnsMap.put(deviceName, outputColumns);
     }
 
-    Map<String, Set<Expression>> deviceToSourceExpressions =
-        analysis.getDeviceToSourceExpressions();
-    Map<String, List<String>> outputDeviceToQueriedDeviceMap = new 
LinkedHashMap<>();
-    for (String deviceName : deviceToSourceExpressions.keySet()) {
-      Set<Expression> sourceExpressionsUnderDevice = 
deviceToSourceExpressions.get(deviceName);
-      Set<String> queriedDevices = new HashSet<>();
-      for (Expression expression : sourceExpressionsUnderDevice) {
-        
queriedDevices.add(ExpressionAnalyzer.getDeviceNameInSourceExpression(expression));
-      }
-      outputDeviceToQueriedDeviceMap.put(deviceName, new 
ArrayList<>(queriedDevices));
-    }
-    analysis.setOutputDeviceToQueriedDeviceMap(outputDeviceToQueriedDeviceMap);
-
     Map<String, List<Integer>> deviceViewInputIndexesMap = new HashMap<>();
     for (String deviceName : deviceToOutputColumnsMap.keySet()) {
       List<String> outputsUnderDevice = new 
ArrayList<>(deviceToOutputColumnsMap.get(deviceName));
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
index d5815d14aeb..03cc0fba950 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
@@ -72,7 +72,6 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -166,53 +165,31 @@ public class SourceRewriter extends 
SimplePlanNodeRewriter<DistributionPlanConte
 
     List<DeviceViewSplit> deviceViewSplits = new ArrayList<>();
     // Step 1: constructs DeviceViewSplit
-    Map<String, List<String>> outputDeviceToQueriedDeviceMap =
-        analysis.getOutputDeviceToQueriedDeviceMap();
     for (int i = 0; i < node.getDevices().size(); i++) {
-      String outputDevice = node.getDevices().get(i);
+      String device = node.getDevices().get(i);
       PlanNode child = node.getChildren().get(i);
-      List<TRegionReplicaSet> regionReplicaSets = new ArrayList<>();
-      for (String queriedDevice : 
outputDeviceToQueriedDeviceMap.get(outputDevice)) {
-        regionReplicaSets.addAll(
-            analysis.getPartitionInfo(queriedDevice, 
analysis.getGlobalTimeFilter()));
-      }
-      deviceViewSplits.add(new DeviceViewSplit(outputDevice, child, 
regionReplicaSets));
+      List<TRegionReplicaSet> regionReplicaSets =
+          analysis.getPartitionInfo(device, analysis.getGlobalTimeFilter());
+      deviceViewSplits.add(new DeviceViewSplit(device, child, 
regionReplicaSets));
       relatedDataRegions.addAll(regionReplicaSets);
     }
 
     // Step 2: Iterate all partition and create DeviceViewNode for each region
     List<PlanNode> deviceViewNodeList = new ArrayList<>();
-    Iterator<DeviceViewSplit> deviceViewSplitIterator = 
deviceViewSplits.listIterator();
-    while (deviceViewSplitIterator.hasNext()) {
-      DeviceViewSplit deviceViewSplit = deviceViewSplitIterator.next();
-      String outputDevice = deviceViewSplit.device;
-
-      if (outputDeviceToQueriedDeviceMap.get(outputDevice).size() > 1) {
-        DeviceViewNode deviceViewNode = cloneDeviceViewNodeWithoutChild(node, 
context);
-        deviceViewNode.addChildDeviceNode(
-            outputDevice, process(deviceViewSplit.root, context).get(0));
-        deviceViewNodeList.add(deviceViewNode);
-        deviceViewSplitIterator.remove();
-      }
-    }
-    if (deviceViewSplits.size() > 0) {
-      for (TRegionReplicaSet regionReplicaSet : relatedDataRegions) {
-        List<String> devices = new ArrayList<>();
-        List<PlanNode> children = new ArrayList<>();
-        for (DeviceViewSplit split : deviceViewSplits) {
-          if (split.needDistributeTo(regionReplicaSet)) {
-            devices.add(split.device);
-            children.add(split.buildPlanNodeInRegion(regionReplicaSet, 
context.queryContext));
-          }
-        }
-        DeviceViewNode regionDeviceViewNode = 
cloneDeviceViewNodeWithoutChild(node, context);
-        for (int i = 0; i < devices.size(); i++) {
-          regionDeviceViewNode.addChildDeviceNode(devices.get(i), 
children.get(i));
-        }
-        if (regionDeviceViewNode.getChildren().size() > 0) {
-          deviceViewNodeList.add(regionDeviceViewNode);
+    for (TRegionReplicaSet regionReplicaSet : relatedDataRegions) {
+      List<String> devices = new ArrayList<>();
+      List<PlanNode> children = new ArrayList<>();
+      for (DeviceViewSplit split : deviceViewSplits) {
+        if (split.needDistributeTo(regionReplicaSet)) {
+          devices.add(split.device);
+          children.add(split.buildPlanNodeInRegion(regionReplicaSet, 
context.queryContext));
         }
       }
+      DeviceViewNode regionDeviceViewNode = 
cloneDeviceViewNodeWithoutChild(node, context);
+      for (int i = 0; i < devices.size(); i++) {
+        regionDeviceViewNode.addChildDeviceNode(devices.get(i), 
children.get(i));
+      }
+      deviceViewNodeList.add(regionDeviceViewNode);
     }
 
     if (deviceViewNodeList.size() == 1) {

Reply via email to