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

jackietien pushed a commit to branch ty/TableIT
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 4665b9dff2431475293240327d4ccded6c706d65
Author: JackieTien97 <[email protected]>
AuthorDate: Mon Jul 22 15:13:39 2024 +0800

    Add IoTDBAlignByDeviceWithTemplateIT in table model
---
 .../org/apache/iotdb/db/it/utils/TestUtils.java    |  65 +++
 .../IoTDBAlignByDeviceWithTemplateIT.java          | 514 +++++++++++++++++++++
 2 files changed, 579 insertions(+)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
index 372c9200c5e..d2712df7f59 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
@@ -174,6 +174,71 @@ public class TestUtils {
     resultSetEqualTest(sql, expectedHeader, expectedRetArray, null);
   }
 
+  public static void tableResultSetEqualTest(
+      String sql, String[] expectedHeader, String[] expectedRetArray, String 
database) {
+    tableResultSetEqualTest(
+        sql,
+        expectedHeader,
+        expectedRetArray,
+        SessionConfig.DEFAULT_USER,
+        SessionConfig.DEFAULT_PASSWORD,
+        database);
+  }
+
+  public static void tableResultSetEqualTest(
+      String sql,
+      String[] expectedHeader,
+      String[] expectedRetArray,
+      String userName,
+      String password,
+      String database) {
+    try (Connection connection =
+        EnvFactory.getEnv().getConnection(userName, password, 
BaseEnv.TABLE_SQL_DIALECT)) {
+      connection.setClientInfo("time_zone", "+00:00");
+      try (Statement statement = connection.createStatement()) {
+        statement.execute("use " + database);
+        try (ResultSet resultSet = statement.executeQuery(sql)) {
+          ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            assertEquals(expectedHeader[i - 1], 
resultSetMetaData.getColumnName(i));
+          }
+          assertEquals(expectedHeader.length, 
resultSetMetaData.getColumnCount());
+
+          int cnt = 0;
+          while (resultSet.next()) {
+            StringBuilder builder = new StringBuilder();
+
+            for (int i = 1; i <= expectedHeader.length; i++) {
+              builder.append(resultSet.getString(i)).append(",");
+            }
+            assertEquals(expectedRetArray[cnt], builder.toString());
+            cnt++;
+          }
+          assertEquals(expectedRetArray.length, cnt);
+        }
+      }
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  public static void tableAssertTestFail(String sql, String errMsg) {
+    tableAssertTestFail(sql, errMsg, SessionConfig.DEFAULT_USER, 
SessionConfig.DEFAULT_PASSWORD);
+  }
+
+  public static void tableAssertTestFail(
+      String sql, String errMsg, String userName, String password) {
+    try (Connection connection =
+            EnvFactory.getEnv().getConnection(userName, password, 
BaseEnv.TABLE_SQL_DIALECT);
+        Statement statement = connection.createStatement()) {
+      statement.executeQuery(sql);
+      fail("No exception!");
+    } catch (SQLException e) {
+      Assert.assertEquals(errMsg, e.getMessage());
+    }
+  }
+
   public static void resultSetEqualTest(
       String sql,
       String[] expectedHeader,
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/alignbydevice/IoTDBAlignByDeviceWithTemplateIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/alignbydevice/IoTDBAlignByDeviceWithTemplateIT.java
new file mode 100644
index 00000000000..cd6154aea78
--- /dev/null
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/alignbydevice/IoTDBAlignByDeviceWithTemplateIT.java
@@ -0,0 +1,514 @@
+/*
+ * 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.relational.it.query.old.alignbydevice;
+
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
+import org.apache.iotdb.itbase.env.BaseEnv;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import static org.apache.iotdb.db.it.utils.TestUtils.tableAssertTestFail;
+import static org.apache.iotdb.db.it.utils.TestUtils.tableResultSetEqualTest;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+@Ignore
+@RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
+public class IoTDBAlignByDeviceWithTemplateIT {
+
+  private static final String DATABASE_NAME = "db";
+  private static final String[] sqls =
+      new String[] {
+        "CREATE database " + DATABASE_NAME,
+        "use " + DATABASE_NAME,
+        "create table table1(device_id STRING ID, s1 FLOAT MEASUREMENT, s2 
BOOLEAN MEASUREMENT, s3 INT32 MEASUREMENT);",
+        "INSERT INTO table1(Time, device_id, s1, s2, s3) VALUES (1,'d1', 1.1, 
false, 1), (2, 'd1', 2.2, false, 2), (1,'d2', 11.1, false, 11), (2,'d2', 22.2, 
false, 22), (1,'d3', 111.1, true, null), (4,'d3', 444.4, true, 44), (1,'d4', 
1111.1, true, 1111), (5,'d4', 5555.5, false, 5555)",
+      };
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvFactory.getEnv().initClusterEnvironment();
+    insertData();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    EnvFactory.getEnv().cleanClusterEnvironment();
+  }
+
+  @Test
+  public void selectWildcardNoFilterTest() {
+    // 1. order by device_id
+    String[] expectedHeader = new String[] {"Time", "device_id", "s3", "s1", 
"s2"};
+    String[] retArray =
+        new String[] {
+          "1997-01-01T08:00:00.001Z,d1,1,1.1,false,",
+          "1997-01-01T08:00:00.002Z,d1,2,2.2,false,",
+          "1997-01-01T08:00:00.001Z,d2,11,11.1,false,",
+          "1997-01-01T08:00:00.002Z,d2,22,22.2,false,",
+          "1997-01-01T08:00:00.001Z,d3,null,111.1,true,",
+          "1997-01-01T08:00:00.004Z,d3,44,444.4,true,",
+          "1997-01-01T08:00:00.001Z,d4,1111,1111.1,true,",
+          "1997-01-01T08:00:00.005Z,d4,5555,5555.5,false,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3, s1, s2 FROM table1 order by device_id;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    expectedHeader = new String[] {"Time", "device_id", "s1", "s2", "s3", 
"s1"};
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.001Z,d1,1.1,false,1,1.1,",
+          "1997-01-01T08:00:00.002Z,d1,2.2,false,2,2.2,",
+          "1997-01-01T08:00:00.001Z,d2,11.1,false,11,11.1,",
+          "1997-01-01T08:00:00.002Z,d2,22.2,false,22,22.2,",
+          "1997-01-01T08:00:00.001Z,d3,111.1,true,null,111.1,",
+          "1997-01-01T08:00:00.004Z,d3,444.4,true,44,444.4,",
+          "1997-01-01T08:00:00.001Z,d4,1111.1,true,1111,1111.1,",
+          "1997-01-01T08:00:00.005Z,d4,5555.5,false,5555,5555.5,",
+        };
+    tableResultSetEqualTest(
+        "SELECT *, s1 FROM table1 order by device_id;", expectedHeader, 
retArray, DATABASE_NAME);
+
+    expectedHeader = new String[] {"Time", "device_id", "s1", "s2", "s3"};
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.001Z,d1,1.1,false,1,",
+          "1997-01-01T08:00:00.002Z,d1,2.2,false,2,",
+          "1997-01-01T08:00:00.001Z,d2,11.1,false,11,",
+          "1997-01-01T08:00:00.002Z,d2,22.2,false,22,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 where device_id = 'd1' or device_id = 'd2' or 
device_id = 'd3' order by device_id;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 2. order by device_id + limit/offset
+    expectedHeader = new String[] {"Time", "device_id", "s1", "s2", "s3"};
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.002Z,d1,2.2,false,2,", 
"1997-01-01T08:00:00.001Z,d2,11.1,false,11,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 order by device_id OFFSET 1 LIMIT 2;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 3. order by time
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.005Z,d4,5555.5,false,5555,",
+          "1997-01-01T08:00:00.004Z,d3,444.4,true,44,",
+          "1997-01-01T08:00:00.002Z,d1,2.2,false,2,",
+          "1997-01-01T08:00:00.002Z,d2,22.2,false,22,",
+          "1997-01-01T08:00:00.001Z,d1,1.1,false,1,",
+          "1997-01-01T08:00:00.001Z,d2,11.1,false,11,",
+          "1997-01-01T08:00:00.001Z,d3,111.1,true,null,",
+          "1997-01-01T08:00:00.001Z,d4,1111.1,true,1111,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 ORDER BY Time DESC, device_id ASC;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 4. order by time + limit/offset
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.005Z,d4,5555.5,false,5555,",
+          "1997-01-01T08:00:00.004Z,d3,444.4,true,44,",
+          "1997-01-01T08:00:00.002Z,d1,2.2,false,2,",
+          "1997-01-01T08:00:00.002Z,d2,22.2,false,22,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 ORDER BY TIME DESC, device_id LIMIT 4;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  @Test
+  public void selectMeasurementNoFilterTest() {
+    // 1. order by device_id
+    String[] expectedHeader = new String[] {"Time", "device_id", "s3", "s1"};
+    String[] retArray =
+        new String[] {
+          "1997-01-01T08:00:00.001Z,d1,1,1.1,",
+          "1997-01-01T08:00:00.002Z,d1,2,2.2,",
+          "1997-01-01T08:00:00.001Z,d2,11,11.1,",
+          "1997-01-01T08:00:00.002Z,d2,22,22.2,",
+          "1997-01-01T08:00:00.001Z,d3,null,111.1,",
+          "1997-01-01T08:00:00.004Z,d3,44,444.4,",
+          "1997-01-01T08:00:00.001Z,d4,1111,1111.1,",
+          "1997-01-01T08:00:00.005Z,d4,5555,5555.5,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3, s1 FROM table1 order by device_id;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    try (Connection connection = 
EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT)) {
+      try (Statement statement = connection.createStatement()) {
+        statement.execute("use " + DATABASE_NAME);
+        try (ResultSet resultSet =
+            statement.executeQuery("SELECT s3,s1,s_null FROM table1 order by 
device_id;")) {
+          fail("should throw exception to indicate that s_null doesn't exist");
+        } catch (SQLException e) {
+          assertEquals("701: Column 's_null' cannot be resolved", 
e.getMessage());
+        }
+      }
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+
+    // 2. order by device + limit/offset
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.002Z,d1,2,2.2,", 
"1997-01-01T08:00:00.001Z,d2,11,11.1,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3,s1 FROM table1 order by device_id OFFSET 1 
LIMIT 2;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 3. order by time
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.005Z,d4,5555,5555.5,",
+          "1997-01-01T08:00:00.004Z,d3,44,444.4,",
+          "1997-01-01T08:00:00.002Z,d1,2,2.2,",
+          "1997-01-01T08:00:00.002Z,d2,22,22.2,",
+          "1997-01-01T08:00:00.001Z,d1,1,1.1,",
+          "1997-01-01T08:00:00.001Z,d2,11,11.1,",
+          "1997-01-01T08:00:00.001Z,d3,null,111.1,",
+          "1997-01-01T08:00:00.001Z,d4,1111,1111.1,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3,s1 FROM table1 ORDER BY TIME DESC, 
device_id;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 4. order by time + limit/offset
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.005Z,d4,5555,5555.5,",
+          "1997-01-01T08:00:00.004Z,d3,44,444.4,",
+          "1997-01-01T08:00:00.002Z,d1,2,2.2,",
+          "1997-01-01T08:00:00.002Z,d2,22,22.2,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3,s1 FROM table1 ORDER BY TIME DESC, 
device_id LIMIT 4;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  @Test
+  public void selectWildcardWithFilterOrderByTimeTest() {
+    // 1. order by time + time filter
+    String[] expectedHeader = new String[] {"Time", "device_id", "s1", "s2", 
"s3"};
+    String[] retArray =
+        new String[] {
+          "1997-01-01T08:00:00.004Z,d3,444.4,true,44,",
+          "1997-01-01T08:00:00.002Z,d1,2.2,false,2,",
+          "1997-01-01T08:00:00.002Z,d2,22.2,false,22,",
+          "1997-01-01T08:00:00.001Z,d1,1.1,false,1,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 WHERE time < 5 ORDER BY TIME DESC LIMIT 4;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 2. order by time + time filter + value filter
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.004Z,d3,444.4,true,44,",
+          "1997-01-01T08:00:00.002Z,d2,22.2,false,22,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 where time > 1 and time < 5 and s3>=11 and 
s3<=1111 and s1 != 11.1 "
+            + "ORDER BY TIME DESC, device_id",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 3. order by time + value filter: s_null > 1
+    try (Connection connection = 
EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT)) {
+      try (Statement statement = connection.createStatement()) {
+        statement.execute("use " + DATABASE_NAME);
+        try (ResultSet resultSet =
+            statement.executeQuery("SELECT * FROM table1 WHERE s_null > 1 
order by device_id;")) {
+          fail("should throw exception to indicate that s_null doesn't exist");
+        } catch (SQLException e) {
+          assertEquals("701: Column 's_null' cannot be resolved", 
e.getMessage());
+        }
+      }
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectWildcardWithFilterOrderByDeviceTest() {
+    // 1. order by device + time filter
+    String[] expectedHeader = new String[] {"Time", "device_id", "s1", "s2", 
"s3"};
+
+    String[] retArray =
+        new String[] {
+          "1997-01-01T08:00:00.001Z,d4,1111.1,true,1111,",
+          "1997-01-01T08:00:00.001Z,d3,111.1,true,null,",
+          "1997-01-01T08:00:00.004Z,d3,444.4,true,44,",
+          "1997-01-01T08:00:00.001Z,d2,11.1,false,11,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 WHERE time < 5 ORDER BY device_id DESC LIMIT 4",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 2. order by device + time filter + value filter
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.004Z,d3,444.4,true,44,",
+          "1997-01-01T08:00:00.001Z,d2,22.2,false,22,",
+        };
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 where time > 1 and time < 5 and s3>=11 and 
s3<=1111 and s1 != 11.1 "
+            + "ORDER BY device_id DESC;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  @Test
+  public void selectMeasurementWithFilterOrderByTimeTest() {
+    // 1. order by time + time filter
+    String[] expectedHeader = new String[] {"Time", "device_id", "s3", "s2"};
+    String[] retArray =
+        new String[] {
+          "1997-01-01T08:00:00.004Z,d3,44,true,",
+          "1997-01-01T08:00:00.002Z,d1,2,false,",
+          "1997-01-01T08:00:00.002Z,d2,22,false,",
+          "1997-01-01T08:00:00.001Z,d1,1,false,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3, s2 FROM table1 WHERE time < 5 ORDER BY 
TIME DESC, device_id LIMIT 4;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 2. order by time + time filter + value filter
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.004Z,d3,44,true,", 
"1997-01-01T08:00:00.002Z,d2,22,false,",
+        };
+    tableResultSetEqualTest(
+        "SELECT s3,s2 FROM table1 where time > 1 and time < 5 and s3>=11 and 
s3<=1111 and s1 != 11.1 "
+            + "ORDER BY TIME DESC, device_id;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  @Test
+  public void selectMeasurementWithFilterOrderByDeviceTest() {
+    // 1. order by device + time filter
+    String[] expectedHeader = new String[] {"Time", "device_id", "s3", "s2"};
+    String[] retArray =
+        new String[] {
+          "1997-01-01T08:00:00.001Z,d4,1111,true,",
+          "1997-01-01T08:00:00.001Z,d3,null,true,",
+          "1997-01-01T08:00:00.004Z,d3,44,true,",
+          "1997-01-01T08:00:00.001Z,d2,11,false,",
+        };
+    tableResultSetEqualTest(
+        "SELECT s3,s2 FROM table1 WHERE time < 5 ORDER BY DEVICE DESC, Time 
LIMIT 4",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 2. order by device + time filter + value filter
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.004Z,d3,44,true,", 
"1997-01-01T08:00:00.002Z,d2,22,false,",
+        };
+    tableResultSetEqualTest(
+        "SELECT s3,s2 FROM table1 where time > 1 and time < 5 and s3>=11 and 
s3<=1111 and s1 != 11.1 "
+            + "ORDER BY DEVICE DESC, Time asc",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  @Test
+  public void aliasTest() {
+    String[] expectedHeader = new String[] {"aa", "bb", "s3", "s2", "Time", 
"device_id"};
+
+    String[] retArray =
+        new String[] {
+          "1.1,false,1,false,1997-01-01T08:00:00.001Z,d1,",
+          "2.2,false,2,false,1997-01-01T08:00:00.002Z,d1,",
+          "11.1,false,11,false,1997-01-01T08:00:00.001Z,d2,",
+          "22.2,false,22,false,1997-01-01T08:00:00.002Z,d2,",
+          "111.1,true,null,true,1997-01-01T08:00:00.001Z,d3,",
+          "444.4,true,44,true,1997-01-01T08:00:00.004Z,d3,",
+          "1111.1,true,1111,true,1997-01-01T08:00:00.001Z,d4,",
+          "5555.5,false,5555,false,1997-01-01T08:00:00.005Z,d4,",
+        };
+    tableResultSetEqualTest(
+        "SELECT s1 as aa, s2 as bb, s3, s2, Time, device_id FROM table1;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    expectedHeader = new String[] {"Time", "device_id", "a", "b"};
+
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.001Z,d1,1.1,1.1,",
+          "1997-01-01T08:00:00.002Z,d1,2.2,2.2,",
+          "1997-01-01T08:00:00.001Z,d2,11.1,11.1,",
+          "1997-01-01T08:00:00.002Z,d2,22.2,22.2,",
+          "1997-01-01T08:00:00.001Z,d3,111.1,111.1,",
+          "1997-01-01T08:00:00.004Z,d3,444.4,444.4,",
+          "1997-01-01T08:00:00.001Z,d4,1111.1,1111.1,",
+          "1997-01-01T08:00:00.005Z,d4,5555.5,5555.5,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s1 as a, s1 as b  FROM table1",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  @Test
+  public void orderByExpressionTest() {
+    // 1. order by basic measurement
+    String[] expectedHeader = new String[] {"Time", "device_id", "s3", "s1", 
"s2"};
+    String[] retArray =
+        new String[] {
+          "1997-01-01T08:00:00.005Z,d4,5555,5555.5,false,",
+          "1997-01-01T08:00:00.002Z,d2,22,22.2,false,",
+          "1997-01-01T08:00:00.001Z,d2,11,11.1,false,",
+          "1997-01-01T08:00:00.002Z,d1,2,2.2,false,",
+          "1997-01-01T08:00:00.001Z,d1,1,1.1,false,",
+          "1997-01-01T08:00:00.001Z,d4,1111,1111.1,true,",
+          "1997-01-01T08:00:00.004Z,d3,44,444.4,true,",
+          "1997-01-01T08:00:00.001Z,d3,null,111.1,true,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3, s1, s2 FROM table1 order by s2 asc, s1 
desc, device_id;",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 2. select measurement is different with order by measurement
+    expectedHeader = new String[] {"Time", "device_id", "s3"};
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.005Z,d4,5555,",
+          "1997-01-01T08:00:00.002Z,d2,22,",
+          "1997-01-01T08:00:00.001Z,d2,11,",
+          "1997-01-01T08:00:00.002Z,d1,2,",
+          "1997-01-01T08:00:00.001Z,d1,1,",
+          "1997-01-01T08:00:00.001Z,d4,1111,",
+          "1997-01-01T08:00:00.004Z,d3,44,",
+          "1997-01-01T08:00:00.001Z,d3,null,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3 FROM table1 order by s2 asc, s1 desc",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+
+    // 3. order by expression
+    retArray =
+        new String[] {
+          "1997-01-01T08:00:00.005Z,d4,5555,",
+          "1997-01-01T08:00:00.001Z,d4,1111,",
+          "1997-01-01T08:00:00.004Z,d3,44,",
+          "1997-01-01T08:00:00.002Z,d2,22,",
+          "1997-01-01T08:00:00.001Z,d2,11,",
+          "1997-01-01T08:00:00.002Z,d1,2,",
+          "1997-01-01T08:00:00.001Z,d1,1,",
+          "1997-01-01T08:00:00.001Z,d3,null,",
+        };
+    tableResultSetEqualTest(
+        "SELECT Time, device_id, s3 FROM root.sg1.** order by s1+s3 desc",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  @Test
+  public void templateInvalidTest() {
+
+    tableAssertTestFail(
+        "select s1 from table1 where s1",
+        "701: WHERE clause must evaluate to a boolean: actual type FLOAT");
+  }
+
+  @Test
+  public void emptyResultTest() {
+    String[] expectedHeader = new String[] {"Time", "device_id", "s1", "s2", 
"s3"};
+
+    String[] retArray = new String[] {};
+    tableResultSetEqualTest(
+        "SELECT * FROM table1 where time>=now()-1d and time<=now() " + "ORDER 
BY TIME DESC",
+        expectedHeader,
+        retArray,
+        DATABASE_NAME);
+  }
+
+  protected static void insertData() {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+
+      for (String sql : sqls) {
+        statement.execute(sql);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+}

Reply via email to