This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/fillCheckDebug in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 803d94beabbc112a09e6d3285bff25c216415e1a Author: Minghui Liu <[email protected]> AuthorDate: Sat Jul 2 10:49:16 2022 +0800 add IT --- .../iotdb/db/it/query/IoTDBNullValueFillIT.java | 263 +++++++++++++++++++++ 1 file changed, 263 insertions(+) diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBNullValueFillIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBNullValueFillIT.java new file mode 100644 index 0000000000..5198c28668 --- /dev/null +++ b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBNullValueFillIT.java @@ -0,0 +1,263 @@ +/* + * 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 org.apache.iotdb.it.env.EnvFactory; +import org.apache.iotdb.it.env.IoTDBTestRunner; +import org.apache.iotdb.itbase.category.ClusterIT; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; + +import static org.apache.iotdb.db.it.utils.TestUtils.prepareData; +import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest; +import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualWithDescOrderTest; + +@RunWith(IoTDBTestRunner.class) +@Category({ClusterIT.class}) // TODO add LocalStandaloneIT +public class IoTDBNullValueFillIT { + + /** + * [root.sg1.d1 (aligned)] + * + * <p>Time, s1[INT32], s2[INT64], s3[FLOAT], s4[DOUBLE], s5[BOOLEAN], s6[TEXT]<br> + * 1, null, 1, null, 1.0, null, t1<br> + * 2, 2, 2, 2.0, 2.0, true, t2<br> + * 3, 3, null, 3.0, null, false, null<br> + * 4, null, 4, null, 4.0, null, t4<br> + * 5, 5, 5, 5.0, 5.0, false, t5<br> + * 6, null, 6, null, null, false, null<br> + * 7, null, null, null, null, null, null<br> + * 8, 8, 8, 8.0, 8.0, true, t8<br> + * 9, 9, null, 9.0, null, true, null + * + * <p>[root.sg1.d2 (non-aligned)] + * + * <p>Time, s1[INT32], s2[INT64], s3[FLOAT], s4[DOUBLE], s5[BOOLEAN], s6[TEXT]<br> + * 1, 1, null, 1.0, null, true, null<br> + * 2, 2, 2, 2.0, 2.0, true, t2<br> + * 3, null, 3, null, 3.0, null, t3<br> + * 4, 4, null, 4.0, null, false, null<br> + * 5, 5, 5, 5.0, 5.0, false, t5<br> + * 6, 6, null, 6.0, 6.0, null, t6<br> + * 7, null, null, null, null, null, null<br> + * 8, 8, 8, 8.0, 8.0, true, t8<br> + * 9, null, 9, null, 9.0, null, t9 + */ + private static final String[] sqls = + new String[] { + "SET STORAGE GROUP TO root.sg1", + "create aligned timeseries root.sg1.d1(s1 INT32, s2 INT64, s3 FLOAT, s4 DOUBLE, s5 BOOLEAN, s6 TEXT)", + "insert into root.sg1.d1(time, s2, s4, s6) aligned values(1, 1, 1.0, 't1')", + "insert into root.sg1.d1(time, s1, s2, s3, s4, s5, s6) aligned values(2, 2, 2, 2.0, 2.0, true, 't2')", + "insert into root.sg1.d1(time, s1, s3, s5) aligned values(3, 3, 3.0, false)", + "insert into root.sg1.d1(time, s2, s4, s6) aligned values(4, 4, 4.0, 't4')", + "insert into root.sg1.d1(time, s1, s2, s3, s4, s5, s6) aligned values(5, 5, 5, 5.0, 5.0, false, 't5')", + "insert into root.sg1.d1(time, s2, s4, s6) aligned values(6, 6, 6.0, 't6')", + "insert into root.sg1.d1(time, s1, s2, s3, s4, s5, s6) aligned values(8, 8, 8, 8.0, 8.0, true, 't8')", + "insert into root.sg1.d1(time, s1, s3, s5) aligned values(9, 9, 9.0, true)", + "create timeseries root.sg1.d2.s1 INT32", + "create timeseries root.sg1.d2.s2 INT64", + "create timeseries root.sg1.d2.s3 FLOAT", + "create timeseries root.sg1.d2.s4 DOUBLE", + "create timeseries root.sg1.d2.s5 BOOLEAN", + "create timeseries root.sg1.d2.s6 TEXT", + "insert into root.sg1.d2(time, s1, s3, s5) values(1, 1, 1.0, true)", + "insert into root.sg1.d2(time, s1, s2, s3, s4, s5, s6) values(2, 2, 2, 2.0, 2.0, true, 't2')", + "insert into root.sg1.d2(time, s2, s4, s6) values(3, 3, 3.0, 't3')", + "insert into root.sg1.d2(time, s1, s3, s5) values(4, 4, 4.0, false)", + "insert into root.sg1.d2(time, s1, s2, s3, s4, s5, s6) values(5, 5, 5, 5.0, 5.0, false, 't5')", + "insert into root.sg1.d2(time, s1, s3, s5) values(6, 6, 6.0, false)", + "insert into root.sg1.d2(time, s1, s2, s3, s4, s5, s6) values(8, 8, 8, 8.0, 8.0, true, 't8')", + "insert into root.sg1.d2(time, s2, s4, s6) values(9, 9, 9.0, 't9')" + }; + + @BeforeClass + public static void setUp() throws Exception { + EnvFactory.getEnv().initBeforeClass(); + prepareData(sqls); + } + + @AfterClass + public static void tearDown() throws Exception { + EnvFactory.getEnv().cleanAfterClass(); + } + + @Test + public void previousFillTest() { + String[] expectedHeader = + new String[] { + "Time", + "root.sg1.d1.s1", + "root.sg1.d1.s2", + "root.sg1.d1.s3", + "root.sg1.d1.s4", + "root.sg1.d1.s5", + "root.sg1.d1.s6" + }; + String[] retArray = + new String[] { + "1,null,1,null,1.0,null,t1,", + "2,2,2,2.0,2.0,true,t2,", + "3,3,2,3.0,2.0,false,t2,", + "4,3,4,3.0,4.0,false,t4", + "5,5,5,5.0,5.0,false,t5,", + "6,5,6,5.0,6.0,false,t6,", + "8,8,8,8.0,8.0,true,t8,", + "9,9,8,9.0,8.0,true,t8," + }; + resultSetEqualTest( + "select s1, s2, s3, s4, s5, s6 from root.sg1.d1 fill(previous)", expectedHeader, retArray); + } + + @Test + public void previousDescFillTest() { + String[] expectedHeader = + new String[] { + "Time", + "root.sg1.d1.s1", + "root.sg1.d1.s2", + "root.sg1.d1.s3", + "root.sg1.d1.s4", + "root.sg1.d1.s5", + "root.sg1.d1.s6" + }; + String[] retArray = + new String[] { + "9,9,null,9.0,null,true,null,", + "8,8,8,8.0,8.0,true,t8,", + "6,8,6,8.0,6.0,true,t6,", + "5,5,5,5.0,5.0,false,t5,", + "4,5,4,5.0,4.0,false,t4,", + "3,3,4,3.0,4.0,false,t4,", + "2,2,2,2.0,2.0,true,t2,", + "1,2,1,2.0,1.0,true,t1," + }; + resultSetEqualTest( + "select s1, s2, s3, s4, s5, s6 from root.sg1.d1 fill(previous) order by time desc", + expectedHeader, + retArray); + } + + @Test + public void linearFillTest() { + String[] expectedHeader = + new String[] { + "Time", "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4" + }; + String[] retArray = + new String[] { + "1,null,1,null,1.0,", + "2,2,2,2.0,2.0,", + "3,3,3,3.0,3.0,", + "4,4,4,4.0,4.0,", + "5,5,5,5.0,5.0,", + "6,6,6,6.5,6.0,", + "8,8,8,8.0,8.0,", + "9,9,null,9.0,null," + }; + resultSetEqualWithDescOrderTest( + "select s1, s2, s3, s4 from root.sg1.d1 fill(linear)", expectedHeader, retArray); + } + + @Test + public void intFillTest() { + String[] expectedHeader = + new String[] { + "Time", + "root.sg1.d1.s1", + "root.sg1.d1.s2", + "root.sg1.d1.s3", + "root.sg1.d1.s4", + "root.sg1.d1.s6" + }; + String[] retArray = + new String[] { + "1,1000,1,1000.0,1.0,t1,", + "2,2,2,2.0,2.0,t2,", + "3,3,1000,3.0,1000.0,1000", + "4,1000,4,1000.0,4.0,t4,", + "5,5,5,5.0,5.0,t5,", + "6,1000,6,1000.0,6.0,t6,", + "8,8,8,8.0,8.0,1000,", + "9,9,1000,9.0,1000.0,t8," + }; + resultSetEqualWithDescOrderTest( + "select s1, s2, s3, s4, s6 from root.sg1.d1 fill(1000)", expectedHeader, retArray); + } + + @Test + public void floatFillTest() { + String[] expectedHeader = + new String[] {"Time", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s6"}; + String[] retArray = + new String[] { + "1,3.14,1.0,t1,", + "2,2.0,2.0,t2,", + "3,3.0,3.14,3.14,", + "4,3.14,4.0,t4,", + "5,5.0,5.0,t5,", + "6,3.14,6.0,t6,", + "8,8.0,8.0,t8,", + "9,9.0,3.14,3.14," + }; + resultSetEqualWithDescOrderTest( + "select s3, s4, s6 from root.sg1.d1 fill(3.14)", expectedHeader, retArray); + } + + @Test + public void booleanFillTest() { + String[] expectedHeader = new String[] {"Time", "root.sg1.d1.s5", "root.sg1.d1.s6"}; + String[] retArray = + new String[] { + "1,true,t1,", + "2,true,t2,", + "3,false,true,", + "4,true,t4,", + "5,false,t5,", + "6,true,t6,", + "8,true,t8,", + "9,true,true," + }; + resultSetEqualWithDescOrderTest( + "select s5, s6 from root.sg1.d1 fill(true)", expectedHeader, retArray); + } + + @Test + public void textFillTest() { + String[] expectedHeader = new String[] {"Time", "root.sg1.d1.s6", "root.sg1.d2.s6"}; + String[] retArray = + new String[] { + "1,t1,t0,", + "2,t2,t2,", + "3,t0,t3,", + "4,t4,t0,", + "5,t5,t5,", + "6,t6,t0,", + "8,t8,t8,", + "9,t0,t9," + }; + resultSetEqualWithDescOrderTest( + "select s6 from root.sg1.d1, root.sg1.d2 fill('t0')", expectedHeader, retArray); + } +}
