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

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

commit 43b916dd835bab3cf27602aba15cc8eca0bb5799
Author: Minghui Liu <[email protected]>
AuthorDate: Mon Jun 20 22:34:52 2022 +0800

    refactor IoTDBAliasIT
---
 .../org/apache/iotdb/db/it/query/IoTDBAliasIT.java | 707 ++++-----------------
 .../org/apache/iotdb/db/it/query/TestUtils.java    |  51 ++
 2 files changed, 186 insertions(+), 572 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java
index 8b26736723..83e3a20ce8 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java
@@ -34,10 +34,11 @@ import org.junit.runner.RunWith;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
 import java.sql.Statement;
+import java.util.Arrays;
+import java.util.List;
 
-import static org.junit.Assert.assertEquals;
+import static org.apache.iotdb.db.it.query.TestUtils.assertResultSetEqual;
 import static org.junit.Assert.fail;
 
 @RunWith(IoTDBTestRunner.class)
@@ -82,9 +83,7 @@ public class IoTDBAliasIT {
         "INSERT INTO root.sg2.d2(timestamp,s1,s2,s3) values(400, 73.4, 26.3, 
83.0)"
       };
 
-  private static final String COLUMN_TIME = "Time";
-  private static final String COLUMN_TIMESERIES = "timeseries";
-  private static final String COLUMN_VALUE = "value";
+  private static final String LAST_QUERY_HEADER = 
"Time,timeseries,value,dataType,";
 
   @BeforeClass
   public static void setUp() throws Exception {
@@ -112,214 +111,68 @@ public class IoTDBAliasIT {
   // ---------------------------------- Use timeseries alias 
---------------------------------
 
   @Test
-  public void selectWithAliasTest() {
+  public void rawDataQueryAliasTest() {
+    String expectedHeader = "Time,root.sg.d1.speed,root.sg.d1.temperature,";
     String[] retArray =
         new String[] {"100,10.1,20.7,", "200,15.2,22.9,", "300,30.3,25.1,", 
"400,50.4,28.3,"};
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select speed, temperature from root.sg.d1")) 
{
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,root.sg.d1.speed,root.sg.d1.temperature,", 
header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest("select speed, temperature from root.sg.d1", 
expectedHeader, retArray);
   }
 
-  @Ignore
   @Test
-  public void lastSelectWithAliasTest() {
+  public void rawDataQueryWithDuplicatedColumnsAliasTest() {
+    String expectedHeader = 
"Time,root.sg.d1.speed,root.sg.d1.speed,root.sg.d1.s2,";
     String[] retArray =
-        new String[] {"400,root.sg.d1.speed,50.4", 
"400,root.sg.d1.temperature,28.3"};
+        new String[] {
+          "100,10.1,10.1,20.7,", "200,15.2,15.2,22.9,", "300,30.3,30.3,25.1,", 
"400,50.4,50.4,28.3,"
+        };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select last speed, temperature from 
root.sg.d1")) {
-        int cnt = 0;
-        while (resultSet.next()) {
-          String ans =
-              resultSet.getString(COLUMN_TIME)
-                  + ","
-                  + resultSet.getString(COLUMN_TIMESERIES)
-                  + ","
-                  + resultSet.getString(COLUMN_VALUE);
-          assertEquals(retArray[cnt], ans);
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest("select speed, speed, s2 from root.sg.d1", 
expectedHeader, retArray);
   }
 
   @Test
-  public void selectDuplicatedPathsWithAliasTest() {
+  @Ignore // TODO: remove @Ignore after support alias in last query
+  public void lastQueryAliasTest() {
     String[] retArray =
-        new String[] {
-          "100,10.1,10.1,20.7,", "200,15.2,15.2,22.9,", "300,30.3,30.3,25.1,", 
"400,50.4,50.4,28.3,"
-        };
+        new String[] {"400,root.sg.d1.speed,50.4", 
"400,root.sg.d1.temperature,28.3"};
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select speed, speed, s2 from root.sg.d1")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,root.sg.d1.speed,root.sg.d1.speed,root.sg.d1.s2,", 
header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(4, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select last speed, temperature from root.sg.d1", LAST_QUERY_HEADER, 
retArray);
   }
 
-  @Ignore
   @Test
-  public void lastSelectDuplicatedPathsWithAliasTest() {
+  @Ignore // TODO: remove @Ignore after support alias in last query
+  public void lastQueryWithDuplicatedColumnsAliasTest() {
     String[] retArray =
         new String[] {
           "400,root.sg.d1.speed,50.4", "400,root.sg.d1.s1,50.4", 
"400,root.sg.d1.s2,28.3"
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select last speed, s1, speed, s2 from 
root.sg.d1")) {
-        int cnt = 0;
-        while (resultSet.next()) {
-          String ans =
-              resultSet.getString(COLUMN_TIME)
-                  + ","
-                  + resultSet.getString(COLUMN_TIMESERIES)
-                  + ","
-                  + resultSet.getString(COLUMN_VALUE);
-          assertEquals(retArray[cnt], ans);
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select last speed, s1, speed, s2 from root.sg.d1", LAST_QUERY_HEADER, 
retArray);
   }
 
   @Test
-  public void selectAggregationWithAliasTest() {
+  public void aggregationQueryAliasTest() {
+    String expectedHeader =
+        
"count(root.sg.d1.speed),count(root.sg.d2.speed),max_value(root.sg.d1.temperature),"
+            + "max_value(root.sg.d2.temperature),";
     String[] retArray = new String[] {"4,4,28.3,26.3,"};
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select count(speed), max_value(temperature) 
from root.sg.*")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals(
-            "count(root.sg.d1.speed),count(root.sg.d2.speed),"
-                + 
"max_value(root.sg.d1.temperature),max_value(root.sg.d2.temperature),",
-            header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select count(speed), max_value(temperature) from root.sg.*", 
expectedHeader, retArray);
   }
 
   @Test
-  public void AlterAliasTest() {
-    String ret = "root.sg.d2.s3,powerNew,root.sg,FLOAT,RLE,SNAPPY";
-
+  public void alterAliasTest() {
     String[] retArray = {"100,80.0,", "200,81.0,", "300,82.0,", "400,83.0,"};
 
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
-
       statement.execute("ALTER timeseries root.sg.d2.s3 UPSERT 
ALIAS='powerNew'");
-      try (ResultSet resultSet = statement.executeQuery("show timeseries 
root.sg.d2.s3")) {
-        while (resultSet.next()) {
-          String ans =
-              resultSet.getString("timeseries")
-                  + ","
-                  + resultSet.getString("alias")
-                  + ","
-                  + resultSet.getString("storage group")
-                  + ","
-                  + resultSet.getString("dataType")
-                  + ","
-                  + resultSet.getString("encoding")
-                  + ","
-                  + resultSet.getString("compression");
-          assertEquals(ret, ans);
-        }
-      }
 
       try (ResultSet resultSet = statement.executeQuery("select powerNew from 
root.sg.d2")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,root.sg.d2.powerNew,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
+        assertResultSetEqual(resultSet, "Time,root.sg.d2.powerNew,", retArray);
       }
     } catch (Exception e) {
       fail(e.getMessage());
@@ -331,216 +184,78 @@ public class IoTDBAliasIT {
 
   @Test
   public void selectWithAsTest() {
+    String expectedHeader = "Time,speed,temperature,";
     String[] retArray =
         new String[] {"100,10.1,20.7,", "200,15.2,22.9,", "300,30.3,25.1,", 
"400,50.4,28.3,"};
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select s1 as speed, s2 as temperature from 
root.sg2.d1")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,speed,temperature,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select s1 as speed, s2 as temperature from root.sg2.d1", 
expectedHeader, retArray);
   }
 
-  /** Test some time series use alias while others stay unchanged. */
   @Test
   public void selectWithAsMixedTest() {
+    String expectedHeader = "Time,speed,root.sg2.d1.s2,";
     String[] retArray =
         new String[] {"100,10.1,20.7,", "200,15.2,22.9,", "300,30.3,25.1,", 
"400,50.4,28.3,"};
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select s1 as speed, s2 from root.sg2.d1")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,speed,root.sg2.d1.s2,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest("select s1 as speed, s2 from root.sg2.d1", 
expectedHeader, retArray);
   }
 
-  /**
-   * When one alias is used but wildcard is corresponding to multi time 
series, it should throw one
-   * exception.
-   */
   @Test
   public void selectWithAsFailTest() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      // root.sg.*.s1 matches root.sg.d1.s1 and root.sg.d2.s1 both
-      statement.executeQuery("select s1 as speed from root.sg2.*");
-      fail();
-    } catch (Exception e) {
-      Assert.assertTrue(
-          e.getCause().getCause().getMessage(),
-          e.getCause()
-              .getCause()
-              .getMessage()
-              .contains("alias 'speed' can only be matched with one time 
series"));
-    }
+    assertTestFail(
+        "select s1 as speed from root.sg2.*",
+        "alias 'speed' can only be matched with one time series");
   }
 
-  /** When wild is exactly corresponding to one time series, the result will 
be correct. */
   @Test
   public void selectWithAsSingleTest() {
+    String expectedHeader = "Time,power,";
     String[] retArray = new String[] {"100,80.0,", "200,81.0,", "300,82.0,", 
"400,83.0,"};
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      // root.sg.*.s3 matches root.sg.d2.s3 exactly
-      try (ResultSet resultSet = statement.executeQuery("select s3 as power 
from root.sg2.*")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,power,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    // root.sg.*.s3 matches root.sg.d2.s3 exactly
+    resultSetEqualTest("select s3 as power from root.sg2.*", expectedHeader, 
retArray);
   }
 
   @Test
   public void aggregationWithAsTest() {
+    String expectedHeader = "s1_num,s2_max,";
     String[] retArray =
         new String[] {
           "4,28.3,",
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery(
-              "select count(s1) as s1_num, max_value(s2) as s2_max from 
root.sg2.d1")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("s1_num,s2_max,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select count(s1) as s1_num, max_value(s2) as s2_max from root.sg2.d1",
+        expectedHeader,
+        retArray);
   }
 
   @Test
   public void aggregationWithAsFailTest() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      // root.sg2.*.s1 matches root.sg2.d1.s1 and root.sg2.d2.s1 both
-      statement.executeQuery("select count(s1) as s1_num from root.sg2.*");
-      fail();
-    } catch (Exception e) {
-      Assert.assertTrue(
-          e.getCause().getCause().getMessage(),
-          e.getCause()
-              .getCause()
-              .getMessage()
-              .contains("alias 's1_num' can only be matched with one time 
series"));
-    }
+    // root.sg2.*.s1 matches root.sg2.d1.s1 and root.sg2.d2.s1 both
+    assertTestFail(
+        "select count(s1) as s1_num from root.sg2.*",
+        "alias 's1_num' can only be matched with one time series");
   }
 
   @Test
   public void groupByWithAsTest() {
+    String expectedHeader = "Time,s1_num,";
     String[] retArray =
         new String[] {
           "100,1,", "180,1,", "260,1,", "340,1,", "420,0,",
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery(
-              "select count(s1) as 's1_num' from root.sg2.d1 group by 
([100,500), 80ms)")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,s1_num,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select count(s1) as 's1_num' from root.sg2.d1 group by ([100,500), 
80ms)",
+        expectedHeader,
+        retArray);
   }
 
   @Test
   public void alignByDeviceWithAsTest() {
+    String expectedHeader = "Time,Device,speed,temperature,";
     String[] retArray =
         new String[] {
           "100,root.sg2.d1,10.1,20.7,",
@@ -549,37 +264,15 @@ public class IoTDBAliasIT {
           "400,root.sg2.d1,50.4,28.3,"
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery(
-              "select s1 as speed, s2 as temperature from root.sg2.d1 align by 
device")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,Device,speed,temperature,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select s1 as speed, s2 as temperature from root.sg2.d1 align by 
device",
+        expectedHeader,
+        retArray);
   }
 
   @Test
   public void alignByDeviceWithAsMixedTest() {
+    String expectedHeader = "Time,Device,speed,s2,";
     String[] retArray =
         new String[] {
           "100,root.sg2.d2,11.1,20.2,",
@@ -592,53 +285,21 @@ public class IoTDBAliasIT {
           "400,root.sg2.d1,50.4,28.3,"
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select s1 as speed, s2 from root.sg2.* align 
by device")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,Device,speed,s2,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select s1 as speed, s2 from root.sg2.* align by device", 
expectedHeader, retArray);
   }
 
   @Test
   public void alignByDeviceWithAsFailTest() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      // root.sg.*.s1 matches root.sg.d1.s1 and root.sg.d2.s1 both
-      statement.executeQuery("select * as speed from root.sg2.d1 align by 
device");
-      fail();
-    } catch (Exception e) {
-      Assert.assertTrue(
-          e.getCause().getCause().getMessage(),
-          e.getCause()
-              .getCause()
-              .getMessage()
-              .contains("alias 'speed' can only be matched with one time 
series"));
-    }
+    // root.sg.*.s1 matches root.sg.d1.s1 and root.sg.d2.s1 both
+    assertTestFail(
+        "select * as speed from root.sg2.d1 align by device",
+        "alias 'speed' can only be matched with one time series");
   }
 
   @Test
   public void alignByDeviceWithAsDuplicatedTest() {
+    String expectedHeader = "Time,Device,speed,s1,";
     String[] retArray =
         new String[] {
           "100,root.sg2.d1,10.1,10.1,",
@@ -647,217 +308,119 @@ public class IoTDBAliasIT {
           "400,root.sg2.d1,50.4,50.4,"
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select s1 as speed, s1 from root.sg2.d1 
align by device")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,Device,speed,speed,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select s1 as speed, s1 from root.sg2.d1 align by device", 
expectedHeader, retArray);
   }
 
   @Test
   public void alignByDeviceWithAsAggregationTest() {
+    String expectedHeader = "Device,s1_num,count(s2),s3_num,";
     String[] retArray =
         new String[] {
           "root.sg2.d2,4,4,4,",
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery(
-              "select count(s1) as s1_num, count(s2), count(s3) as s3_num from 
root.sg2.d2 align by device")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Device,s1_num,count(s2),s3_num,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select count(s1) as s1_num, count(s2), count(s3) as s3_num from 
root.sg2.d2 align by device",
+        expectedHeader,
+        retArray);
   }
 
-  @Ignore
   @Test
+  @Ignore // TODO: remove @Ignore after support alias in last query
   public void lastWithAsTest() {
     String[] retArray = new String[] {"400,speed,50.4,FLOAT,", 
"400,root.sg2.d1.s2,28.3,FLOAT,"};
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery("select last s1 as speed, s2 from 
root.sg2.d1")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,timeseries,value,dataType,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest("select last s1 as speed, s2 from root.sg2.d1", 
LAST_QUERY_HEADER, retArray);
   }
 
-  @Ignore
   @Test
+  @Ignore // TODO: remove @Ignore after support alias in last query
   public void lastWithAsDuplicatedTest() {
     String[] retArray =
         new String[] {
           "400,speed,50.4,FLOAT,", "400,root.sg2.d1.s1,50.4,FLOAT,", 
"400,temperature,28.3,FLOAT,"
         };
 
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet =
-          statement.executeQuery(
-              "select last s1 as speed, s1, s2 as temperature from 
root.sg2.d1")) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder header = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          header.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        assertEquals("Time,timeseries,value,dataType,", header.toString());
-
-        int cnt = 0;
-        while (resultSet.next()) {
-          StringBuilder builder = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            builder.append(resultSet.getString(i)).append(",");
-          }
-          assertEquals(retArray[cnt], builder.toString());
-          cnt++;
-        }
-        assertEquals(retArray.length, cnt);
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
+    resultSetEqualTest(
+        "select last s1 as speed, s1, s2 as temperature from root.sg2.d1",
+        LAST_QUERY_HEADER,
+        retArray);
   }
 
-  @Ignore
   @Test
+  @Ignore // TODO: remove @Ignore after support alias in last query
   public void lastWithAsFailTest() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      // root.sg2.*.s1 matches root.sg2.d1.s1 and root.sg2.d2.s1 both
-      statement.executeQuery("select last s1 as speed from root.sg2.*");
-      fail();
-    } catch (Exception e) {
-      Assert.assertTrue(
-          e.getMessage().contains("alias 'speed' can only be matched with one 
time series"));
-    }
+    // root.sg2.*.s1 matches root.sg2.d1.s1 and root.sg2.d2.s1 both
+    assertTestFail(
+        "select last s1 as speed from root.sg2.*",
+        "alias 'speed' can only be matched with one time series");
   }
 
   @Test
-  @Ignore
+  @Ignore // TODO: remove @Ignore after support UDF
   public void UDFAliasTest() {
+    List<String> sqls =
+        Arrays.asList(
+            "select -s1, sin(cos(tan(s1))) as a, cos(s2), top_k(s1 + s1, 
'k'='1') as b from root.sg1.d1 WHERE time >= 1509466140000",
+            "select -s1, sin(cos(tan(s1))) as a, cos(s2), top_k(s1 + s1, 
'k'='1') as b from root.sg1.d1",
+            "select -s1, -s1, sin(cos(tan(s1))) as a, sin(cos(tan(s1))), 
cos(s2), top_k(s1 + s1, 'k'='1') as b, cos(s2) from root.sg1.d1");
+    List<String> expectHeaders =
+        Arrays.asList(
+            "Time,-root.sg1.d1.s1,a,cos(root.sg1.d1.s2),b,",
+            "Time,-root.sg1.d1.s1,a,cos(root.sg1.d1.s2),b,",
+            
"Time,-root.sg1.d1.s1,-root.sg1.d1.s1,a,sin(cos(tan(root.sg1.d1.s1))),cos(root.sg1.d1.s2),b,cos(root.sg1.d1.s2),");
+    List<String[]> retArrays =
+        Arrays.asList(
+            new String[] {},
+            new String[] {
+              "0,1,0.013387802193205699,0.5403023058681398,-2.0,",
+              "1,2,-0.5449592372801408,-0.4161468365471424,null,",
+              "2,3,0.8359477452180156,-0.9899924966004454,null,"
+            },
+            new String[] {
+              
"0,1,1,0.013387802193205699,0.013387802193205699,0.5403023058681398,-2.0,0.5403023058681398,",
+              
"1,2,2,-0.5449592372801408,-0.5449592372801408,-0.4161468365471424,null,-0.4161468365471424,",
+              
"2,3,3,0.8359477452180156,0.8359477452180156,-0.9899924966004454,null,-0.9899924966004454,"
+            });
+
+    for (int i = 0; i < sqls.size(); i++) {
+      resultSetEqualTest(sqls.get(i), expectHeaders.get(i), retArrays.get(i));
+    }
+  }
 
-    String[] expect = {
-      "Time,-root.sg1.d1.s1,a,cos(root.sg1.d1.s2),b,",
-      "Time,-root.sg1.d1.s1,a,cos(root.sg1.d1.s2),b,",
-      
"Time,-root.sg1.d1.s1,-root.sg1.d1.s1,a,sin(cos(tan(root.sg1.d1.s1))),cos(root.sg1.d1.s2),b,cos(root.sg1.d1.s2),"
-    };
-    String[] sqls = {
-      "select -s1, sin(cos(tan(s1))) as a, cos(s2), top_k(s1 + s1, 'k'='1') as 
b from root.sg1.d1 WHERE time >= 1509466140000",
-      "select -s1, sin(cos(tan(s1))) as a, cos(s2), top_k(s1 + s1, 'k'='1') as 
b from root.sg1.d1",
-      "select -s1, -s1, sin(cos(tan(s1))) as a, sin(cos(tan(s1))), cos(s2), 
top_k(s1 + s1, 'k'='1') as b, cos(s2) from root.sg1.d1"
+  @Test
+  @Ignore // TODO: remove @Ignore after support UDF
+  public void UDFAliasResultTest() {
+    String expectHeader = "Time,root.sg1.d1.s1,root.sg1.d1.s2,a,";
+    String[] retArray = {
+      "0,-1,1,0.0", "1,-2,2,0.0", "2,-3,3,0.0",
     };
-    int count = 2;
-
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
 
-      for (int index = 0; index < count; index++) {
+    resultSetEqualTest("select s1, s2, sin(s1+s2) as a from root.sg1.d1", 
expectHeader, retArray);
+  }
 
-        try (ResultSet resultSet = statement.executeQuery(sqls[index])) {
+  // --------------------------------------- Utilities 
---------------------------------------
 
-          ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-          StringBuilder header = new StringBuilder();
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            header.append(resultSetMetaData.getColumnName(i)).append(",");
-          }
-          Assert.assertEquals(expect[index], header.toString());
-        }
+  public void resultSetEqualTest(String sql, String expectedHeader, String[] 
expectedRetArray) {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      try (ResultSet resultSet = statement.executeQuery(sql)) {
+        assertResultSetEqual(resultSet, expectedHeader, expectedRetArray);
       }
-
     } catch (Exception e) {
+      e.printStackTrace();
       fail(e.getMessage());
     }
   }
 
-  @Test
-  @Ignore
-  public void UDFAliasResultTest() {
-
-    String[] expect = {
-      "0,-1,1,0.0", "1,-2,2,0.0", "2,-3,3,0.0",
-    };
-    String sql = "select s1, s2, sin(s1+s2) as a from root.sg1.d1 ";
+  public void assertTestFail(String sql, String errMsg) {
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
-      try (ResultSet resultSet = statement.executeQuery(sql)) {
-        int cnt = 0;
-        while (resultSet.next()) {
-          String ans =
-              resultSet.getString(COLUMN_TIME)
-                  + ","
-                  + resultSet.getString("root.sg1.d1.s1")
-                  + ","
-                  + resultSet.getString("root.sg1.d1.s2")
-                  + ","
-                  + resultSet.getString("a");
-          assertEquals(expect[cnt++], ans);
-        }
-      }
+      statement.executeQuery(sql);
+      fail();
     } catch (Exception e) {
-      fail(e.getMessage());
+      Assert.assertTrue(e.getMessage(), e.getMessage().contains(errMsg));
     }
   }
 }
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/query/TestUtils.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/query/TestUtils.java
new file mode 100644
index 0000000000..56c0b1c0ec
--- /dev/null
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/query/TestUtils.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.it.query;
+
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+import static org.junit.Assert.assertEquals;
+
+public class TestUtils {
+
+  public static void assertResultSetEqual(
+      ResultSet actualResultSet, String expectedHeader, String[] 
expectedRetArray)
+      throws SQLException {
+    ResultSetMetaData resultSetMetaData = actualResultSet.getMetaData();
+    StringBuilder header = new StringBuilder();
+    for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+      header.append(resultSetMetaData.getColumnName(i)).append(",");
+    }
+    assertEquals(expectedHeader, header.toString());
+
+    int cnt = 0;
+    while (actualResultSet.next()) {
+      StringBuilder builder = new StringBuilder();
+      for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+        builder.append(actualResultSet.getString(i)).append(",");
+      }
+      assertEquals(expectedRetArray[cnt], builder.toString());
+      cnt++;
+    }
+    assertEquals(expectedRetArray.length, cnt);
+  }
+}

Reply via email to