You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2022/10/04 01:24:23 UTC
[iotdb] branch master updated: [IOTDB-4398][IOTDB-4416] Migrate some SessionIT (#7393)
This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 53d6040351 [IOTDB-4398][IOTDB-4416] Migrate some SessionIT (#7393)
53d6040351 is described below
commit 53d6040351761440a37102a675b038797405f14f
Author: Itami Sho <42...@users.noreply.github.com>
AuthorDate: Tue Oct 4 09:24:15 2022 +0800
[IOTDB-4398][IOTDB-4416] Migrate some SessionIT (#7393)
---
.../iotdb/session/IoTDBSessionComplexIT.java | 2 +-
.../iotdb/session/IoTDBSessionInsertNulIT.java | 358 ++++
.../apache/iotdb/session/IoTDBSessionSimpleIT.java | 1633 +++++++++++++++++++
.../session/IoTDBSessionSyntaxConventionIT.java | 428 +++++
.../iotdb/session/IoTDBSessionComplexIT.java | 929 -----------
.../session/IoTDBSessionDisableMemControlIT.java | 202 ---
.../iotdb/session/IoTDBSessionInsertNullT.java | 298 ----
.../apache/iotdb/session/IoTDBSessionSimpleIT.java | 1704 --------------------
.../session/IoTDBSessionSyntaxConventionIT.java | 415 -----
.../db/mpp/plan/parser/StatementGenerator.java | 17 +-
.../metadata/DeleteTimeSeriesStatement.java | 5 +
.../service/thrift/impl/ClientRPCServiceImpl.java | 60 +-
12 files changed, 2489 insertions(+), 3562 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java
index d88ff57b71..ef49cef0a7 100644
--- a/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java
@@ -81,7 +81,7 @@ public class IoTDBSessionComplexIT {
insertViaSQL(session);
queryByDevice(session, "root.sg1.d1");
- } catch (IoTDBConnectionException | StatementExecutionException e) {
+ } catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
diff --git a/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionInsertNulIT.java b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionInsertNulIT.java
new file mode 100644
index 0000000000..1e475b32ec
--- /dev/null
+++ b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionInsertNulIT.java
@@ -0,0 +1,358 @@
+/*
+ * 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.session;
+
+import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.read.common.Field;
+import org.apache.iotdb.tsfile.read.common.RowRecord;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+@RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
+public class IoTDBSessionInsertNulIT {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(IoTDBSessionInsertNulIT.class);
+ private final int retry = 30;
+
+ @Before
+ public void setUp() throws Exception {
+ System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
+ EnvFactory.getEnv().initBeforeTest();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ EnvFactory.getEnv().cleanAfterTest();
+ }
+
+ private void prepareData(ISession session)
+ throws IoTDBConnectionException, StatementExecutionException {
+ session.setStorageGroup("root.sg1");
+ session.createTimeseries(
+ "root.sg1.clsu.d1.s1", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ session.createTimeseries(
+ "root.sg1.clsu.d1.s2", TSDataType.INT32, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ session.createTimeseries(
+ "root.sg1.clsu.d1.s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ session.createTimeseries(
+ "root.sg1.clsu.d1.s4", TSDataType.FLOAT, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ session.createTimeseries(
+ "root.sg1.clsu.d1.s5", TSDataType.DOUBLE, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ session.createTimeseries(
+ "root.sg1.clsu.d1.s6", TSDataType.TEXT, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ session.createTimeseries(
+ "root.sg1.clsu.d2.s1", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ }
+
+ private long queryCountRecords(ISession session, String sql)
+ throws StatementExecutionException, IoTDBConnectionException {
+ SessionDataSet dataSetWrapper = session.executeQueryStatement(sql, 1000);
+ long count = 0;
+ while (dataSetWrapper.hasNext()) {
+ RowRecord record = dataSetWrapper.next();
+ Field field = record.getFields().get(0);
+ switch (field.getDataType()) {
+ case INT32:
+ count = field.getIntV();
+ break;
+ case INT64:
+ count = field.getLongV();
+ break;
+ }
+ }
+ return count;
+ }
+
+ @Test
+ public void insertRecordNullTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ prepareData(session);
+
+ String deviceId = "root.sg1.clsu.d1";
+ session.insertRecord(deviceId, 100, Arrays.asList("s1"), Arrays.asList("true"));
+ List<String> t = new ArrayList<>();
+ t.add(null);
+ session.insertRecord(deviceId, 200, Arrays.asList("s1"), t);
+ session.insertRecord(
+ deviceId,
+ 300,
+ Arrays.asList("s1", "s2"),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(true, 30));
+ session.insertRecord(
+ deviceId,
+ 400,
+ Arrays.asList("s1", "s2"),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(true, null));
+ session.insertRecord(
+ deviceId,
+ 500,
+ Arrays.asList("s1", "s2"),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(null, null));
+ long nums = queryCountRecords(session, "select count(s1) from " + deviceId);
+ assertEquals(3, nums);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertAlignedRecordNullTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ prepareData(session);
+
+ String deviceId = "root.sg1.clsu.aligned_d1";
+ session.insertAlignedRecord(deviceId, 100, Arrays.asList("s1"), Arrays.asList("true"));
+ List<String> t = new ArrayList<>();
+ t.add(null);
+ session.insertAlignedRecord(deviceId, 200, Arrays.asList("s1"), t);
+ session.insertAlignedRecord(
+ deviceId,
+ 300,
+ Arrays.asList("s1", "s2"),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(true, 30));
+ session.insertAlignedRecord(
+ deviceId,
+ 400,
+ Arrays.asList("s1", "s2"),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(true, null));
+ session.insertAlignedRecord(
+ deviceId,
+ 500,
+ Arrays.asList("s1", "s2"),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(null, null));
+ for (int i = 0; i < retry; i++) {
+ try {
+ long nums = queryCountRecords(session, "select count(s1) from " + deviceId);
+ assertEquals(3, nums);
+ return;
+ } catch (Exception e) {
+ LOGGER.info("query records failed, retry: " + i);
+ Thread.sleep(1000);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertRecordsNullTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ prepareData(session);
+
+ String deviceId1 = "root.sg1.clsu.d2";
+ String deviceId2 = "root.sg1.clsu.d3";
+ session.insertRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(300L, 300L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
+ session.insertRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(200L, 200L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
+ session.insertRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(400L, 400L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
+ session.insertRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(500L, 500L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
+
+ for (int i = 0; i < retry; i++) {
+ try {
+ long nums = queryCountRecords(session, "select count(s1) from " + deviceId1);
+ assertEquals(3, nums);
+ nums = queryCountRecords(session, "select count(s2) from " + deviceId2);
+ assertEquals(3, nums);
+ return;
+ } catch (Exception e) {
+ LOGGER.info("query records failed, retry: " + i);
+ Thread.sleep(1000);
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertAlignedRecordsNullTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ prepareData(session);
+ String deviceId1 = "root.sg1.clsu.aligned_d2";
+ String deviceId2 = "root.sg1.clsu.aligned_d3";
+ session.insertAlignedRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(300L, 300L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
+ session.insertAlignedRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(200L, 200L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
+ session.insertAlignedRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(400L, 400L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
+ session.insertAlignedRecords(
+ Arrays.asList(deviceId1, deviceId2),
+ Arrays.asList(500L, 500L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
+ long nums = queryCountRecords(session, "select count(s1) from " + deviceId1);
+ assertEquals(3, nums);
+ nums = queryCountRecords(session, "select count(s2) from " + deviceId2);
+ assertEquals(3, nums);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertRecordsOfOneDeviceNullTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ prepareData(session);
+ String deviceId1 = "root.sg1.clsu.InsertRecordsOfOneDevice";
+ session.insertRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(300L, 301L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
+ session.insertStringRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(200L, 201L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
+ session.insertStringRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(400L, 401L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
+ session.insertRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(500L, 501L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
+ long nums = queryCountRecords(session, "select count(s1) from " + deviceId1);
+ assertEquals(6, nums);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertAlignedRecordsOfOneDeviceNullTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ prepareData(session);
+ String deviceId1 = "root.sg1.clsu.InsertAlignedRecordsOfOneDevice";
+ session.insertAlignedRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(300L, 301L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
+ session.insertAlignedStringRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(200L, 201L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
+ session.insertAlignedStringRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(400L, 401L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
+ session.insertAlignedRecordsOfOneDevice(
+ deviceId1,
+ Arrays.asList(500L, 501L),
+ Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
+ Arrays.asList(
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
+ Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
+ Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
+ long nums = queryCountRecords(session, "select count(s1) from " + deviceId1);
+ assertEquals(6, nums);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+}
diff --git a/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
new file mode 100644
index 0000000000..9609b5c11d
--- /dev/null
+++ b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
@@ -0,0 +1,1633 @@
+/*
+ * 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.session;
+
+import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.OperationType;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
+import org.apache.iotdb.rpc.BatchExecutionException;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.rpc.TSStatusCode;
+import org.apache.iotdb.session.template.InternalNode;
+import org.apache.iotdb.session.template.MeasurementNode;
+import org.apache.iotdb.session.template.Template;
+import org.apache.iotdb.session.template.TemplateNode;
+import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.read.common.Field;
+import org.apache.iotdb.tsfile.read.common.RowRecord;
+import org.apache.iotdb.tsfile.utils.Binary;
+import org.apache.iotdb.tsfile.utils.BitMap;
+import org.apache.iotdb.tsfile.write.record.Tablet;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+
+import org.apache.commons.lang3.StringUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.security.SecureRandom;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+@RunWith(IoTDBTestRunner.class)
+public class IoTDBSessionSimpleIT {
+
+ private static Logger LOGGER = LoggerFactory.getLogger(IoTDBSessionSimpleIT.class);
+
+ @Before
+ public void setUp() throws Exception {
+ System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
+ EnvFactory.getEnv().initBeforeTest();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ EnvFactory.getEnv().cleanAfterTest();
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertPartialTabletTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE));
+ schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
+
+ Tablet tablet = new Tablet("root.sg.d", schemaList, 10);
+
+ long timestamp = System.currentTimeMillis();
+
+ for (long row = 0; row < 15; row++) {
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, timestamp);
+ tablet.addValue("s1", rowIndex, 1L);
+ tablet.addValue("s2", rowIndex, 1D);
+ tablet.addValue("s3", rowIndex, new Binary("1"));
+ if (tablet.rowSize == tablet.getMaxRowNumber()) {
+ session.insertTablet(tablet, true);
+ tablet.reset();
+ }
+ timestamp++;
+ }
+
+ if (tablet.rowSize != 0) {
+ session.insertTablet(tablet);
+ tablet.reset();
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("select count(*) from root");
+ while (dataSet.hasNext()) {
+ RowRecord rowRecord = dataSet.next();
+ assertEquals(15L, rowRecord.getFields().get(0).getLongV());
+ assertEquals(15L, rowRecord.getFields().get(1).getLongV());
+ assertEquals(15L, rowRecord.getFields().get(2).getLongV());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertByStrAndInferTypeTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1";
+ List<String> measurements = new ArrayList<>();
+ measurements.add("s1");
+ measurements.add("s2");
+ measurements.add("s3");
+ measurements.add("s4");
+
+ List<String> values = new ArrayList<>();
+ values.add("1");
+ values.add("1.2");
+ values.add("true");
+ values.add("dad");
+ session.insertRecord(deviceId, 1L, measurements, values);
+
+ Set<String> expected = new HashSet<>();
+ expected.add(IoTDBDescriptor.getInstance().getConfig().getIntegerStringInferType().name());
+ expected.add(IoTDBDescriptor.getInstance().getConfig().getFloatingStringInferType().name());
+ expected.add(IoTDBDescriptor.getInstance().getConfig().getBooleanStringInferType().name());
+ expected.add(TSDataType.TEXT.name());
+
+ Set<String> actual = new HashSet<>();
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root.**");
+ while (dataSet.hasNext()) {
+ actual.add(dataSet.next().getFields().get(3).getStringValue());
+ }
+
+ assertEquals(expected, actual);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertWrongPathByStrAndInferTypeTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1..d1";
+ List<String> measurements = new ArrayList<>();
+ measurements.add("s1");
+ measurements.add("s2");
+ measurements.add("s3");
+ measurements.add("s4");
+
+ List<String> values = new ArrayList<>();
+ values.add("1");
+ values.add("1.2");
+ values.add("true");
+ values.add("dad");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ LOGGER.error("", e);
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertIntoIllegalTimeseriesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1\n";
+ List<String> measurements = new ArrayList<>();
+ measurements.add("s1");
+ measurements.add("s2");
+ measurements.add("s3");
+ measurements.add("s4");
+
+ List<String> values = new ArrayList<>();
+ values.add("1");
+ values.add("1.2");
+ values.add("true");
+ values.add("dad");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ LOGGER.error("", e);
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertByObjAndNotInferTypeTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1";
+ List<String> measurements = new ArrayList<>();
+ measurements.add("s1");
+ measurements.add("s2");
+ measurements.add("s3");
+ measurements.add("s4");
+
+ List<TSDataType> dataTypes = new ArrayList<>();
+ dataTypes.add(TSDataType.INT64);
+ dataTypes.add(TSDataType.DOUBLE);
+ dataTypes.add(TSDataType.TEXT);
+ dataTypes.add(TSDataType.TEXT);
+
+ List<Object> values = new ArrayList<>();
+ values.add(1L);
+ values.add(1.2d);
+ values.add("true");
+ values.add("dad");
+ session.insertRecord(deviceId, 1L, measurements, dataTypes, values);
+
+ Set<String> expected = new HashSet<>();
+ expected.add(TSDataType.INT64.name());
+ expected.add(TSDataType.DOUBLE.name());
+ expected.add(TSDataType.TEXT.name());
+ expected.add(TSDataType.TEXT.name());
+
+ Set<String> actual = new HashSet<>();
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root.**");
+ while (dataSet.hasNext()) {
+ actual.add(dataSet.next().getFields().get(3).getStringValue());
+ }
+
+ assertEquals(expected, actual);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void createMultiTimeseriesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<String> paths = new ArrayList<>();
+ paths.add("root.sg1.d1.s1");
+ paths.add("root.sg1.d1.s2");
+ List<TSDataType> tsDataTypes = new ArrayList<>();
+ tsDataTypes.add(TSDataType.DOUBLE);
+ tsDataTypes.add(TSDataType.DOUBLE);
+ List<TSEncoding> tsEncodings = new ArrayList<>();
+ tsEncodings.add(TSEncoding.RLE);
+ tsEncodings.add(TSEncoding.RLE);
+ List<CompressionType> compressionTypes = new ArrayList<>();
+ compressionTypes.add(CompressionType.SNAPPY);
+ compressionTypes.add(CompressionType.SNAPPY);
+
+ List<Map<String, String>> tagsList = new ArrayList<>();
+ Map<String, String> tags = new HashMap<>();
+ tags.put("tag1", "v1");
+ tagsList.add(tags);
+ tagsList.add(tags);
+
+ session.createMultiTimeseries(
+ paths, tsDataTypes, tsEncodings, compressionTypes, null, tagsList, null, null);
+
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.s1"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.s2"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void chineseCharacterTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ if (!System.getProperty("sun.jnu.encoding").contains("UTF-8")) {
+ LOGGER.error("The system does not support UTF-8, so skip Chinese test...");
+ session.close();
+ return;
+ }
+ String storageGroup = "root.存储组1";
+ String[] devices = new String[] {"设备1.指标1", "设备1.s2", "d2.s1", "d2.指标2"};
+ session.setStorageGroup(storageGroup);
+ for (String path : devices) {
+ String fullPath = storageGroup + TsFileConstant.PATH_SEPARATOR + path;
+ session.createTimeseries(
+ fullPath, TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+ }
+
+ for (String path : devices) {
+ for (int i = 0; i < 10; i++) {
+ String[] ss = path.split("\\.");
+ StringBuilder deviceId = new StringBuilder(storageGroup);
+ for (int j = 0; j < ss.length - 1; j++) {
+ deviceId.append(TsFileConstant.PATH_SEPARATOR).append(ss[j]);
+ }
+ String sensorId = ss[ss.length - 1];
+ List<String> measurements = new ArrayList<>();
+ List<Object> values = new ArrayList<>();
+ List<TSDataType> types = new ArrayList<>();
+
+ measurements.add(sensorId);
+ types.add(TSDataType.INT64);
+ values.add(100L);
+ session.insertRecord(deviceId.toString(), i, measurements, types, values);
+ }
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("select * from root.存储组1.*");
+ int count = 0;
+ while (dataSet.hasNext()) {
+ count++;
+ }
+ assertEquals(10, count);
+ session.deleteStorageGroup(storageGroup);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertTabletWithAlignedTimeseriesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new MeasurementSchema("s2", TSDataType.INT32));
+ schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
+
+ Tablet tablet = new Tablet("root.sg1.d1", schemaList);
+ long timestamp = System.currentTimeMillis();
+
+ for (long row = 0; row < 10; row++) {
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, timestamp);
+ tablet.addValue(
+ schemaList.get(0).getMeasurementId(), rowIndex, new SecureRandom().nextLong());
+ tablet.addValue(
+ schemaList.get(1).getMeasurementId(), rowIndex, new SecureRandom().nextInt());
+ tablet.addValue(schemaList.get(2).getMeasurementId(), rowIndex, new Binary("test"));
+ timestamp++;
+ }
+
+ if (tablet.rowSize != 0) {
+ session.insertAlignedTablet(tablet);
+ tablet.reset();
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("select count(*) from root");
+ while (dataSet.hasNext()) {
+ RowRecord rowRecord = dataSet.next();
+ assertEquals(10L, rowRecord.getFields().get(0).getLongV());
+ assertEquals(10L, rowRecord.getFields().get(1).getLongV());
+ assertEquals(10L, rowRecord.getFields().get(2).getLongV());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertTabletWithNullValuesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("s0", TSDataType.DOUBLE, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s1", TSDataType.FLOAT, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s3", TSDataType.INT32, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s4", TSDataType.BOOLEAN, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s5", TSDataType.TEXT, TSEncoding.RLE));
+
+ Tablet tablet = new Tablet("root.sg1.d1", schemaList);
+ for (long time = 0; time < 10; time++) {
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, time);
+
+ tablet.addValue(schemaList.get(0).getMeasurementId(), rowIndex, (double) time);
+ tablet.addValue(schemaList.get(1).getMeasurementId(), rowIndex, (float) time);
+ tablet.addValue(schemaList.get(2).getMeasurementId(), rowIndex, time);
+ tablet.addValue(schemaList.get(3).getMeasurementId(), rowIndex, (int) time);
+ tablet.addValue(schemaList.get(4).getMeasurementId(), rowIndex, time % 2 == 0);
+ tablet.addValue(
+ schemaList.get(5).getMeasurementId(), rowIndex, new Binary(String.valueOf(time)));
+ }
+
+ BitMap[] bitMaps = new BitMap[schemaList.size()];
+ for (int i = 0; i < schemaList.size(); i++) {
+ if (bitMaps[i] == null) {
+ bitMaps[i] = new BitMap(10);
+ }
+ bitMaps[i].mark(i);
+ }
+ tablet.bitMaps = bitMaps;
+
+ if (tablet.rowSize != 0) {
+ session.insertTablet(tablet);
+ tablet.reset();
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("select count(*) from root");
+ while (dataSet.hasNext()) {
+ RowRecord rowRecord = dataSet.next();
+ assertEquals(6L, rowRecord.getFields().size());
+ for (Field field : rowRecord.getFields()) {
+ assertEquals(9L, field.getLongV());
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertTabletWithStringValuesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("s0", TSDataType.DOUBLE, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s1", TSDataType.FLOAT, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s3", TSDataType.INT32, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s4", TSDataType.BOOLEAN, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s5", TSDataType.TEXT, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s6", TSDataType.TEXT, TSEncoding.RLE));
+
+ Tablet tablet = new Tablet("root.sg1.d1", schemaList);
+ for (long time = 0; time < 10; time++) {
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, time);
+
+ tablet.addValue(schemaList.get(0).getMeasurementId(), rowIndex, (double) time);
+ tablet.addValue(schemaList.get(1).getMeasurementId(), rowIndex, (float) time);
+ tablet.addValue(schemaList.get(2).getMeasurementId(), rowIndex, time);
+ tablet.addValue(schemaList.get(3).getMeasurementId(), rowIndex, (int) time);
+ tablet.addValue(schemaList.get(4).getMeasurementId(), rowIndex, time % 2 == 0);
+ tablet.addValue(schemaList.get(5).getMeasurementId(), rowIndex, new Binary("Text" + time));
+ tablet.addValue(schemaList.get(6).getMeasurementId(), rowIndex, "Text" + time);
+ }
+
+ if (tablet.rowSize != 0) {
+ session.insertTablet(tablet);
+ tablet.reset();
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("select * from root.sg1.d1");
+ while (dataSet.hasNext()) {
+ RowRecord rowRecord = dataSet.next();
+ List<Field> fields = rowRecord.getFields();
+ assertEquals(fields.get(5).getBinaryV(), fields.get(6).getBinaryV());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void createTimeSeriesWithDoubleTicksTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ if (!System.getProperty("sun.jnu.encoding").contains("UTF-8")) {
+ LOGGER.error("The system does not support UTF-8, so skip Chinese test...");
+ session.close();
+ return;
+ }
+ String storageGroup = "root.sg";
+ session.setStorageGroup(storageGroup);
+
+ session.createTimeseries(
+ "root.sg.`my.device.with.colon:`.s",
+ TSDataType.INT64,
+ TSEncoding.RLE,
+ CompressionType.SNAPPY);
+
+ final SessionDataSet dataSet = session.executeQueryStatement("SHOW TIMESERIES");
+ assertTrue(dataSet.hasNext());
+
+ session.deleteStorageGroup(storageGroup);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void createWrongTimeSeriesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ if (!System.getProperty("sun.jnu.encoding").contains("UTF-8")) {
+ LOGGER.error("The system does not support UTF-8, so skip Chinese test...");
+ session.close();
+ return;
+ }
+ String storageGroup = "root.sg";
+ session.setStorageGroup(storageGroup);
+
+ try {
+ session.createTimeseries(
+ "root.sg.d1..s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+ } catch (IoTDBConnectionException | StatementExecutionException e) {
+ LOGGER.error("", e);
+ }
+
+ try {
+ session.createTimeseries("", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+ } catch (IoTDBConnectionException | StatementExecutionException e) {
+ LOGGER.error("", e);
+ }
+
+ final SessionDataSet dataSet = session.executeQueryStatement("SHOW TIMESERIES");
+ assertFalse(dataSet.hasNext());
+
+ session.deleteStorageGroup(storageGroup);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({ClusterIT.class})
+ public void deleteNonExistTimeSeriesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ session.insertRecord(
+ "root.sg1.d1", 0, Arrays.asList("t1", "t2", "t3"), Arrays.asList("123", "333", "444"));
+ try {
+ session.deleteTimeseries(
+ Arrays.asList("root.sg1.d1.t6", "root.sg1.d1.t2", "root.sg1.d1.t3"));
+ } catch (BatchExecutionException e) {
+ assertTrue(e.getMessage().contains("Path [root.sg1.d1.t6] does not exist;"));
+ }
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.t1"));
+ assertFalse(session.checkTimeseriesExists("root.sg1.d1.t2"));
+ assertFalse(session.checkTimeseriesExists("root.sg1.d1.t3"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertOneDeviceRecordsTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurements = new ArrayList<>();
+ List<List<TSDataType>> datatypes = new ArrayList<>();
+ List<List<Object>> values = new ArrayList<>();
+
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 3L,
+ "s1",
+ "s2",
+ TSDataType.INT32,
+ TSDataType.INT32,
+ 1,
+ 2);
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 2L,
+ "s2",
+ "s3",
+ TSDataType.INT32,
+ TSDataType.INT64,
+ 3,
+ 4L);
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 1L,
+ "s4",
+ "s5",
+ TSDataType.FLOAT,
+ TSDataType.BOOLEAN,
+ 5.0f,
+ Boolean.TRUE);
+ session.insertRecordsOfOneDevice("root.sg.d1", times, measurements, datatypes, values);
+ checkResult(session);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ private void addLine(
+ List<Long> times,
+ List<List<String>> measurements,
+ List<List<TSDataType>> datatypes,
+ List<List<Object>> values,
+ long time,
+ String s1,
+ String s2,
+ TSDataType s1type,
+ TSDataType s2type,
+ Object value1,
+ Object value2) {
+ List<String> tmpMeasurements = new ArrayList<>();
+ List<TSDataType> tmpDataTypes = new ArrayList<>();
+ List<Object> tmpValues = new ArrayList<>();
+ tmpMeasurements.add(s1);
+ tmpMeasurements.add(s2);
+ tmpDataTypes.add(s1type);
+ tmpDataTypes.add(s2type);
+ tmpValues.add(value1);
+ tmpValues.add(value2);
+ times.add(time);
+ measurements.add(tmpMeasurements);
+ datatypes.add(tmpDataTypes);
+ values.add(tmpValues);
+ }
+
+ private void checkResult(ISession session)
+ throws StatementExecutionException, IoTDBConnectionException {
+ SessionDataSet dataSet = session.executeQueryStatement("select * from root.sg.d1");
+ dataSet.getColumnNames();
+ assertArrayEquals(
+ dataSet.getColumnNames().toArray(new String[0]),
+ new String[] {
+ "Time",
+ "root.sg.d1.s3",
+ "root.sg.d1.s4",
+ "root.sg.d1.s5",
+ "root.sg.d1.s1",
+ "root.sg.d1.s2"
+ });
+ assertArrayEquals(
+ dataSet.getColumnTypes().toArray(new String[0]),
+ new String[] {
+ String.valueOf(TSDataType.INT64),
+ String.valueOf(TSDataType.INT64),
+ String.valueOf(TSDataType.FLOAT),
+ String.valueOf(TSDataType.BOOLEAN),
+ String.valueOf(TSDataType.INT32),
+ String.valueOf(TSDataType.INT32)
+ });
+ long time = 1L;
+ //
+ assertTrue(dataSet.hasNext());
+ RowRecord record = dataSet.next();
+ assertEquals(time, record.getTimestamp());
+ time++;
+ assertNulls(record, new int[] {0, 3, 4});
+ assertEquals(5.0f, record.getFields().get(1).getFloatV(), 0.01);
+ assertEquals(Boolean.TRUE, record.getFields().get(2).getBoolV());
+
+ assertTrue(dataSet.hasNext());
+ record = dataSet.next();
+ assertEquals(time, record.getTimestamp());
+ time++;
+ assertNulls(record, new int[] {1, 2, 3});
+ assertEquals(4L, record.getFields().get(0).getLongV());
+ assertEquals(3, record.getFields().get(4).getIntV());
+
+ assertTrue(dataSet.hasNext());
+ record = dataSet.next();
+ assertEquals(time, record.getTimestamp());
+ assertNulls(record, new int[] {0, 1, 2});
+ assertEquals(1, record.getFields().get(3).getIntV());
+ assertEquals(2, record.getFields().get(4).getIntV());
+
+ assertFalse(dataSet.hasNext());
+ dataSet.closeOperationHandle();
+ }
+
+ private void assertNulls(RowRecord record, int[] index) {
+ for (int i : index) {
+ assertNull(record.getFields().get(i).getDataType());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertOneDeviceRecordsWithOrderTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurements = new ArrayList<>();
+ List<List<TSDataType>> datatypes = new ArrayList<>();
+ List<List<Object>> values = new ArrayList<>();
+
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 1L,
+ "s4",
+ "s5",
+ TSDataType.FLOAT,
+ TSDataType.BOOLEAN,
+ 5.0f,
+ Boolean.TRUE);
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 2L,
+ "s2",
+ "s3",
+ TSDataType.INT32,
+ TSDataType.INT64,
+ 3,
+ 4L);
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 3L,
+ "s1",
+ "s2",
+ TSDataType.INT32,
+ TSDataType.INT32,
+ 1,
+ 2);
+
+ session.insertRecordsOfOneDevice("root.sg.d1", times, measurements, datatypes, values, true);
+ checkResult(session);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertOneDeviceRecordsWithIncorrectOrderTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurements = new ArrayList<>();
+ List<List<TSDataType>> datatypes = new ArrayList<>();
+ List<List<Object>> values = new ArrayList<>();
+
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 2L,
+ "s2",
+ "s3",
+ TSDataType.INT32,
+ TSDataType.INT64,
+ 3,
+ 4L);
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 3L,
+ "s1",
+ "s2",
+ TSDataType.INT32,
+ TSDataType.INT32,
+ 1,
+ 2);
+ addLine(
+ times,
+ measurements,
+ datatypes,
+ values,
+ 1L,
+ "s4",
+ "s5",
+ TSDataType.FLOAT,
+ TSDataType.BOOLEAN,
+ 5.0f,
+ Boolean.TRUE);
+
+ session.insertRecordsOfOneDevice("root.sg.d1", times, measurements, datatypes, values, true);
+ checkResult(session);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertStringRecordsOfOneDeviceWithOrderTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurements = new ArrayList<>();
+ List<List<String>> values = new ArrayList<>();
+
+ addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
+ addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
+ addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
+
+ session.insertStringRecordsOfOneDevice("root.sg.d1", times, measurements, values, true);
+ checkResultForInsertStringRecordsOfOneDevice(session);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ private void checkResultForInsertStringRecordsOfOneDevice(ISession session)
+ throws StatementExecutionException, IoTDBConnectionException {
+ SessionDataSet dataSet = session.executeQueryStatement("select * from root.sg.d1");
+ dataSet.getColumnNames();
+ assertArrayEquals(
+ dataSet.getColumnNames().toArray(new String[0]),
+ new String[] {
+ "Time",
+ "root.sg.d1.s3",
+ "root.sg.d1.s4",
+ "root.sg.d1.s5",
+ "root.sg.d1.s1",
+ "root.sg.d1.s2"
+ });
+ assertArrayEquals(
+ dataSet.getColumnTypes().toArray(new String[0]),
+ new String[] {
+ String.valueOf(TSDataType.INT64),
+ String.valueOf(TSDataType.FLOAT),
+ String.valueOf(TSDataType.FLOAT),
+ String.valueOf(TSDataType.BOOLEAN),
+ String.valueOf(TSDataType.BOOLEAN),
+ String.valueOf(TSDataType.FLOAT)
+ });
+ long time = 1L;
+
+ assertTrue(dataSet.hasNext());
+ RowRecord record = dataSet.next();
+ assertEquals(time, record.getTimestamp());
+ time++;
+
+ assertNulls(record, new int[] {0, 3, 4});
+ assertEquals(5.0f, record.getFields().get(1).getFloatV(), 0.01);
+ assertEquals(Boolean.TRUE, record.getFields().get(2).getBoolV());
+
+ assertTrue(dataSet.hasNext());
+ record = dataSet.next();
+ assertEquals(time, record.getTimestamp());
+ time++;
+
+ assertNulls(record, new int[] {1, 2, 3});
+ assertEquals(4, record.getFields().get(0).getFloatV(), 0.01);
+ assertEquals(3, record.getFields().get(4).getFloatV(), 0.01);
+
+ assertTrue(dataSet.hasNext());
+ record = dataSet.next();
+ assertEquals(time, record.getTimestamp());
+
+ assertNulls(record, new int[] {0, 1, 2});
+ assertFalse(record.getFields().get(3).getBoolV());
+ assertEquals(6, record.getFields().get(4).getFloatV(), 0.01);
+
+ assertFalse(dataSet.hasNext());
+ dataSet.closeOperationHandle();
+ }
+
+ private void addStringLine(
+ List<Long> times,
+ List<List<String>> measurements,
+ List<List<String>> values,
+ long time,
+ String s1,
+ String s2,
+ String value1,
+ String value2) {
+ List<String> tmpMeasurements = new ArrayList<>();
+ List<String> tmpValues = new ArrayList<>();
+ tmpMeasurements.add(s1);
+ tmpMeasurements.add(s2);
+ tmpValues.add(value1);
+ tmpValues.add(value2);
+ times.add(time);
+ measurements.add(tmpMeasurements);
+ values.add(tmpValues);
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertStringRecordsOfOneDeviceWithIncorrectOrderTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurements = new ArrayList<>();
+ List<List<String>> values = new ArrayList<>();
+
+ addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
+ addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
+ addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
+
+ session.insertStringRecordsOfOneDevice("root.sg.d1", times, measurements, values);
+ checkResultForInsertStringRecordsOfOneDevice(session);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertAlignedStringRecordsOfOneDeviceWithOrderTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurements = new ArrayList<>();
+ List<List<String>> values = new ArrayList<>();
+
+ addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
+ addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
+ addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
+
+ session.insertAlignedStringRecordsOfOneDevice(
+ "root.sg.d1", times, measurements, values, true);
+ checkResultForInsertStringRecordsOfOneDevice(session);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertAlignedStringRecordsOfOneDeviceWithIncorrectOrderTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurements = new ArrayList<>();
+ List<List<String>> values = new ArrayList<>();
+
+ addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
+ addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
+ addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
+
+ session.insertAlignedStringRecordsOfOneDevice("root.sg.d1", times, measurements, values);
+ checkResultForInsertStringRecordsOfOneDevice(session);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertIlligalPathTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String msg = "[%s] Exception occurred: %s failed. %s is not a legal path";
+ String deviceId = "root.sg..d1";
+ List<String> deviceIds = Arrays.asList("root.sg..d1", "root.sg.d2");
+ List<Long> timestamps = Arrays.asList(1L, 1L);
+ List<String> measurements = Arrays.asList("s1", "s2", "s3");
+ List<List<String>> allMeasurements = Arrays.asList(measurements, measurements);
+ List<TSDataType> tsDataTypes =
+ Arrays.asList(TSDataType.INT32, TSDataType.FLOAT, TSDataType.TEXT);
+ List<List<TSDataType>> allTsDataTypes = Arrays.asList(tsDataTypes, tsDataTypes);
+ List<TSEncoding> tsEncodings =
+ Arrays.asList(TSEncoding.PLAIN, TSEncoding.PLAIN, TSEncoding.PLAIN);
+ List<CompressionType> compressionTypes =
+ Arrays.asList(CompressionType.SNAPPY, CompressionType.SNAPPY, CompressionType.SNAPPY);
+ List<Object> values = Arrays.asList(1, 2f, "3");
+ List<List<Object>> allValues = Arrays.asList(values, values);
+ List<String> stringValues = Arrays.asList("1", "2", "3");
+ List<List<String>> allstringValues = Arrays.asList(stringValues, stringValues);
+
+ try {
+ session.insertRecords(deviceIds, timestamps, allMeasurements, allTsDataTypes, allValues);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_RECORDS, deviceId)));
+ }
+
+ try {
+ session.insertRecords(deviceIds, Arrays.asList(2L, 2L), allMeasurements, allstringValues);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.INSERT_STRING_RECORDS,
+ deviceIds.get(0))));
+ }
+
+ try {
+ session.insertRecord(deviceId, 3L, measurements, tsDataTypes, values);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_RECORD, deviceId)));
+ }
+
+ try {
+ session.insertRecord(deviceId, 4L, measurements, stringValues);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.INSERT_STRING_RECORD,
+ deviceId)));
+ }
+
+ try {
+ session.insertRecordsOfOneDevice(
+ deviceId, Arrays.asList(5L, 6L), allMeasurements, allTsDataTypes, allValues);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.INSERT_RECORDS_OF_ONE_DEVICE,
+ deviceId)));
+ }
+
+ try {
+ session.deleteData(deviceId + ".s1", 6L);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.DELETE_DATA,
+ deviceId + ".s1")));
+ }
+
+ try {
+ Tablet tablet =
+ new Tablet(
+ deviceId,
+ Arrays.asList(
+ new MeasurementSchema("s1", TSDataType.INT32),
+ new MeasurementSchema("s2", TSDataType.FLOAT)),
+ 5);
+ long ts = 7L;
+ for (long row = 0; row < 8; row++) {
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, ts);
+ tablet.addValue("s1", rowIndex, 1);
+ tablet.addValue("s2", rowIndex, 1.0F);
+ if (tablet.rowSize == tablet.getMaxRowNumber()) {
+ session.insertTablet(tablet, true);
+ tablet.reset();
+ }
+ ts++;
+ }
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_TABLET, deviceId)));
+ }
+
+ try {
+ Tablet tablet1 =
+ new Tablet(
+ deviceId,
+ Arrays.asList(
+ new MeasurementSchema("s1", TSDataType.INT32),
+ new MeasurementSchema("s2", TSDataType.FLOAT)),
+ 5);
+ Tablet tablet2 =
+ new Tablet(
+ "root.sg.d2",
+ Arrays.asList(
+ new MeasurementSchema("s1", TSDataType.INT32),
+ new MeasurementSchema("s2", TSDataType.FLOAT)),
+ 5);
+ HashMap<String, Tablet> tablets = new HashMap<>();
+ tablets.put(deviceId, tablet1);
+ tablets.put("root.sg.d2", tablet2);
+ long ts = 16L;
+ for (long row = 0; row < 8; row++) {
+ int row1 = tablet1.rowSize++;
+ int row2 = tablet2.rowSize++;
+ tablet1.addTimestamp(row1, ts);
+ tablet2.addTimestamp(row2, ts);
+ tablet1.addValue("s1", row1, 1);
+ tablet1.addValue("s2", row1, 1.0F);
+ tablet2.addValue("s1", row2, 1);
+ tablet2.addValue("s2", row2, 1.0F);
+ if (tablet1.rowSize == tablet1.getMaxRowNumber()) {
+ session.insertTablets(tablets, true);
+ tablet1.reset();
+ tablet2.reset();
+ }
+ ts++;
+ }
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_TABLETS, deviceId)));
+ }
+
+ try {
+ session.setStorageGroup("root..sg");
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.SET_STORAGE_GROUP,
+ "root..sg")));
+ }
+
+ try {
+ session.createTimeseries(
+ "root.sg..d1.s1", TSDataType.INT32, TSEncoding.PLAIN, CompressionType.SNAPPY);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.CREATE_TIMESERIES,
+ "root.sg..d1.s1")));
+ }
+
+ try {
+ session.createAlignedTimeseries(
+ deviceId,
+ measurements,
+ tsDataTypes,
+ tsEncodings,
+ compressionTypes,
+ Arrays.asList("alias1", "alias2", "alias3"),
+ null,
+ null);
+
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.CREATE_ALIGNED_TIMESERIES,
+ deviceId)));
+ }
+
+ try {
+ session.createMultiTimeseries(
+ Arrays.asList("root.sg.d1..s1", "root.sg.d1.s2", "root.sg.d1.s3"),
+ tsDataTypes,
+ tsEncodings,
+ compressionTypes,
+ null,
+ null,
+ null,
+ null);
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.CREATE_MULTI_TIMESERIES,
+ "root.sg.d1..s1")));
+ }
+
+ try {
+ session.deleteTimeseries("root.sg.d1..s1");
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains(
+ String.format(
+ msg,
+ TSStatusCode.PATH_ILLEGAL,
+ OperationType.DELETE_TIMESERIES,
+ "root.sg.d1..s1")));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void conversionFunctionTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ // prepare data
+ String deviceId = "root.sg.d1";
+ List<Long> times = new ArrayList<>();
+ List<List<String>> measurementsList = new ArrayList<>();
+ List<List<TSDataType>> typesList = new ArrayList<>();
+ List<List<Object>> valuesList = new ArrayList<>();
+
+ for (int i = 0; i <= 4; i++) {
+ times.add((long) i * 2);
+ measurementsList.add(Arrays.asList("s1", "s2", "s3", "s4", "s5", "s6"));
+ typesList.add(
+ Arrays.asList(
+ TSDataType.INT32,
+ TSDataType.INT64,
+ TSDataType.FLOAT,
+ TSDataType.DOUBLE,
+ TSDataType.BOOLEAN,
+ TSDataType.TEXT));
+ valuesList.add(
+ Arrays.asList(
+ i,
+ (long) i + 1,
+ (float) i,
+ (double) i * 2,
+ new boolean[] {true, false}[i % 2],
+ String.valueOf(i)));
+ }
+ // insert data
+ session.insertRecordsOfOneDevice(deviceId, times, measurementsList, typesList, valuesList);
+
+ // excepted
+ String[] targetTypes = {"INT64", "INT32", "DOUBLE", "FLOAT", "TEXT", "BOOLEAN"};
+ String[] excepted = {
+ "0\t0\t1\t0.0\t0.0\ttrue\ttrue",
+ "2\t1\t2\t1.0\t2.0\tfalse\ttrue",
+ "4\t2\t3\t2.0\t4.0\ttrue\ttrue",
+ "6\t3\t4\t3.0\t6.0\tfalse\ttrue",
+ "8\t4\t5\t4.0\t8.0\ttrue\ttrue"
+ };
+
+ // query
+ String[] casts = new String[targetTypes.length];
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("select ");
+ for (int i = 0; i < targetTypes.length; i++) {
+ casts[i] = String.format("cast(s%s, 'type'='%s')", i + 1, targetTypes[i]);
+ }
+ buffer.append(StringUtils.join(casts, ","));
+ buffer.append(" from root.sg.d1");
+ String sql = buffer.toString();
+ SessionDataSet sessionDataSet = session.executeQueryStatement(sql);
+
+ // compare types
+ List<String> columnTypes = sessionDataSet.getColumnTypes();
+ columnTypes.remove(0);
+ for (int i = 0; i < columnTypes.size(); i++) {
+ assertEquals(targetTypes[i], columnTypes.get(i));
+ }
+
+ // compare results
+ int index = 0;
+ while (sessionDataSet.hasNext()) {
+ RowRecord next = sessionDataSet.next();
+ assertEquals(excepted[index], next.toString());
+ index++;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Ignore
+ public void insertDeleteWithTemplateTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ initTreeTemplate(session, "root.sg.loc1");
+ List<String> measurements = new ArrayList<>();
+ List<String> values = new ArrayList<>();
+ String deviceId = "root.sg.loc1.sector.GPS";
+ Set<String> checkSet = new HashSet<>();
+ SessionDataSet dataSet;
+
+ // insert record set using template
+ measurements.add("x");
+ measurements.add("y");
+ values.add("1.0");
+ values.add("2.0");
+
+ checkSet.add("root.sg.loc1.sector.GPS.x");
+ checkSet.add("root.sg.loc1.sector.GPS.y");
+ checkSet.add("root.sg.loc1.sector.y");
+ checkSet.add("root.sg.loc1.sector.x");
+ checkSet.add("root.sg.loc1.sector.vehicle.x");
+ checkSet.add("root.sg.loc1.sector.vehicle.y");
+ checkSet.add("root.sg.loc1.sector.vehicle.GPS.x");
+ checkSet.add("root.sg.loc1.sector.vehicle.GPS.y");
+
+ session.insertRecord(deviceId, 1L, measurements, values);
+ dataSet = session.executeQueryStatement("show timeseries");
+ while (dataSet.hasNext()) {
+ checkSet.remove(dataSet.next().getFields().get(0).toString());
+ }
+ assertTrue(checkSet.isEmpty());
+
+ // insert aligned under unaligned node
+ try {
+ session.insertAlignedRecord("root.sg.loc1.sector.GPS", 3L, measurements, values);
+ } catch (StatementExecutionException e) {
+ assertEquals(
+ "303: Timeseries under path [root.sg.loc1.sector.GPS] is not aligned , please set InsertPlan.isAligned() = false",
+ e.getMessage());
+ }
+
+ // insert overlap unmatched series
+ measurements.set(1, "speed");
+ try {
+ session.insertRecord(deviceId, 5L, measurements, values);
+ fail();
+ } catch (StatementExecutionException e) {
+ assertEquals(
+ "327: Path [root.sg.loc1.sector.GPS.speed] overlaps with [treeTemplate] on [GPS]",
+ e.getMessage());
+ }
+
+ // insert tablets
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("x", TSDataType.FLOAT));
+ schemaList.add(new MeasurementSchema("y", TSDataType.FLOAT));
+ Tablet tablet = new Tablet("root.sg.loc1.sector", schemaList);
+
+ long timestamp = System.currentTimeMillis();
+
+ for (long row = 0; row < 10; row++) {
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, timestamp);
+ tablet.addValue(
+ schemaList.get(0).getMeasurementId(), rowIndex, new SecureRandom().nextFloat());
+ tablet.addValue(
+ schemaList.get(1).getMeasurementId(), rowIndex, new SecureRandom().nextFloat());
+ timestamp++;
+ }
+
+ if (tablet.rowSize != 0) {
+ session.insertAlignedTablet(tablet);
+ tablet.reset();
+ }
+
+ dataSet = session.executeQueryStatement("select count(*) from root");
+
+ while (dataSet.hasNext()) {
+ RowRecord rowRecord = dataSet.next();
+ assertEquals(10L, rowRecord.getFields().get(0).getLongV());
+ assertEquals(10L, rowRecord.getFields().get(1).getLongV());
+ }
+
+ // delete series inside template
+ try {
+ session.deleteTimeseries("root.sg.loc1.sector.x");
+ fail();
+ } catch (StatementExecutionException e) {
+ assertTrue(
+ e.getMessage()
+ .contains("Cannot delete a timeseries inside a template: root.sg.loc1.sector.x;"));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ private void initTreeTemplate(ISession session, String path)
+ throws IoTDBConnectionException, StatementExecutionException, IOException {
+ Template sessionTemplate = new Template("treeTemplate", true);
+ TemplateNode iNodeGPS = new InternalNode("GPS", false);
+ TemplateNode iNodeV = new InternalNode("vehicle", true);
+ TemplateNode mNodeX =
+ new MeasurementNode("x", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY);
+ TemplateNode mNodeY =
+ new MeasurementNode("y", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY);
+
+ iNodeGPS.addChild(mNodeX);
+ iNodeGPS.addChild(mNodeY);
+
+ iNodeV.addChild(mNodeX);
+ iNodeV.addChild(mNodeY);
+ iNodeV.addChild(iNodeGPS);
+
+ sessionTemplate.addToTemplate(iNodeGPS);
+ sessionTemplate.addToTemplate(iNodeV);
+ sessionTemplate.addToTemplate(mNodeX);
+ sessionTemplate.addToTemplate(mNodeY);
+
+ session.setStorageGroup(path);
+ session.createSchemaTemplate(sessionTemplate);
+ session.setSchemaTemplate("treeTemplate", path);
+ }
+
+ @Test
+ @Category({ClusterIT.class})
+ public void countWithTemplateTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ initTreeTemplate(session, "root.sg.loc");
+
+ List<String> measurements = new ArrayList<>();
+ List<String> values = new ArrayList<>();
+ Set<String> checkSet = new HashSet<>();
+ SessionDataSet dataSet;
+
+ // invoke template template
+
+ measurements.add("x");
+ measurements.add("y");
+ values.add("1.0");
+ values.add("2.0");
+
+ session.insertAlignedRecord("root.sg.loc.area", 1L, measurements, values);
+ session.insertAlignedRecord("root.sg.loc", 1L, measurements, values);
+
+ dataSet = session.executeQueryStatement("show timeseries");
+
+ checkSet.add("root.sg.loc.x");
+ checkSet.add("root.sg.loc.y");
+ checkSet.add("root.sg.loc.GPS.x");
+ checkSet.add("root.sg.loc.GPS.y");
+ checkSet.add("root.sg.loc.vehicle.GPS.x");
+ checkSet.add("root.sg.loc.vehicle.GPS.y");
+ checkSet.add("root.sg.loc.vehicle.x");
+ checkSet.add("root.sg.loc.vehicle.x");
+
+ checkSet.add("root.sg.loc.area.x");
+ checkSet.add("root.sg.loc.area.y");
+ checkSet.add("root.sg.loc.area.GPS.x");
+ checkSet.add("root.sg.loc.area.GPS.y");
+ checkSet.add("root.sg.loc.area.vehicle.GPS.x");
+ checkSet.add("root.sg.loc.area.vehicle.GPS.y");
+ checkSet.add("root.sg.loc.area.vehicle.x");
+ checkSet.add("root.sg.loc.area.vehicle.x");
+
+ while (dataSet.hasNext()) {
+ checkSet.remove(dataSet.next().getFields().get(0).toString());
+ }
+
+ assertTrue(checkSet.isEmpty());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertPartialTablet2Test() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ if (!session.checkTimeseriesExists("root.sg.d.s1")) {
+ session.createTimeseries(
+ "root.sg.d.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+ }
+ if (!session.checkTimeseriesExists("root.sg.d.s2")) {
+ session.createTimeseries(
+ "root.sg.d.s2", TSDataType.DOUBLE, TSEncoding.GORILLA, CompressionType.SNAPPY);
+ }
+ if (!session.checkTimeseriesExists("root.sg.d.s3")) {
+ session.createTimeseries(
+ "root.sg.d.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+ }
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
+ schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE));
+ schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
+
+ Tablet tablet = new Tablet("root.sg.d", schemaList, 10);
+
+ long timestamp = System.currentTimeMillis();
+
+ for (long row = 0; row < 15; row++) {
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, timestamp);
+ tablet.addValue("s1", rowIndex, 1L);
+ tablet.addValue("s2", rowIndex, 1D);
+ tablet.addValue("s3", rowIndex, new Binary("1"));
+ if (tablet.rowSize == tablet.getMaxRowNumber()) {
+ try {
+ session.insertTablet(tablet, true);
+ } catch (StatementExecutionException e) {
+ assertTrue(e.getMessage().contains("insert measurements [s3] caused by"));
+ assertTrue(e.getMessage().contains("data type of root.sg.d.s3 is not consistent"));
+ }
+ tablet.reset();
+ }
+ timestamp++;
+ }
+
+ if (tablet.rowSize != 0) {
+ try {
+ session.insertTablet(tablet);
+ } catch (StatementExecutionException e) {
+ assertTrue(e.getMessage().contains("insert measurements [s3] caused by"));
+ assertTrue(e.getMessage().contains("data type of root.sg.d.s3 is not consistent"));
+ }
+ tablet.reset();
+ }
+
+ SessionDataSet dataSet =
+ session.executeQueryStatement("select count(s1), count(s2), count(s3) from root.sg.d");
+ while (dataSet.hasNext()) {
+ RowRecord rowRecord = dataSet.next();
+ assertEquals(15L, rowRecord.getFields().get(0).getLongV());
+ assertEquals(15L, rowRecord.getFields().get(1).getLongV());
+ assertEquals(0L, rowRecord.getFields().get(2).getLongV());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertBinaryAsTextTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ // prepare binary data
+ List<Object> bytesData = new ArrayList<>();
+ for (int i = 0; i < 3; i++) {
+ byte[] bytes = new byte[128];
+ for (int j = 0; j < 128; j++) {
+ bytes[j] = Byte.valueOf("" + (j - i), 10);
+ }
+ bytesData.add(bytes);
+ }
+ // insert data using insertRecord
+ for (int i = 0; i < bytesData.size(); i++) {
+ byte[] data = (byte[]) bytesData.get(i);
+ Binary dataBinary = new Binary(data);
+ session.insertRecord(
+ "root.sg1.d1",
+ i,
+ Collections.singletonList("s0"),
+ Collections.singletonList(TSDataType.TEXT),
+ dataBinary);
+ }
+ // insert data using insertTablet
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("s1", TSDataType.TEXT));
+ Tablet tablet = new Tablet("root.sg1.d1", schemaList, 100);
+ for (int i = 0; i < bytesData.size(); i++) {
+ byte[] data = (byte[]) bytesData.get(i);
+ int rowIndex = tablet.rowSize++;
+ tablet.addTimestamp(rowIndex, i);
+ Binary dataBinary = new Binary(data);
+ tablet.addValue(schemaList.get(0).getMeasurementId(), rowIndex, dataBinary);
+ }
+ session.insertTablet(tablet);
+ // check result
+ SessionDataSet dataSet = session.executeQueryStatement("select ** from root.sg1.d1");
+ assertArrayEquals(
+ dataSet.getColumnNames().toArray(new String[0]),
+ new String[] {"Time", "root.sg1.d1.s0", "root.sg1.d1.s1"});
+ while (dataSet.hasNext()) {
+ RowRecord rowRecord = dataSet.next();
+ for (int i = 0; i < 2; i++) {
+ // get Binary value from SessionDataSet
+ byte[] actualBytes = rowRecord.getFields().get(i).getBinaryV().getValues();
+ // compare Binary value to origin bytesData
+ byte[] expectedBytes = (byte[]) bytesData.get((int) rowRecord.getTimestamp());
+ assertArrayEquals(expectedBytes, actualBytes);
+ }
+ }
+ dataSet.closeOperationHandle();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+}
diff --git a/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionSyntaxConventionIT.java b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionSyntaxConventionIT.java
new file mode 100644
index 0000000000..57f834b932
--- /dev/null
+++ b/integration-test/src/test/java/org/apache/iotdb/session/IoTDBSessionSyntaxConventionIT.java
@@ -0,0 +1,428 @@
+/*
+ * 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.session;
+
+import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.utils.Binary;
+import org.apache.iotdb.tsfile.write.record.Tablet;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+@RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
+public class IoTDBSessionSyntaxConventionIT {
+
+ @Before
+ public void setUp() throws Exception {
+ System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
+ EnvFactory.getEnv().initBeforeTest();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ EnvFactory.getEnv().cleanAfterTest();
+ }
+
+ @Test
+ public void createTimeSeriesTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String storageGroup = "root.sg";
+ session.setStorageGroup(storageGroup);
+
+ try {
+ session.createTimeseries(
+ "root.sg.d1.`a.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+ fail();
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("is not a legal path"));
+ }
+
+ try {
+ session.createTimeseries(
+ "root.sg.d1.a`.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
+ fail();
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("is not a legal path"));
+ }
+
+ final SessionDataSet dataSet = session.executeQueryStatement("SHOW TIMESERIES");
+ assertFalse(dataSet.hasNext());
+
+ session.deleteStorageGroup(storageGroup);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1";
+ List<String> measurements = new ArrayList<>();
+
+ measurements.add("`\"a“(Φ)”b\"`");
+ measurements.add("`\"a>b\"`");
+ measurements.add("```a.b```");
+ measurements.add("`'a“(Φ)”b'`");
+ measurements.add("`'a>b'`");
+ measurements.add("`a“(Φ)”b`");
+ measurements.add("`a>b`");
+ measurements.add("`\\\"a`");
+ List<String> values = new ArrayList<>();
+
+ for (int i = 0; i < measurements.size(); i++) {
+ values.add("1");
+ }
+
+ session.insertRecord(deviceId, 1L, measurements, values);
+
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.`\"a“(Φ)”b\"`"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.`\"a>b\"`"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.```a.b```"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.`'a“(Φ)”b'`"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.`'a>b'`"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.`a“(Φ)”b`"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.`a>b`"));
+ assertTrue(session.checkTimeseriesExists("root.sg1.d1.`\\\"a`"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void inserRecordWithIllegalMeasurementTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1";
+ List<String> measurements = new ArrayList<>();
+ List<String> values = new ArrayList<>();
+ measurements.add("a.b");
+ values.add("1");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ measurements.clear();
+ values.clear();
+ measurements.add("111");
+ values.add("1.2");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ measurements.clear();
+ values.clear();
+ measurements.add("`a");
+ values.add("1.2");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ measurements.clear();
+ values.clear();
+ measurements.add("a..b");
+ values.add("1.2");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ measurements.clear();
+ values.clear();
+ measurements.add("");
+ values.add("1.2");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ measurements.clear();
+ values.clear();
+ measurements.add("`a``");
+ values.add("1.2");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ measurements.clear();
+ values.clear();
+ measurements.add("`ab````");
+ values.add("1.2");
+ try {
+ session.insertRecord(deviceId, 1L, measurements, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertRecordsWithIllegalMeasurementTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1";
+ List<String> measurements = new ArrayList<>();
+ measurements.add("a.b");
+ measurements.add("111");
+ measurements.add("`a");
+ measurements.add("a..b");
+
+ List<String> values = new ArrayList<>();
+ values.add("1");
+ values.add("1.2");
+ values.add("true");
+ values.add("dad");
+
+ List<Long> times = new ArrayList<>();
+ times.add(1L);
+ try {
+ session.insertRecords(
+ Collections.singletonList(deviceId),
+ times,
+ Collections.singletonList(measurements),
+ Collections.singletonList(values));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void insertTabletWithIllegalMeasurementTest() {
+ String deviceId = "root.sg1.d1";
+ List<MeasurementSchema> schemaList = new ArrayList<>();
+ schemaList.add(new MeasurementSchema("wrong`", TSDataType.INT64, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE, TSEncoding.RLE));
+ schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN));
+ schemaList.add(new MeasurementSchema("s4", TSDataType.INT64, TSEncoding.PLAIN));
+
+ Tablet tablet = new Tablet(deviceId, schemaList, 10);
+
+ long[] timestamps = tablet.timestamps;
+ Object[] values = tablet.values;
+
+ for (long time = 0; time < 10; time++) {
+ int row = tablet.rowSize++;
+ timestamps[row] = time;
+ long[] sensor = (long[]) values[0];
+ sensor[row] = time;
+ double[] sensor2 = (double[]) values[1];
+ sensor2[row] = 0.1 + time;
+ Binary[] sensor3 = (Binary[]) values[2];
+ sensor3[row] = Binary.valueOf("ha" + time);
+ long[] sensor4 = (long[]) values[3];
+ sensor4[row] = time;
+ }
+
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ try {
+ session.insertTablet(tablet);
+ fail();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void createAlignedTimeseriesWithIllegalMeasurementTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1";
+ List<String> measurements = new ArrayList<>();
+ measurements.add("111");
+ measurements.add("a.b");
+ List<TSDataType> dataTypes = new ArrayList<>();
+ dataTypes.add(TSDataType.INT64);
+ dataTypes.add(TSDataType.INT64);
+ List<TSEncoding> encodings = new ArrayList<>();
+ List<CompressionType> compressors = new ArrayList<>();
+ for (int i = 1; i <= 2; i++) {
+ encodings.add(TSEncoding.RLE);
+ compressors.add(CompressionType.SNAPPY);
+ }
+ try {
+ session.createAlignedTimeseries(
+ deviceId, measurements, dataTypes, encodings, compressors, null, null, null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void createAlignedTimeseriesWithIllegalMeasurementAliasTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String deviceId = "root.sg1.d1";
+ List<String> measurements = new ArrayList<>();
+ measurements.add("s1");
+ measurements.add("s2");
+ List<String> measurementAliasList = new ArrayList<>();
+ measurementAliasList.add("s3");
+ measurementAliasList.add("111");
+ List<TSDataType> dataTypes = new ArrayList<>();
+ dataTypes.add(TSDataType.INT64);
+ dataTypes.add(TSDataType.INT64);
+ List<TSEncoding> encodings = new ArrayList<>();
+ List<CompressionType> compressors = new ArrayList<>();
+ for (int i = 1; i <= 2; i++) {
+ encodings.add(TSEncoding.RLE);
+ compressors.add(CompressionType.SNAPPY);
+ }
+ try {
+ session.createAlignedTimeseries(
+ deviceId,
+ measurements,
+ dataTypes,
+ encodings,
+ compressors,
+ measurementAliasList,
+ null,
+ null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void createMultiTimeseriesWithIllegalMeasurementAliasTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ List<String> paths = new ArrayList<>();
+ paths.add("root.sg1.d1.s1");
+ paths.add("root.sg1.d1.s2");
+ List<TSDataType> tsDataTypes = new ArrayList<>();
+ tsDataTypes.add(TSDataType.DOUBLE);
+ tsDataTypes.add(TSDataType.DOUBLE);
+ List<TSEncoding> tsEncodings = new ArrayList<>();
+ tsEncodings.add(TSEncoding.RLE);
+ tsEncodings.add(TSEncoding.RLE);
+ List<CompressionType> compressionTypes = new ArrayList<>();
+ compressionTypes.add(CompressionType.SNAPPY);
+ compressionTypes.add(CompressionType.SNAPPY);
+ List<String> measurementAliasList = new ArrayList<>();
+ measurementAliasList.add("s3");
+ measurementAliasList.add("111");
+
+ try {
+ session.createMultiTimeseries(
+ paths,
+ tsDataTypes,
+ tsEncodings,
+ compressionTypes,
+ null,
+ null,
+ null,
+ measurementAliasList);
+ } catch (StatementExecutionException e) {
+ e.printStackTrace();
+ }
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void createSchemaTemplateWithIllegalMeasurementTest() {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ String tempName = "flatTemplate";
+ List<String> measurements = Arrays.asList("1", "2", "a.b");
+ List<TSDataType> dataTypes =
+ Arrays.asList(TSDataType.FLOAT, TSDataType.FLOAT, TSDataType.DOUBLE);
+ List<TSEncoding> encodings =
+ Arrays.asList(TSEncoding.RLE, TSEncoding.RLE, TSEncoding.GORILLA);
+ List<CompressionType> compressors =
+ Arrays.asList(CompressionType.SNAPPY, CompressionType.SNAPPY, CompressionType.LZ4);
+
+ try {
+ session.createSchemaTemplate(
+ tempName, measurements, dataTypes, encodings, compressors, true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+ assertFalse(dataSet.hasNext());
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+}
diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java
deleted file mode 100644
index 114508878a..0000000000
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java
+++ /dev/null
@@ -1,929 +0,0 @@
-/*
- * 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.session;
-
-import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.trigger.example.Counter;
-import org.apache.iotdb.db.engine.trigger.service.TriggerRegistrationService;
-import org.apache.iotdb.db.exception.TriggerManagementException;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-import org.apache.iotdb.db.wal.utils.WALMode;
-import org.apache.iotdb.itbase.category.LocalStandaloneTest;
-import org.apache.iotdb.jdbc.Config;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.rpc.TSStatusCode;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.read.common.Field;
-import org.apache.iotdb.tsfile.write.record.Tablet;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.io.File;
-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.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-@Category({LocalStandaloneTest.class})
-public class IoTDBSessionComplexIT {
-
- private Session session;
-
- @Before
- public void setUp() {
- System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
- EnvironmentUtils.envSetUp();
- }
-
- @After
- public void tearDown() throws Exception {
- session.close();
- EnvironmentUtils.cleanEnv();
- }
-
- @Test
- public void testInsertByStr() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
- insertByStr();
-
- insertViaSQL();
- queryByDevice("root.sg1.d1");
-
- session.close();
- }
-
- private void insertByStr() throws IoTDBConnectionException, StatementExecutionException {
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
-
- for (long time = 0; time < 100; time++) {
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("2");
- values.add("3");
- session.insertRecord(deviceId, time, measurements, values);
- }
- }
-
- @Test
- public void testInsertByObject() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- List<TSDataType> types = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
-
- for (long time = 0; time < 100; time++) {
- session.insertRecord(deviceId, time, measurements, types, 1L, 2L, 3L);
- }
-
- insertViaSQL();
- queryByDevice("root.sg1.d1");
-
- session.close();
- }
-
- @Test
- public void testAlignByDevice() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
-
- insertTablet("root.sg1.d1");
-
- SessionDataSet sessionDataSet =
- session.executeQueryStatement("select s1 from root.sg1.d1 align by device");
- sessionDataSet.setFetchSize(1024);
- int count = 0;
- while (sessionDataSet.hasNext()) {
- count++;
- StringBuilder sb = new StringBuilder();
- List<Field> fields = sessionDataSet.next().getFields();
- for (Field f : fields) {
- sb.append(f.getStringValue()).append(",");
- }
- Assert.assertEquals("root.sg1.d1,0,", sb.toString());
- }
- Assert.assertEquals(100, count);
- sessionDataSet.closeOperationHandle();
-
- session.close();
- }
-
- @Test
- public void testBatchInsertSeqAndUnseq()
- throws SQLException, ClassNotFoundException, IoTDBConnectionException,
- StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
-
- insertTablet("root.sg1.d1");
-
- session.executeNonQueryStatement("FLUSH");
- session.executeNonQueryStatement("FLUSH root.sg1");
- session.executeNonQueryStatement("MERGE");
- session.executeNonQueryStatement("FULL MERGE");
-
- queryForBatch();
-
- session.close();
- }
-
- @Test
- public void testBatchInsert()
- throws StatementExecutionException, SQLException, ClassNotFoundException,
- IoTDBConnectionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
-
- insertTablet("root.sg1.d1");
-
- queryForBatch();
-
- session.close();
- }
-
- @Test
- public void testTestMethod() throws StatementExecutionException, IoTDBConnectionException {
-
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
- String deviceId = "root.sg1.d1";
-
- createTimeseries();
-
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
-
- Tablet tablet = new Tablet("root.sg1.d1", schemaList, 100);
-
- session.testInsertTablet(tablet);
-
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- for (long time = 0; time < 100; time++) {
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("2");
- values.add("3");
- session.testInsertRecord(deviceId, time, measurements, values);
- }
-
- measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- List<String> deviceIds = new ArrayList<>();
- List<List<String>> measurementsList = new ArrayList<>();
- List<List<String>> valuesList = new ArrayList<>();
- List<Long> timestamps = new ArrayList<>();
-
- for (long time = 0; time < 500; time++) {
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("2");
- values.add("3");
-
- deviceIds.add(deviceId);
- measurementsList.add(measurements);
- valuesList.add(values);
- timestamps.add(time);
- if (time != 0 && time % 100 == 0) {
- session.testInsertRecords(deviceIds, timestamps, measurementsList, valuesList);
- deviceIds.clear();
- measurementsList.clear();
- valuesList.clear();
- timestamps.clear();
- }
- }
-
- session.testInsertRecords(deviceIds, timestamps, measurementsList, valuesList);
-
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root.sg1.**");
- int count = 0;
- while (dataSet.hasNext()) {
- count++;
- }
- Assert.assertEquals(6, count);
- session.close();
- }
-
- @Test
- public void testRawDataQuery() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
-
- insertRecords();
-
- rawDataQuery();
- }
-
- @Test
- public void testLastDataQuery() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
-
- insertRecords();
-
- lastDataQuery();
- }
-
- @Test
- public void test()
- throws ClassNotFoundException, SQLException, IoTDBConnectionException,
- StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- try {
- session.open();
- } catch (IoTDBConnectionException e) {
- e.printStackTrace();
- }
- List<String> standard =
- Arrays.asList(
- "Time",
- "root.sg1.d1.s1",
- "root.sg1.d1.s2",
- "root.sg1.d1.s3",
- "root.sg1.d2.s1",
- "root.sg1.d2.s2",
- "root.sg1.d2.s3");
- List<String> standardAfterDelete =
- Arrays.asList(
- "Time",
- "root.sg1.d1.s2",
- "root.sg1.d1.s3",
- "root.sg1.d2.s1",
- "root.sg1.d2.s2",
- "root.sg1.d2.s3");
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
-
- String deviceId1 = "root.sg1.d1";
- List<String> measurements1 = new ArrayList<>();
- List<TSDataType> types = new ArrayList<>();
- measurements1.add("s1");
- measurements1.add("s2");
- measurements1.add("s3");
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
-
- for (long time = 0; time < 100; time++) {
- List<Object> values = new ArrayList<>();
- values.add(1L);
- values.add(2L);
- values.add(3L);
- session.insertRecord(deviceId1, time, measurements1, types, values);
- }
-
- insertViaSQL();
-
- queryByDevice("root.sg1.d1");
-
- deleteData();
-
- insertByStr();
-
- insertViaSQL();
-
- queryByDevice("root.sg1.d1");
-
- deleteData();
-
- queryAll(standard);
-
- deleteTimeseries();
-
- queryAll(standardAfterDelete);
-
- insertRecords();
-
- queryByDevice("root.sg1.d2");
-
- deleteData();
-
- String deviceId2 = "root.sg1.d2";
- List<String> measurements2 = new ArrayList<>();
- measurements2.add("s1");
- measurements2.add("s2");
- measurements2.add("s3");
- List<String> deviceIds2 = new ArrayList<>();
- List<List<String>> measurementsList2 = new ArrayList<>();
- List<List<String>> valuesList = new ArrayList<>();
- List<Long> timestamps = new ArrayList<>();
-
- for (long time = 0; time < 500; time++) {
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("2");
- values.add("3");
-
- deviceIds2.add(deviceId2);
- measurementsList2.add(measurements2);
- valuesList.add(values);
- timestamps.add(time);
- if (time != 0 && time % 100 == 0) {
- session.insertRecords(deviceIds2, timestamps, measurementsList2, valuesList);
- deviceIds2.clear();
- measurementsList2.clear();
- valuesList.clear();
- timestamps.clear();
- }
- }
-
- session.insertRecords(deviceIds2, timestamps, measurementsList2, valuesList);
-
- queryByDevice("root.sg1.d2");
-
- session.createTimeseries(
- "root.sg1.d1.1_2", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.d1.`1+2+3`", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.d1.`1+2+4`", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
-
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.1_2"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`1+2+3`"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`1+2+4`"));
-
- session.setStorageGroup("root.`1`");
- session.createTimeseries(
- "root.`1`.`2`.`3`", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.setStorageGroup("root.sg2");
- session.createTimeseries(
- "root.sg2.d1.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
-
- deleteStorageGroupTest();
-
- session.setStorageGroup("root.sg3");
- insertTablet("root.sg3.d1");
-
- session.createTimeseries(
- "root.sg4.d1.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg4.d1.s2", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg4.d1.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- insertTablet("root.sg4.d1");
-
- insertTablet("root.sg5.d1");
-
- SessionDataSet dataSet = session.executeQueryStatement("select * from root.** group by device");
- int count = 0;
- while (dataSet.hasNext()) {
- count++;
- }
- Assert.assertEquals(300, count);
-
- session.close();
- }
-
- @Test
- public void TestSessionInterfacesWithDisabledWAL()
- throws StatementExecutionException, IoTDBConnectionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- try {
- session.open();
- } catch (IoTDBConnectionException e) {
- e.printStackTrace();
- }
-
- session.setStorageGroup("root.sg1");
- String deviceId = "root.sg1.d1";
-
- WALMode prevWalMode = IoTDBDescriptor.getInstance().getConfig().getWalMode();
- IoTDBDescriptor.getInstance().getConfig().setWalMode(WALMode.DISABLE);
- createTimeseries();
-
- List<String> measurements = new ArrayList<>();
- List<TSDataType> types = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
- for (long time = 0; time < 100; time++) {
- List<Object> values = new ArrayList<>();
- values.add(1L);
- values.add(2L);
- values.add(3L);
- session.insertRecord(deviceId, time, measurements, types, values);
- }
-
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
-
- Tablet tablet = new Tablet(deviceId, schemaList, 200);
- long[] timestamps = tablet.timestamps;
- Object[] values = tablet.values;
- for (int time = 1; time <= 100; time++) {
- timestamps[time - 1] = time;
- for (int i = 0; i < 3; i++) {
- long[] sensor = (long[]) values[i];
- sensor[time - 1] = i;
- }
- tablet.rowSize++;
- }
-
- for (int time = 101; time <= 200; time++) {
- int rowIndex = time - 1;
- tablet.addTimestamp(rowIndex, time);
- long value = 0;
- for (int s = 0; s < 3; s++) {
- tablet.addValue(schemaList.get(s).getMeasurementId(), rowIndex, value);
- value++;
- }
- tablet.rowSize++;
- }
-
- session.insertTablet(tablet);
-
- SessionDataSet dataSet = session.executeQueryStatement("select * from root.sg1.d1");
- int count = 0;
- while (dataSet.hasNext()) {
- count++;
- }
- Assert.assertEquals(201, count);
-
- IoTDBDescriptor.getInstance().getConfig().setWalMode(prevWalMode);
- session.close();
- }
-
- private void createTimeseries() throws StatementExecutionException, IoTDBConnectionException {
- session.createTimeseries(
- "root.sg1.d1.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.d1.s2", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.d1.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.d2.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.d2.s2", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.d2.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- }
-
- private void insertRecords() throws IoTDBConnectionException, StatementExecutionException {
- String deviceId = "root.sg1.d2";
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- List<String> deviceIds = new ArrayList<>();
- List<List<String>> measurementsList = new ArrayList<>();
- List<List<Object>> valuesList = new ArrayList<>();
- List<Long> timestamps = new ArrayList<>();
- List<List<TSDataType>> typesList = new ArrayList<>();
-
- for (long time = 0; time < 500; time++) {
- List<Object> values = new ArrayList<>();
- List<TSDataType> types = new ArrayList<>();
- values.add(1L);
- values.add(2L);
- values.add(3L);
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
- types.add(TSDataType.INT64);
-
- deviceIds.add(deviceId);
- measurementsList.add(measurements);
- valuesList.add(values);
- typesList.add(types);
- timestamps.add(time);
- if (time != 0 && time % 100 == 0) {
- session.insertRecords(deviceIds, timestamps, measurementsList, typesList, valuesList);
- deviceIds.clear();
- measurementsList.clear();
- valuesList.clear();
- timestamps.clear();
- }
- }
-
- session.insertRecords(deviceIds, timestamps, measurementsList, typesList, valuesList);
- }
-
- private void rawDataQuery() throws StatementExecutionException, IoTDBConnectionException {
- List<String> paths = new ArrayList<>();
- paths.add("root.sg1.d2.*");
- paths.add("root.sg1.d2.s1");
- paths.add("root.sg1.d2.s2");
-
- SessionDataSet sessionDataSet = session.executeRawDataQuery(paths, 450L, 600L, 60000);
- sessionDataSet.setFetchSize(1024);
-
- int count = 0;
- while (sessionDataSet.hasNext()) {
- count++;
- StringBuilder sb = new StringBuilder();
- List<Field> fields = sessionDataSet.next().getFields();
- for (Field f : fields) {
- sb.append(f.getStringValue()).append(",");
- }
- Assert.assertEquals("3,1,2,1,2,", sb.toString());
- }
- Assert.assertEquals(50, count);
- sessionDataSet.closeOperationHandle();
- }
-
- private void lastDataQuery() throws StatementExecutionException, IoTDBConnectionException {
- List<String> paths = new ArrayList<>();
-
- paths.add("root.sg1.d1.s1");
- paths.add("root.sg1.d2.s1");
-
- SessionDataSet sessionDataSet = session.executeLastDataQuery(paths);
- sessionDataSet.setFetchSize(1024);
-
- int count = 0;
- while (sessionDataSet.hasNext()) {
- count++;
- List<Field> fields = sessionDataSet.next().getFields();
- Assert.assertEquals("[root.sg1.d2.s1,1,INT64]", fields.toString().replace(" ", ""));
- }
- Assert.assertEquals(1, count);
- sessionDataSet.closeOperationHandle();
- }
-
- private void insertTablet(String deviceId)
- throws IoTDBConnectionException, StatementExecutionException {
-
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
-
- Tablet tablet = new Tablet(deviceId, schemaList, 100);
-
- for (long time = 0; time < 100; time++) {
- int rowIndex = tablet.rowSize++;
- long value = 0;
- tablet.addTimestamp(rowIndex, time);
- for (int s = 0; s < 3; s++) {
- tablet.addValue(schemaList.get(s).getMeasurementId(), rowIndex, value);
- value++;
- }
- if (tablet.rowSize == tablet.getMaxRowNumber()) {
- session.insertTablet(tablet);
- tablet.reset();
- }
- }
-
- if (tablet.rowSize != 0) {
- session.insertTablet(tablet);
- tablet.reset();
- }
-
- long[] timestamps = tablet.timestamps;
- Object[] values = tablet.values;
-
- for (long time = 0; time < 100; time++) {
- int row = tablet.rowSize++;
- timestamps[row] = time;
- for (int i = 0; i < 3; i++) {
- long[] sensor = (long[]) values[i];
- sensor[row] = i;
- }
- if (tablet.rowSize == tablet.getMaxRowNumber()) {
- session.insertTablet(tablet);
- tablet.reset();
- }
- }
-
- if (tablet.rowSize != 0) {
- session.insertTablet(tablet);
- tablet.reset();
- }
- }
-
- private void deleteData() throws IoTDBConnectionException, StatementExecutionException {
- String path1 = "root.sg1.d1.s1";
- String path2 = "root.sg1.d1.s2";
- String path3 = "root.sg1.d1.s3";
- String path4 = "root.sg1.d2.s1";
- String path5 = "root.sg1.d2.s2";
- String path6 = "root.sg1.d2.s3";
- long deleteTime = 500;
-
- List<String> paths = new ArrayList<>();
- paths.add(path1);
- paths.add(path2);
- paths.add(path3);
- paths.add(path4);
- paths.add(path5);
- paths.add(path6);
- try {
- session.deleteData(paths, deleteTime);
- } catch (StatementExecutionException e) {
- if (e.getStatusCode() != TSStatusCode.QUERY_PROCESS_ERROR.getStatusCode()) {
- throw e;
- }
- }
- }
-
- private void deleteTimeseries() throws IoTDBConnectionException, StatementExecutionException {
- session.deleteTimeseries("root.sg1.d1.s1");
- }
-
- private void queryAll(List<String> standard) throws ClassNotFoundException, SQLException {
- 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()) {
- ResultSet resultSet = statement.executeQuery("SELECT * FROM root");
- final ResultSetMetaData metaData = resultSet.getMetaData();
- final int colCount = metaData.getColumnCount();
- for (int i = 0; i < colCount; i++) {
- Assert.assertTrue(standard.contains(metaData.getColumnLabel(i + 1)));
- }
- while (resultSet.next()) {
- fail();
- }
- }
- }
-
- private void deleteStorageGroupTest()
- throws ClassNotFoundException, SQLException, IoTDBConnectionException,
- StatementExecutionException {
- try {
- session.deleteStorageGroup("root.sg1.d1.s1");
- } catch (StatementExecutionException e) {
- assertTrue(e.getMessage().contains("Path [root.sg1.d1.s1] does not exist"));
- }
- session.deleteStorageGroup("root.sg1");
- File folder = new File("data/system/storage_groups/root.sg1/");
- assertFalse(folder.exists());
- session.setStorageGroup("root.sg1.d1");
- session.createTimeseries(
- "root.sg1.d1.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
-
- Class.forName(Config.JDBC_DRIVER_NAME);
- List<String> standards =
- Arrays.asList("Time", "root.1.2.3", "root.sg2.d1.s1", "root.sg1.d1.s1");
- try (Connection connection =
- DriverManager.getConnection(
- Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
- Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("SELECT * FROM root");
- final ResultSetMetaData metaData = resultSet.getMetaData();
- final int colCount = metaData.getColumnCount();
- for (int i = 0; i < colCount; i++) {
- Assert.assertTrue(standards.contains(metaData.getColumnLabel(i + 1)));
- }
- while (resultSet.next()) {
- fail();
- }
- List<String> storageGroups = new ArrayList<>();
- storageGroups.add("root.sg1.d1");
- storageGroups.add("root.sg2");
- session.deleteStorageGroups(storageGroups);
- }
- }
-
- private void queryByDevice(String deviceId)
- throws IoTDBConnectionException, StatementExecutionException {
- SessionDataSet sessionDataSet = session.executeQueryStatement("select * from " + deviceId);
- sessionDataSet.setFetchSize(1024);
- int count = 0;
- long expectedSum = 1 + 2 + 3;
- while (sessionDataSet.hasNext()) {
- count++;
- long actualSum = 0;
- for (Field f : sessionDataSet.next().getFields()) {
- actualSum += f.getLongV();
- }
- Assert.assertEquals(expectedSum, actualSum);
- }
-
- switch (deviceId) {
- case "root.sg1.d1":
- Assert.assertEquals(101, count);
- break;
- case "root.sg1.d2":
- Assert.assertEquals(500, count);
- break;
- }
-
- sessionDataSet.closeOperationHandle();
- }
-
- private void insertViaSQL() throws IoTDBConnectionException, StatementExecutionException {
- session.executeNonQueryStatement(
- "insert into root.sg1.d1(timestamp,s1, s2, s3) values(100, 1,2,3)");
- }
-
- private void checkSetSG(Session session, String sg, boolean correctStatus)
- throws IoTDBConnectionException {
- boolean status = true;
- try {
- session.setStorageGroup(sg);
- } catch (StatementExecutionException e) {
- status = false;
- }
- assertEquals(correctStatus, status);
- }
-
- private void queryForBatch() throws ClassNotFoundException, SQLException {
- Class.forName(Config.JDBC_DRIVER_NAME);
- List<String> standards =
- Arrays.asList(
- "Time",
- "root.sg1.d1.s1",
- "root.sg1.d1.s2",
- "root.sg1.d1.s3",
- "root.sg1.d2.s1",
- "root.sg1.d2.s2",
- "root.sg1.d2.s3");
- try (Connection connection =
- DriverManager.getConnection(
- Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
- Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("SELECT * FROM root.**");
- final ResultSetMetaData metaData = resultSet.getMetaData();
- final int colCount = metaData.getColumnCount();
- for (int i = 0; i < colCount; i++) {
- Assert.assertTrue(standards.contains(metaData.getColumnLabel(i + 1)));
- }
-
- int count = 0;
- while (resultSet.next()) {
- for (int i = 1; i <= colCount; i++) {
- count++;
- }
- }
- Assert.assertEquals(700, count);
- }
- }
-
- @Test
- public void testInsertTabletWithTriggers()
- throws StatementExecutionException, IoTDBConnectionException, TriggerManagementException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- session.setStorageGroup("root.sg1");
- createTimeseries();
-
- session.executeNonQueryStatement(
- "create trigger d1s1 after insert on root.sg1.d1.s1 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
- session.executeNonQueryStatement(
- "create trigger d1s2 before insert on root.sg1.d1.s2 as 'org.apache.iotdb.db.engine.trigger.example.Counter'");
-
- assertEquals(
- Counter.BASE,
- ((Counter) TriggerRegistrationService.getInstance().getTriggerInstance("d1s1"))
- .getCounter());
- assertEquals(
- Counter.BASE,
- ((Counter) TriggerRegistrationService.getInstance().getTriggerInstance("d1s2"))
- .getCounter());
- try {
- int counter =
- ((Counter) TriggerRegistrationService.getInstance().getTriggerInstance("d1s3"))
- .getCounter();
- fail(String.valueOf(counter - Counter.BASE));
- } catch (TriggerManagementException e) {
- assertEquals("Trigger d1s3 does not exist.", e.getMessage());
- }
-
- insertTablet("root.sg1.d1");
-
- assertEquals(
- Counter.BASE + 200,
- ((Counter) TriggerRegistrationService.getInstance().getTriggerInstance("d1s1"))
- .getCounter());
- assertEquals(
- Counter.BASE + 200,
- ((Counter) TriggerRegistrationService.getInstance().getTriggerInstance("d1s2"))
- .getCounter());
- try {
- int counter =
- ((Counter) TriggerRegistrationService.getInstance().getTriggerInstance("d1s3"))
- .getCounter();
- fail(String.valueOf(counter - Counter.BASE));
- } catch (TriggerManagementException e) {
- assertEquals("Trigger d1s3 does not exist.", e.getMessage());
- }
-
- session.close();
- }
-
- @Test
- public void testSessionCluster() throws IoTDBConnectionException, StatementExecutionException {
- ArrayList<String> nodeList = new ArrayList<>();
- nodeList.add("127.0.0.1:6669");
- nodeList.add("127.0.0.1:6667");
- nodeList.add("127.0.0.1:6668");
- session = new Session(nodeList, "root", "root");
- session.open();
-
- session.setStorageGroup("root.sg1");
-
- createTimeseries();
- insertByStr();
-
- insertViaSQL();
- queryByDevice("root.sg1.d1");
-
- session.close();
- }
-
- @Test
- public void testErrorSessionCluster() throws IoTDBConnectionException {
- ArrayList<String> nodeList = new ArrayList<>();
- // test Format error
- nodeList.add("127.0.0.16669");
- nodeList.add("127.0.0.1:6667");
- session = new Session(nodeList, "root", "root");
- try {
- session.open();
- } catch (Exception e) {
- Assert.assertEquals("NodeUrl Incorrect format", e.getMessage());
- }
- session.close();
- }
-}
diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java
deleted file mode 100644
index 13c7d7cf8f..0000000000
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * 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.session;
-
-import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.read.common.RowRecord;
-import org.apache.iotdb.tsfile.utils.Binary;
-import org.apache.iotdb.tsfile.write.record.Tablet;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class IoTDBSessionDisableMemControlIT {
-
- private static Logger logger = LoggerFactory.getLogger(IoTDBSessionDisableMemControlIT.class);
-
- private Session session;
-
- @Before
- public void setUp() {
- System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
- IoTDBDescriptor.getInstance().getConfig().setEnableMemControl(false);
- EnvironmentUtils.envSetUp();
- }
-
- @After
- public void tearDown() throws Exception {
- session.close();
- EnvironmentUtils.cleanEnv();
- IoTDBDescriptor.getInstance().getConfig().setEnableMemControl(true);
- }
-
- @Test
- public void testInsertPartialTablet()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- if (!session.checkTimeseriesExists("root.sg.d.s1")) {
- session.createTimeseries(
- "root.sg.d.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- }
- if (!session.checkTimeseriesExists("root.sg.d.s2")) {
- session.createTimeseries(
- "root.sg.d.s2", TSDataType.DOUBLE, TSEncoding.GORILLA, CompressionType.SNAPPY);
- }
- if (!session.checkTimeseriesExists("root.sg.d.s3")) {
- session.createTimeseries(
- "root.sg.d.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- }
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
- schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
-
- Tablet tablet = new Tablet("root.sg.d", schemaList, 10);
-
- long timestamp = System.currentTimeMillis();
-
- for (long row = 0; row < 15; row++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, timestamp);
- tablet.addValue("s1", rowIndex, 1L);
- tablet.addValue("s2", rowIndex, 1D);
- tablet.addValue("s3", rowIndex, new Binary("1"));
- if (tablet.rowSize == tablet.getMaxRowNumber()) {
- try {
- session.insertTablet(tablet, true);
- } catch (StatementExecutionException e) {
- Assert.assertEquals(313, e.getStatusCode());
- }
- tablet.reset();
- }
- timestamp++;
- }
-
- if (tablet.rowSize != 0) {
- try {
- session.insertTablet(tablet);
- } catch (StatementExecutionException e) {
- Assert.assertEquals(313, e.getStatusCode());
- }
- tablet.reset();
- }
-
- SessionDataSet dataSet =
- session.executeQueryStatement("select count(s1), count(s2), count(s3) from root.sg.d");
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- Assert.assertEquals(15L, rowRecord.getFields().get(0).getLongV());
- Assert.assertEquals(15L, rowRecord.getFields().get(1).getLongV());
- Assert.assertEquals(0L, rowRecord.getFields().get(2).getLongV());
- }
- session.close();
- }
-
- @Test
- public void testInsertPartialAlignedTablet()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- List<String> multiMeasurementComponents = new ArrayList<>();
- for (int i = 1; i <= 3; i++) {
- multiMeasurementComponents.add("s" + i);
- }
- List<TSDataType> dataTypes = new ArrayList<>();
- dataTypes.add(TSDataType.INT64);
- dataTypes.add(TSDataType.DOUBLE);
- dataTypes.add(TSDataType.INT64);
- List<TSEncoding> encodings = new ArrayList<>();
- List<CompressionType> compressors = new ArrayList<>();
- for (int i = 1; i <= 3; i++) {
- encodings.add(TSEncoding.PLAIN);
- compressors.add(CompressionType.SNAPPY);
- }
- session.createAlignedTimeseries(
- "root.sg.d",
- multiMeasurementComponents,
- dataTypes,
- encodings,
- compressors,
- null,
- null,
- null);
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
- schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
-
- Tablet tablet = new Tablet("root.sg.d", schemaList, 10);
-
- long timestamp = System.currentTimeMillis();
-
- for (long row = 0; row < 15; row++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, timestamp);
- tablet.addValue("s1", rowIndex, 1L);
- tablet.addValue("s2", rowIndex, 1D);
- tablet.addValue("s3", rowIndex, new Binary("1"));
- if (tablet.rowSize == tablet.getMaxRowNumber()) {
- try {
- session.insertAlignedTablet(tablet, true);
- } catch (StatementExecutionException e) {
- Assert.assertEquals(313, e.getStatusCode());
- }
- tablet.reset();
- }
- timestamp++;
- }
-
- if (tablet.rowSize != 0) {
- try {
- session.insertAlignedTablet(tablet);
- } catch (StatementExecutionException e) {
- Assert.assertEquals(313, e.getStatusCode());
- }
- tablet.reset();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("select s1, s2, s3 from root.sg.d");
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- Assert.assertEquals(1, rowRecord.getFields().get(0).getLongV());
- Assert.assertEquals(1.0, rowRecord.getFields().get(1).getDoubleV(), 0.01);
- Assert.assertEquals(null, rowRecord.getFields().get(2).getObjectValue(TSDataType.TEXT));
- }
- session.close();
- }
-}
diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionInsertNullT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionInsertNullT.java
deleted file mode 100644
index 62d9ee39cf..0000000000
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionInsertNullT.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * 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.session;
-
-import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-import org.apache.iotdb.itbase.category.LocalStandaloneTest;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.read.common.Field;
-import org.apache.iotdb.tsfile.read.common.RowRecord;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
-@Category({LocalStandaloneTest.class})
-public class IoTDBSessionInsertNullT {
- private Session session;
-
- @Before
- public void setUp() throws Exception {
- System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
- EnvironmentUtils.envSetUp();
- prepareData();
- }
-
- @After
- public void tearDown() throws Exception {
- session.close();
- EnvironmentUtils.cleanEnv();
- }
-
- @Test
- public void testInsertRecordNull() throws StatementExecutionException, IoTDBConnectionException {
- String deviceId = "root.sg1.clsu.d1";
- session.insertRecord(deviceId, 100, Arrays.asList("s1"), Arrays.asList("true"));
- List<String> t = new ArrayList<>();
- t.add(null);
- session.insertRecord(deviceId, 200, Arrays.asList("s1"), t);
- session.insertRecord(
- deviceId,
- 300,
- Arrays.asList("s1", "s2"),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(true, 30));
- session.insertRecord(
- deviceId,
- 400,
- Arrays.asList("s1", "s2"),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(true, null));
- session.insertRecord(
- deviceId,
- 500,
- Arrays.asList("s1", "s2"),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(null, null));
- long nums = queryCountRecords("select count(s1) from " + deviceId);
- assertEquals(3, nums);
- }
-
- @Test
- public void testInsertAlignedRecordNull()
- throws StatementExecutionException, IoTDBConnectionException {
- String deviceId = "root.sg1.clsu.aligned_d1";
- session.insertAlignedRecord(deviceId, 100, Arrays.asList("s1"), Arrays.asList("true"));
- List<String> t = new ArrayList<>();
- t.add(null);
- session.insertAlignedRecord(deviceId, 200, Arrays.asList("s1"), t);
- session.insertAlignedRecord(
- deviceId,
- 300,
- Arrays.asList("s1", "s2"),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(true, 30));
- session.insertAlignedRecord(
- deviceId,
- 400,
- Arrays.asList("s1", "s2"),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(true, null));
- session.insertAlignedRecord(
- deviceId,
- 500,
- Arrays.asList("s1", "s2"),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(null, null));
- long nums = queryCountRecords("select count(s1) from " + deviceId);
- assertEquals(3, nums);
- }
-
- @Test
- public void testInsertRecordsNull() throws StatementExecutionException, IoTDBConnectionException {
- String deviceId1 = "root.sg1.clsu.d2";
- String deviceId2 = "root.sg1.clsu.d3";
- session.insertRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(300L, 300L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
- session.insertRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(200L, 200L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
- session.insertRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(400L, 400L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
- session.insertRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(500L, 500L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
- long nums = queryCountRecords("select count(s1) from " + deviceId1);
- assertEquals(3, nums);
- nums = queryCountRecords("select count(s2) from " + deviceId2);
- assertEquals(3, nums);
- }
-
- @Test
- public void testInsertAlignedRecordsNull()
- throws StatementExecutionException, IoTDBConnectionException {
- String deviceId1 = "root.sg1.clsu.aligned_d2";
- String deviceId2 = "root.sg1.clsu.aligned_d3";
- session.insertAlignedRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(300L, 300L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
- session.insertAlignedRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(200L, 200L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
- session.insertAlignedRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(400L, 400L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
- session.insertAlignedRecords(
- Arrays.asList(deviceId1, deviceId2),
- Arrays.asList(500L, 500L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
- long nums = queryCountRecords("select count(s1) from " + deviceId1);
- assertEquals(3, nums);
- nums = queryCountRecords("select count(s2) from " + deviceId2);
- assertEquals(3, nums);
- }
-
- @Test
- public void testInsertRecordsOfOneDeviceNull()
- throws StatementExecutionException, IoTDBConnectionException {
- String deviceId1 = "root.sg1.clsu.InsertRecordsOfOneDevice";
- session.insertRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(300L, 301L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
- session.insertStringRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(200L, 201L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
- session.insertStringRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(400L, 401L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
- session.insertRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(500L, 501L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
- long nums = queryCountRecords("select count(s1) from " + deviceId1);
- assertEquals(6, nums);
- }
-
- @Test
- public void testInsertAlignedRecordsOfOneDeviceNull()
- throws StatementExecutionException, IoTDBConnectionException {
- String deviceId1 = "root.sg1.clsu.InsertAlignedRecordsOfOneDevice";
- session.insertAlignedRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(300L, 301L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, 101), Arrays.asList(false, 201)));
- session.insertAlignedStringRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(200L, 201L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList("false", "101"), Arrays.asList("true", "201")));
- session.insertAlignedStringRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(400L, 401L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(Arrays.asList(null, "102"), Arrays.asList("false", "202")));
- session.insertAlignedRecordsOfOneDevice(
- deviceId1,
- Arrays.asList(500L, 501L),
- Arrays.asList(Arrays.asList("s1", "s2"), Arrays.asList("s1", "s2")),
- Arrays.asList(
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32),
- Arrays.asList(TSDataType.BOOLEAN, TSDataType.INT32)),
- Arrays.asList(Arrays.asList(true, null), Arrays.asList(null, null)));
- long nums = queryCountRecords("select count(s1) from " + deviceId1);
- assertEquals(6, nums);
- }
-
- private void prepareData() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- session.setStorageGroup("root.sg1");
- session.createTimeseries(
- "root.sg1.clsu.d1.s1", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.clsu.d1.s2", TSDataType.INT32, TSEncoding.PLAIN, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.clsu.d1.s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.clsu.d1.s4", TSDataType.FLOAT, TSEncoding.PLAIN, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.clsu.d1.s5", TSDataType.DOUBLE, TSEncoding.PLAIN, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.clsu.d1.s6", TSDataType.TEXT, TSEncoding.PLAIN, CompressionType.SNAPPY);
- session.createTimeseries(
- "root.sg1.clsu.d2.s1", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
- }
-
- public long queryCountRecords(String sql)
- throws StatementExecutionException, IoTDBConnectionException {
- SessionDataSet dataSetWrapper = session.executeQueryStatement(sql, 1000);
- long count = 0;
- while (dataSetWrapper.hasNext()) {
- RowRecord record = dataSetWrapper.next();
- Field field = record.getFields().get(0);
- switch (field.getDataType()) {
- case INT32:
- count = field.getIntV();
- break;
- case INT64:
- count = field.getLongV();
- break;
- }
- }
- return count;
- }
-}
diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
deleted file mode 100644
index 0e7c445b61..0000000000
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
+++ /dev/null
@@ -1,1704 +0,0 @@
-/*
- * 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.session;
-
-import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.conf.OperationType;
-import org.apache.iotdb.db.metadata.LocalSchemaProcessor;
-import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-import org.apache.iotdb.itbase.category.LocalStandaloneTest;
-import org.apache.iotdb.rpc.BatchExecutionException;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.rpc.TSStatusCode;
-import org.apache.iotdb.session.template.InternalNode;
-import org.apache.iotdb.session.template.MeasurementNode;
-import org.apache.iotdb.session.template.Template;
-import org.apache.iotdb.session.template.TemplateNode;
-import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.read.common.Field;
-import org.apache.iotdb.tsfile.read.common.RowRecord;
-import org.apache.iotdb.tsfile.utils.Binary;
-import org.apache.iotdb.tsfile.utils.BitMap;
-import org.apache.iotdb.tsfile.write.record.Tablet;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-
-import org.apache.commons.lang3.StringUtils;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.security.SecureRandom;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-@Category({LocalStandaloneTest.class})
-public class IoTDBSessionSimpleIT {
-
- private static Logger logger = LoggerFactory.getLogger(IoTDBSessionSimpleIT.class);
-
- private Session session;
-
- @Before
- public void setUp() {
- System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
- EnvironmentUtils.envSetUp();
- }
-
- @After
- public void tearDown() throws Exception {
- session.close();
- EnvironmentUtils.cleanEnv();
- }
-
- @Test
- public void testInsertPartialTablet()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- session.createTimeseries(
- "root.sg.d.s1", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.LZ4);
- session.createTimeseries(
- "root.sg.d.s2", TSDataType.FLOAT, TSEncoding.PLAIN, CompressionType.LZ4);
- session.createTimeseries(
- "root.sg.d.s3", TSDataType.TEXT, TSEncoding.PLAIN, CompressionType.LZ4);
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
- schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
-
- Tablet tablet = new Tablet("root.sg.d", schemaList, 10);
-
- for (long row = 0; row < 15; row++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, row);
- tablet.addValue("s1", rowIndex, 1L);
- tablet.addValue("s2", rowIndex, 1D);
- tablet.addValue("s3", rowIndex, new Binary("1"));
- if (tablet.rowSize == tablet.getMaxRowNumber()) {
- try {
- session.insertTablet(tablet, true);
- } catch (StatementExecutionException e) {
- Assert.assertTrue(e.getMessage().contains("is not consistent"));
- }
- tablet.reset();
- }
- }
-
- if (tablet.rowSize != 0) {
- try {
- session.insertTablet(tablet);
- } catch (StatementExecutionException e) {
- Assert.assertTrue(e.getMessage().contains("is not consistent"));
- }
- tablet.reset();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("select count(*) from root.**");
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- Assert.assertEquals(15L, rowRecord.getFields().get(0).getLongV());
- Assert.assertEquals(15L, rowRecord.getFields().get(1).getLongV());
- Assert.assertEquals(0, rowRecord.getFields().get(2).getLongV());
- }
- dataSet.close();
- session.close();
- }
-
- @Test
- public void testInsertByStrAndInferType()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- measurements.add("s4");
-
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("1.2");
- values.add("true");
- values.add("dad");
- session.insertRecord(deviceId, 1L, measurements, values);
-
- Set<String> expected = new HashSet<>();
- expected.add(IoTDBDescriptor.getInstance().getConfig().getIntegerStringInferType().name());
- expected.add(IoTDBDescriptor.getInstance().getConfig().getFloatingStringInferType().name());
- expected.add(IoTDBDescriptor.getInstance().getConfig().getBooleanStringInferType().name());
- expected.add(TSDataType.TEXT.name());
-
- Set<String> actual = new HashSet<>();
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root.**");
- while (dataSet.hasNext()) {
- actual.add(dataSet.next().getFields().get(3).getStringValue());
- }
-
- Assert.assertEquals(expected, actual);
-
- session.close();
- }
-
- @Test
- public void testInsertWrongPathByStrAndInferType()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String deviceId = "root.sg1..d1";
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- measurements.add("s4");
-
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("1.2");
- values.add("true");
- values.add("dad");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- logger.error("", e);
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
-
- session.close();
- }
-
- @Test
- public void testInsertIntoIllegalTimeseries()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String deviceId = "root.sg1.d1\n";
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- measurements.add("s4");
-
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("1.2");
- values.add("true");
- values.add("dad");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- logger.error("", e);
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
-
- session.close();
- }
-
- @Test
- public void testInsertByObjAndNotInferType()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- measurements.add("s4");
-
- List<TSDataType> dataTypes = new ArrayList<>();
- dataTypes.add(TSDataType.INT64);
- dataTypes.add(TSDataType.DOUBLE);
- dataTypes.add(TSDataType.TEXT);
- dataTypes.add(TSDataType.TEXT);
-
- List<Object> values = new ArrayList<>();
- values.add(1L);
- values.add(1.2d);
- values.add("true");
- values.add("dad");
- session.insertRecord(deviceId, 1L, measurements, dataTypes, values);
-
- Set<String> expected = new HashSet<>();
- expected.add(TSDataType.INT64.name());
- expected.add(TSDataType.DOUBLE.name());
- expected.add(TSDataType.TEXT.name());
- expected.add(TSDataType.TEXT.name());
-
- Set<String> actual = new HashSet<>();
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root.**");
- while (dataSet.hasNext()) {
- actual.add(dataSet.next().getFields().get(3).getStringValue());
- }
-
- Assert.assertEquals(expected, actual);
-
- session.close();
- }
-
- @Test
- public void testCreateMultiTimeseries()
- throws IoTDBConnectionException, StatementExecutionException, MetadataException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- List<String> paths = new ArrayList<>();
- paths.add("root.sg1.d1.s1");
- paths.add("root.sg1.d1.s2");
- List<TSDataType> tsDataTypes = new ArrayList<>();
- tsDataTypes.add(TSDataType.DOUBLE);
- tsDataTypes.add(TSDataType.DOUBLE);
- List<TSEncoding> tsEncodings = new ArrayList<>();
- tsEncodings.add(TSEncoding.RLE);
- tsEncodings.add(TSEncoding.RLE);
- List<CompressionType> compressionTypes = new ArrayList<>();
- compressionTypes.add(CompressionType.SNAPPY);
- compressionTypes.add(CompressionType.SNAPPY);
-
- List<Map<String, String>> tagsList = new ArrayList<>();
- Map<String, String> tags = new HashMap<>();
- tags.put("tag1", "v1");
- tagsList.add(tags);
- tagsList.add(tags);
-
- session.createMultiTimeseries(
- paths, tsDataTypes, tsEncodings, compressionTypes, null, tagsList, null, null);
-
- assertTrue(session.checkTimeseriesExists("root.sg1.d1.s1"));
- assertTrue(session.checkTimeseriesExists("root.sg1.d1.s2"));
- IMeasurementMNode mNode =
- LocalSchemaProcessor.getInstance().getMeasurementMNode(new PartialPath("root.sg1.d1.s1"));
- assertNull(mNode.getSchema().getProps());
-
- session.close();
- }
-
- @Test
- public void testChineseCharacter() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- if (!System.getProperty("sun.jnu.encoding").contains("UTF-8")) {
- logger.error("The system does not support UTF-8, so skip Chinese test...");
- session.close();
- return;
- }
- String storageGroup = "root.存储组1";
- String[] devices = new String[] {"设备1.指标1", "设备1.s2", "d2.s1", "d2.指标2"};
- session.setStorageGroup(storageGroup);
- for (String path : devices) {
- String fullPath = storageGroup + TsFileConstant.PATH_SEPARATOR + path;
- session.createTimeseries(fullPath, TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- }
-
- for (String path : devices) {
- for (int i = 0; i < 10; i++) {
- String[] ss = path.split("\\.");
- StringBuilder deviceId = new StringBuilder(storageGroup);
- for (int j = 0; j < ss.length - 1; j++) {
- deviceId.append(TsFileConstant.PATH_SEPARATOR).append(ss[j]);
- }
- String sensorId = ss[ss.length - 1];
- List<String> measurements = new ArrayList<>();
- List<Object> values = new ArrayList<>();
- List<TSDataType> types = new ArrayList<>();
-
- measurements.add(sensorId);
- types.add(TSDataType.INT64);
- values.add(100L);
- session.insertRecord(deviceId.toString(), i, measurements, types, values);
- }
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("select * from root.存储组1.*");
- int count = 0;
- while (dataSet.hasNext()) {
- count++;
- }
- Assert.assertEquals(10, count);
- session.deleteStorageGroup(storageGroup);
- session.close();
- }
-
- @Test
- public void testInsertTabletWithAlignedTimeseries()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
- schemaList.add(new MeasurementSchema("s2", TSDataType.INT32));
- schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
-
- Tablet tablet = new Tablet("root.sg1.d1", schemaList);
- long timestamp = System.currentTimeMillis();
-
- for (long row = 0; row < 10; row++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, timestamp);
- tablet.addValue(
- schemaList.get(0).getMeasurementId(), rowIndex, new SecureRandom().nextLong());
- tablet.addValue(schemaList.get(1).getMeasurementId(), rowIndex, new SecureRandom().nextInt());
- tablet.addValue(schemaList.get(2).getMeasurementId(), rowIndex, new Binary("test"));
- timestamp++;
- }
-
- if (tablet.rowSize != 0) {
- session.insertAlignedTablet(tablet);
- tablet.reset();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("select count(*) from root");
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- Assert.assertEquals(10L, rowRecord.getFields().get(0).getLongV());
- Assert.assertEquals(10L, rowRecord.getFields().get(1).getLongV());
- Assert.assertEquals(10L, rowRecord.getFields().get(2).getLongV());
- }
- session.close();
- }
-
- @Test
- public void testInsertTabletWithNullValues()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s0", TSDataType.DOUBLE, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s1", TSDataType.FLOAT, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.INT32, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s4", TSDataType.BOOLEAN, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s5", TSDataType.TEXT, TSEncoding.RLE));
-
- Tablet tablet = new Tablet("root.sg1.d1", schemaList);
- for (long time = 0; time < 10; time++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, time);
-
- tablet.addValue(schemaList.get(0).getMeasurementId(), rowIndex, (double) time);
- tablet.addValue(schemaList.get(1).getMeasurementId(), rowIndex, (float) time);
- tablet.addValue(schemaList.get(2).getMeasurementId(), rowIndex, time);
- tablet.addValue(schemaList.get(3).getMeasurementId(), rowIndex, (int) time);
- tablet.addValue(schemaList.get(4).getMeasurementId(), rowIndex, time % 2 == 0);
- tablet.addValue(
- schemaList.get(5).getMeasurementId(), rowIndex, new Binary(String.valueOf(time)));
- }
-
- BitMap[] bitMaps = new BitMap[schemaList.size()];
- for (int i = 0; i < schemaList.size(); i++) {
- if (bitMaps[i] == null) {
- bitMaps[i] = new BitMap(10);
- }
- bitMaps[i].mark(i);
- }
- tablet.bitMaps = bitMaps;
-
- if (tablet.rowSize != 0) {
- session.insertTablet(tablet);
- tablet.reset();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("select count(*) from root");
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- Assert.assertEquals(6L, rowRecord.getFields().size());
- for (Field field : rowRecord.getFields()) {
- Assert.assertEquals(9L, field.getLongV());
- }
- }
- session.close();
- }
-
- @Test
- public void testInsertTabletWithStringValues()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s0", TSDataType.DOUBLE, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s1", TSDataType.FLOAT, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.INT32, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s4", TSDataType.BOOLEAN, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s5", TSDataType.TEXT, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s6", TSDataType.TEXT, TSEncoding.RLE));
-
- Tablet tablet = new Tablet("root.sg1.d1", schemaList);
- for (long time = 0; time < 10; time++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, time);
-
- tablet.addValue(schemaList.get(0).getMeasurementId(), rowIndex, (double) time);
- tablet.addValue(schemaList.get(1).getMeasurementId(), rowIndex, (float) time);
- tablet.addValue(schemaList.get(2).getMeasurementId(), rowIndex, time);
- tablet.addValue(schemaList.get(3).getMeasurementId(), rowIndex, (int) time);
- tablet.addValue(schemaList.get(4).getMeasurementId(), rowIndex, time % 2 == 0);
- tablet.addValue(schemaList.get(5).getMeasurementId(), rowIndex, new Binary("Text" + time));
- tablet.addValue(schemaList.get(6).getMeasurementId(), rowIndex, "Text" + time);
- }
-
- if (tablet.rowSize != 0) {
- session.insertTablet(tablet);
- tablet.reset();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("select * from root.sg1.d1");
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- List<Field> fields = rowRecord.getFields();
- Assert.assertEquals(fields.get(5).getBinaryV(), fields.get(6).getBinaryV());
- }
- session.close();
- }
-
- @Test
- public void createTimeSeriesWithDoubleTicks()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- if (!System.getProperty("sun.jnu.encoding").contains("UTF-8")) {
- logger.error("The system does not support UTF-8, so skip Chinese test...");
- session.close();
- return;
- }
- String storageGroup = "root.sg";
- session.setStorageGroup(storageGroup);
-
- session.createTimeseries(
- "root.sg.`my.device.with.colon:`.s",
- TSDataType.INT64,
- TSEncoding.RLE,
- CompressionType.SNAPPY);
-
- final SessionDataSet dataSet = session.executeQueryStatement("SHOW TIMESERIES");
- assertTrue(dataSet.hasNext());
-
- session.deleteStorageGroup(storageGroup);
- session.close();
- }
-
- @Test
- public void createWrongTimeSeries() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- if (!System.getProperty("sun.jnu.encoding").contains("UTF-8")) {
- logger.error("The system does not support UTF-8, so skip Chinese test...");
- session.close();
- return;
- }
- String storageGroup = "root.sg";
- session.setStorageGroup(storageGroup);
-
- try {
- session.createTimeseries(
- "root.sg.d1..s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- } catch (IoTDBConnectionException | StatementExecutionException e) {
- logger.error("", e);
- }
-
- try {
- session.createTimeseries("", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- } catch (IoTDBConnectionException | StatementExecutionException e) {
- logger.error("", e);
- }
-
- final SessionDataSet dataSet = session.executeQueryStatement("SHOW TIMESERIES");
- assertFalse(dataSet.hasNext());
-
- session.deleteStorageGroup(storageGroup);
- session.close();
- }
-
- @Test
- public void testDeleteNonExistTimeSeries()
- throws StatementExecutionException, IoTDBConnectionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- session.insertRecord(
- "root.sg1.d1", 0, Arrays.asList("t1", "t2", "t3"), Arrays.asList("123", "333", "444"));
- try {
- session.deleteTimeseries(Arrays.asList("root.sg1.d1.t6", "root.sg1.d1.t2", "root.sg1.d1.t3"));
- } catch (BatchExecutionException e) {
- assertTrue(e.getMessage().contains("Path [root.sg1.d1.t6] does not exist;"));
- }
- assertTrue(session.checkTimeseriesExists("root.sg1.d1.t1"));
- assertFalse(session.checkTimeseriesExists("root.sg1.d1.t2"));
- assertFalse(session.checkTimeseriesExists("root.sg1.d1.t3"));
-
- session.close();
- }
-
- @Test
- public void testInsertOneDeviceRecords()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<Long> times = new ArrayList<>();
- List<List<String>> measurements = new ArrayList<>();
- List<List<TSDataType>> datatypes = new ArrayList<>();
- List<List<Object>> values = new ArrayList<>();
-
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 3L,
- "s1",
- "s2",
- TSDataType.INT32,
- TSDataType.INT32,
- 1,
- 2);
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 2L,
- "s2",
- "s3",
- TSDataType.INT32,
- TSDataType.INT64,
- 3,
- 4L);
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 1L,
- "s4",
- "s5",
- TSDataType.FLOAT,
- TSDataType.BOOLEAN,
- 5.0f,
- Boolean.TRUE);
- session.insertRecordsOfOneDevice("root.sg.d1", times, measurements, datatypes, values);
- checkResult(session);
- session.close();
- }
-
- @Test
- public void testFillAll() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<String> paths = new ArrayList<>();
- paths.add("root.sg.d.s1");
- paths.add("root.sg.d.s2");
- paths.add("root.sg.d.s3");
- paths.add("root.sg.d.s4");
- paths.add("root.sg.d.s5");
- paths.add("root.sg.d.s6");
- List<TSDataType> tsDataTypes = new ArrayList<>();
- tsDataTypes.add(TSDataType.BOOLEAN);
- tsDataTypes.add(TSDataType.INT32);
- tsDataTypes.add(TSDataType.INT64);
- tsDataTypes.add(TSDataType.FLOAT);
- tsDataTypes.add(TSDataType.DOUBLE);
- tsDataTypes.add(TSDataType.TEXT);
- List<TSEncoding> tsEncodings = new ArrayList<>();
- tsEncodings.add(TSEncoding.RLE);
- tsEncodings.add(TSEncoding.RLE);
- tsEncodings.add(TSEncoding.RLE);
- tsEncodings.add(TSEncoding.RLE);
- tsEncodings.add(TSEncoding.RLE);
- tsEncodings.add(TSEncoding.PLAIN);
- List<CompressionType> compressionTypes = new ArrayList<>();
- compressionTypes.add(CompressionType.SNAPPY);
- compressionTypes.add(CompressionType.SNAPPY);
- compressionTypes.add(CompressionType.SNAPPY);
- compressionTypes.add(CompressionType.SNAPPY);
- compressionTypes.add(CompressionType.SNAPPY);
- compressionTypes.add(CompressionType.SNAPPY);
- session.createMultiTimeseries(
- paths, tsDataTypes, tsEncodings, compressionTypes, null, null, null, null);
-
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- measurements.add("s3");
- measurements.add("s4");
- measurements.add("s5");
- measurements.add("s6");
- List<Object> values = new ArrayList<>();
- values.add(false);
- values.add(1);
- values.add((long) 1);
- values.add((float) 1.0);
- values.add(1.0);
- values.add("1");
- session.insertRecord("root.sg.d", 1, measurements, tsDataTypes, values);
-
- SessionDataSet dataSet =
- session.executeQueryStatement(
- "select * from root.sg.d where time=70 fill(all[previous, 1m])");
- RowRecord record = dataSet.next();
- assertEquals(70, record.getTimestamp());
- for (Field field : record.getFields()) {
- switch (field.getDataType()) {
- case TEXT:
- break;
- case FLOAT:
- assertEquals(1.0, field.getFloatV(), 0);
- break;
- case INT32:
- assertEquals(1, field.getIntV());
- break;
- case INT64:
- assertEquals(1, field.getLongV());
- break;
- case DOUBLE:
- assertEquals(1.0, field.getDoubleV(), 0);
- break;
- case BOOLEAN:
- assertEquals(false, field.getBoolV());
- break;
- }
- }
- session.close();
- }
-
- @Test
- public void testInsertOneDeviceRecordsWithOrder()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<Long> times = new ArrayList<>();
- List<List<String>> measurements = new ArrayList<>();
- List<List<TSDataType>> datatypes = new ArrayList<>();
- List<List<Object>> values = new ArrayList<>();
-
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 1L,
- "s4",
- "s5",
- TSDataType.FLOAT,
- TSDataType.BOOLEAN,
- 5.0f,
- Boolean.TRUE);
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 2L,
- "s2",
- "s3",
- TSDataType.INT32,
- TSDataType.INT64,
- 3,
- 4L);
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 3L,
- "s1",
- "s2",
- TSDataType.INT32,
- TSDataType.INT32,
- 1,
- 2);
-
- session.insertRecordsOfOneDevice("root.sg.d1", times, measurements, datatypes, values, true);
- checkResult(session);
- session.close();
- }
-
- @Test
- public void testInsertOneDeviceRecordsWithIncorrectOrder()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<Long> times = new ArrayList<>();
- List<List<String>> measurements = new ArrayList<>();
- List<List<TSDataType>> datatypes = new ArrayList<>();
- List<List<Object>> values = new ArrayList<>();
-
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 2L,
- "s2",
- "s3",
- TSDataType.INT32,
- TSDataType.INT64,
- 3,
- 4L);
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 3L,
- "s1",
- "s2",
- TSDataType.INT32,
- TSDataType.INT32,
- 1,
- 2);
- addLine(
- times,
- measurements,
- datatypes,
- values,
- 1L,
- "s4",
- "s5",
- TSDataType.FLOAT,
- TSDataType.BOOLEAN,
- 5.0f,
- Boolean.TRUE);
-
- session.insertRecordsOfOneDevice("root.sg.d1", times, measurements, datatypes, values, true);
- checkResult(session);
- session.close();
- }
-
- @Test
- public void testInsertStringRecordsOfOneDeviceWithOrder()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<Long> times = new ArrayList<>();
- List<List<String>> measurements = new ArrayList<>();
- List<List<String>> values = new ArrayList<>();
-
- addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
- addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
- addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
-
- session.insertStringRecordsOfOneDevice("root.sg.d1", times, measurements, values, true);
- checkResultForInsertStringRecordsOfOneDevice(session);
- session.close();
- }
-
- @Test
- public void testInsertStringRecordsOfOneDeviceWithIncorrectOrder()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<Long> times = new ArrayList<>();
- List<List<String>> measurements = new ArrayList<>();
- List<List<String>> values = new ArrayList<>();
-
- addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
- addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
- addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
-
- session.insertStringRecordsOfOneDevice("root.sg.d1", times, measurements, values);
- checkResultForInsertStringRecordsOfOneDevice(session);
- session.close();
- }
-
- @Test
- public void testInsertAlignedStringRecordsOfOneDeviceWithOrder()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<Long> times = new ArrayList<>();
- List<List<String>> measurements = new ArrayList<>();
- List<List<String>> values = new ArrayList<>();
-
- addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
- addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
- addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
-
- session.insertAlignedStringRecordsOfOneDevice("root.sg.d1", times, measurements, values, true);
- checkResultForInsertStringRecordsOfOneDevice(session);
- session.close();
- }
-
- @Test
- public void testInsertAlignedStringRecordsOfOneDeviceWithIncorrectOrder()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- List<Long> times = new ArrayList<>();
- List<List<String>> measurements = new ArrayList<>();
- List<List<String>> values = new ArrayList<>();
-
- addStringLine(times, measurements, values, 2L, "s2", "s3", "3", "4");
- addStringLine(times, measurements, values, 1L, "s4", "s5", "5.0", "true");
- addStringLine(times, measurements, values, 3L, "s1", "s2", "false", "6");
-
- session.insertAlignedStringRecordsOfOneDevice("root.sg.d1", times, measurements, values);
- checkResultForInsertStringRecordsOfOneDevice(session);
- session.close();
- }
-
- @Test
- public void testInsertIlligalPath() throws IoTDBConnectionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String msg = "[%s] Exception occurred: %s failed. %s is not a legal path";
- String deviceId = "root.sg..d1";
- List<String> deviceIds = Arrays.asList("root.sg..d1", "root.sg.d2");
- List<Long> timestamps = Arrays.asList(1L, 1L);
- List<String> measurements = Arrays.asList("s1", "s2", "s3");
- List<List<String>> allMeasurements = Arrays.asList(measurements, measurements);
- List<TSDataType> tsDataTypes =
- Arrays.asList(TSDataType.INT32, TSDataType.FLOAT, TSDataType.TEXT);
- List<List<TSDataType>> allTsDataTypes = Arrays.asList(tsDataTypes, tsDataTypes);
- List<TSEncoding> tsEncodings =
- Arrays.asList(TSEncoding.PLAIN, TSEncoding.PLAIN, TSEncoding.PLAIN);
- List<CompressionType> compressionTypes =
- Arrays.asList(CompressionType.SNAPPY, CompressionType.SNAPPY, CompressionType.SNAPPY);
- List<Object> values = Arrays.asList(1, 2f, "3");
- List<List<Object>> allValues = Arrays.asList(values, values);
- List<String> stringValues = Arrays.asList("1", "2", "3");
- List<List<String>> allstringValues = Arrays.asList(stringValues, stringValues);
-
- try {
- session.insertRecords(deviceIds, timestamps, allMeasurements, allTsDataTypes, allValues);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_RECORDS, deviceId)));
- }
-
- try {
- session.insertRecords(deviceIds, Arrays.asList(2L, 2L), allMeasurements, allstringValues);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.INSERT_STRING_RECORDS,
- deviceIds.get(0))));
- }
-
- try {
- session.insertRecord(deviceId, 3L, measurements, tsDataTypes, values);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_RECORD, deviceId)));
- }
-
- try {
- session.insertRecord(deviceId, 4L, measurements, stringValues);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.INSERT_STRING_RECORD,
- deviceId)));
- }
-
- try {
- session.insertRecordsOfOneDevice(
- deviceId, Arrays.asList(5L, 6L), allMeasurements, allTsDataTypes, allValues);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.INSERT_RECORDS_OF_ONE_DEVICE,
- deviceId)));
- }
-
- try {
- session.deleteData(deviceId + ".s1", 6L);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.DELETE_DATA,
- deviceId + ".s1")));
- }
-
- try {
- Tablet tablet =
- new Tablet(
- deviceId,
- Arrays.asList(
- new MeasurementSchema("s1", TSDataType.INT32),
- new MeasurementSchema("s2", TSDataType.FLOAT)),
- 5);
- long ts = 7L;
- for (long row = 0; row < 8; row++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, ts);
- tablet.addValue("s1", rowIndex, 1);
- tablet.addValue("s2", rowIndex, 1.0F);
- if (tablet.rowSize == tablet.getMaxRowNumber()) {
- session.insertTablet(tablet, true);
- tablet.reset();
- }
- ts++;
- }
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_TABLET, deviceId)));
- }
-
- try {
- Tablet tablet1 =
- new Tablet(
- deviceId,
- Arrays.asList(
- new MeasurementSchema("s1", TSDataType.INT32),
- new MeasurementSchema("s2", TSDataType.FLOAT)),
- 5);
- Tablet tablet2 =
- new Tablet(
- "root.sg.d2",
- Arrays.asList(
- new MeasurementSchema("s1", TSDataType.INT32),
- new MeasurementSchema("s2", TSDataType.FLOAT)),
- 5);
- HashMap<String, Tablet> tablets = new HashMap<>();
- tablets.put(deviceId, tablet1);
- tablets.put("root.sg.d2", tablet2);
- long ts = 16L;
- for (long row = 0; row < 8; row++) {
- int row1 = tablet1.rowSize++;
- int row2 = tablet2.rowSize++;
- tablet1.addTimestamp(row1, ts);
- tablet2.addTimestamp(row2, ts);
- tablet1.addValue("s1", row1, 1);
- tablet1.addValue("s2", row1, 1.0F);
- tablet2.addValue("s1", row2, 1);
- tablet2.addValue("s2", row2, 1.0F);
- if (tablet1.rowSize == tablet1.getMaxRowNumber()) {
- session.insertTablets(tablets, true);
- tablet1.reset();
- tablet2.reset();
- }
- ts++;
- }
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg, TSStatusCode.PATH_ILLEGAL, OperationType.INSERT_TABLETS, deviceId)));
- }
-
- try {
- session.setStorageGroup("root..sg");
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.SET_STORAGE_GROUP,
- "root..sg")));
- }
-
- try {
- session.createTimeseries(
- "root.sg..d1.s1", TSDataType.INT32, TSEncoding.PLAIN, CompressionType.SNAPPY);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.CREATE_TIMESERIES,
- "root.sg..d1.s1")));
- }
-
- try {
- session.createAlignedTimeseries(
- deviceId,
- measurements,
- tsDataTypes,
- tsEncodings,
- compressionTypes,
- Arrays.asList("alias1", "alias2", "alias3"),
- null,
- null);
-
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.CREATE_ALIGNED_TIMESERIES,
- deviceId)));
- }
-
- try {
- session.createMultiTimeseries(
- Arrays.asList("root.sg.d1..s1", "root.sg.d1.s2", "root.sg.d1.s3"),
- tsDataTypes,
- tsEncodings,
- compressionTypes,
- null,
- null,
- null,
- null);
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.CREATE_MULTI_TIMESERIES,
- "root.sg.d1..s1")));
- }
-
- try {
- session.deleteTimeseries("root.sg.d1..s1");
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.DELETE_TIMESERIES,
- "root.sg.d1..s1")));
- }
-
- try {
- session.deleteStorageGroup("root..sg");
- fail("Exception expected");
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains(
- String.format(
- msg,
- TSStatusCode.PATH_ILLEGAL,
- OperationType.DELETE_STORAGE_GROUPS,
- "root..sg")));
- }
-
- session.close();
- }
-
- @Test
- public void testConversionFunction()
- throws IoTDBConnectionException, StatementExecutionException {
- // connect
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- // prepare data
- String deviceId = "root.sg.d1";
- List<Long> times = new ArrayList<>();
- List<List<String>> measurementsList = new ArrayList<>();
- List<List<TSDataType>> typesList = new ArrayList<>();
- List<List<Object>> valuesList = new ArrayList<>();
-
- for (int i = 0; i <= 4; i++) {
- times.add((long) i * 2);
- measurementsList.add(Arrays.asList("s1", "s2", "s3", "s4", "s5", "s6"));
- typesList.add(
- Arrays.asList(
- TSDataType.INT32,
- TSDataType.INT64,
- TSDataType.FLOAT,
- TSDataType.DOUBLE,
- TSDataType.BOOLEAN,
- TSDataType.TEXT));
- valuesList.add(
- Arrays.asList(
- i,
- (long) i + 1,
- (float) i,
- (double) i * 2,
- new boolean[] {true, false}[i % 2],
- String.valueOf(i)));
- }
- // insert data
- session.insertRecordsOfOneDevice(deviceId, times, measurementsList, typesList, valuesList);
-
- // excepted
- String[] targetTypes = {"INT64", "INT32", "DOUBLE", "FLOAT", "TEXT", "BOOLEAN"};
- String[] excepted = {
- "0\t0\t1\t0.0\t0.0\ttrue\ttrue",
- "2\t1\t2\t1.0\t2.0\tfalse\ttrue",
- "4\t2\t3\t2.0\t4.0\ttrue\ttrue",
- "6\t3\t4\t3.0\t6.0\tfalse\ttrue",
- "8\t4\t5\t4.0\t8.0\ttrue\ttrue"
- };
-
- // query
- String[] casts = new String[targetTypes.length];
- StringBuffer buffer = new StringBuffer();
- buffer.append("select ");
- for (int i = 0; i < targetTypes.length; i++) {
- casts[i] = String.format("cast(s%s, 'type'='%s')", i + 1, targetTypes[i]);
- }
- buffer.append(StringUtils.join(casts, ","));
- buffer.append(" from root.sg.d1");
- String sql = buffer.toString();
- SessionDataSet sessionDataSet = session.executeQueryStatement(sql);
-
- // compare types
- List<String> columnTypes = sessionDataSet.getColumnTypes();
- columnTypes.remove(0);
- for (int i = 0; i < columnTypes.size(); i++) {
- assertEquals(targetTypes[i], columnTypes.get(i));
- }
-
- // compare results
- int index = 0;
- while (sessionDataSet.hasNext()) {
- RowRecord next = sessionDataSet.next();
- assertEquals(excepted[index], next.toString());
- index++;
- }
- session.close();
- }
-
- @Test
- public void testInsertDeleteWithTemplate()
- throws IoTDBConnectionException, StatementExecutionException, IOException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- initTreeTemplate("root.sg.loc1");
- List<String> measurements = new ArrayList<>();
- List<String> values = new ArrayList<>();
- String deviceId = "root.sg.loc1.sector.GPS";
- Set<String> checkSet = new HashSet<>();
- SessionDataSet dataSet;
-
- // insert record set using template
-
- measurements.add("x");
- measurements.add("y");
- values.add("1.0");
- values.add("2.0");
-
- checkSet.add("root.sg.loc1.sector.GPS.x");
- checkSet.add("root.sg.loc1.sector.GPS.y");
- checkSet.add("root.sg.loc1.sector.y");
- checkSet.add("root.sg.loc1.sector.x");
- checkSet.add("root.sg.loc1.sector.vehicle.x");
- checkSet.add("root.sg.loc1.sector.vehicle.y");
- checkSet.add("root.sg.loc1.sector.vehicle.GPS.x");
- checkSet.add("root.sg.loc1.sector.vehicle.GPS.y");
-
- session.insertRecord(deviceId, 1L, measurements, values);
- dataSet = session.executeQueryStatement("show timeseries");
- while (dataSet.hasNext()) {
- checkSet.remove(dataSet.next().getFields().get(0).toString());
- }
- assertTrue(checkSet.isEmpty());
-
- // insert aligned under unaligned node
- try {
- session.insertAlignedRecord("root.sg.loc1.sector.GPS", 3L, measurements, values);
- } catch (StatementExecutionException e) {
- assertEquals(
- "319: timeseries under this device are not aligned, please use non-aligned interface (Path: root.sg.loc1.sector.GPS)",
- e.getMessage());
- }
-
- // insert overlap unmatched series
- measurements.set(1, "speed");
- try {
- session.insertRecord(deviceId, 5L, measurements, values);
- fail();
- } catch (StatementExecutionException e) {
- assertEquals(
- "327: Path [root.sg.loc1.sector.GPS.speed] overlaps with [treeTemplate] on [GPS]",
- e.getMessage());
- }
-
- // insert tablets
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("x", TSDataType.FLOAT));
- schemaList.add(new MeasurementSchema("y", TSDataType.FLOAT));
- Tablet tablet = new Tablet("root.sg.loc1.sector", schemaList);
-
- long timestamp = System.currentTimeMillis();
-
- for (long row = 0; row < 10; row++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, timestamp);
- tablet.addValue(
- schemaList.get(0).getMeasurementId(), rowIndex, new SecureRandom().nextFloat());
- tablet.addValue(
- schemaList.get(1).getMeasurementId(), rowIndex, new SecureRandom().nextFloat());
- timestamp++;
- }
-
- if (tablet.rowSize != 0) {
- session.insertAlignedTablet(tablet);
- tablet.reset();
- }
-
- dataSet = session.executeQueryStatement("select count(*) from root");
-
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- Assert.assertEquals(10L, rowRecord.getFields().get(0).getLongV());
- Assert.assertEquals(10L, rowRecord.getFields().get(1).getLongV());
- }
-
- // delete series inside template
- try {
- session.deleteTimeseries("root.sg.loc1.sector.x");
- fail();
- } catch (StatementExecutionException e) {
- assertTrue(
- e.getMessage()
- .contains("Cannot delete a timeseries inside a template: root.sg.loc1.sector.x;"));
- }
-
- session.close();
- }
-
- @Test
- public void testCountWithTemplate()
- throws IoTDBConnectionException, StatementExecutionException, IOException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- initTreeTemplate("root.sg.loc");
-
- List<String> measurements = new ArrayList<>();
- List<String> values = new ArrayList<>();
- Set<String> checkSet = new HashSet<>();
- SessionDataSet dataSet;
-
- // invoke template template
-
- measurements.add("x");
- measurements.add("y");
- values.add("1.0");
- values.add("2.0");
-
- session.insertAlignedRecord("root.sg.loc.area", 1L, measurements, values);
- session.insertAlignedRecord("root.sg.loc", 1L, measurements, values);
-
- dataSet = session.executeQueryStatement("show timeseries");
-
- checkSet.add("root.sg.loc.x");
- checkSet.add("root.sg.loc.y");
- checkSet.add("root.sg.loc.GPS.x");
- checkSet.add("root.sg.loc.GPS.y");
- checkSet.add("root.sg.loc.vehicle.GPS.x");
- checkSet.add("root.sg.loc.vehicle.GPS.y");
- checkSet.add("root.sg.loc.vehicle.x");
- checkSet.add("root.sg.loc.vehicle.x");
-
- checkSet.add("root.sg.loc.area.x");
- checkSet.add("root.sg.loc.area.y");
- checkSet.add("root.sg.loc.area.GPS.x");
- checkSet.add("root.sg.loc.area.GPS.y");
- checkSet.add("root.sg.loc.area.vehicle.GPS.x");
- checkSet.add("root.sg.loc.area.vehicle.GPS.y");
- checkSet.add("root.sg.loc.area.vehicle.x");
- checkSet.add("root.sg.loc.area.vehicle.x");
-
- while (dataSet.hasNext()) {
- checkSet.remove(dataSet.next().getFields().get(0).toString());
- }
-
- assertTrue(checkSet.isEmpty());
- }
-
- @Test
- public void testInsertPartialTablet2()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- if (!session.checkTimeseriesExists("root.sg.d.s1")) {
- session.createTimeseries(
- "root.sg.d.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- }
- if (!session.checkTimeseriesExists("root.sg.d.s2")) {
- session.createTimeseries(
- "root.sg.d.s2", TSDataType.DOUBLE, TSEncoding.GORILLA, CompressionType.SNAPPY);
- }
- if (!session.checkTimeseriesExists("root.sg.d.s3")) {
- session.createTimeseries(
- "root.sg.d.s3", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- }
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.INT64));
- schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT));
-
- Tablet tablet = new Tablet("root.sg.d", schemaList, 10);
-
- long timestamp = System.currentTimeMillis();
-
- for (long row = 0; row < 15; row++) {
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, timestamp);
- tablet.addValue("s1", rowIndex, 1L);
- tablet.addValue("s2", rowIndex, 1D);
- tablet.addValue("s3", rowIndex, new Binary("1"));
- if (tablet.rowSize == tablet.getMaxRowNumber()) {
- try {
- session.insertTablet(tablet, true);
- } catch (StatementExecutionException e) {
- Assert.assertEquals(313, e.getStatusCode());
- }
- tablet.reset();
- }
- timestamp++;
- }
-
- if (tablet.rowSize != 0) {
- try {
- session.insertTablet(tablet);
- } catch (StatementExecutionException e) {
- Assert.assertEquals(313, e.getStatusCode());
- }
- tablet.reset();
- }
-
- SessionDataSet dataSet =
- session.executeQueryStatement("select count(s1), count(s2), count(s3) from root.sg.d");
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- Assert.assertEquals(15L, rowRecord.getFields().get(0).getLongV());
- Assert.assertEquals(15L, rowRecord.getFields().get(1).getLongV());
- Assert.assertEquals(0L, rowRecord.getFields().get(2).getLongV());
- }
- session.close();
- }
-
- @Test
- public void testInsertBinaryAsText()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
- // prepare binary data
- List<Object> bytesData = new ArrayList<>();
- for (int i = 0; i < 3; i++) {
- byte[] bytes = new byte[128];
- for (int j = 0; j < 128; j++) {
- bytes[j] = Byte.valueOf("" + (j - i), 10);
- }
- bytesData.add(bytes);
- }
- // insert data using insertRecord
- for (int i = 0; i < bytesData.size(); i++) {
- byte[] data = (byte[]) bytesData.get(i);
- Binary dataBinary = new Binary(data);
- session.insertRecord(
- "root.sg1.d1",
- i,
- Collections.singletonList("s0"),
- Collections.singletonList(TSDataType.TEXT),
- dataBinary);
- }
- // insert data using insertTablet
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("s1", TSDataType.TEXT));
- Tablet tablet = new Tablet("root.sg1.d1", schemaList, 100);
- for (int i = 0; i < bytesData.size(); i++) {
- byte[] data = (byte[]) bytesData.get(i);
- int rowIndex = tablet.rowSize++;
- tablet.addTimestamp(rowIndex, i);
- Binary dataBinary = new Binary(data);
- tablet.addValue(schemaList.get(0).getMeasurementId(), rowIndex, dataBinary);
- }
- session.insertTablet(tablet);
- // check result
- SessionDataSet dataSet = session.executeQueryStatement("select ** from root.sg1.d1");
- Assert.assertArrayEquals(
- dataSet.getColumnNames().toArray(new String[0]),
- new String[] {"Time", "root.sg1.d1.s0", "root.sg1.d1.s1"});
- while (dataSet.hasNext()) {
- RowRecord rowRecord = dataSet.next();
- for (int i = 0; i < 2; i++) {
- // get Binary value from SessionDataSet
- byte[] actualBytes = rowRecord.getFields().get(i).getBinaryV().getValues();
- // compare Binary value to origin bytesData
- byte[] expectedBytes = (byte[]) bytesData.get((int) rowRecord.getTimestamp());
- Assert.assertArrayEquals(expectedBytes, actualBytes);
- }
- }
- dataSet.closeOperationHandle();
- session.close();
- }
-
- private void initTreeTemplate(String path)
- throws IoTDBConnectionException, StatementExecutionException, IOException {
- Template sessionTemplate = new Template("treeTemplate", true);
- TemplateNode iNodeGPS = new InternalNode("GPS", false);
- TemplateNode iNodeV = new InternalNode("vehicle", true);
- TemplateNode mNodeX =
- new MeasurementNode("x", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY);
- TemplateNode mNodeY =
- new MeasurementNode("y", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY);
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
-
- iNodeGPS.addChild(mNodeX);
- iNodeGPS.addChild(mNodeY);
-
- iNodeV.addChild(mNodeX);
- iNodeV.addChild(mNodeY);
- iNodeV.addChild(iNodeGPS);
-
- sessionTemplate.addToTemplate(iNodeGPS);
- sessionTemplate.addToTemplate(iNodeV);
- sessionTemplate.addToTemplate(mNodeX);
- sessionTemplate.addToTemplate(mNodeY);
-
- session.createSchemaTemplate(sessionTemplate);
- session.setSchemaTemplate("treeTemplate", path);
- }
-
- private void checkResult(Session session)
- throws StatementExecutionException, IoTDBConnectionException {
- SessionDataSet dataSet = session.executeQueryStatement("select * from root.sg.d1");
- dataSet.getColumnNames();
- Assert.assertArrayEquals(
- dataSet.getColumnNames().toArray(new String[0]),
- new String[] {
- "Time",
- "root.sg.d1.s3",
- "root.sg.d1.s4",
- "root.sg.d1.s5",
- "root.sg.d1.s1",
- "root.sg.d1.s2"
- });
- Assert.assertArrayEquals(
- dataSet.getColumnTypes().toArray(new String[0]),
- new String[] {
- String.valueOf(TSDataType.INT64),
- String.valueOf(TSDataType.INT64),
- String.valueOf(TSDataType.FLOAT),
- String.valueOf(TSDataType.BOOLEAN),
- String.valueOf(TSDataType.INT32),
- String.valueOf(TSDataType.INT32)
- });
- long time = 1L;
- //
- Assert.assertTrue(dataSet.hasNext());
- RowRecord record = dataSet.next();
- Assert.assertEquals(time, record.getTimestamp());
- time++;
- assertNulls(record, new int[] {0, 3, 4});
- Assert.assertEquals(5.0f, record.getFields().get(1).getFloatV(), 0.01);
- Assert.assertEquals(Boolean.TRUE, record.getFields().get(2).getBoolV());
-
- Assert.assertTrue(dataSet.hasNext());
- record = dataSet.next();
- Assert.assertEquals(time, record.getTimestamp());
- time++;
- assertNulls(record, new int[] {1, 2, 3});
- Assert.assertEquals(4L, record.getFields().get(0).getLongV());
- Assert.assertEquals(3, record.getFields().get(4).getIntV());
-
- Assert.assertTrue(dataSet.hasNext());
- record = dataSet.next();
- Assert.assertEquals(time, record.getTimestamp());
- time++;
- assertNulls(record, new int[] {0, 1, 2});
- Assert.assertEquals(1, record.getFields().get(3).getIntV());
- Assert.assertEquals(2, record.getFields().get(4).getIntV());
-
- Assert.assertFalse(dataSet.hasNext());
- dataSet.closeOperationHandle();
- }
-
- private void checkResultForInsertStringRecordsOfOneDevice(Session session)
- throws StatementExecutionException, IoTDBConnectionException {
- SessionDataSet dataSet = session.executeQueryStatement("select * from root.sg.d1");
- dataSet.getColumnNames();
- Assert.assertArrayEquals(
- dataSet.getColumnNames().toArray(new String[0]),
- new String[] {
- "Time",
- "root.sg.d1.s3",
- "root.sg.d1.s4",
- "root.sg.d1.s5",
- "root.sg.d1.s1",
- "root.sg.d1.s2"
- });
- Assert.assertArrayEquals(
- dataSet.getColumnTypes().toArray(new String[0]),
- new String[] {
- String.valueOf(TSDataType.INT64),
- String.valueOf(TSDataType.FLOAT),
- String.valueOf(TSDataType.FLOAT),
- String.valueOf(TSDataType.BOOLEAN),
- String.valueOf(TSDataType.BOOLEAN),
- String.valueOf(TSDataType.FLOAT)
- });
- long time = 1L;
-
- Assert.assertTrue(dataSet.hasNext());
- RowRecord record = dataSet.next();
- Assert.assertEquals(time, record.getTimestamp());
- time++;
-
- assertNulls(record, new int[] {0, 3, 4});
- Assert.assertEquals(5.0f, record.getFields().get(1).getFloatV(), 0.01);
- Assert.assertEquals(Boolean.TRUE, record.getFields().get(2).getBoolV());
-
- Assert.assertTrue(dataSet.hasNext());
- record = dataSet.next();
- Assert.assertEquals(time, record.getTimestamp());
- time++;
-
- assertNulls(record, new int[] {1, 2, 3});
- Assert.assertEquals(4, record.getFields().get(0).getFloatV(), 0.01);
- Assert.assertEquals(3, record.getFields().get(4).getFloatV(), 0.01);
-
- Assert.assertTrue(dataSet.hasNext());
- record = dataSet.next();
- Assert.assertEquals(time, record.getTimestamp());
- time++;
-
- assertNulls(record, new int[] {0, 1, 2});
- Assert.assertEquals(false, record.getFields().get(3).getBoolV());
- Assert.assertEquals(6, record.getFields().get(4).getFloatV(), 0.01);
-
- Assert.assertFalse(dataSet.hasNext());
- dataSet.closeOperationHandle();
- }
-
- private void addLine(
- List<Long> times,
- List<List<String>> measurements,
- List<List<TSDataType>> datatypes,
- List<List<Object>> values,
- long time,
- String s1,
- String s2,
- TSDataType s1type,
- TSDataType s2type,
- Object value1,
- Object value2) {
- List<String> tmpMeasurements = new ArrayList<>();
- List<TSDataType> tmpDataTypes = new ArrayList<>();
- List<Object> tmpValues = new ArrayList<>();
- tmpMeasurements.add(s1);
- tmpMeasurements.add(s2);
- tmpDataTypes.add(s1type);
- tmpDataTypes.add(s2type);
- tmpValues.add(value1);
- tmpValues.add(value2);
- times.add(time);
- measurements.add(tmpMeasurements);
- datatypes.add(tmpDataTypes);
- values.add(tmpValues);
- }
-
- private void addStringLine(
- List<Long> times,
- List<List<String>> measurements,
- List<List<String>> values,
- long time,
- String s1,
- String s2,
- String value1,
- String value2) {
- List<String> tmpMeasurements = new ArrayList<>();
- List<String> tmpValues = new ArrayList<>();
- tmpMeasurements.add(s1);
- tmpMeasurements.add(s2);
- tmpValues.add(value1);
- tmpValues.add(value2);
- times.add(time);
- measurements.add(tmpMeasurements);
- values.add(tmpValues);
- }
-
- private void assertNulls(RowRecord record, int[] index) {
- for (int i : index) {
- Assert.assertNull(record.getFields().get(i).getDataType());
- }
- }
-}
diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSyntaxConventionIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSyntaxConventionIT.java
deleted file mode 100644
index 5dfb297050..0000000000
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSyntaxConventionIT.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * 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.session;
-
-import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-import org.apache.iotdb.itbase.category.LocalStandaloneTest;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.utils.Binary;
-import org.apache.iotdb.tsfile.write.record.Tablet;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.fail;
-
-@Category({LocalStandaloneTest.class})
-public class IoTDBSessionSyntaxConventionIT {
-
- private Session session;
-
- @Before
- public void setUp() {
- System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
- EnvironmentUtils.envSetUp();
- }
-
- @After
- public void tearDown() throws Exception {
- session.close();
- EnvironmentUtils.cleanEnv();
- }
-
- @Test
- public void createTimeSeries() throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String storageGroup = "root.sg";
- session.setStorageGroup(storageGroup);
-
- try {
- session.createTimeseries(
- "root.sg.d1.`a.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- fail();
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("is not a legal path"));
- }
-
- try {
- session.createTimeseries(
- "root.sg.d1.a`.s1", TSDataType.INT64, TSEncoding.RLE, CompressionType.SNAPPY);
- fail();
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("is not a legal path"));
- }
-
- final SessionDataSet dataSet = session.executeQueryStatement("SHOW TIMESERIES");
- assertFalse(dataSet.hasNext());
-
- session.deleteStorageGroup(storageGroup);
- session.close();
- }
-
- @Test
- public void testInsert() throws Exception {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
-
- measurements.add("`\"a“(Φ)”b\"`");
- measurements.add("`\"a>b\"`");
- measurements.add("```a.b```");
- measurements.add("`'a“(Φ)”b'`");
- measurements.add("`'a>b'`");
- measurements.add("`a“(Φ)”b`");
- measurements.add("`a>b`");
- measurements.add("`\\\"a`");
- List<String> values = new ArrayList<>();
-
- for (int i = 0; i < measurements.size(); i++) {
- values.add("1");
- }
-
- session.insertRecord(deviceId, 1L, measurements, values);
-
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`\"a“(Φ)”b\"`"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`\"a>b\"`"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.```a.b```"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`'a“(Φ)”b'`"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`'a>b'`"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`a“(Φ)”b`"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`a>b`"));
- Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.`\\\"a`"));
-
- session.close();
- }
-
- @Test
- public void testInserRecordWithIllegalMeasurement()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- List<String> values = new ArrayList<>();
- measurements.add("a.b");
- values.add("1");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- measurements.clear();
- values.clear();
- measurements.add("111");
- values.add("1.2");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- measurements.clear();
- values.clear();
- measurements.add("`a");
- values.add("1.2");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- measurements.clear();
- values.clear();
- measurements.add("a..b");
- values.add("1.2");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- measurements.clear();
- values.clear();
- measurements.add("");
- values.add("1.2");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- measurements.clear();
- values.clear();
- measurements.add("`a``");
- values.add("1.2");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- measurements.clear();
- values.clear();
- measurements.add("`ab````");
- values.add("1.2");
- try {
- session.insertRecord(deviceId, 1L, measurements, values);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
- }
-
- @Test
- public void testInsertRecordsWithIllegalMeasurement()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- measurements.add("a.b");
- measurements.add("111");
- measurements.add("`a");
- measurements.add("a..b");
-
- List<String> values = new ArrayList<>();
- values.add("1");
- values.add("1.2");
- values.add("true");
- values.add("dad");
-
- List<Long> times = new ArrayList<>();
- times.add(1L);
- try {
- session.insertRecords(
- Collections.singletonList(deviceId),
- times,
- Collections.singletonList(measurements),
- Collections.singletonList(values));
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
- }
-
- @Test
- public void testInsertTabletWithIllegalMeasurement()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root", null);
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<MeasurementSchema> schemaList = new ArrayList<>();
- schemaList.add(new MeasurementSchema("wrong`", TSDataType.INT64, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE, TSEncoding.RLE));
- schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN));
- schemaList.add(new MeasurementSchema("s4", TSDataType.INT64, TSEncoding.PLAIN));
-
- Tablet tablet = new Tablet(deviceId, schemaList, 10);
-
- long[] timestamps = tablet.timestamps;
- Object[] values = tablet.values;
-
- for (long time = 0; time < 10; time++) {
- int row = tablet.rowSize++;
- timestamps[row] = time;
- long[] sensor = (long[]) values[0];
- sensor[row] = time;
- double[] sensor2 = (double[]) values[1];
- sensor2[row] = 0.1 + time;
- Binary[] sensor3 = (Binary[]) values[2];
- sensor3[row] = Binary.valueOf("ha" + time);
- long[] sensor4 = (long[]) values[3];
- sensor4[row] = time;
- }
-
- try {
- session.insertTablet(tablet);
- fail();
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
- }
-
- @Test
- public void testCreateAlignedTimeseriesWithIllegalMeasurement()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root", null);
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- measurements.add("111");
- measurements.add("a.b");
- List<TSDataType> dataTypes = new ArrayList<>();
- dataTypes.add(TSDataType.INT64);
- dataTypes.add(TSDataType.INT64);
- List<TSEncoding> encodings = new ArrayList<>();
- List<CompressionType> compressors = new ArrayList<>();
- for (int i = 1; i <= 2; i++) {
- encodings.add(TSEncoding.RLE);
- compressors.add(CompressionType.SNAPPY);
- }
- try {
- session.createAlignedTimeseries(
- deviceId, measurements, dataTypes, encodings, compressors, null, null, null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
- }
-
- @Test
- public void testCreateAlignedTimeseriesWithIllegalMeasurementAlias()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root", null);
- session.open();
-
- String deviceId = "root.sg1.d1";
- List<String> measurements = new ArrayList<>();
- measurements.add("s1");
- measurements.add("s2");
- List<String> measurementAliasList = new ArrayList<>();
- measurementAliasList.add("s3");
- measurementAliasList.add("111");
- List<TSDataType> dataTypes = new ArrayList<>();
- dataTypes.add(TSDataType.INT64);
- dataTypes.add(TSDataType.INT64);
- List<TSEncoding> encodings = new ArrayList<>();
- List<CompressionType> compressors = new ArrayList<>();
- for (int i = 1; i <= 2; i++) {
- encodings.add(TSEncoding.RLE);
- compressors.add(CompressionType.SNAPPY);
- }
- try {
- session.createAlignedTimeseries(
- deviceId,
- measurements,
- dataTypes,
- encodings,
- compressors,
- measurementAliasList,
- null,
- null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
- }
-
- @Test
- public void testCreateMultiTimeseriesWithIllegalMeasurementAlias()
- throws IoTDBConnectionException, StatementExecutionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- List<String> paths = new ArrayList<>();
- paths.add("root.sg1.d1.s1");
- paths.add("root.sg1.d1.s2");
- List<TSDataType> tsDataTypes = new ArrayList<>();
- tsDataTypes.add(TSDataType.DOUBLE);
- tsDataTypes.add(TSDataType.DOUBLE);
- List<TSEncoding> tsEncodings = new ArrayList<>();
- tsEncodings.add(TSEncoding.RLE);
- tsEncodings.add(TSEncoding.RLE);
- List<CompressionType> compressionTypes = new ArrayList<>();
- compressionTypes.add(CompressionType.SNAPPY);
- compressionTypes.add(CompressionType.SNAPPY);
- List<String> measurementAliasList = new ArrayList<>();
- measurementAliasList.add("s3");
- measurementAliasList.add("111");
-
- try {
- session.createMultiTimeseries(
- paths,
- tsDataTypes,
- tsEncodings,
- compressionTypes,
- null,
- null,
- null,
- measurementAliasList);
- } catch (StatementExecutionException e) {
- e.printStackTrace();
- }
- SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
- Assert.assertFalse(dataSet.hasNext());
- }
-
- @Test
- public void testCreateSchemaTemplateWithIllegalMeasurement() throws IoTDBConnectionException {
- session = new Session("127.0.0.1", 6667, "root", "root");
- session.open();
-
- String tempName = "flatTemplate";
- List<String> measurements = Arrays.asList("1", "2", "a.b");
- List<TSDataType> dataTypes =
- Arrays.asList(TSDataType.FLOAT, TSDataType.FLOAT, TSDataType.DOUBLE);
- List<TSEncoding> encodings = Arrays.asList(TSEncoding.RLE, TSEncoding.RLE, TSEncoding.GORILLA);
- List<CompressionType> compressors =
- Arrays.asList(CompressionType.SNAPPY, CompressionType.SNAPPY, CompressionType.LZ4);
-
- try {
- session.createSchemaTemplate(tempName, measurements, dataTypes, encodings, compressors, true);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
index 0478b11864..97a945bcc7 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
@@ -46,6 +46,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.CreateAlignedTimeSeriesSt
import org.apache.iotdb.db.mpp.plan.statement.metadata.CreateMultiTimeSeriesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.CreateTimeSeriesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.DeleteStorageGroupStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.DeleteTimeSeriesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.SetStorageGroupStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
@@ -89,6 +90,7 @@ import org.antlr.v4.runtime.tree.ParseTree;
import java.nio.ByteBuffer;
import java.time.ZoneId;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -339,7 +341,9 @@ public class StatementGenerator {
statement.setDevicePath(insertStatement.getDevicePath());
addMeasurementAndValue(
statement, req.getMeasurementsList().get(i), req.getValuesList().get(i));
- statement.setDataTypes(new TSDataType[statement.getMeasurements().length]);
+ TSDataType[] dataTypes = new TSDataType[statement.getMeasurements().length];
+ Arrays.fill(dataTypes, TSDataType.TEXT);
+ statement.setDataTypes(dataTypes);
statement.setTime(req.timestamps.get(i));
statement.setNeedInferType(true);
statement.setAligned(req.isAligned);
@@ -432,7 +436,7 @@ public class StatementGenerator {
return statement;
}
- public static Statement createStatement(List<String> storageGroups) {
+ public static Statement createStatement(List<String> storageGroups) throws IllegalPathException {
DeleteStorageGroupStatement statement = new DeleteStorageGroupStatement();
statement.setPrefixPath(storageGroups);
return statement;
@@ -620,4 +624,13 @@ public class StatementGenerator {
return new SetSchemaTemplateStatement(
req.getTemplateName(), new PartialPath(req.getPrefixPath()));
}
+
+ public static DeleteTimeSeriesStatement createDeleteTimeSeriesStatement(
+ List<String> pathPatternStringList) throws IllegalPathException {
+ List<PartialPath> pathPatternList = new ArrayList<>();
+ for (String pathPatternString : pathPatternStringList) {
+ pathPatternList.add(new PartialPath(pathPatternString));
+ }
+ return new DeleteTimeSeriesStatement(pathPatternList);
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/DeleteTimeSeriesStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/DeleteTimeSeriesStatement.java
index ffc653f597..c21f590a24 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/DeleteTimeSeriesStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/DeleteTimeSeriesStatement.java
@@ -37,6 +37,11 @@ public class DeleteTimeSeriesStatement extends Statement implements IConfigState
statementType = StatementType.DELETE_TIMESERIES;
}
+ public DeleteTimeSeriesStatement(List<PartialPath> pathPatternList) {
+ this();
+ this.pathPatternList = pathPatternList;
+ }
+
@Override
public List<PartialPath> getPaths() {
return pathPatternList;
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
index dc3a0857fd..7bc5737345 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
@@ -52,6 +52,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.CreateAlignedTimeSeriesSt
import org.apache.iotdb.db.mpp.plan.statement.metadata.CreateMultiTimeSeriesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.CreateTimeSeriesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.DeleteStorageGroupStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.DeleteTimeSeriesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.SetStorageGroupStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
@@ -330,6 +331,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
SCHEMA_FETCHER);
return result.status;
+ } catch (IoTDBException e) {
+ return onIoTDBException(e, OperationType.SET_STORAGE_GROUP, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.SET_STORAGE_GROUP, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -373,7 +376,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.CREATE_TIMESERIES, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.CREATE_TIMESERIES, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -423,7 +426,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.CREATE_ALIGNED_TIMESERIES, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.CREATE_ALIGNED_TIMESERIES, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -471,7 +474,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.CREATE_MULTI_TIMESERIES, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.CREATE_MULTI_TIMESERIES, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -480,7 +483,39 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
@Override
public TSStatus deleteTimeseries(long sessionId, List<String> path) {
- throw new UnsupportedOperationException();
+ try {
+ if (!SESSION_MANAGER.checkLogin(sessionId)) {
+ return getNotLoggedInStatus();
+ }
+
+ // Step 1: transfer from DeleteStorageGroupsReq to Statement
+ DeleteTimeSeriesStatement statement =
+ StatementGenerator.createDeleteTimeSeriesStatement(path);
+
+ // permission check
+ TSStatus status = AuthorityChecker.checkAuthority(statement, sessionId);
+ if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return status;
+ }
+
+ // Step 2: call the coordinator
+ long queryId = SESSION_MANAGER.requestQueryId(false);
+ ExecutionResult result =
+ COORDINATOR.execute(
+ statement,
+ queryId,
+ SESSION_MANAGER.getSessionInfo(sessionId),
+ "",
+ PARTITION_FETCHER,
+ SCHEMA_FETCHER);
+
+ return result.status;
+ } catch (IoTDBException e) {
+ return onIoTDBException(e, OperationType.DELETE_TIMESERIES, e.getErrorCode());
+ } catch (Exception e) {
+ return onNPEOrUnexpectedException(
+ e, OperationType.DELETE_TIMESERIES, TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ }
}
@Override
@@ -520,6 +555,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
SCHEMA_FETCHER);
return result.status;
+ } catch (IoTDBException e) {
+ return onIoTDBException(e, OperationType.DELETE_STORAGE_GROUPS, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.DELETE_STORAGE_GROUPS, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -803,7 +840,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.INSERT_RECORDS_OF_ONE_DEVICE, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.INSERT_RECORDS_OF_ONE_DEVICE, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -858,7 +895,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(
+ e, OperationType.INSERT_STRING_RECORDS_OF_ONE_DEVICE, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e,
@@ -911,7 +949,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.INSERT_RECORD, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.INSERT_RECORD, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -957,7 +995,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.INSERT_TABLETS, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.INSERT_TABLETS, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -1003,7 +1041,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.INSERT_TABLET, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.INSERT_TABLET, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -1055,7 +1093,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.INSERT_STRING_RECORDS, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.INSERT_STRING_RECORDS, TSStatusCode.EXECUTE_STATEMENT_ERROR);
@@ -1539,7 +1577,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
return result.status;
} catch (IoTDBException e) {
- return onIoTDBException(e, OperationType.INSERT_RECORDS, e.getErrorCode());
+ return onIoTDBException(e, OperationType.INSERT_STRING_RECORD, e.getErrorCode());
} catch (Exception e) {
return onNPEOrUnexpectedException(
e, OperationType.INSERT_STRING_RECORD, TSStatusCode.EXECUTE_STATEMENT_ERROR);