You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2021/07/21 09:19:02 UTC
[iotdb] 02/02: add tests
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch select-into
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 7987fa536a660124474240def356fd8de97a4a10
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Wed Jul 21 17:18:27 2021 +0800
add tests
---
.../db/qp/logical/crud/SelectIntoOperator.java | 4 -
.../iotdb/db/integration/IoTDBSelectIntoIT.java | 181 +++++++++++++++++++--
2 files changed, 169 insertions(+), 16 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java
index 7349a17..1303145 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java
@@ -70,8 +70,4 @@ public class SelectIntoOperator extends Operator {
public void setIntoPaths(List<PartialPath> intoPaths) {
this.intoPaths = intoPaths;
}
-
- public List<PartialPath> getIntoPaths() {
- return intoPaths;
- }
}
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
index 51d9661..5ef1d23 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
@@ -40,12 +40,12 @@ import java.sql.Statement;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+// TODO: check null values
public class IoTDBSelectIntoIT {
- private static final double E = 0.0001;
-
private static final String[] INSERTION_SQLS = {
"insert into root.sg.d1(time, s2, s3, s4, s5, s6) values (0, 0, 0, 0, true, '0')",
"insert into root.sg.d1(time, s1, s3, s4, s5, s6) values (1, 1, 1, 1, false, '1')",
@@ -64,6 +64,7 @@ public class IoTDBSelectIntoIT {
private static void createTimeSeries() throws MetadataException {
IoTDB.metaManager.setStorageGroup(new PartialPath("root.sg"));
+
IoTDB.metaManager.createTimeseries(
new PartialPath("root.sg.d1.s1"),
TSDataType.INT32,
@@ -100,6 +101,20 @@ public class IoTDBSelectIntoIT {
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
null);
+
+ IoTDB.metaManager.createTimeseries(
+ new PartialPath("root.sg.d1.empty"),
+ TSDataType.TEXT,
+ TSEncoding.PLAIN,
+ CompressionType.UNCOMPRESSED,
+ null);
+
+ IoTDB.metaManager.createTimeseries(
+ new PartialPath("root.sg.d2.s1"),
+ TSDataType.INT32,
+ TSEncoding.PLAIN,
+ CompressionType.UNCOMPRESSED,
+ null);
}
private static void generateData() {
@@ -110,6 +125,8 @@ public class IoTDBSelectIntoIT {
for (String dataGenerationSql : INSERTION_SQLS) {
statement.execute(dataGenerationSql);
}
+
+ statement.execute("insert into root.sg.d2(time, s1) values (0, 0)");
} catch (SQLException throwable) {
fail(throwable.getMessage());
}
@@ -135,7 +152,7 @@ public class IoTDBSelectIntoIT {
assertEquals(1 + 6, columnCount);
for (int i = 0; i < INSERTION_SQLS.length; ++i) {
- resultSet.next();
+ assertTrue(resultSet.next());
StringBuilder stringBuilder = new StringBuilder();
for (int j = 0; j < 6 + 1; ++j) {
stringBuilder.append(resultSet.getString(j + 1)).append(',');
@@ -155,16 +172,17 @@ public class IoTDBSelectIntoIT {
DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
.createStatement()) {
statement.execute(
- "select s1, s2, s3, s4, s5, s6 into s1.${2}, s2.${2}, s3.${2}, s4.${2}, s5.${2}, s6.${2} from root.sg.d1");
+ "select s1, s2, s3, s4, s5, s6 into pre_${2}_suf.s1, pre_${2}_suf.s2, pre_${2}_suf.s3, pre_${2}_suf.s4, pre_${2}_suf.s5, pre_${2}_suf.s6 from root.sg.d1");
ResultSet resultSet =
- statement.executeQuery("select s1.d1, s2.d1, s3.d1, s4.d1, s5.d1, s6.d1 from root.sg.d1");
+ statement.executeQuery(
+ "select pre_d1_suf.s1, pre_d1_suf.s2, pre_d1_suf.s3, pre_d1_suf.s4, pre_d1_suf.s5, pre_d1_suf.s6 from root.sg.d1");
int columnCount = resultSet.getMetaData().getColumnCount();
assertEquals(1 + 6, columnCount);
for (int i = 0; i < INSERTION_SQLS.length; ++i) {
- resultSet.next();
+ assertTrue(resultSet.next());
StringBuilder stringBuilder = new StringBuilder();
for (int j = 0; j < 6 + 1; ++j) {
stringBuilder.append(resultSet.getString(j + 1)).append(',');
@@ -178,10 +196,149 @@ public class IoTDBSelectIntoIT {
fail(throwable.getMessage());
}
}
-}
-// usage limit: select columns, into columns, from columns
-// grammar of into clause (wrong cases and right cases)
-// supported query
-// cluster mode test
-// cq uses select-into plan
+ @Test
+ public void selectFromEmptySourcePath() {
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select empty into target from root.sg.d1");
+
+ ResultSet resultSet = statement.executeQuery("select target from root.sg.d1");
+
+ assertEquals(1, resultSet.getMetaData().getColumnCount());
+ assertFalse(resultSet.next());
+ } catch (SQLException throwable) {
+ throwable.printStackTrace();
+ fail(throwable.getMessage());
+ }
+ }
+
+ @Test
+ public void selectIntoFullTargetPath() {
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select s1 into root.${2}.${1}.s1 from root.sg.d1 where time>0");
+
+ ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root");
+
+ int columnCount = resultSet.getMetaData().getColumnCount();
+ assertEquals(1 + 2, columnCount);
+
+ for (int i = 0; i < INSERTION_SQLS.length - 1; ++i) {
+ assertTrue(resultSet.next());
+ assertEquals(resultSet.getString(1), String.valueOf(i + 1));
+ assertEquals(resultSet.getString(2), resultSet.getString(3));
+ }
+
+ assertFalse(resultSet.next());
+ } catch (SQLException throwable) {
+ fail(throwable.getMessage());
+ }
+ }
+
+ @Test
+ public void testDifferentNumbersOfSourcePathsAndTargetPaths() {
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select s1, s2 into target from root.sg.d1");
+ fail();
+ } catch (SQLException throwable) {
+ assertTrue(
+ throwable
+ .getMessage()
+ .contains(
+ "the number of source paths and the number of target paths should be the same"));
+ }
+
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select s1 into target from root.sg.*");
+ fail();
+ } catch (SQLException throwable) {
+ assertTrue(
+ throwable
+ .getMessage()
+ .contains(
+ "the number of source paths and the number of target paths should be the same"));
+ }
+
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select * into target from root.sg.d1");
+ fail();
+ } catch (SQLException throwable) {
+ assertTrue(
+ throwable
+ .getMessage()
+ .contains(
+ "the number of source paths and the number of target paths should be the same"));
+ }
+ }
+
+ @Test
+ public void testMultiPrefixPathsInFromClause() {
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select s1 into target from root.sg.d1, root.sg.d2");
+ fail();
+ } catch (SQLException throwable) {
+ assertTrue(
+ throwable
+ .getMessage()
+ .contains("the number of prefix paths in the from clause should be 1"));
+ }
+ }
+
+ @Test
+ public void testLeveledPathNodePatternLimit() {
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select s1 into root.${100}.s1 from root.sg.d1");
+ ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root");
+ assertEquals(1, resultSet.getMetaData().getColumnCount());
+ assertFalse(resultSet.next());
+ fail();
+ } catch (SQLException throwable) {
+ assertTrue(
+ throwable
+ .getMessage()
+ .contains(
+ "the x of ${x} should be greater than 0 and equal to or less than <level> or the length of queried path prefix."));
+ }
+
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select s1 into root.${0}.s1 from root.sg.d1");
+ ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root");
+ assertEquals(1, resultSet.getMetaData().getColumnCount());
+ assertFalse(resultSet.next());
+ fail();
+ } catch (SQLException throwable) {
+ assertTrue(
+ throwable
+ .getMessage()
+ .contains(
+ "the x of ${x} should be greater than 0 and equal to or less than <level> or the length of queried path prefix."));
+ }
+
+ try (Statement statement =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+ .createStatement()) {
+ statement.execute("select s1 into root.${wrong}.s1 from root.sg.d1");
+ ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root");
+ assertEquals(1, resultSet.getMetaData().getColumnCount());
+ assertFalse(resultSet.next());
+ fail();
+ } catch (SQLException throwable) {
+ assertTrue(throwable.getMessage().contains("the x of ${x} should be an integer."));
+ }
+ }
+}