|
25 | 25 | import org.apache.iotdb.commons.path.PartialPath; |
26 | 26 | import org.apache.iotdb.db.queryengine.common.MPPQueryContext; |
27 | 27 | import org.apache.iotdb.db.queryengine.common.QueryId; |
| 28 | +import org.apache.iotdb.db.queryengine.plan.analyze.Analysis; |
28 | 29 | import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan; |
29 | 30 | import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan; |
30 | 31 | import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode; |
| 32 | +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId; |
31 | 33 | import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode; |
32 | 34 | import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryCollectNode; |
33 | 35 | import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryMergeNode; |
34 | 36 | import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryNode; |
| 37 | +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.LastQueryScanNode; |
35 | 38 |
|
| 39 | +import org.apache.tsfile.enums.TSDataType; |
| 40 | +import org.apache.tsfile.write.schema.MeasurementSchema; |
36 | 41 | import org.junit.Assert; |
37 | 42 | import org.junit.Test; |
38 | 43 |
|
|
42 | 47 |
|
43 | 48 | public class LastQueryTest { |
44 | 49 |
|
| 50 | + @Test |
| 51 | + public void testSortLastQueryScanNode() throws IllegalPathException { |
| 52 | + LastQueryNode lastQueryNode = new LastQueryNode(new PlanNodeId("test"), null, true); |
| 53 | + |
| 54 | + lastQueryNode.addDeviceLastQueryScanNode( |
| 55 | + new PlanNodeId("test_last_query_scan1"), |
| 56 | + new PartialPath("root.test.d1"), |
| 57 | + true, |
| 58 | + Arrays.asList( |
| 59 | + new MeasurementSchema("s3", TSDataType.INT32), |
| 60 | + new MeasurementSchema("s1", TSDataType.BOOLEAN), |
| 61 | + new MeasurementSchema("s2", TSDataType.INT32)), |
| 62 | + null); |
| 63 | + lastQueryNode.addDeviceLastQueryScanNode( |
| 64 | + new PlanNodeId("test_last_query_scan2"), |
| 65 | + new PartialPath("root.test.d0"), |
| 66 | + false, |
| 67 | + Collections.singletonList(new MeasurementSchema("s0", TSDataType.BOOLEAN)), |
| 68 | + null); |
| 69 | + |
| 70 | + Analysis analysis = Util.constructAnalysis(); |
| 71 | + SourceRewriter sourceRewriter = new SourceRewriter(analysis); |
| 72 | + DistributionPlanContext context = |
| 73 | + new DistributionPlanContext( |
| 74 | + new MPPQueryContext("", new QueryId("test"), null, new TEndPoint(), new TEndPoint())); |
| 75 | + context.setOneSeriesInMultiRegion(true); |
| 76 | + context.setQueryMultiRegion(true); |
| 77 | + List<PlanNode> result = sourceRewriter.visitLastQuery(lastQueryNode, context); |
| 78 | + Assert.assertEquals(1, result.size()); |
| 79 | + Assert.assertTrue(result.get(0) instanceof LastQueryMergeNode); |
| 80 | + LastQueryMergeNode mergeNode = (LastQueryMergeNode) result.get(0); |
| 81 | + Assert.assertEquals(1, mergeNode.getChildren().size()); |
| 82 | + Assert.assertTrue(mergeNode.getChildren().get(0) instanceof LastQueryNode); |
| 83 | + |
| 84 | + LastQueryNode lastQueryNode2 = (LastQueryNode) mergeNode.getChildren().get(0); |
| 85 | + Assert.assertEquals(2, lastQueryNode2.getChildren().size()); |
| 86 | + Assert.assertTrue(lastQueryNode2.getChildren().get(0) instanceof LastQueryScanNode); |
| 87 | + |
| 88 | + LastQueryScanNode scanNodeChild1 = (LastQueryScanNode) lastQueryNode2.getChildren().get(0); |
| 89 | + Assert.assertTrue(scanNodeChild1.getDevicePath().toString().contains("d0")); |
| 90 | + Assert.assertEquals("s0", scanNodeChild1.getMeasurementSchemas().get(0).getMeasurementId()); |
| 91 | + |
| 92 | + LastQueryScanNode scanNodeChild2 = (LastQueryScanNode) lastQueryNode2.getChildren().get(1); |
| 93 | + Assert.assertTrue(scanNodeChild2.getDevicePath().toString().contains("d1")); |
| 94 | + Assert.assertEquals("s1", scanNodeChild2.getMeasurementSchemas().get(0).getMeasurementId()); |
| 95 | + Assert.assertEquals("s2", scanNodeChild2.getMeasurementSchemas().get(1).getMeasurementId()); |
| 96 | + Assert.assertEquals("s3", scanNodeChild2.getMeasurementSchemas().get(2).getMeasurementId()); |
| 97 | + } |
| 98 | + |
45 | 99 | @Test |
46 | 100 | public void testLastQuery1Series1Region() throws IllegalPathException { |
47 | 101 | String d2s1Path = "root.sg.d22.s1"; |
|
0 commit comments