2828import org .apache .iotdb .db .queryengine .plan .relational .planner .node .AggregationTableScanNode ;
2929import org .apache .iotdb .db .queryengine .plan .relational .planner .node .DeviceTableScanNode ;
3030import org .apache .iotdb .db .queryengine .plan .relational .planner .node .InformationSchemaTableScanNode ;
31+ import org .apache .iotdb .db .queryengine .plan .relational .planner .node .TreeAlignedDeviceViewScanNode ;
3132import org .apache .iotdb .db .queryengine .plan .relational .planner .node .TreeDeviceViewScanNode ;
33+ import org .apache .iotdb .db .queryengine .plan .relational .planner .node .TreeNonAlignedDeviceViewScanNode ;
3234
3335import java .util .ArrayList ;
3436import java .util .LinkedHashMap ;
@@ -91,7 +93,51 @@ public static Optional<PlanNode> pruneColumns(TableScanNode node, Set<Symbol> re
9193 .forEach (
9294 symbol -> newAssignments .put (symbol , node .getAssignments ().get (symbol ))));
9395
94- if (node instanceof TreeDeviceViewScanNode ) {
96+ if (node instanceof TreeAlignedDeviceViewScanNode ) {
97+ TreeAlignedDeviceViewScanNode treeDeviceViewScanNode =
98+ (TreeAlignedDeviceViewScanNode ) deviceTableScanNode ;
99+ TreeAlignedDeviceViewScanNode prunedNode =
100+ new TreeAlignedDeviceViewScanNode (
101+ deviceTableScanNode .getPlanNodeId (),
102+ deviceTableScanNode .getQualifiedObjectName (),
103+ newOutputs ,
104+ newAssignments ,
105+ deviceTableScanNode .getDeviceEntries (),
106+ deviceTableScanNode .getTagAndAttributeIndexMap (),
107+ deviceTableScanNode .getScanOrder (),
108+ deviceTableScanNode .getTimePredicate ().orElse (null ),
109+ deviceTableScanNode .getPushDownPredicate (),
110+ deviceTableScanNode .getPushDownLimit (),
111+ deviceTableScanNode .getPushDownOffset (),
112+ deviceTableScanNode .isPushLimitToEachDevice (),
113+ deviceTableScanNode .containsNonAlignedDevice (),
114+ treeDeviceViewScanNode .getTreeDBName (),
115+ treeDeviceViewScanNode .getMeasurementColumnNameMap ());
116+ prunedNode .setRegionReplicaSet (deviceTableScanNode .getRegionReplicaSet ());
117+ return Optional .of (prunedNode );
118+ } else if (node instanceof TreeNonAlignedDeviceViewScanNode ) {
119+ TreeNonAlignedDeviceViewScanNode treeDeviceViewScanNode =
120+ (TreeNonAlignedDeviceViewScanNode ) deviceTableScanNode ;
121+ TreeNonAlignedDeviceViewScanNode prunedNode =
122+ new TreeNonAlignedDeviceViewScanNode (
123+ deviceTableScanNode .getPlanNodeId (),
124+ deviceTableScanNode .getQualifiedObjectName (),
125+ newOutputs ,
126+ newAssignments ,
127+ deviceTableScanNode .getDeviceEntries (),
128+ deviceTableScanNode .getTagAndAttributeIndexMap (),
129+ deviceTableScanNode .getScanOrder (),
130+ deviceTableScanNode .getTimePredicate ().orElse (null ),
131+ deviceTableScanNode .getPushDownPredicate (),
132+ deviceTableScanNode .getPushDownLimit (),
133+ deviceTableScanNode .getPushDownOffset (),
134+ deviceTableScanNode .isPushLimitToEachDevice (),
135+ deviceTableScanNode .containsNonAlignedDevice (),
136+ treeDeviceViewScanNode .getTreeDBName (),
137+ treeDeviceViewScanNode .getMeasurementColumnNameMap ());
138+ prunedNode .setRegionReplicaSet (deviceTableScanNode .getRegionReplicaSet ());
139+ return Optional .of (prunedNode );
140+ } else if (node instanceof TreeDeviceViewScanNode ) {
95141 TreeDeviceViewScanNode treeDeviceViewScanNode =
96142 (TreeDeviceViewScanNode ) deviceTableScanNode ;
97143 return Optional .of (
@@ -112,7 +158,7 @@ public static Optional<PlanNode> pruneColumns(TableScanNode node, Set<Symbol> re
112158 treeDeviceViewScanNode .getTreeDBName (),
113159 treeDeviceViewScanNode .getMeasurementColumnNameMap ()));
114160 } else {
115- return Optional . of (
161+ DeviceTableScanNode prunedNode =
116162 new DeviceTableScanNode (
117163 deviceTableScanNode .getPlanNodeId (),
118164 deviceTableScanNode .getQualifiedObjectName (),
@@ -126,7 +172,9 @@ public static Optional<PlanNode> pruneColumns(TableScanNode node, Set<Symbol> re
126172 deviceTableScanNode .getPushDownLimit (),
127173 deviceTableScanNode .getPushDownOffset (),
128174 deviceTableScanNode .isPushLimitToEachDevice (),
129- deviceTableScanNode .containsNonAlignedDevice ()));
175+ deviceTableScanNode .containsNonAlignedDevice ());
176+ prunedNode .setRegionReplicaSet (deviceTableScanNode .getRegionReplicaSet ());
177+ return Optional .of (prunedNode );
130178 }
131179 } else if (node instanceof InformationSchemaTableScanNode ) {
132180 // For the convenience of process in execution stage, column-prune for
0 commit comments