This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch ty_new_vector in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6370cac1dd179a83d59aaf0295b54e6da59db7c6 Author: JackieTien97 <[email protected]> AuthorDate: Fri Nov 19 16:08:06 2021 +0800 add value filter test --- .../aligned/IoTDBRawQueryWithValueFilter2IT.java | 64 ++ .../aligned/IoTDBRawQueryWithValueFilterIT.java | 739 ++++++++++++++++++++ ...oTDBRawQueryWithValueFilterWithDeletion2IT.java | 79 +++ ...IoTDBRawQueryWithValueFilterWithDeletionIT.java | 774 +++++++++++++++++++++ 4 files changed, 1656 insertions(+) diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilter2IT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilter2IT.java new file mode 100644 index 0000000..4ebaf2f --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilter2IT.java @@ -0,0 +1,64 @@ +/* + * 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.integration.aligned; + +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +public class IoTDBRawQueryWithValueFilter2IT extends IoTDBRawQueryWithValueFilterIT { + + + private static int numOfPointsPerPage; + + @BeforeClass + public static void setUp() throws Exception { + EnvironmentUtils.closeStatMonitor(); + EnvironmentUtils.envSetUp(); + // TODO When the aligned time series support compaction, we need to set compaction to true + enableSeqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction(); + enableUnseqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction(); + enableCrossSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction(); + numOfPointsPerPage = TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage(); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(3); + AlignedWriteUtil.insertData(); + } + + @AfterClass + public static void tearDown() throws Exception { + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(numOfPointsPerPage); + EnvironmentUtils.cleanEnv(); + } + +} diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterIT.java new file mode 100644 index 0000000..9d0e7c6 --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterIT.java @@ -0,0 +1,739 @@ +/* + * 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.integration.aligned; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.HashMap; +import java.util.Map; +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.jdbc.Config; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class IoTDBRawQueryWithValueFilterIT { + protected static boolean enableSeqSpaceCompaction; + protected static boolean enableUnseqSpaceCompaction; + protected static boolean enableCrossSpaceCompaction; + + @BeforeClass + public static void setUp() throws Exception { + EnvironmentUtils.closeStatMonitor(); + EnvironmentUtils.envSetUp(); + // TODO When the aligned time series support compaction, we need to set compaction to true + enableSeqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction(); + enableUnseqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction(); + enableCrossSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction(); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + AlignedWriteUtil.insertData(); + } + + @AfterClass + public static void tearDown() throws Exception { + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction); + EnvironmentUtils.cleanEnv(); + } + + @Test + public void selectAllAlignedWithValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,1.0,1,1,true,aligned_test1", + "3,30000.0,null,30000,true,aligned_unseq_test3", + "4,4.0,4,null,true,aligned_test4", + "5,5.0,5,null,true,aligned_test5", + "6,6.0,6,6,true,null", + "10,null,10,10,true,aligned_test10", + "13,130000.0,130000,130000,true,aligned_unseq_test13", + "21,null,null,21,true,null", + "22,null,null,22,true,null", + "24,null,null,24,true,null", + "25,null,null,25,true,null", + }; + + String[] columnNames = { + "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select * from root.sg1.d1 where s4 = true"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "12,12.0,12,12,null,null", + "14,14.0,14,14,null,null", + "15,15.0,15,15,null,null", + "16,16.0,16,16,null,null", + "17,17.0,17,17,null,null", + "18,18.0,18,18,null,null", + "19,19.0,19,19,null,null", + "20,20.0,20,20,null,null", + }; + + String[] columnNames = { + "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select * from root.sg1.d1 where s1 > 11 and s2 <= 33"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithValueFilterTest3() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,1.0,1,1,true,aligned_test1", + "2,2.0,2,2,null,aligned_test2", + "3,30000.0,null,30000,true,aligned_unseq_test3", + "4,4.0,4,null,true,aligned_test4", + "5,5.0,5,null,true,aligned_test5", + "6,6.0,6,6,true,null", + "7,7.0,7,7,false,aligned_test7", + "8,8.0,8,8,null,aligned_test8", + "9,9.0,9,9,false,aligned_test9", + "10,null,10,10,true,aligned_test10", + "11,11.0,11,11,null,null", + "12,12.0,12,12,null,null", + "13,130000.0,130000,130000,true,aligned_unseq_test13", + "14,14.0,14,14,null,null", + "15,15.0,15,15,null,null", + "16,16.0,16,16,null,null", + "17,17.0,17,17,null,null", + "18,18.0,18,18,null,null", + "19,19.0,19,19,null,null", + "20,20.0,20,20,null,null", + "23,230000.0,null,230000,false,null", + "31,null,31,null,null,aligned_test31", + "32,null,32,null,null,aligned_test32", + }; + + String[] columnNames = { + "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select * from root.sg1.d1 where s1 >= 13 or s2 < 33"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedAndNonAlignedTest1() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "13,130000.0,130000,130000,true,aligned_unseq_test13,13.0,13,13,null,null", + "17,17.0,17,17,null,null,17.0,17,17,null,null", + "18,18.0,18,18,null,null,18.0,18,18,null,null", + "19,19.0,19,19,null,null,19.0,19,19,null,null", + "20,20.0,20,20,null,null,20.0,20,20,null,null", + "23,230000.0,null,230000,false,null,null,null,23,true,null", + }; + + String[] columnNames = { + "root.sg1.d1.s1", + "root.sg1.d1.s2", + "root.sg1.d1.s3", + "root.sg1.d1.s4", + "root.sg1.d1.s5", + "root.sg1.d2.s1", + "root.sg1.d2.s2", + "root.sg1.d2.s3", + "root.sg1.d2.s4", + "root.sg1.d2.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select * from root.sg1.* where root.sg1.d1.s2 > 16 and root.sg1.d2.s3 <= 36"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedAndNonAlignedTest2() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "3,30000.0,null,30000,true,aligned_unseq_test3,3.0,null,3,false,non_aligned_test3", + "7,7.0,7,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7", + "9,9.0,9,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9", + "17,17.0,17,17,null,null,17.0,17,17,null,null", + "18,18.0,18,18,null,null,18.0,18,18,null,null", + "19,19.0,19,19,null,null,19.0,19,19,null,null", + "20,20.0,20,20,null,null,20.0,20,20,null,null", + "23,230000.0,null,230000,false,null,null,null,23,true,null", + "26,null,null,26,false,null,null,null,26,false,null", + "27,null,null,27,false,null,null,null,27,false,null", + "28,null,null,28,false,null,null,null,28,false,null", + "29,null,null,29,false,null,null,null,29,false,null", + "30,null,null,30,false,null,null,null,30,false,null", + }; + + String[] columnNames = { + "root.sg1.d1.s1", + "root.sg1.d1.s2", + "root.sg1.d1.s3", + "root.sg1.d1.s4", + "root.sg1.d1.s5", + "root.sg1.d2.s1", + "root.sg1.d2.s2", + "root.sg1.d2.s3", + "root.sg1.d2.s4", + "root.sg1.d2.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select * from root.sg1.* where root.sg1.d1.s2 > 16 or root.sg1.d2.s4 = false"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithTimeAndValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "9,9.0,9,9,false,aligned_test9", + "11,11.0,11,11,null,null", + "12,12.0,12,12,null,null", + "14,14.0,14,14,null,null", + "15,15.0,15,15,null,null", + "16,16.0,16,16,null,null", + "17,17.0,17,17,null,null", + "18,18.0,18,18,null,null", + }; + + String[] columnNames = { + "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = + statement.execute("select * from root.sg1.d1 where time >= 9 and time <= 33 and s1 < 19"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithTimeAndValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "9,9.0,9,9,false,aligned_test9", + "10,null,10,10,true,aligned_test10", + "11,11.0,11,11,null,null", + "12,12.0,12,12,null,null", + "13,130000.0,130000,130000,true,aligned_unseq_test13", + "14,14.0,14,14,null,null", + "15,15.0,15,15,null,null", + "16,16.0,16,16,null,null", + "17,17.0,17,17,null,null", + "18,18.0,18,18,null,null", + "19,19.0,19,19,null,null", + "20,20.0,20,20,null,null", + "21,null,null,21,true,null", + "22,null,null,22,true,null", + "23,230000.0,null,230000,false,null", + "24,null,null,24,true,null", + "25,null,null,25,true,null", + "26,null,null,26,false,null", + "27,null,null,27,false,null", + "28,null,null,28,false,null", + "29,null,null,29,false,null", + "30,null,null,30,false,null", + "31,null,31,null,null,aligned_test31", + "32,null,32,null,null,aligned_test32", + "33,null,33,null,null,aligned_test33", + "36,null,36,null,null,aligned_test36", + "37,null,37,null,null,aligned_test37", + }; + + String[] columnNames = { + "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = + statement.execute("select * from root.sg1.d1 where time >= 9 and time <= 33 or s5 = 'aligned_test36' or s5 = 'aligned_test37'"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedWithValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,1.0,true,aligned_test1", + "2,2.0,null,aligned_test2", + "4,4.0,true,aligned_test4", + "5,5.0,true,aligned_test5", + "6,6.0,true,null", + "7,7.0,false,aligned_test7", + "8,8.0,null,aligned_test8", + "9,9.0,false,aligned_test9", + "11,11.0,null,null", + "12,12.0,null,null", + "14,14.0,null,null", + "15,15.0,null,null", + "16,16.0,null,null", + "34,null,null,aligned_test34", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select s1,s4,s5 from root.sg1.d1 where s1 < 17 or s5 = 'aligned_test34'"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedWithValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "7,7.0,false", + "9,9.0,false", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select s1,s4 from root.sg1.d1 where s1 < 19 and s4 = false"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedWithTimeAndValueFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "23,230000.0,false,null", + "26,null,false,null", + "27,null,false,null", + "28,null,false,null", + "29,null,false,null", + "30,null,false,null", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = + statement.execute("select s1,s4,s5 from root.sg1.d1 where time >= 16 and time <= 34 and s4=false"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedAndNonAlignedWithTimeAndValueFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "18,null,null,18.0,null,null,18.0", + "19,null,null,19.0,null,null,19.0", + "20,null,null,20.0,null,null,20.0", + "21,null,true,null,null,true,null", + "22,null,true,null,null,true,null", + "23,null,false,null,null,true,230000.0", + "24,null,true,null,null,true,null", + "25,null,true,null,null,true,null", + }; + + String[] columnNames = { + "root.sg1.d2.s5", + "root.sg1.d1.s4", + "root.sg1.d2.s1", + "root.sg1.d1.s5", + "root.sg1.d2.s4", + "root.sg1.d1.s1" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + // 1 4 5 + boolean hasResultSet = + statement.execute( + "select d2.s5, d1.s4, d2.s1, d1.s5, d2.s4, d1.s1 from root.sg1 where time >= 16 and time <= 34 and (d1.s1 >= 18 or d2.s4 = true)"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } +} diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletion2IT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletion2IT.java new file mode 100644 index 0000000..19817e6 --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletion2IT.java @@ -0,0 +1,79 @@ +/* + * 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.integration.aligned; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.Statement; +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.jdbc.Config; +import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +public class IoTDBRawQueryWithValueFilterWithDeletion2IT extends IoTDBRawQueryWithValueFilterWithDeletionIT{ + + private static int numOfPointsPerPage; + + @BeforeClass + public static void setUp() throws Exception { + EnvironmentUtils.closeStatMonitor(); + EnvironmentUtils.envSetUp(); + + enableSeqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction(); + enableUnseqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction(); + enableCrossSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction(); + numOfPointsPerPage = TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage(); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(3); + AlignedWriteUtil.insertData(); + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + // TODO currently aligned data in memory doesn't support deletion, so we flush all data to + // disk before doing deletion + statement.execute("flush"); + statement.execute("delete timeseries root.sg1.d1.s2"); + statement.execute("delete from root.sg1.d1.s1 where time <= 21"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @AfterClass + public static void tearDown() throws Exception { + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction); + TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(numOfPointsPerPage); + EnvironmentUtils.cleanEnv(); + } +} diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletionIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletionIT.java new file mode 100644 index 0000000..e81d967 --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletionIT.java @@ -0,0 +1,774 @@ +/* + * 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.integration.aligned; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.HashMap; +import java.util.Map; +import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.jdbc.Config; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class IoTDBRawQueryWithValueFilterWithDeletionIT { + + protected static boolean enableSeqSpaceCompaction; + protected static boolean enableUnseqSpaceCompaction; + protected static boolean enableCrossSpaceCompaction; + + @BeforeClass + public static void setUp() throws Exception { + EnvironmentUtils.closeStatMonitor(); + EnvironmentUtils.envSetUp(); + + enableSeqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction(); + enableUnseqSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction(); + enableCrossSpaceCompaction = + IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction(); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false); + + AlignedWriteUtil.insertData(); + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + // TODO currently aligned data in memory doesn't support deletion, so we flush all data to + // disk before doing deletion + statement.execute("flush"); + statement.execute("delete timeseries root.sg1.d1.s2"); + statement.execute("delete from root.sg1.d1.s1 where time <= 21"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @AfterClass + public static void tearDown() throws Exception { + IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction); + IoTDBDescriptor.getInstance() + .getConfig() + .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction); + EnvironmentUtils.cleanEnv(); + } + + @Test + public void selectAllAlignedWithValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "1,null,1,true,aligned_test1", + "3,null,30000,true,aligned_unseq_test3", + "4,null,null,true,aligned_test4", + "5,null,null,true,aligned_test5", + "6,null,6,true,null", + "10,null,10,true,aligned_test10", + "13,null,130000,true,aligned_unseq_test13", + "21,null,21,true,null", + "22,null,22,true,null", + "24,null,24,true,null", + "25,null,25,true,null", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute("select * from root.sg1.d1 where s4 = true"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "7,null,7,false,aligned_test7", + "9,null,9,false,aligned_test9", + "26,null,26,false,null", + "27,null,27,false,null", + "28,null,28,false,null", + "29,null,29,false,null", + "30,null,30,false,null", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute( + "select * from root.sg1.d1 where s4 = false and s3 <= 33"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithValueFilterTest3() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "1,null,1,true,aligned_test1", + "2,null,2,null,aligned_test2", + "6,null,6,true,null", + "7,null,7,false,aligned_test7", + "8,null,8,null,aligned_test8", + "9,null,9,false,aligned_test9", + "10,null,10,true,aligned_test10", + "11,null,11,null,null", + "12,null,12,null,null", + "14,null,14,null,null", + "15,null,15,null,null", + "16,null,16,null,null", + "17,null,17,null,null", + "18,null,18,null,null", + "19,null,19,null,null", + "20,null,20,null,null", + "21,null,21,true,null", + "22,null,22,true,null", + "23,230000.0,230000,false,null", + "24,null,24,true,null", + "25,null,25,true,null", + "26,null,26,false,null", + "27,null,27,false,null", + "28,null,28,false,null", + "29,null,29,false,null", + "30,null,30,false,null", + "40,null,null,null,aligned_test40", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute( + "select * from root.sg1.d1 where s5 = 'aligned_test40' or s4 = false or s3 <= 33"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedAndNonAlignedTest1() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "3,null,30000,true,aligned_unseq_test3,3.0,null,3,false,non_aligned_test3", + "13,null,130000,true,aligned_unseq_test13,13.0,13,13,null,null", + "17,null,17,null,null,17.0,17,17,null,null", + "18,null,18,null,null,18.0,18,18,null,null", + "19,null,19,null,null,19.0,19,19,null,null", + "20,null,20,null,null,20.0,20,20,null,null", + "21,null,21,true,null,null,null,21,true,null", + "22,null,22,true,null,null,null,22,true,null", + "23,230000.0,230000,false,null,null,null,23,true,null", + "24,null,24,true,null,null,null,24,true,null", + "25,null,25,true,null,null,null,25,true,null", + "26,null,26,false,null,null,null,26,false,null", + "27,null,27,false,null,null,null,27,false,null", + "28,null,28,false,null,null,null,28,false,null", + "29,null,29,false,null,null,null,29,false,null", + "30,null,30,false,null,null,null,30,false,null", + }; + + String[] columnNames = { + "root.sg1.d1.s1", + "root.sg1.d1.s3", + "root.sg1.d1.s4", + "root.sg1.d1.s5", + "root.sg1.d2.s1", + "root.sg1.d2.s2", + "root.sg1.d2.s3", + "root.sg1.d2.s4", + "root.sg1.d2.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute( + "select * from root.sg1.* where root.sg1.d1.s3 > 16 and root.sg1.d2.s3 <= 36"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedAndNonAlignedTest2() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "3,null,30000,true,aligned_unseq_test3,3.0,null,3,false,non_aligned_test3", + "7,null,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7", + "9,null,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9", + "13,null,130000,true,aligned_unseq_test13,13.0,13,13,null,null", + "17,null,17,null,null,17.0,17,17,null,null", + "18,null,18,null,null,18.0,18,18,null,null", + "19,null,19,null,null,19.0,19,19,null,null", + "20,null,20,null,null,20.0,20,20,null,null", + "21,null,21,true,null,null,null,21,true,null", + "22,null,22,true,null,null,null,22,true,null", + "23,230000.0,230000,false,null,null,null,23,true,null", + "24,null,24,true,null,null,null,24,true,null", + "25,null,25,true,null,null,null,25,true,null", + "26,null,26,false,null,null,null,26,false,null", + "27,null,27,false,null,null,null,27,false,null", + "28,null,28,false,null,null,null,28,false,null", + "29,null,29,false,null,null,null,29,false,null", + "30,null,30,false,null,null,null,30,false,null", + }; + + String[] columnNames = { + "root.sg1.d1.s1", + "root.sg1.d1.s3", + "root.sg1.d1.s4", + "root.sg1.d1.s5", + "root.sg1.d2.s1", + "root.sg1.d2.s2", + "root.sg1.d2.s3", + "root.sg1.d2.s4", + "root.sg1.d2.s5" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute( + "select * from root.sg1.* where root.sg1.d1.s3 > 16 or root.sg1.d2.s4 = false"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithTimeAndValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "9,null,9,false,aligned_test9", + "10,null,10,true,aligned_test10", + "11,null,11,null,null", + "12,null,12,null,null", + "14,null,14,null,null", + "15,null,15,null,null", + "16,null,16,null,null", + "17,null,17,null,null", + "18,null,18,null,null", + "19,null,19,null,null", + "20,null,20,null,null", + "21,null,21,true,null", + "22,null,22,true,null", + "24,null,24,true,null", + "25,null,25,true,null", + "26,null,26,false,null", + "27,null,27,false,null", + "28,null,28,false,null", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = + statement.execute("select * from root.sg1.d1 where time >= 9 and time <= 33 and s3 < 29"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectAllAlignedWithTimeAndValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "9,null,9,false,aligned_test9", + "10,null,10,true,aligned_test10", + "11,null,11,null,null", + "12,null,12,null,null", + "13,null,130000,true,aligned_unseq_test13", + "14,null,14,null,null", + "15,null,15,null,null", + "16,null,16,null,null", + "17,null,17,null,null", + "18,null,18,null,null", + "19,null,19,null,null", + "20,null,20,null,null", + "21,null,21,true,null", + "22,null,22,true,null", + "23,230000.0,230000,false,null", + "24,null,24,true,null", + "25,null,25,true,null", + "26,null,26,false,null", + "27,null,27,false,null", + "28,null,28,false,null", + "29,null,29,false,null", + "30,null,30,false,null", + "31,null,null,null,aligned_test31", + "32,null,null,null,aligned_test32", + "33,null,null,null,aligned_test33", + "36,null,null,null,aligned_test36", + "37,null,null,null,aligned_test37", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = + statement.execute( + "select * from root.sg1.d1 where time >= 9 and time <= 33 or s5 = 'aligned_test36' or s5 = 'aligned_test37'"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedWithValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "7,null,false,aligned_test7", + "9,null,false,aligned_test9", + "23,230000.0,false,null", + "26,null,false,null", + "27,null,false,null", + "28,null,false,null", + "29,null,false,null", + "30,null,false,null", + "34,null,null,aligned_test34", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute( + "select s1,s4,s5 from root.sg1.d1 where s4 = false or s5 = 'aligned_test34'"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedWithValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "23,230000.0,false", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = statement.execute( + "select s1,s4 from root.sg1.d1 where s1 > 29 and s4 = false"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedWithTimeAndValueFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "23,230000.0,false,null", + "26,null,false,null", + "27,null,false,null", + "28,null,false,null", + "29,null,false,null", + "30,null,false,null", + }; + + String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"}; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + boolean hasResultSet = + statement.execute( + "select s1,s4,s5 from root.sg1.d1 where time >= 16 and time <= 34 and s4=false"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void selectSomeAlignedAndNonAlignedWithTimeAndValueFilterTest() + throws ClassNotFoundException { + + String[] retArray = + new String[]{ + "21,null,true,null,null,true,null", + "22,null,true,null,null,true,null", + "23,null,false,null,null,true,230000.0", + "24,null,true,null,null,true,null", + "25,null,true,null,null,true,null", + "31,non_aligned_test31,null,null,aligned_test31,null,null", + "32,non_aligned_test32,null,null,aligned_test32,null,null", + "33,non_aligned_test33,null,null,aligned_test33,null,null", + "34,non_aligned_test34,null,null,aligned_test34,null,null", + }; + + String[] columnNames = { + "root.sg1.d2.s5", + "root.sg1.d1.s4", + "root.sg1.d2.s1", + "root.sg1.d1.s5", + "root.sg1.d2.s4", + "root.sg1.d1.s1" + }; + + Class.forName(Config.JDBC_DRIVER_NAME); + try (Connection connection = + DriverManager.getConnection( + Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement()) { + + // 1 4 5 + boolean hasResultSet = + statement.execute( + "select d2.s5, d1.s4, d2.s1, d1.s5, d2.s4, d1.s1 from root.sg1 where time >= 16 and time <= 34 and (d1.s5 = 'aligned_test31' or d1.s5 = 'aligned_test32' or d1.s5 = 'aligned_test33' or d1.s5 = 'aligned_test34' or d2.s4 = true)"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); + Map<String, Integer> map = new HashMap<>(); + for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { + map.put(resultSetMetaData.getColumnName(i), i); + } + assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount()); + int cnt = 0; + while (resultSet.next()) { + StringBuilder builder = new StringBuilder(); + builder.append(resultSet.getString(1)); + for (String columnName : columnNames) { + int index = map.get(columnName); + builder.append(",").append(resultSet.getString(index)); + } + assertEquals(retArray[cnt], builder.toString()); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (SQLException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } +}
