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 b88b023acd37f7d9696b2e76ae116ceaaaa410c7 Author: JackieTien97 <[email protected]> AuthorDate: Thu Nov 18 15:47:04 2021 +0800 Support RawQueryWithoutValue in aligned timeseries --- .../apache/iotdb/db/metadata/utils/MetaUtils.java | 16 +- .../iotdb/db/qp/physical/crud/InsertRowPlan.java | 7 +- .../dataset/RawQueryDataSetWithoutValueFilter.java | 12 +- .../{AlignedWriter.java => AlignedWriteUtil.java} | 27 +- .../aligned/IoTDBRawQueryWithoutValueFilterIT.java | 540 +++++++++++++++++- ...DBRawQueryWithoutValueFilterWithDeletionIT.java | 613 +++++++++++++++++++++ 6 files changed, 1159 insertions(+), 56 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java index ca731b3..28e50b0 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java @@ -29,7 +29,6 @@ import org.apache.iotdb.db.utils.TestOnly; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -91,27 +90,28 @@ public class MetaUtils { * root.sg.d1.vector1[s2], they will be organized to root.sg.d1.vector1 [s1,s2] * * @param fullPaths full path list without uniting the sub measurement under the same aligned time - * series. + * series. The list has been sorted by the alphabetical order, so all the aligned time series + * of one device has already been placed contiguously. * @return Size of partial path list could NOT equal to the input list size. For example, the * vector1 (s1,s2) would be returned once. */ public static List<PartialPath> groupAlignedPaths(List<PartialPath> fullPaths) { List<PartialPath> result = new LinkedList<>(); - Map<String, AlignedPath> alignedEntityToPath = new HashMap<>(); + AlignedPath alignedPath = null; for (PartialPath path : fullPaths) { MeasurementPath measurementPath = (MeasurementPath) path; if (!measurementPath.isUnderAlignedEntity()) { result.add(measurementPath); + alignedPath = null; } else { - String entity = measurementPath.getDevice(); - if (!alignedEntityToPath.containsKey(entity)) { - alignedEntityToPath.put(entity, new AlignedPath(measurementPath)); + if (alignedPath == null) { + alignedPath = new AlignedPath(measurementPath); + result.add(alignedPath); } else { - alignedEntityToPath.get(entity).addMeasurement(measurementPath); + alignedPath.addMeasurement(measurementPath); } } } - result.addAll(alignedEntityToPath.values()); return result; } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java index 5fb024b..1a6316d 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java @@ -241,11 +241,8 @@ public class InsertRowPlan extends InsertPlan { } continue; } - if (isAligned) { - dataTypes[i] = measurementMNodes[i].getSchema().getSubMeasurementsTSDataTypeList().get(i); - } else { - dataTypes[i] = measurementMNodes[i].getSchema().getType(); - } + + dataTypes[i] = measurementMNodes[i].getSchema().getType(); try { values[i] = CommonUtils.parseValue(dataTypes[i], values[i].toString()); } catch (Exception e) { diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java index 18014d2..806321f 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java @@ -298,7 +298,7 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet if (encoder != null && encoder.needEncode(minTime)) { intValue = encoder.encodeInt(intValue, minTime); } - ReadWriteIOUtils.write(intValue, valueBAOSList[seriesIndex]); + ReadWriteIOUtils.write(intValue, valueBAOSList[bufferIndex]); bufferIndex++; break; case INT64: @@ -307,7 +307,7 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet if (encoder != null && encoder.needEncode(minTime)) { longValue = encoder.encodeLong(longValue, minTime); } - ReadWriteIOUtils.write(longValue, valueBAOSList[seriesIndex]); + ReadWriteIOUtils.write(longValue, valueBAOSList[bufferIndex]); bufferIndex++; break; case FLOAT: @@ -316,7 +316,7 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet if (encoder != null && encoder.needEncode(minTime)) { floatValue = encoder.encodeFloat(floatValue, minTime); } - ReadWriteIOUtils.write(floatValue, valueBAOSList[seriesIndex]); + ReadWriteIOUtils.write(floatValue, valueBAOSList[bufferIndex]); bufferIndex++; break; case DOUBLE: @@ -325,19 +325,19 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet if (encoder != null && encoder.needEncode(minTime)) { doubleValue = encoder.encodeDouble(doubleValue, minTime); } - ReadWriteIOUtils.write(doubleValue, valueBAOSList[seriesIndex]); + ReadWriteIOUtils.write(doubleValue, valueBAOSList[bufferIndex]); bufferIndex++; break; case BOOLEAN: currentBitmapList[bufferIndex] = (currentBitmapList[bufferIndex] << 1) | FLAG; ReadWriteIOUtils.write( - cachedBatchDataArray[seriesIndex].getBoolean(), valueBAOSList[seriesIndex]); + cachedBatchDataArray[seriesIndex].getBoolean(), valueBAOSList[bufferIndex]); bufferIndex++; break; case TEXT: currentBitmapList[bufferIndex] = (currentBitmapList[bufferIndex] << 1) | FLAG; ReadWriteIOUtils.write( - cachedBatchDataArray[seriesIndex].getBinary(), valueBAOSList[seriesIndex]); + cachedBatchDataArray[seriesIndex].getBinary(), valueBAOSList[bufferIndex]); bufferIndex++; break; case VECTOR: diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriteUtil.java similarity index 92% rename from server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java rename to server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriteUtil.java index dd7244c..5f0af39 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriteUtil.java @@ -18,24 +18,20 @@ */ package org.apache.iotdb.db.integration.aligned; -import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.jdbc.Config; -import org.junit.AfterClass; -import org.junit.BeforeClass; - import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; -public class AlignedWriter { +public class AlignedWriteUtil { private static final String[] sqls = new String[] { "SET STORAGE GROUP TO root.sg1", - "create aligned timeseries root.sg1.d1(s1 FLOAT encoding=RLE, s2 INT32 encoding=Grollia compression=SNAPPY, s3 INT64, s4 BOOLEAN, s5 TEXT) compression=SNAPPY", + "create aligned timeseries root.sg1.d1(s1 FLOAT encoding=RLE, s2 INT32 encoding=Gorilla compression=SNAPPY, s3 INT64, s4 BOOLEAN, s5 TEXT)", "create timeseries root.sg1.d2.s1 WITH DATATYPE=FLOAT, encoding=RLE", - "create timeseries root.sg1.d2.s2 WITH DATATYPE=INT32, encoding=Grollia", + "create timeseries root.sg1.d2.s2 WITH DATATYPE=INT32, encoding=Gorilla", "create timeseries root.sg1.d2.s3 WITH DATATYPE=INT64", "create timeseries root.sg1.d2.s4 WITH DATATYPE=BOOLEAN", "create timeseries root.sg1.d2.s5 WITH DATATYPE=TEXT", @@ -92,7 +88,7 @@ public class AlignedWriter { "insert into root.sg1.d1(time, s3, s4) aligned values(29, 29, FALSE)", "insert into root.sg1.d1(time, s3, s4) aligned values(30, 30, FALSE)", "insert into root.sg1.d2(time, s3, s4) values(21, 21, TRUE)", - "insert into root.sg1.d2(time, s3, s4) values(22, 21, TRUE)", + "insert into root.sg1.d2(time, s3, s4) values(22, 22, TRUE)", "insert into root.sg1.d2(time, s3, s4) values(23, 23, TRUE)", "insert into root.sg1.d2(time, s3, s4) values(24, 24, TRUE)", "insert into root.sg1.d2(time, s3, s4) values(25, 25, TRUE)", @@ -122,22 +118,9 @@ public class AlignedWriter { "insert into root.sg1.d2(time, s2, s5) values(38, 38, 'non_aligned_test38')", "insert into root.sg1.d2(time, s2, s5) values(39, 39, 'non_aligned_test39')", "insert into root.sg1.d2(time, s2, s5) values(40, 40, 'non_aligned_test40')", - "flush", }; - @BeforeClass - public static void setUp() throws Exception { - EnvironmentUtils.closeStatMonitor(); - EnvironmentUtils.envSetUp(); - insertData(); - } - - @AfterClass - public static void tearDown() throws Exception { - EnvironmentUtils.cleanEnv(); - } - - private static void insertData() throws ClassNotFoundException { + public static void insertData() throws ClassNotFoundException { Class.forName(Config.JDBC_DRIVER_NAME); try (Connection connection = DriverManager.getConnection( diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java index 0b61709..f13ef00 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java @@ -18,9 +18,13 @@ */ 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.jdbc.Config; +import org.junit.AfterClass; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; import java.sql.Connection; @@ -35,7 +39,40 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter { +public class IoTDBRawQueryWithoutValueFilterIT { + + private static boolean enableSeqSpaceCompaction; + private static boolean enableUnseqSpaceCompaction; + private 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 selectAllAlignedWithoutValueFilterTest() throws ClassNotFoundException { @@ -62,16 +99,16 @@ public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter { "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,21,true,null", - "22,null,null,22,22,true,null", - "23,null,null,23,23,true,null", - "24,null,null,24,24,true,null", - "25,null,null,25,25,true,null", - "26,null,null,26,26,false,null", - "27,null,null,27,27,false,null", - "28,null,null,28,28,false,null", - "29,null,null,29,29,false,null", - "30,null,null,30,30,false,null", + "21,null,null,21,true,null", + "22,null,null,22,true,null", + "23,null,null,23,true,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", @@ -84,6 +121,10 @@ public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter { "40,null,40,null,null,aligned_test40", }; + 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( @@ -99,13 +140,482 @@ public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter { 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 selectAllAlignedAndNonAlignedTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,1.0,1,1,true,aligned_test1,1.0,1,1,true,non_aligned_test1", + "2,2.0,2,2,null,aligned_test2,2.0,2,2,null,non_aligned_test2", + "3,3.0,null,3,false,aligned_test3,3.0,null,3,false,non_aligned_test3", + "4,4.0,4,null,true,aligned_test4,4.0,4,null,true,non_aligned_test4", + "5,5.0,5,null,true,aligned_test5,5.0,5,null,true,non_aligned_test5", + "6,6.0,6,6,true,null,6.0,6,6,true,null", + "7,7.0,7,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7", + "8,8.0,8,8,null,aligned_test8,8.0,8,8,null,non_aligned_test8", + "9,9.0,9,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9", + "10,null,10,10,true,aligned_test10,null,10,10,true,non_aligned_test10", + "11,11.0,11,11,null,null,11.0,11,11,null,null", + "12,12.0,12,12,null,null,12.0,12,12,null,null", + "13,13.0,13,13,null,null,13.0,13,13,null,null", + "14,14.0,14,14,null,null,14.0,14,14,null,null", + "15,15.0,15,15,null,null,15.0,15,15,null,null", + "16,16.0,16,16,null,null,16.0,16,16,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", + "21,null,null,21,true,null,null,null,21,true,null", + "22,null,null,22,true,null,null,null,22,true,null", + "23,null,null,23,true,null,null,null,23,true,null", + "24,null,null,24,true,null,null,null,24,true,null", + "25,null,null,25,true,null,null,null,25,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", + "31,null,31,null,null,aligned_test31,null,31,null,null,non_aligned_test31", + "32,null,32,null,null,aligned_test32,null,32,null,null,non_aligned_test32", + "33,null,33,null,null,aligned_test33,null,33,null,null,non_aligned_test33", + "34,null,34,null,null,aligned_test34,null,34,null,null,non_aligned_test34", + "35,null,35,null,null,aligned_test35,null,35,null,null,non_aligned_test35", + "36,null,36,null,null,aligned_test36,null,36,null,null,non_aligned_test36", + "37,null,37,null,null,aligned_test37,null,37,null,null,non_aligned_test37", + "38,null,38,null,null,aligned_test38,null,38,null,null,non_aligned_test38", + "39,null,39,null,null,aligned_test39,null,39,null,null,non_aligned_test39", + "40,null,40,null,null,aligned_test40,null,40,null,null,non_aligned_test40", + }; + + 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.*"); + 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 selectAllAlignedWithTimeFilterTest() 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,13.0,13,13,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", + "21,null,null,21,true,null", + "22,null,null,22,true,null", + "23,null,null,23,true,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", + }; + + 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"); + 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 selectSomeAlignedWithoutValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,1.0,true,aligned_test1", + "2,2.0,null,aligned_test2", + "3,3.0,false,aligned_test3", + "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", + "10,null,true,aligned_test10", + "11,11.0,null,null", + "12,12.0,null,null", + "13,13.0,null,null", + "14,14.0,null,null", + "15,15.0,null,null", + "16,16.0,null,null", + "17,17.0,null,null", + "18,18.0,null,null", + "19,19.0,null,null", + "20,20.0,null,null", + "21,null,true,null", + "22,null,true,null", + "23,null,true,null", + "24,null,true,null", + "25,null,true,null", + "26,null,false,null", + "27,null,false,null", + "28,null,false,null", + "29,null,false,null", + "30,null,false,null", + "31,null,null,aligned_test31", + "32,null,null,aligned_test32", + "33,null,null,aligned_test33", + "34,null,null,aligned_test34", + "35,null,null,aligned_test35", + "36,null,null,aligned_test36", + "37,null,null,aligned_test37", + "38,null,null,aligned_test38", + "39,null,null,aligned_test39", + "40,null,null,aligned_test40", + }; + + 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"); + 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 selectSomeAlignedWithoutValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,1.0,true", + "2,2.0,null", + "3,3.0,false", + "4,4.0,true", + "5,5.0,true", + "6,6.0,true", + "7,7.0,false", + "8,8.0,null", + "9,9.0,false", + "10,null,true", + "11,11.0,null", + "12,12.0,null", + "13,13.0,null", + "14,14.0,null", + "15,15.0,null", + "16,16.0,null", + "17,17.0,null", + "18,18.0,null", + "19,19.0,null", + "20,20.0,null", + "21,null,true", + "22,null,true", + "23,null,true", + "24,null,true", + "25,null,true", + "26,null,false", + "27,null,false", + "28,null,false", + "29,null,false", + "30,null,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"); + 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 selectSomeAlignedWithTimeFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "16,16.0,null,null", + "17,17.0,null,null", + "18,18.0,null,null", + "19,19.0,null,null", + "20,20.0,null,null", + "21,null,true,null", + "22,null,true,null", + "23,null,true,null", + "24,null,true,null", + "25,null,true,null", + "26,null,false,null", + "27,null,false,null", + "28,null,false,null", + "29,null,false,null", + "30,null,false,null", + "31,null,null,aligned_test31", + "32,null,null,aligned_test32", + "33,null,null,aligned_test33", + "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 time >= 16 and time <= 34"); + 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 selectSomeAlignedAndNonAlignedWithTimeFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "16,null,null,16.0,null,null,16.0", + "17,null,null,17.0,null,null,17.0", + "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,true,null,null,true,null", + "24,null,true,null,null,true,null", + "25,null,true,null,null,true,null", + "26,null,false,null,null,false,null", + "27,null,false,null,null,false,null", + "28,null,false,null,null,false,null", + "29,null,false,null,null,false,null", + "30,null,false,null,null,false,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"); + 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)).append(","); - for (int i = 1; i <= 5; i++) { - int index = map.get("root.sg1.d1.s" + i); - builder.append(resultSet.getString(index)).append(","); + 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++; diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletionIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletionIT.java new file mode 100644 index 0000000..fbd716b --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletionIT.java @@ -0,0 +1,613 @@ +/* + * 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.jdbc.Config; + +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +public class IoTDBRawQueryWithoutValueFilterWithDeletionIT { + + private static boolean enableSeqSpaceCompaction; + private static boolean enableUnseqSpaceCompaction; + private 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 <= 27"); + } 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 selectAllAlignedWithoutValueFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,null,1,true,aligned_test1", + "2,null,2,null,aligned_test2", + "3,null,3,false,aligned_test3", + "4,null,null,true,aligned_test4", + "5,null,null,true,aligned_test5", + "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", + "13,null,13,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,null,23,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", + "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", + "34,null,null,null,aligned_test34", + "35,null,null,null,aligned_test35", + "36,null,null,null,aligned_test36", + "37,null,null,null,aligned_test37", + "38,null,null,null,aligned_test38", + "39,null,null,null,aligned_test39", + "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"); + 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 selectAllAlignedAndNonAlignedTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,null,1,true,aligned_test1,1.0,1,1,true,non_aligned_test1", + "2,null,2,null,aligned_test2,2.0,2,2,null,non_aligned_test2", + "3,null,3,false,aligned_test3,3.0,null,3,false,non_aligned_test3", + "4,null,null,true,aligned_test4,4.0,4,null,true,non_aligned_test4", + "5,null,null,true,aligned_test5,5.0,5,null,true,non_aligned_test5", + "6,null,6,true,null,6.0,6,6,true,null", + "7,null,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7", + "8,null,8,null,aligned_test8,8.0,8,8,null,non_aligned_test8", + "9,null,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9", + "10,null,10,true,aligned_test10,null,10,10,true,non_aligned_test10", + "11,null,11,null,null,11.0,11,11,null,null", + "12,null,12,null,null,12.0,12,12,null,null", + "13,null,13,null,null,13.0,13,13,null,null", + "14,null,14,null,null,14.0,14,14,null,null", + "15,null,15,null,null,15.0,15,15,null,null", + "16,null,16,null,null,16.0,16,16,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,null,23,true,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", + "31,null,null,null,aligned_test31,null,31,null,null,non_aligned_test31", + "32,null,null,null,aligned_test32,null,32,null,null,non_aligned_test32", + "33,null,null,null,aligned_test33,null,33,null,null,non_aligned_test33", + "34,null,null,null,aligned_test34,null,34,null,null,non_aligned_test34", + "35,null,null,null,aligned_test35,null,35,null,null,non_aligned_test35", + "36,null,null,null,aligned_test36,null,36,null,null,non_aligned_test36", + "37,null,null,null,aligned_test37,null,37,null,null,non_aligned_test37", + "38,null,null,null,aligned_test38,null,38,null,null,non_aligned_test38", + "39,null,null,null,aligned_test39,null,39,null,null,non_aligned_test39", + "40,null,null,null,aligned_test40,null,40,null,null,non_aligned_test40", + }; + + 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.*"); + 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 selectAllAlignedWithTimeFilterTest() 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,13,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,null,23,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", + "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", + }; + + 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"); + 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 selectSomeAlignedWithoutValueFilterTest1() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,null,true,aligned_test1", + "2,null,null,aligned_test2", + "3,null,false,aligned_test3", + "4,null,true,aligned_test4", + "5,null,true,aligned_test5", + "6,null,true,null", + "7,null,false,aligned_test7", + "8,null,null,aligned_test8", + "9,null,false,aligned_test9", + "10,null,true,aligned_test10", + "21,null,true,null", + "22,null,true,null", + "23,null,true,null", + "24,null,true,null", + "25,null,true,null", + "26,null,false,null", + "27,null,false,null", + "28,null,false,null", + "29,null,false,null", + "30,null,false,null", + "31,null,null,aligned_test31", + "32,null,null,aligned_test32", + "33,null,null,aligned_test33", + "34,null,null,aligned_test34", + "35,null,null,aligned_test35", + "36,null,null,aligned_test36", + "37,null,null,aligned_test37", + "38,null,null,aligned_test38", + "39,null,null,aligned_test39", + "40,null,null,aligned_test40", + }; + + 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"); + 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 selectSomeAlignedWithoutValueFilterTest2() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "1,null,true", + "3,null,false", + "4,null,true", + "5,null,true", + "6,null,true", + "7,null,false", + "9,null,false", + "10,null,true", + "21,null,true", + "22,null,true", + "23,null,true", + "24,null,true", + "25,null,true", + "26,null,false", + "27,null,false", + "28,null,false", + "29,null,false", + "30,null,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"); + 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 selectSomeAlignedWithTimeFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "21,null,true,null", + "22,null,true,null", + "23,null,true,null", + "24,null,true,null", + "25,null,true,null", + "26,null,false,null", + "27,null,false,null", + "28,null,false,null", + "29,null,false,null", + "30,null,false,null", + "31,null,null,aligned_test31", + "32,null,null,aligned_test32", + "33,null,null,aligned_test33", + "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 time >= 16 and time <= 34"); + 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 selectSomeAlignedAndNonAlignedWithTimeFilterTest() throws ClassNotFoundException { + + String[] retArray = + new String[] { + "16,null,null,16.0,null,null,null", + "17,null,null,17.0,null,null,null", + "18,null,null,18.0,null,null,null", + "19,null,null,19.0,null,null,null", + "20,null,null,20.0,null,null,null", + "21,null,true,null,null,true,null", + "22,null,true,null,null,true,null", + "23,null,true,null,null,true,null", + "24,null,true,null,null,true,null", + "25,null,true,null,null,true,null", + "26,null,false,null,null,false,null", + "27,null,false,null,null,false,null", + "28,null,false,null,null,false,null", + "29,null,false,null,null,false,null", + "30,null,false,null,null,false,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"); + 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()); + } + } +}
