blob: 516848d8263ca94fdd64aa4e3f3be46ca654a953 [file] [log] [blame]
/*
* 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.db.conf.IoTDBConstant;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.rpc.StatementExecutionException;
import org.apache.iotdb.session.SessionDataSet.DataIterator;
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.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class IoTDBSessionIteratorIT {
private Session session;
@Before
public void setUp() throws Exception {
System.setProperty(IoTDBConstant.IOTDB_CONF, "src/test/resources/");
EnvironmentUtils.closeStatMonitor();
EnvironmentUtils.envSetUp();
prepareData();
}
@After
public void tearDown() throws Exception {
session.close();
EnvironmentUtils.cleanEnv();
}
/** Test getBoolean(), getInt(), getLong(), getFloat(), getDouble(), getString() by columnIndex */
@Test
public void testGetValueByColumnIndex() {
String[] retArray =
new String[] {
"0,true,0,0,0.0,0.0,time0",
"1,false,1,10,1.5,2.5,time1",
"2,true,2,20,3.0,5.0,time2",
"3,false,3,30,4.5,7.5,time3",
"4,true,4,40,6.0,10.0,time4",
"5,false,5,50,7.5,12.5,time5",
"6,true,6,60,9.0,15.0,time6",
"7,false,7,70,10.5,17.5,time7",
"8,true,8,80,12.0,20.0,time8",
"9,false,9,90,13.5,22.5,time9",
};
try {
SessionDataSet sessionDataSet =
session.executeQueryStatement("select s1,s2,s3,s4,s5,s6 from root.sg1.d1");
sessionDataSet.setFetchSize(1024);
DataIterator iterator = sessionDataSet.iterator();
int count = 0;
while (iterator.next()) {
StringBuilder ans = new StringBuilder();
ans.append(iterator.getLong(1))
.append(",")
.append(iterator.getBoolean(2))
.append(",")
.append(iterator.getInt(3))
.append(",")
.append(iterator.getLong(4))
.append(",")
.append(iterator.getFloat(5))
.append(",")
.append(iterator.getDouble(6))
.append(",")
.append(iterator.getString(7));
assertEquals(retArray[count], ans.toString());
count++;
}
assertEquals(retArray.length, count);
sessionDataSet.closeOperationHandle();
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
/** Test getBoolean(), getInt(), getLong(), getFloat(), getDouble(), getString() by columnName */
@Test
public void testGetValueByColumnName() {
String[] retArray =
new String[] {
"0,true,0,0,0.0,0.0,time0",
"1,false,1,10,1.5,2.5,time1",
"2,true,2,20,3.0,5.0,time2",
"3,false,3,30,4.5,7.5,time3",
"4,true,4,40,6.0,10.0,time4",
"5,false,5,50,7.5,12.5,time5",
"6,true,6,60,9.0,15.0,time6",
"7,false,7,70,10.5,17.5,time7",
"8,true,8,80,12.0,20.0,time8",
"9,false,9,90,13.5,22.5,time9",
};
try {
SessionDataSet sessionDataSet = session.executeQueryStatement("select * from root.sg1.d1");
sessionDataSet.setFetchSize(1024);
DataIterator iterator = sessionDataSet.iterator();
int count = 0;
while (iterator.next()) {
StringBuilder ans = new StringBuilder();
ans.append(iterator.getLong("Time"))
.append(",")
.append(iterator.getBoolean("root.sg1.d1.s1"))
.append(",")
.append(iterator.getInt("root.sg1.d1.s2"))
.append(",")
.append(iterator.getLong("root.sg1.d1.s3"))
.append(",")
.append(iterator.getFloat("root.sg1.d1.s4"))
.append(",")
.append(iterator.getDouble("root.sg1.d1.s5"))
.append(",")
.append(iterator.getString("root.sg1.d1.s6"));
assertEquals(retArray[count], ans.toString());
count++;
}
assertEquals(retArray.length, count);
sessionDataSet.closeOperationHandle();
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
/** Test getObject() by columnIndex. */
@Test
public void testGetObjectByColumnName() {
String[] retArray =
new String[] {
"0,true,0,0,0.0,0.0,time0",
"1,false,1,10,1.5,2.5,time1",
"2,true,2,20,3.0,5.0,time2",
"3,false,3,30,4.5,7.5,time3",
"4,true,4,40,6.0,10.0,time4",
"5,false,5,50,7.5,12.5,time5",
"6,true,6,60,9.0,15.0,time6",
"7,false,7,70,10.5,17.5,time7",
"8,true,8,80,12.0,20.0,time8",
"9,false,9,90,13.5,22.5,time9",
};
try {
SessionDataSet sessionDataSet =
session.executeQueryStatement("select s1,s2,s3,s4,s5,s6 from root.sg1.d1");
sessionDataSet.setFetchSize(1024);
DataIterator iterator = sessionDataSet.iterator();
int count = 0;
while (iterator.next()) {
StringBuilder ans = new StringBuilder();
long time = (long) iterator.getObject(1);
boolean s1 = (boolean) iterator.getObject(2);
int s2 = (int) iterator.getObject(3);
long s3 = (long) iterator.getObject(4);
float s4 = (float) iterator.getObject(5);
double s5 = (double) iterator.getObject(6);
String s6 = (String) iterator.getObject(7);
ans.append(time)
.append(",")
.append(s1)
.append(",")
.append(s2)
.append(",")
.append(s3)
.append(",")
.append(s4)
.append(",")
.append(s5)
.append(",")
.append(s6);
assertEquals(retArray[count], ans.toString());
count++;
}
assertEquals(retArray.length, count);
sessionDataSet.closeOperationHandle();
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
@Test
public void testLastQuery() {
String[] retArray =
new String[] {
"9,root.sg1.d1.s1,false",
"9,root.sg1.d1.s2,9",
"9,root.sg1.d1.s3,90",
"9,root.sg1.d1.s4,13.5",
"9,root.sg1.d1.s5,22.5",
"9,root.sg1.d1.s6,time9",
};
try {
SessionDataSet sessionDataSet =
session.executeQueryStatement("select last s1,s2,s3,s4,s5,s6 from root.sg1.d1");
sessionDataSet.setFetchSize(1024);
DataIterator iterator = sessionDataSet.iterator();
int count = 0;
while (iterator.next()) {
String ans =
String.format(
"%s,%s,%s", iterator.getLong(1), iterator.getString(2), iterator.getString(3));
assertEquals(retArray[count], ans);
count++;
}
assertEquals(retArray.length, count);
sessionDataSet.closeOperationHandle();
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
@Test
public void testShowDevices() {
String[] retArray = new String[] {"root.sg1.d1", "root.sg1.d2"};
try {
SessionDataSet sessionDataSet = session.executeQueryStatement("show devices");
sessionDataSet.setFetchSize(1024);
assertEquals(1, sessionDataSet.getColumnNames().size());
DataIterator iterator = sessionDataSet.iterator();
int count = 0;
while (iterator.next()) {
String ans = iterator.getString(1);
assertEquals(retArray[count], ans);
count++;
}
assertEquals(retArray.length, count);
sessionDataSet.closeOperationHandle();
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
/** Test executeQueryStatement with timeout, and the result is not timeout here. */
@Test
public void queryWithTimeoutTest() {
String[] retArray = new String[] {"9,root.sg1.d1.s1,false"};
try {
SessionDataSet sessionDataSet =
session.executeQueryStatement("select last s1 from root.sg1.d1", 2000);
sessionDataSet.setFetchSize(1024);
DataIterator iterator = sessionDataSet.iterator();
int count = 0;
while (iterator.next()) {
String ans =
String.format(
"%s,%s,%s", iterator.getLong(1), iterator.getString(2), iterator.getString(3));
assertEquals(retArray[count], ans);
count++;
}
assertEquals(retArray.length, count);
sessionDataSet.closeOperationHandle();
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
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.d1.s1", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
session.createTimeseries(
"root.sg1.d1.s2", TSDataType.INT32, TSEncoding.PLAIN, CompressionType.SNAPPY);
session.createTimeseries(
"root.sg1.d1.s3", TSDataType.INT64, TSEncoding.PLAIN, CompressionType.SNAPPY);
session.createTimeseries(
"root.sg1.d1.s4", TSDataType.FLOAT, TSEncoding.PLAIN, CompressionType.SNAPPY);
session.createTimeseries(
"root.sg1.d1.s5", TSDataType.DOUBLE, TSEncoding.PLAIN, CompressionType.SNAPPY);
session.createTimeseries(
"root.sg1.d1.s6", TSDataType.TEXT, TSEncoding.PLAIN, CompressionType.SNAPPY);
session.createTimeseries(
"root.sg1.d2.s1", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
String deviceId = "root.sg1.d1";
List<String> measurements = new ArrayList<>();
List<TSDataType> types = new ArrayList<>();
for (int i = 1; i <= 6; i++) {
measurements.add("s" + i);
types.add(TSDataType.deserialize((byte) (i - 1)));
}
for (long time = 0; time < 10; time++) {
List<Object> values = new ArrayList<>();
values.add((time % 2) == 0);
values.add((int) time);
values.add(time * 10);
values.add(time * 1.5f);
values.add(time * 2.5);
values.add("time" + time);
session.insertRecord(deviceId, time, measurements, types, values);
}
deviceId = "root.sg1.d2";
measurements = new ArrayList<>();
types = new ArrayList<>();
measurements.add("s1");
types.add(TSDataType.BOOLEAN);
for (long time = 5; time < 10; time++) {
List<Object> values = new ArrayList<>();
values.add((time % 2) == 0);
session.insertRecord(deviceId, time, measurements, types, values);
}
}
}