Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -120,50 +120,55 @@ public static void tearDown() throws Exception {
public void testAggregateFunctions() {
String query =
"SELECT COUNT(t), AVG(t), MAX_TIME(t), MIN_TIME(t), MAX_VALUE(t), MIN_VALUE(t), EXTREME(t) FROM root.sg.** GROUP BY TAGS(k1)";
// Expected result set:
// Expected groups (row order depends on schema traversal):
// +----+--------+------------------+-----------+-----------+------------+------------+----------+
// | k1|count(t)|
// avg(t)|max_time(t)|min_time(t)|max_value(t)|min_value(t)|extreme(t)|
// +----+--------+------------------+-----------+-----------+------------+------------+----------+
// |k1v2| 4|3.1000000536441803| 10| 1| 5.4| 1.3|
// 5.4|
// |k1v1| 6| 2.600000003973643| 10| 1| 6.5| 1.1|
// 6.5|
// |k1v2| 4|3.1000000536441803| 10| 1| 5.4| 1.3|
// 5.4|
// |NULL| 4| 4.89999994635582| 10| 1| 8.7| 1.6|
// 8.7|
// +----+--------+------------------+-----------+-----------+------------+------------+----------+
try (Connection connection = EnvFactory.getEnv().getConnection();
Statement statement = connection.createStatement()) {
try (ResultSet resultSet = statement.executeQuery(query)) {
Assert.assertEquals(8, resultSet.getMetaData().getColumnCount());
Assert.assertTrue(resultSet.next());
Assert.assertEquals("k1v2", resultSet.getString("k1"));
Assert.assertEquals(4L, resultSet.getLong("count(t)"));
Assert.assertEquals(3.1D, resultSet.getDouble("avg(t)"), DELTA);
Assert.assertEquals(10L, resultSet.getLong("max_time(t)"));
Assert.assertEquals(1L, resultSet.getLong("min_time(t)"));
Assert.assertEquals(5.4F, resultSet.getFloat("max_value(t)"), DELTA);
Assert.assertEquals(1.3F, resultSet.getFloat("min_value(t)"), DELTA);
Assert.assertEquals(5.4F, resultSet.getFloat("extreme(t)"), DELTA);
Assert.assertTrue(resultSet.next());
Assert.assertEquals("k1v1", resultSet.getString(1));
Assert.assertEquals(6L, resultSet.getLong(2));
Assert.assertEquals(2.6D, resultSet.getDouble(3), DELTA);
Assert.assertEquals(10L, resultSet.getLong(4));
Assert.assertEquals(1L, resultSet.getLong(5));
Assert.assertEquals(6.5F, resultSet.getFloat(6), DELTA);
Assert.assertEquals(1.1F, resultSet.getFloat(7), DELTA);
Assert.assertEquals(6.5F, resultSet.getFloat(8), DELTA);
Assert.assertTrue(resultSet.next());
Assert.assertEquals("NULL", resultSet.getString(1));
Assert.assertEquals(4L, resultSet.getLong(2));
Assert.assertEquals(4.9D, resultSet.getDouble(3), DELTA);
Assert.assertEquals(10L, resultSet.getLong(4));
Assert.assertEquals(1L, resultSet.getLong(5));
Assert.assertEquals(8.7D, resultSet.getFloat(6), DELTA);
Assert.assertEquals(1.6D, resultSet.getFloat(7), DELTA);
Assert.assertEquals(8.7D, resultSet.getFloat(8), DELTA);
Assert.assertFalse(resultSet.next());
Set<String> groups = new HashSet<>();
while (resultSet.next()) {
String tagValue = resultSet.getString("k1");
Assert.assertTrue(groups.add(tagValue));
switch (tagValue) {
case "k1v1":
Assert.assertEquals(6L, resultSet.getLong("count(t)"));
Assert.assertEquals(2.6D, resultSet.getDouble("avg(t)"), DELTA);
Assert.assertEquals(6.5F, resultSet.getFloat("max_value(t)"), DELTA);
Assert.assertEquals(1.1F, resultSet.getFloat("min_value(t)"), DELTA);
Assert.assertEquals(6.5F, resultSet.getFloat("extreme(t)"), DELTA);
break;
case "k1v2":
Assert.assertEquals(4L, resultSet.getLong("count(t)"));
Assert.assertEquals(3.1D, resultSet.getDouble("avg(t)"), DELTA);
Assert.assertEquals(5.4F, resultSet.getFloat("max_value(t)"), DELTA);
Assert.assertEquals(1.3F, resultSet.getFloat("min_value(t)"), DELTA);
Assert.assertEquals(5.4F, resultSet.getFloat("extreme(t)"), DELTA);
break;
case "NULL":
Assert.assertEquals(4L, resultSet.getLong("count(t)"));
Assert.assertEquals(4.9D, resultSet.getDouble("avg(t)"), DELTA);
Assert.assertEquals(8.7D, resultSet.getFloat("max_value(t)"), DELTA);
Assert.assertEquals(1.6D, resultSet.getFloat("min_value(t)"), DELTA);
Assert.assertEquals(8.7D, resultSet.getFloat("extreme(t)"), DELTA);
break;
default:
fail("Unexpected tag value: " + tagValue);
}
Assert.assertEquals(10L, resultSet.getLong("max_time(t)"));
Assert.assertEquals(1L, resultSet.getLong("min_time(t)"));
}
Assert.assertEquals(3, groups.size());
}
} catch (SQLException e) {
e.printStackTrace();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,8 @@ public void testTimeDurationManyColumnOnManyDataRegion() {

// group by tags
expectedHeader = new String[] {"city", "time_duration(s1)"};
retArray = new String[] {"Beijing,1677570933,", "Nanjing,1677570938,"};
// The root.db1 series are encountered first, so the Nanjing group is returned first.
retArray = new String[] {"Nanjing,1677570938,", "Beijing,1677570933,"};
resultSetEqualTest(
"select time_duration(s1) from root.db1.**,root.db.** group by tags(city)",
expectedHeader,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -542,25 +542,25 @@ public void orderByTest() {
public void wildCardTest() {
String[] expectedHeader =
new String[] {
"Device,max_time(s3),max_time(s1),max_time(s2),last_value(s1),last_value(s3),last_value(s1),last_value(s2)"
"Device,max_time(s1),max_time(s2),max_time(s3),last_value(s1),last_value(s1),last_value(s2),last_value(s3)"
};
String[] retArray =
new String[] {
"root.sg1.d1,1314000000000,1314000000000,1314000000000,13.14,1314,13.14,true,",
"root.sg1.d2,1314000000001,1314000000001,1314000000001,13.15,1315,13.15,false,",
"root.sg1.d3,1314000000002,1314000000002,1314000000002,13.16,1316,13.16,false,",
"root.sg1.d4,1314000000003,1314000000003,1314000000003,13.14,1314,13.14,true,",
"root.sg1.d1,1314000000000,1314000000000,1314000000000,13.14,13.14,true,1314,",
"root.sg1.d2,1314000000001,1314000000001,1314000000001,13.15,13.15,false,1315,",
"root.sg1.d3,1314000000002,1314000000002,1314000000002,13.16,13.16,false,1316,",
"root.sg1.d4,1314000000003,1314000000003,1314000000003,13.14,13.14,true,1314,",
};
resultSetEqualTest(
"SELECT max_time(*), last_value(s1), last_value(*) FROM root.sg1.** align by device;",
expectedHeader,
retArray);
retArray =
new String[] {
"root.sg2.d1,1314000000000,1314000000000,1314000000000,13.14,1314,13.14,true,",
"root.sg2.d2,1314000000001,1314000000001,1314000000001,13.15,1315,13.15,false,",
"root.sg2.d3,1314000000002,1314000000002,1314000000002,13.16,1316,13.16,false,",
"root.sg2.d4,1314000000003,1314000000003,1314000000003,13.14,1314,13.14,true,",
"root.sg2.d1,1314000000000,1314000000000,1314000000000,13.14,13.14,true,1314,",
"root.sg2.d2,1314000000001,1314000000001,1314000000001,13.15,13.15,false,1315,",
"root.sg2.d3,1314000000002,1314000000002,1314000000002,13.16,13.16,false,1316,",
"root.sg2.d4,1314000000003,1314000000003,1314000000003,13.14,13.14,true,1314,",
};
resultSetEqualTest(
"SELECT max_time(*), last_value(s1), last_value(*) FROM root.sg2.** align by device;",
Expand All @@ -569,55 +569,55 @@ public void wildCardTest() {

// filter test
expectedHeader =
new String[] {"Device,max_time(s1),last_value(s3),last_value(s1),last_value(s2),count(s2)"};
new String[] {"Device,max_time(s1),last_value(s1),last_value(s2),last_value(s3),count(s2)"};
retArray =
new String[] {
"root.sg1.d1,1314000000000,1314,13.14,true,3,",
"root.sg1.d2,1314000000001,1315,13.15,false,4,",
"root.sg1.d3,1314000000002,1316,13.16,false,3,",
"root.sg1.d4,1314000000003,1314,13.14,true,4,",
"root.sg1.d1,1314000000000,13.14,true,1314,3,",
"root.sg1.d2,1314000000001,13.15,false,1315,4,",
"root.sg1.d3,1314000000002,13.16,false,1316,3,",
"root.sg1.d4,1314000000003,13.14,true,1314,4,",
};
resultSetEqualTest(
"SELECT max_time(s1), last_value(*), count(s2) FROM root.sg1.** where s3>1 align by device;",
expectedHeader,
retArray);
retArray =
new String[] {
"root.sg2.d1,1314000000000,1314,13.14,true,3,",
"root.sg2.d2,1314000000001,1315,13.15,false,4,",
"root.sg2.d3,1314000000002,1316,13.16,false,3,",
"root.sg2.d4,1314000000003,1314,13.14,true,4,",
"root.sg2.d1,1314000000000,13.14,true,1314,3,",
"root.sg2.d2,1314000000001,13.15,false,1315,4,",
"root.sg2.d3,1314000000002,13.16,false,1316,3,",
"root.sg2.d4,1314000000003,13.14,true,1314,4,",
};
resultSetEqualTest(
"SELECT max_time(s1), last_value(*), count(s2) FROM root.sg2.** where s3>1 align by device;",
expectedHeader,
retArray);

// sliding window
expectedHeader = new String[] {"Time,Device,last_value(s1),last_value(s2)"};
expectedHeader = new String[] {"Time,Device,last_value(s2),last_value(s3)"};
retArray =
new String[] {
"1,root.sg1.d1,2.2,false,",
"1,root.sg1.d2,22.2,false,",
"3,root.sg1.d2,50.0,false,",
"5,root.sg1.d2,50.0,false,",
"7,root.sg1.d3,8.8,false,",
"3,root.sg1.d4,5555.5,false,",
"5,root.sg1.d4,5555.5,false,",
"1,root.sg1.d1,false,2,",
"1,root.sg1.d2,false,22,",
"3,root.sg1.d2,false,5,",
"5,root.sg1.d2,false,5,",
"7,root.sg1.d3,false,4,",
"3,root.sg1.d4,false,5555,",
"5,root.sg1.d4,false,5555,",
};
resultSetEqualTest(
"SELECT last_value(*) FROM root.sg1.** where s3+1=1316 or s2=false group by ([1,10),3ms,2ms) having avg(s1)>0 soffset 1 slimit 2 align by device;",
expectedHeader,
retArray);
retArray =
new String[] {
"1,root.sg2.d1,2.2,false,",
"1,root.sg2.d2,22.2,false,",
"3,root.sg2.d2,50.0,false,",
"5,root.sg2.d2,50.0,false,",
"7,root.sg2.d3,8.8,false,",
"3,root.sg2.d4,5555.5,false,",
"5,root.sg2.d4,5555.5,false,",
"1,root.sg2.d1,false,2,",
"1,root.sg2.d2,false,22,",
"3,root.sg2.d2,false,5,",
"5,root.sg2.d2,false,5,",
"7,root.sg2.d3,false,4,",
"3,root.sg2.d4,false,5555,",
"5,root.sg2.d4,false,5555,",
};
resultSetEqualTest(
"SELECT last_value(*) FROM root.sg2.** where s3+1=1316 or s2=false group by ([1,10),3ms,2ms) having avg(s1)>0 soffset 1 slimit 2 align by device;",
Expand All @@ -627,27 +627,27 @@ public void wildCardTest() {
// having
expectedHeader =
new String[] {
"Device,last_value(s3),last_value(s1),last_value(s2),first_value(s3),first_value(s1),first_value(s2)"
"Device,last_value(s1),last_value(s2),last_value(s3),first_value(s1),first_value(s2),first_value(s3)"
};
retArray =
new String[] {
"root.sg1.d2,1315,13.15,false,11,11.1,false,",
"root.sg1.d2,13.15,false,1315,11.1,false,11,",
};
resultSetEqualTest(
"SELECT last_value(*), first_value(*) FROM root.sg1.** where s2=false having count(s3+s1) > 2 align by device;",
expectedHeader,
retArray);
retArray =
new String[] {
"root.sg2.d2,1315,13.15,false,11,11.1,false,",
"root.sg2.d2,13.15,false,1315,11.1,false,11,",
};
resultSetEqualTest(
"SELECT last_value(*), first_value(*) FROM root.sg2.** where s2=false having count(s3+s1) > 2 align by device;",
expectedHeader,
retArray);

// not supported expression: agg1(*)+agg2(*), agg(*)/2
expectedHeader = new String[] {"Device,count(s3) + 1,count(s1) + 1,count(s2) + 1"};
expectedHeader = new String[] {"Device,count(s1) + 1,count(s2) + 1,count(s3) + 1"};
retArray =
new String[] {
"root.sg1.d2,5.0,5.0,5.0,",
Expand Down
Loading
Loading