This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/RefactorAnalyzer in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 7bed3966034a0b10f1645cac46d86d483b20bc31 Author: Minghui Liu <[email protected]> AuthorDate: Mon Sep 26 16:32:00 2022 +0800 add AnalyzeTest --- .../iotdb/db/mpp/plan/analyze/AnalyzeTest.java | 90 +++++++++++++++++++++- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeTest.java index d081b194f3..061ef9bb19 100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeTest.java @@ -23,7 +23,10 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.mpp.common.MPPQueryContext; import org.apache.iotdb.db.mpp.common.QueryId; +import org.apache.iotdb.db.mpp.common.header.ColumnHeader; +import org.apache.iotdb.db.mpp.common.header.DatasetHeader; import org.apache.iotdb.db.mpp.plan.expression.Expression; +import org.apache.iotdb.db.mpp.plan.expression.binary.AdditionExpression; import org.apache.iotdb.db.mpp.plan.expression.binary.GreaterThanExpression; import org.apache.iotdb.db.mpp.plan.expression.binary.LessThanExpression; import org.apache.iotdb.db.mpp.plan.expression.binary.LogicAndExpression; @@ -36,18 +39,57 @@ import org.apache.iotdb.db.mpp.plan.statement.Statement; import org.apache.iotdb.db.mpp.plan.statement.crud.QueryStatement; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.ratis.thirdparty.com.google.common.collect.Sets; import org.junit.Assert; import org.junit.Test; import java.time.ZonedDateTime; +import java.util.Arrays; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class AnalyzeTest { @Test public void testRawDataQuery() { - // TODO: @lmh add UTs + String sql = "select s1, status, s1 + 1 as t from root.sg.d1 where s2 > 10;"; + try { + Analysis actualAnalysis = analyzeSQL(sql); + + Analysis expectedAnalysis = new Analysis(); + expectedAnalysis.setSelectExpressions( + Sets.newHashSet( + new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), + new AdditionExpression( + new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), + new ConstantOperand(TSDataType.INT64, "1")))); + expectedAnalysis.setWhereExpression( + new GreaterThanExpression( + new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")), + new ConstantOperand(TSDataType.INT64, "10"))); + expectedAnalysis.setSourceTransformExpressions( + Sets.newHashSet( + new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), + new AdditionExpression( + new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), + new ConstantOperand(TSDataType.INT64, "1")))); + expectedAnalysis.setSourceExpressions( + Sets.newHashSet( + new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), + new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")))); + expectedAnalysis.setRespDatasetHeader( + new DatasetHeader( + Arrays.asList( + new ColumnHeader("root.sg.d1.s1", TSDataType.INT32), + new ColumnHeader("root.sg.d1.s1", TSDataType.INT32, "status"), + new ColumnHeader("root.sg.d1.s1 + 1", TSDataType.INT32, "t")), + false)); + alignByTimeAnalysisEqualTest(actualAnalysis, expectedAnalysis); + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } } @Test @@ -135,7 +177,7 @@ public class AnalyzeTest { if (predicates[i] == null) { Assert.assertNull(queryStatement.getWhereCondition()); } else { - Assert.assertEquals(predicates[i], queryStatement.getWhereCondition().getPredicate()); + assertEquals(predicates[i], queryStatement.getWhereCondition().getPredicate()); } } } @@ -155,4 +197,48 @@ public class AnalyzeTest { fail(); return null; } + + private void alignByTimeAnalysisEqualTest(Analysis actualAnalysis, Analysis expectedAnalysis) { + commonAnalysisEqualTest(actualAnalysis, expectedAnalysis); + assertEquals(actualAnalysis.getSourceExpressions(), expectedAnalysis.getSourceExpressions()); + assertEquals( + actualAnalysis.getSourceTransformExpressions(), + expectedAnalysis.getSourceTransformExpressions()); + assertEquals(actualAnalysis.getWhereExpression(), expectedAnalysis.getWhereExpression()); + assertEquals( + actualAnalysis.getAggregationExpressions(), expectedAnalysis.getAggregationExpressions()); + assertEquals( + actualAnalysis.getGroupByLevelExpressions(), expectedAnalysis.getGroupByLevelExpressions()); + } + + private void alignByDeviceAnalysisEqualTest(Analysis actualAnalysis, Analysis expectedAnalysis) { + commonAnalysisEqualTest(actualAnalysis, expectedAnalysis); + assertEquals( + actualAnalysis.getDeviceToSourceExpressions(), + expectedAnalysis.getDeviceToSourceExpressions()); + assertEquals( + actualAnalysis.getDeviceToSourceTransformExpressions(), + expectedAnalysis.getDeviceToSourceTransformExpressions()); + assertEquals( + actualAnalysis.getDeviceToWhereExpression(), expectedAnalysis.getDeviceToWhereExpression()); + assertEquals( + actualAnalysis.getDeviceToAggregationExpressions(), + expectedAnalysis.getDeviceToWhereExpression()); + assertEquals( + actualAnalysis.getDeviceToSelectExpressions(), + expectedAnalysis.getDeviceToSelectExpressions()); + assertEquals( + actualAnalysis.getDeviceToMeasurementIndexesMap(), + expectedAnalysis.getDeviceToMeasurementIndexesMap()); + assertEquals( + actualAnalysis.getDeviceViewOutputExpressions(), + actualAnalysis.getDeviceViewOutputExpressions()); + } + + private void commonAnalysisEqualTest(Analysis actualAnalysis, Analysis expectedAnalysis) { + assertEquals(expectedAnalysis.getSelectExpressions(), actualAnalysis.getSelectExpressions()); + assertEquals(expectedAnalysis.getHavingExpression(), actualAnalysis.getHavingExpression()); + assertEquals(expectedAnalysis.getRespDatasetHeader(), actualAnalysis.getRespDatasetHeader()); + assertEquals(expectedAnalysis.getGlobalTimeFilter(), actualAnalysis.getGlobalTimeFilter()); + } }
