This is an automated email from the ASF dual-hosted git repository.
xuekaifeng pushed a commit to branch xkf_id_table
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/xkf_id_table by this push:
new 3af148a fix bugs
3af148a is described below
commit 3af148a7a1989734d4d08772d982af204400c9ac
Author: 151250176 <[email protected]>
AuthorDate: Tue Dec 14 16:45:27 2021 +0800
fix bugs
---
.../db/integration/IoTDBQueryWithIDTableIT.java | 291 +++++++++++++++++++++
.../apache/iotdb/db/metadata/id_table/IDTable.java | 19 ++
.../db/metadata/id_table/IDTableHashmapImpl.java | 32 ++-
.../metadata/id_table/entry/DeviceIDFactory.java | 15 ++
.../java/org/apache/iotdb/db/rest/RestService.java | 26 +-
.../apache/iotdb/db/utils/EnvironmentUtils.java | 4 +
...mplLogFileTest.java => IDTableLogFileTest.java} | 2 +-
...olTest.java => IDTableResourceControlTest.java} | 2 +-
...mplRestartTest.java => IDTableRestartTest.java} | 2 +-
...DTableHashmapImplTest.java => IDTableTest.java} | 2 +-
...mapImplTest.java => InsertWithIDTableTest.java} | 2 +-
...eHashmapImpl.java => LastQueryWithIDTable.java} | 42 ++-
... => QueryAlignedTimeseriesWithIDTableTest.java} | 122 ++++++++-
...hmapImplTest.java => QueryWithIDTableTest.java} | 113 +++++++-
14 files changed, 637 insertions(+), 37 deletions(-)
diff --git
a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryWithIDTableIT.java
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryWithIDTableIT.java
new file mode 100644
index 0000000..9385ffd
--- /dev/null
+++
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryWithIDTableIT.java
@@ -0,0 +1,291 @@
+/*
+ * 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;
+
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.metadata.id_table.entry.DeviceIDFactory;
+import org.apache.iotdb.integration.env.EnvFactory;
+import org.apache.iotdb.itbase.category.ClusterTest;
+import org.apache.iotdb.itbase.category.LocalStandaloneTest;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.fail;
+
+@Category({LocalStandaloneTest.class, ClusterTest.class})
+public class IoTDBQueryWithIDTableIT {
+
+ private static String[] sqls =
+ new String[] {
+ "SET STORAGE GROUP TO root.vehicle",
+ "SET STORAGE GROUP TO root.other",
+ "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=FLOAT,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s3 WITH DATATYPE=TEXT,
ENCODING=PLAIN",
+ "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN,
ENCODING=PLAIN",
+ "CREATE TIMESERIES root.vehicle.d1.s0 WITH DATATYPE=INT32,
ENCODING=RLE",
+ "CREATE TIMESERIES root.other.d1.s0 WITH DATATYPE=FLOAT, ENCODING=RLE",
+ "insert into root.vehicle.d0(timestamp,s0) values(1,101)",
+ "insert into root.vehicle.d0(timestamp,s0) values(2,198)",
+ "insert into root.vehicle.d0(timestamp,s0) values(100,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(101,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(102,80)",
+ "insert into root.vehicle.d0(timestamp,s0) values(103,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(104,90)",
+ "insert into root.vehicle.d0(timestamp,s0) values(105,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(106,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(2,10000)",
+ "insert into root.vehicle.d0(timestamp,s0) values(50,10000)",
+ "insert into root.vehicle.d0(timestamp,s0) values(1000,22222)",
+ "insert into root.vehicle.d0(timestamp,s1) values(1,1101)",
+ "insert into root.vehicle.d0(timestamp,s1) values(2,198)",
+ "flush",
+ "insert into root.vehicle.d0(timestamp,s1) values(100,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(101,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(102,180)",
+ "insert into root.vehicle.d0(timestamp,s1) values(103,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(104,190)",
+ "insert into root.vehicle.d0(timestamp,s1) values(105,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(2,40000)",
+ "insert into root.vehicle.d0(timestamp,s1) values(50,50000)",
+ "insert into root.vehicle.d0(timestamp,s1) values(1000,55555)",
+ "insert into root.vehicle.d0(timestamp,s1)
values(2000-01-01T08:00:00+08:00, 100)",
+ "insert into root.vehicle.d0(timestamp,s2) values(1000,55555)",
+ "insert into root.vehicle.d0(timestamp,s2) values(2,2.22)",
+ "insert into root.vehicle.d0(timestamp,s2) values(3,3.33)",
+ "insert into root.vehicle.d0(timestamp,s2) values(4,4.44)",
+ "insert into root.vehicle.d0(timestamp,s2) values(102,10.00)",
+ "insert into root.vehicle.d0(timestamp,s2) values(105,11.11)",
+ "insert into root.vehicle.d0(timestamp,s2) values(1000,1000.11)",
+ "insert into root.vehicle.d0(timestamp,s3) values(60,'aaaaa')",
+ "insert into root.vehicle.d0(timestamp,s3) values(70,'bbbbb')",
+ "insert into root.vehicle.d0(timestamp,s3) values(80,'ccccc')",
+ "insert into root.vehicle.d0(timestamp,s3) values(101,'ddddd')",
+ "insert into root.vehicle.d0(timestamp,s3) values(102,'fffff')",
+ "insert into root.vehicle.d0(timestamp,s3)
values(2000-01-01T08:00:00+08:00, 'good')",
+ "insert into root.vehicle.d0(timestamp,s4) values(100, false)",
+ "insert into root.vehicle.d0(timestamp,s4) values(100, true)",
+ "insert into root.vehicle.d1(timestamp,s0) values(1,999)",
+ "insert into root.vehicle.d1(timestamp,s0) values(1000,888)",
+ "insert into root.other.d1(timestamp,s0) values(2, 3.14)",
+ };
+
+ private static boolean isEnableIDTable = false;
+
+ private static String originalDeviceIDTransformationMethod = null;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ IoTDBDescriptor.getInstance().getConfig().setAutoCreateSchemaEnabled(true);
+ isEnableIDTable =
IoTDBDescriptor.getInstance().getConfig().isEnableIDTable();
+ originalDeviceIDTransformationMethod =
+
IoTDBDescriptor.getInstance().getConfig().getDeviceIDTransformationMethod();
+
+ IoTDBDescriptor.getInstance().getConfig().setEnableIDTable(true);
+
IoTDBDescriptor.getInstance().getConfig().setDeviceIDTransformationMethod("SHA256");
+ EnvFactory.getEnv().initBeforeClass();
+ insertData();
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+
IoTDBDescriptor.getInstance().getConfig().setEnableIDTable(isEnableIDTable);
+ IoTDBDescriptor.getInstance()
+ .getConfig()
+ .setDeviceIDTransformationMethod(originalDeviceIDTransformationMethod);
+ // reset id method
+ DeviceIDFactory.getInstance().reset();
+
+ EnvFactory.getEnv().cleanAfterClass();
+ }
+
+ private static void insertData() {
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+
+ for (String sql : sqls) {
+ statement.execute(sql);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void selectTest() {
+ String[] retArray =
+ new String[] {
+ "1,root.vehicle.d0,101,1101,null,null,null,",
+ "2,root.vehicle.d0,10000,40000,2.22,null,null,",
+ "3,root.vehicle.d0,null,null,3.33,null,null,",
+ "4,root.vehicle.d0,null,null,4.44,null,null,",
+ "50,root.vehicle.d0,10000,50000,null,null,null,",
+ "60,root.vehicle.d0,null,null,null,aaaaa,null,",
+ "70,root.vehicle.d0,null,null,null,bbbbb,null,",
+ "80,root.vehicle.d0,null,null,null,ccccc,null,",
+ "100,root.vehicle.d0,99,199,null,null,true,",
+ "101,root.vehicle.d0,99,199,null,ddddd,null,",
+ "102,root.vehicle.d0,80,180,10.0,fffff,null,",
+ "103,root.vehicle.d0,99,199,null,null,null,",
+ "104,root.vehicle.d0,90,190,null,null,null,",
+ "105,root.vehicle.d0,99,199,11.11,null,null,",
+ "106,root.vehicle.d0,99,null,null,null,null,",
+ "1000,root.vehicle.d0,22222,55555,1000.11,null,null,",
+ "946684800000,root.vehicle.d0,null,100,null,good,null,",
+ "1,root.vehicle.d1,999,null,null,null,null,",
+ "1000,root.vehicle.d1,888,null,null,null,null,",
+ };
+
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+ boolean hasResultSet = statement.execute("select * from root.vehicle.**
align by device");
+ Assert.assertTrue(hasResultSet);
+
+ try (ResultSet resultSet = statement.getResultSet()) {
+ ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+ List<Integer> actualIndexToExpectedIndexList =
+ checkHeader(
+ resultSetMetaData,
+ "Time,Device,s0,s1,s2,s3,s4",
+ new int[] {
+ Types.TIMESTAMP,
+ Types.VARCHAR,
+ Types.INTEGER,
+ Types.BIGINT,
+ Types.FLOAT,
+ Types.VARCHAR,
+ Types.BOOLEAN
+ });
+
+ int cnt = 0;
+ while (resultSet.next()) {
+ String[] expectedStrings = retArray[cnt].split(",");
+ StringBuilder expectedBuilder = new StringBuilder();
+ StringBuilder actualBuilder = new StringBuilder();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ actualBuilder.append(resultSet.getString(i)).append(",");
+ expectedBuilder
+ .append(expectedStrings[actualIndexToExpectedIndexList.get(i -
1)])
+ .append(",");
+ }
+ Assert.assertEquals(expectedBuilder.toString(),
actualBuilder.toString());
+ cnt++;
+ }
+ Assert.assertEquals(19, cnt);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void selectWithDuplicatedPathsTest() {
+ String[] retArray =
+ new String[] {
+ "1,root.vehicle.d0,101,101,1101,",
+ "2,root.vehicle.d0,10000,10000,40000,",
+ "50,root.vehicle.d0,10000,10000,50000,",
+ "100,root.vehicle.d0,99,99,199,",
+ "101,root.vehicle.d0,99,99,199,",
+ "102,root.vehicle.d0,80,80,180,",
+ "103,root.vehicle.d0,99,99,199,",
+ "104,root.vehicle.d0,90,90,190,",
+ "105,root.vehicle.d0,99,99,199,",
+ "106,root.vehicle.d0,99,99,null,",
+ "1000,root.vehicle.d0,22222,22222,55555,",
+ "946684800000,root.vehicle.d0,null,null,100,",
+ "1,root.vehicle.d1,999,999,null,",
+ "1000,root.vehicle.d1,888,888,null,"
+ };
+
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+ boolean hasResultSet =
+ statement.execute(
+ "select s0,s0,s1 from root.vehicle.d0, root.vehicle.d1 align by
device");
+ Assert.assertTrue(hasResultSet);
+
+ try (ResultSet resultSet = statement.getResultSet()) {
+ ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+ List<Integer> actualIndexToExpectedIndexList =
+ checkHeader(
+ resultSetMetaData,
+ "Time,Device,s0,s0,s1",
+ new int[] {
+ Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER,
Types.INTEGER, Types.BIGINT
+ });
+
+ int cnt = 0;
+ while (resultSet.next()) {
+ String[] expectedStrings = retArray[cnt].split(",");
+ StringBuilder expectedBuilder = new StringBuilder();
+ StringBuilder actualBuilder = new StringBuilder();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ actualBuilder.append(resultSet.getString(i)).append(",");
+ expectedBuilder
+ .append(expectedStrings[actualIndexToExpectedIndexList.get(i -
1)])
+ .append(",");
+ }
+ Assert.assertEquals(expectedBuilder.toString(),
actualBuilder.toString());
+ cnt++;
+ }
+ Assert.assertEquals(14, cnt);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ private List<Integer> checkHeader(
+ ResultSetMetaData resultSetMetaData, String expectedHeaderStrings, int[]
expectedTypes)
+ throws SQLException {
+ String[] expectedHeaders = expectedHeaderStrings.split(",");
+ Map<String, Integer> expectedHeaderToTypeIndexMap = new HashMap<>();
+ for (int i = 0; i < expectedHeaders.length; ++i) {
+ expectedHeaderToTypeIndexMap.put(expectedHeaders[i], i);
+ }
+
+ List<Integer> actualIndexToExpectedIndexList = new ArrayList<>();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ Integer typeIndex =
expectedHeaderToTypeIndexMap.get(resultSetMetaData.getColumnName(i));
+ Assert.assertNotNull(typeIndex);
+ Assert.assertEquals(expectedTypes[typeIndex],
resultSetMetaData.getColumnType(i));
+ actualIndexToExpectedIndexList.add(typeIndex);
+ }
+ return actualIndexToExpectedIndexList;
+ }
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTable.java
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTable.java
index cd7494a..6645cc2 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTable.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTable.java
@@ -1,3 +1,22 @@
+/*
+ * 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.metadata.id_table;
import org.apache.iotdb.db.conf.IoTDBConfig;
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImpl.java
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImpl.java
index 12e7083..777657b 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImpl.java
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImpl.java
@@ -32,10 +32,13 @@ import
org.apache.iotdb.db.metadata.id_table.entry.TimeseriesID;
import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
import org.apache.iotdb.db.metadata.path.PartialPath;
import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.utils.TestOnly;
+import org.apache.iotdb.db.utils.TypeInferenceUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.TimeValuePair;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
@@ -400,7 +403,17 @@ public class IDTableHashmapImpl implements IDTable {
// from mmanger
private void checkDataTypeMatch(InsertPlan plan, int loc, TSDataType
dataType)
throws MetadataException {
- TSDataType insertDataType = plan.getDataTypes()[loc];
+ TSDataType insertDataType;
+ if (plan instanceof InsertRowPlan) {
+ if (!((InsertRowPlan) plan).isNeedInferType()) {
+ // only when InsertRowPlan's values is object[], we should check type
+ insertDataType = getTypeInLoc(plan, loc);
+ } else {
+ insertDataType = dataType;
+ }
+ } else {
+ insertDataType = getTypeInLoc(plan, loc);
+ }
if (dataType != insertDataType) {
String measurement = plan.getMeasurements()[loc];
logger.warn(
@@ -412,6 +425,23 @@ public class IDTableHashmapImpl implements IDTable {
}
}
+ /** get dataType of plan, in loc measurements only support InsertRowPlan and
InsertTabletPlan */
+ private TSDataType getTypeInLoc(InsertPlan plan, int loc) throws
MetadataException {
+ TSDataType dataType;
+ if (plan instanceof InsertRowPlan) {
+ InsertRowPlan tPlan = (InsertRowPlan) plan;
+ dataType =
+ TypeInferenceUtils.getPredictedDataType(tPlan.getValues()[loc],
tPlan.isNeedInferType());
+ } else if (plan instanceof InsertTabletPlan) {
+ dataType = (plan).getDataTypes()[loc];
+ } else {
+ throw new MetadataException(
+ String.format(
+ "Only support insert and insertTablet, plan is [%s]",
plan.getOperatorType()));
+ }
+ return dataType;
+ }
+
@TestOnly
public Map<IDeviceID, DeviceEntry>[] getIdTables() {
return idTables;
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DeviceIDFactory.java
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DeviceIDFactory.java
index 2884c53..047b727 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DeviceIDFactory.java
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DeviceIDFactory.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.metadata.id_table.entry;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.metadata.path.PartialPath;
+import org.apache.iotdb.db.utils.TestOnly;
import java.util.function.Function;
@@ -69,4 +70,18 @@ public class DeviceIDFactory {
public IDeviceID getDeviceID(PartialPath devicePath) {
return getDeviceIDFunction.apply(devicePath);
}
+
+ /** reset id method */
+ @TestOnly
+ public void reset() {
+ if (IoTDBDescriptor.getInstance().getConfig().isEnableIDTable()
+ && IoTDBDescriptor.getInstance()
+ .getConfig()
+ .getDeviceIDTransformationMethod()
+ .equals("SHA256")) {
+ getDeviceIDFunction = partialPath -> new
SHA256DeviceID(partialPath.toString());
+ } else {
+ getDeviceIDFunction = partialPath -> new
PlainDeviceID(partialPath.toString());
+ }
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/rest/RestService.java
b/server/src/main/java/org/apache/iotdb/db/rest/RestService.java
index 68b2e60..75928f7 100644
--- a/server/src/main/java/org/apache/iotdb/db/rest/RestService.java
+++ b/server/src/main/java/org/apache/iotdb/db/rest/RestService.java
@@ -103,12 +103,12 @@ public class RestService implements IService {
}
private void serverStart() {
- // try {
- // server.start();
- // } catch (Exception e) {
- // LOGGER.warn("RestService failed to start: {}", e.getMessage());
- // server.destroy();
- // }
+ try {
+ server.start();
+ } catch (Exception e) {
+ LOGGER.warn("RestService failed to start: {}", e.getMessage());
+ server.destroy();
+ }
}
@Override
@@ -129,13 +129,13 @@ public class RestService implements IService {
@Override
public void stop() {
- // try {
- // server.stop();
- // } catch (Exception e) {
- // LOGGER.warn("RestService failed to stop: {}", e.getMessage());
- // } finally {
- // server.destroy();
- // }
+ try {
+ server.stop();
+ } catch (Exception e) {
+ LOGGER.warn("RestService failed to stop: {}", e.getMessage());
+ } finally {
+ server.destroy();
+ }
}
@Override
diff --git
a/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
b/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
index 374ee76..fb84eb7 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
@@ -36,6 +36,7 @@ import org.apache.iotdb.db.exception.StorageEngineException;
import org.apache.iotdb.db.exception.TriggerManagementException;
import org.apache.iotdb.db.exception.UDFRegistrationException;
import org.apache.iotdb.db.metadata.id_table.IDTableManager;
+import org.apache.iotdb.db.metadata.id_table.entry.DeviceIDFactory;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.control.FileReaderManager;
import org.apache.iotdb.db.query.control.QueryResourceManager;
@@ -274,6 +275,9 @@ public class EnvironmentUtils {
createAllDir();
+ // reset id method
+ DeviceIDFactory.getInstance().reset();
+
TEST_QUERY_JOB_ID = QueryResourceManager.getInstance().assignQueryId(true);
TEST_QUERY_CONTEXT = new QueryContext(TEST_QUERY_JOB_ID);
}
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplLogFileTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableLogFileTest.java
similarity index 99%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplLogFileTest.java
rename to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableLogFileTest.java
index 10147a3..50eed1b 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplLogFileTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableLogFileTest.java
@@ -40,7 +40,7 @@ import java.util.HashSet;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
-public class IDTableHashmapImplLogFileTest {
+public class IDTableLogFileTest {
private boolean isEnableIDTable = false;
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplResourceControlTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableResourceControlTest.java
similarity index 99%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplResourceControlTest.java
rename to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableResourceControlTest.java
index a4047fa..096a87c 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplResourceControlTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableResourceControlTest.java
@@ -51,7 +51,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
-public class IDTableHashmapImplResourceControlTest {
+public class IDTableResourceControlTest {
private final Planner processor = new Planner();
private boolean isEnableIDTable = false;
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplRestartTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableRestartTest.java
similarity index 99%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplRestartTest.java
rename to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableRestartTest.java
index 1634a83..721880c 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplRestartTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableRestartTest.java
@@ -48,7 +48,7 @@ import java.util.Set;
import static org.junit.Assert.assertEquals;
-public class IDTableHashmapImplRestartTest {
+public class IDTableRestartTest {
private final Planner processor = new Planner();
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableTest.java
similarity index 99%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplTest.java
rename to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableTest.java
index 740906f..675b8cd 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableHashmapImplTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/IDTableTest.java
@@ -58,7 +58,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-public class IDTableHashmapImplTest {
+public class IDTableTest {
private CompressionType compressionType;
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/InsertWithIDTableHashmapImplTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/InsertWithIDTableTest.java
similarity index 99%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/InsertWithIDTableHashmapImplTest.java
rename to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/InsertWithIDTableTest.java
index f559d57..ac5ee56 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/InsertWithIDTableHashmapImplTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/InsertWithIDTableTest.java
@@ -60,7 +60,7 @@ import java.util.List;
import static org.junit.Assert.assertEquals;
-public class InsertWithIDTableHashmapImplTest {
+public class InsertWithIDTableTest {
private final Planner processor = new Planner();
private boolean isEnableIDTable = false;
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/LastQueryWithIDTableHashmapImpl.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/LastQueryWithIDTable.java
similarity index 87%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/LastQueryWithIDTableHashmapImpl.java
rename to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/LastQueryWithIDTable.java
index 807b917..8409afe 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/LastQueryWithIDTableHashmapImpl.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/LastQueryWithIDTable.java
@@ -1,5 +1,33 @@
+/*
+ * 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.metadata.id_table;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.StorageEngineException;
import org.apache.iotdb.db.exception.metadata.IllegalPathException;
@@ -18,24 +46,12 @@ import
org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.common.RowRecord;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
import org.apache.iotdb.tsfile.utils.Binary;
-
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-public class LastQueryWithIDTableHashmapImpl {
+public class LastQueryWithIDTable {
private final Planner processor = new Planner();
private boolean isEnableIDTable = false;
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableHashmapImplTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryAlignedTimeseriesWithIDTableTest.java
similarity index 63%
copy from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableHashmapImplTest.java
copy to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryAlignedTimeseriesWithIDTableTest.java
index 6952d53..0c923c8 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableHashmapImplTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryAlignedTimeseriesWithIDTableTest.java
@@ -36,6 +36,7 @@ import org.apache.iotdb.db.utils.EnvironmentUtils;
import
org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.Field;
import org.apache.iotdb.tsfile.read.common.RowRecord;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
import org.apache.iotdb.tsfile.utils.Binary;
@@ -61,7 +62,7 @@ import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class QueryWithIDTableHashmapImplTest {
+public class QueryAlignedTimeseriesWithIDTableTest {
private final Planner processor = new Planner();
private boolean isEnableIDTable = false;
@@ -78,6 +79,61 @@ public class QueryWithIDTableHashmapImplTest {
"113\troot.isp.d1.s1\t13.0\tDOUBLE",
"113\troot.isp.d1.s2\t23.0\tFLOAT"));
+ private static String[] sqls =
+ new String[] {
+ "SET STORAGE GROUP TO root.vehicle",
+ "SET STORAGE GROUP TO root.other",
+ "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=FLOAT,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s3 WITH DATATYPE=TEXT,
ENCODING=PLAIN",
+ "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN,
ENCODING=PLAIN",
+ "CREATE TIMESERIES root.vehicle.d1.s0 WITH DATATYPE=INT32,
ENCODING=RLE",
+ "CREATE TIMESERIES root.other.d1.s0 WITH DATATYPE=FLOAT, ENCODING=RLE",
+ "insert into root.vehicle.d0(timestamp,s0) values(1,101)",
+ "insert into root.vehicle.d0(timestamp,s0) values(2,198)",
+ "insert into root.vehicle.d0(timestamp,s0) values(100,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(101,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(102,80)",
+ "insert into root.vehicle.d0(timestamp,s0) values(103,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(104,90)",
+ "insert into root.vehicle.d0(timestamp,s0) values(105,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(106,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(2,10000)",
+ "insert into root.vehicle.d0(timestamp,s0) values(50,10000)",
+ "insert into root.vehicle.d0(timestamp,s0) values(1000,22222)",
+ "insert into root.vehicle.d0(timestamp,s1) values(1,1101)",
+ "insert into root.vehicle.d0(timestamp,s1) values(2,198)",
+ "insert into root.vehicle.d0(timestamp,s1) values(100,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(101,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(102,180)",
+ "insert into root.vehicle.d0(timestamp,s1) values(103,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(104,190)",
+ "insert into root.vehicle.d0(timestamp,s1) values(105,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(2,40000)",
+ "insert into root.vehicle.d0(timestamp,s1) values(50,50000)",
+ "insert into root.vehicle.d0(timestamp,s1) values(1000,55555)",
+ "insert into root.vehicle.d0(timestamp,s1)
values(2000-01-01T08:00:00+08:00, 100)",
+ "insert into root.vehicle.d0(timestamp,s2) values(1000,55555)",
+ "insert into root.vehicle.d0(timestamp,s2) values(2,2.22)",
+ "insert into root.vehicle.d0(timestamp,s2) values(3,3.33)",
+ "insert into root.vehicle.d0(timestamp,s2) values(4,4.44)",
+ "insert into root.vehicle.d0(timestamp,s2) values(102,10.00)",
+ "insert into root.vehicle.d0(timestamp,s2) values(105,11.11)",
+ "insert into root.vehicle.d0(timestamp,s2) values(1000,1000.11)",
+ "insert into root.vehicle.d0(timestamp,s3) values(60,'aaaaa')",
+ "insert into root.vehicle.d0(timestamp,s3) values(70,'bbbbb')",
+ "insert into root.vehicle.d0(timestamp,s3) values(80,'ccccc')",
+ "insert into root.vehicle.d0(timestamp,s3) values(101,'ddddd')",
+ "insert into root.vehicle.d0(timestamp,s3) values(102,'fffff')",
+ "insert into root.vehicle.d0(timestamp,s3)
values(2000-01-01T08:00:00+08:00, 'good')",
+ "insert into root.vehicle.d0(timestamp,s4) values(100, false)",
+ "insert into root.vehicle.d0(timestamp,s4) values(100, true)",
+ "insert into root.vehicle.d1(timestamp,s0) values(1,999)",
+ "insert into root.vehicle.d1(timestamp,s0) values(1000,888)",
+ "insert into root.other.d1(timestamp,s0) values(2, 3.14)",
+ };
+
@Before
public void before() {
IoTDBDescriptor.getInstance().getConfig().setAutoCreateSchemaEnabled(true);
@@ -109,10 +165,11 @@ public class QueryWithIDTableHashmapImplTest {
PlanExecutor executor = new PlanExecutor();
QueryPlan queryPlan = (QueryPlan) processor.parseSQLToPhysicalPlan("select
* from root.isp.d1");
QueryDataSet dataSet = executor.processQuery(queryPlan,
EnvironmentUtils.TEST_QUERY_CONTEXT);
- Assert.assertEquals(6, dataSet.getPaths().size());
+
int count = 0;
while (dataSet.hasNext()) {
RowRecord record = dataSet.next();
+ System.out.println(record);
count++;
}
@@ -120,6 +177,61 @@ public class QueryWithIDTableHashmapImplTest {
}
@Test
+ public void testAggregateQueryAfterFlush()
+ throws MetadataException, QueryProcessException, StorageEngineException,
InterruptedException,
+ QueryFilterOptimizationException, IOException {
+ insertDataInDisk();
+ insertDataInMemory();
+
+ PlanExecutor executor = new PlanExecutor();
+ QueryPlan queryPlan =
+ (QueryPlan) processor.parseSQLToPhysicalPlan("select count(*) from
root.isp.d1");
+ QueryDataSet dataSet = executor.processQuery(queryPlan,
EnvironmentUtils.TEST_QUERY_CONTEXT);
+ Assert.assertEquals(6, dataSet.getPaths().size());
+ int count = 0;
+ while (dataSet.hasNext()) {
+ RowRecord record = dataSet.next();
+ for (Field f : record.getFields()) {
+ assertEquals(8L, f.getLongV());
+ }
+ count++;
+ }
+
+ assertEquals(1, count);
+ }
+
+ @Test
+ public void testGroupByQueryAfterFlush()
+ throws MetadataException, QueryProcessException, StorageEngineException,
InterruptedException,
+ QueryFilterOptimizationException, IOException {
+ insertDataInDisk();
+ insertDataInMemory();
+
+ PlanExecutor executor = new PlanExecutor();
+ QueryPlan queryPlan =
+ (QueryPlan)
+ processor.parseSQLToPhysicalPlan(
+ "select count(*) from root.isp.d1 group by ([10, 114), 10ms)");
+ QueryDataSet dataSet = executor.processQuery(queryPlan,
EnvironmentUtils.TEST_QUERY_CONTEXT);
+ System.out.println(dataSet.getPaths());
+ Assert.assertEquals(6, dataSet.getPaths().size());
+ int count = 0;
+ while (dataSet.hasNext()) {
+ RowRecord record = dataSet.next();
+ for (Field f : record.getFields()) {
+ if (count == 0 || count == 10) {
+ assertEquals(4L, f.getLongV());
+ } else {
+ assertEquals(0L, f.getLongV());
+ }
+ }
+ count++;
+ }
+
+ assertEquals(11, count);
+ }
+
+ @Test
public void testLastCacheQuery()
throws QueryProcessException, MetadataException, InterruptedException,
QueryFilterOptimizationException, StorageEngineException,
IOException {
@@ -203,7 +315,8 @@ public class QueryWithIDTableHashmapImplTest {
new InsertTabletPlan(
new PartialPath("root.isp.d1"),
new String[] {"s1", "s2", "s3", "s4", "s5", "s6"},
- dataTypes);
+ dataTypes,
+ true);
tabletPlan.setTimes(times);
tabletPlan.setColumns(columns);
tabletPlan.setRowCount(times.length);
@@ -245,7 +358,8 @@ public class QueryWithIDTableHashmapImplTest {
new InsertTabletPlan(
new PartialPath("root.isp.d1"),
new String[] {"s1", "s2", "s3", "s4", "s5", "s6"},
- dataTypes);
+ dataTypes,
+ true);
tabletPlan.setTimes(times);
tabletPlan.setColumns(columns);
tabletPlan.setRowCount(times.length);
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableHashmapImplTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableTest.java
similarity index 64%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableHashmapImplTest.java
rename to
server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableTest.java
index 6952d53..900adf4 100644
---
a/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableHashmapImplTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/metadata/id_table/QueryWithIDTableTest.java
@@ -36,6 +36,7 @@ import org.apache.iotdb.db.utils.EnvironmentUtils;
import
org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.Field;
import org.apache.iotdb.tsfile.read.common.RowRecord;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
import org.apache.iotdb.tsfile.utils.Binary;
@@ -61,7 +62,7 @@ import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class QueryWithIDTableHashmapImplTest {
+public class QueryWithIDTableTest {
private final Planner processor = new Planner();
private boolean isEnableIDTable = false;
@@ -78,6 +79,61 @@ public class QueryWithIDTableHashmapImplTest {
"113\troot.isp.d1.s1\t13.0\tDOUBLE",
"113\troot.isp.d1.s2\t23.0\tFLOAT"));
+ private static String[] sqls =
+ new String[] {
+ "SET STORAGE GROUP TO root.vehicle",
+ "SET STORAGE GROUP TO root.other",
+ "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=FLOAT,
ENCODING=RLE",
+ "CREATE TIMESERIES root.vehicle.d0.s3 WITH DATATYPE=TEXT,
ENCODING=PLAIN",
+ "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN,
ENCODING=PLAIN",
+ "CREATE TIMESERIES root.vehicle.d1.s0 WITH DATATYPE=INT32,
ENCODING=RLE",
+ "CREATE TIMESERIES root.other.d1.s0 WITH DATATYPE=FLOAT, ENCODING=RLE",
+ "insert into root.vehicle.d0(timestamp,s0) values(1,101)",
+ "insert into root.vehicle.d0(timestamp,s0) values(2,198)",
+ "insert into root.vehicle.d0(timestamp,s0) values(100,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(101,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(102,80)",
+ "insert into root.vehicle.d0(timestamp,s0) values(103,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(104,90)",
+ "insert into root.vehicle.d0(timestamp,s0) values(105,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(106,99)",
+ "insert into root.vehicle.d0(timestamp,s0) values(2,10000)",
+ "insert into root.vehicle.d0(timestamp,s0) values(50,10000)",
+ "insert into root.vehicle.d0(timestamp,s0) values(1000,22222)",
+ "insert into root.vehicle.d0(timestamp,s1) values(1,1101)",
+ "insert into root.vehicle.d0(timestamp,s1) values(2,198)",
+ "insert into root.vehicle.d0(timestamp,s1) values(100,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(101,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(102,180)",
+ "insert into root.vehicle.d0(timestamp,s1) values(103,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(104,190)",
+ "insert into root.vehicle.d0(timestamp,s1) values(105,199)",
+ "insert into root.vehicle.d0(timestamp,s1) values(2,40000)",
+ "insert into root.vehicle.d0(timestamp,s1) values(50,50000)",
+ "insert into root.vehicle.d0(timestamp,s1) values(1000,55555)",
+ "insert into root.vehicle.d0(timestamp,s1)
values(2000-01-01T08:00:00+08:00, 100)",
+ "insert into root.vehicle.d0(timestamp,s2) values(1000,55555)",
+ "insert into root.vehicle.d0(timestamp,s2) values(2,2.22)",
+ "insert into root.vehicle.d0(timestamp,s2) values(3,3.33)",
+ "insert into root.vehicle.d0(timestamp,s2) values(4,4.44)",
+ "insert into root.vehicle.d0(timestamp,s2) values(102,10.00)",
+ "insert into root.vehicle.d0(timestamp,s2) values(105,11.11)",
+ "insert into root.vehicle.d0(timestamp,s2) values(1000,1000.11)",
+ "insert into root.vehicle.d0(timestamp,s3) values(60,'aaaaa')",
+ "insert into root.vehicle.d0(timestamp,s3) values(70,'bbbbb')",
+ "insert into root.vehicle.d0(timestamp,s3) values(80,'ccccc')",
+ "insert into root.vehicle.d0(timestamp,s3) values(101,'ddddd')",
+ "insert into root.vehicle.d0(timestamp,s3) values(102,'fffff')",
+ "insert into root.vehicle.d0(timestamp,s3)
values(2000-01-01T08:00:00+08:00, 'good')",
+ "insert into root.vehicle.d0(timestamp,s4) values(100, false)",
+ "insert into root.vehicle.d0(timestamp,s4) values(100, true)",
+ "insert into root.vehicle.d1(timestamp,s0) values(1,999)",
+ "insert into root.vehicle.d1(timestamp,s0) values(1000,888)",
+ "insert into root.other.d1(timestamp,s0) values(2, 3.14)",
+ };
+
@Before
public void before() {
IoTDBDescriptor.getInstance().getConfig().setAutoCreateSchemaEnabled(true);
@@ -120,6 +176,61 @@ public class QueryWithIDTableHashmapImplTest {
}
@Test
+ public void testAggregateQueryAfterFlush()
+ throws MetadataException, QueryProcessException, StorageEngineException,
InterruptedException,
+ QueryFilterOptimizationException, IOException {
+ insertDataInDisk();
+ insertDataInMemory();
+
+ PlanExecutor executor = new PlanExecutor();
+ QueryPlan queryPlan =
+ (QueryPlan) processor.parseSQLToPhysicalPlan("select count(*) from
root.isp.d1");
+ QueryDataSet dataSet = executor.processQuery(queryPlan,
EnvironmentUtils.TEST_QUERY_CONTEXT);
+ Assert.assertEquals(6, dataSet.getPaths().size());
+ int count = 0;
+ while (dataSet.hasNext()) {
+ RowRecord record = dataSet.next();
+ for (Field f : record.getFields()) {
+ assertEquals(8L, f.getLongV());
+ }
+ count++;
+ }
+
+ assertEquals(1, count);
+ }
+
+ @Test
+ public void testGroupByQueryAfterFlush()
+ throws MetadataException, QueryProcessException, StorageEngineException,
InterruptedException,
+ QueryFilterOptimizationException, IOException {
+ insertDataInDisk();
+ insertDataInMemory();
+
+ PlanExecutor executor = new PlanExecutor();
+ QueryPlan queryPlan =
+ (QueryPlan)
+ processor.parseSQLToPhysicalPlan(
+ "select count(*) from root.isp.d1 group by ([10, 114), 10ms)");
+ QueryDataSet dataSet = executor.processQuery(queryPlan,
EnvironmentUtils.TEST_QUERY_CONTEXT);
+ System.out.println(dataSet.getPaths());
+ Assert.assertEquals(6, dataSet.getPaths().size());
+ int count = 0;
+ while (dataSet.hasNext()) {
+ RowRecord record = dataSet.next();
+ for (Field f : record.getFields()) {
+ if (count == 0 || count == 10) {
+ assertEquals(4L, f.getLongV());
+ } else {
+ assertEquals(0L, f.getLongV());
+ }
+ }
+ count++;
+ }
+
+ assertEquals(11, count);
+ }
+
+ @Test
public void testLastCacheQuery()
throws QueryProcessException, MetadataException, InterruptedException,
QueryFilterOptimizationException, StorageEngineException,
IOException {