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