You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/10/27 12:57:51 UTC
[iotdb] branch lmh/likeDebug updated: refactor IoTDBFuzzyQueryIT & add more tests
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/likeDebug
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/lmh/likeDebug by this push:
new 7feda7db35 refactor IoTDBFuzzyQueryIT & add more tests
7feda7db35 is described below
commit 7feda7db352239e270b2cf113052323c887e5a72
Author: liuminghui233 <54...@qq.com>
AuthorDate: Thu Oct 27 20:54:16 2022 +0800
refactor IoTDBFuzzyQueryIT & add more tests
---
.../iotdb/db/integration/IoTDBFuzzyQueryIT.java | 354 +++++++++++++--------
1 file changed, 218 insertions(+), 136 deletions(-)
diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFuzzyQueryIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFuzzyQueryIT.java
index 9e99f60e9e..a1ecc0df5f 100644
--- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFuzzyQueryIT.java
+++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFuzzyQueryIT.java
@@ -37,176 +37,207 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import static org.junit.Assert.fail;
@Category({LocalStandaloneTest.class})
public class IoTDBFuzzyQueryIT {
- private static List<String> sqls = new ArrayList<>();
+
+ private static final List<String> sqls =
+ Arrays.asList(
+ "SET STORAGE GROUP TO root.t1",
+ "CREATE TIMESERIES root.t1.wf01.wt01.status WITH DATATYPE=TEXT, ENCODING=PLAIN",
+ "CREATE TIMESERIES root.t1.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE",
+ "CREATE TIMESERIES root.t1.wf01.wt02.status WITH DATATYPE=TEXT, ENCODING=PLAIN",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465600000,'1',12.1)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465660000,'14',13.1)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465720000,'616',5.5)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465780000,'626',8.1)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465840000,'6116',4.3)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465900000,'6%16',10.3)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465960000,'8[sS]*',11.3)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509466020000,'%123',18.3)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509466080000,'123%',18.3)",
+ "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509466090000,'\\\\',10.3)",
+ "insert into root.t1.wf01.wt02 (time,status) values (1509465600000,'14')");
+
private static Connection connection;
@BeforeClass
public static void setUp() throws Exception {
- initCreateSQLStatement();
EnvironmentUtils.envSetUp();
+
+ Class.forName(Config.JDBC_DRIVER_NAME);
+ connection =
+ DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+
insertData();
}
@AfterClass
public static void tearDown() throws Exception {
- close();
+ connection.close();
EnvironmentUtils.cleanEnv();
}
- private static void close() {
- if (Objects.nonNull(connection)) {
- try {
- connection.close();
- } catch (Exception e) {
- e.printStackTrace();
+ private static void insertData() {
+ try (Statement statement = connection.createStatement(); ) {
+ for (String sql : sqls) {
+ statement.execute(sql);
}
+ } catch (SQLException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
}
}
- private static void initCreateSQLStatement() {
- sqls.add("SET STORAGE GROUP TO root.t1");
- sqls.add("CREATE TIMESERIES root.t1.wf01.wt01.status WITH DATATYPE=TEXT, ENCODING=PLAIN");
- sqls.add("CREATE TIMESERIES root.t1.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE");
- sqls.add("CREATE TIMESERIES root.t1.wf01.wt02.status WITH DATATYPE=TEXT, ENCODING=PLAIN");
-
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465600000,'1',12.1)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465660000,'14',13.1)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465720000,'616',5.5)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465780000,'626',8.1)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465840000,'6116',4.3)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465900000,'6%16',10.3)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509465960000,'8[sS]*',11.3)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509466020000,'%123',18.3)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509466080000,'123%',18.3)");
- sqls.add(
- "insert into root.t1.wf01.wt01 (time,status,temperature) values (1509466090000,'\\\\',10.3)");
- sqls.add("insert into root.t1.wf01.wt02 (time,status) values (1509465600000,'14')");
- }
+ @Test
+ public void testLike() {
+ try (Statement statement = connection.createStatement(); ) {
+ boolean hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '1'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("1", outputResultStr(statement.getResultSet()));
- private static void insertData() throws ClassNotFoundException, SQLException {
- Class.forName(Config.JDBC_DRIVER_NAME);
- connection =
- DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
- Statement statement = connection.createStatement();
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,14,616,626,6116,6%16,8[sS]*,%123,123%,\\", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '1%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("1,14,123%", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '%1%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,14,616,6116,6%16,%123,123%", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '6%6'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("616,626,6116,6%16", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '1_'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("14", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '6_1%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("6116,6%16", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '6\\%%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("6%16", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '\\%%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("%123", outputResultStr(statement.getResultSet()));
- for (String sql : sqls) {
- statement.execute(sql);
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '%\\%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("123%", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where status like '%\\\\\\\\%'");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("\\", outputResultStr(statement.getResultSet()));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
}
- statement.close();
}
@Test
- public void testLike() throws SQLException {
- Statement st0 = connection.createStatement();
- boolean hasResultSet =
- st0.execute("select status from root.t1.wf01.wt01 where status like '1'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("1", outputResultStr(st0.getResultSet()));
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals(
- "1,14,616,626,6116,6%16,8[sS]*,%123,123%,\\", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '1%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("1,14,123%", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '%1%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("1,14,616,6116,6%16,%123,123%", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '6%6'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("616,626,6116,6%16", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '1_'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("14", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '6_1%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("6116,6%16", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '6\\%%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("6%16", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '\\%%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("%123", outputResultStr(st0.getResultSet()));
-
- hasResultSet = st0.execute("select status from root.t1.wf01.wt01 where status like '%\\%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("123%", outputResultStr(st0.getResultSet()));
-
- hasResultSet =
- st0.execute("select status from root.t1.wf01.wt01 where status like '%\\\\\\\\%'");
- Assert.assertTrue(hasResultSet);
- Assert.assertEquals("\\", outputResultStr(st0.getResultSet()));
- }
+ public void testNotLike() {
+ try (Statement statement = connection.createStatement(); ) {
+ boolean hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '1')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "14,616,626,6116,6%16,8[sS]*,%123,123%,\\", outputResultStr(statement.getResultSet()));
- @Test(expected = Exception.class)
- public void testLikeNonTextCloumn() throws SQLException {
- Statement st1 = connection.createStatement();
- st1.execute("select * from root.t1.wf01.wt01 where temperature like '1'");
- }
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("", outputResultStr(statement.getResultSet()));
- private String outputResultStr(ResultSet resultSet) throws SQLException {
- StringBuilder resultBuilder = new StringBuilder();
- while (resultSet.next()) {
- resultBuilder.append(resultSet.getString(2)).append(",");
- }
- String result = resultBuilder.toString();
- return result.substring(0, result.length() - 1);
- }
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '1%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "616,626,6116,6%16,8[sS]*,%123,\\", outputResultStr(statement.getResultSet()));
- private List<Integer> checkHeader(
- ResultSetMetaData resultSetMetaData, String expectedHeaderStrings, int[] expectedTypes)
- throws SQLException {
- String[] expectedHeaders = expectedHeaderStrings.split(",");
- Map<String, Integer> expectedHeaderToTypeIndexMap = new HashMap<>();
- for (int i = 0; i < expectedHeaders.length; ++i) {
- expectedHeaderToTypeIndexMap.put(expectedHeaders[i], i);
- }
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '%1%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("626,8[sS]*,\\", outputResultStr(statement.getResultSet()));
- List<Integer> actualIndexToExpectedIndexList = new ArrayList<>();
- for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
- Integer typeIndex = expectedHeaderToTypeIndexMap.get(resultSetMetaData.getColumnName(i));
- Assert.assertNotNull(typeIndex);
- Assert.assertEquals(expectedTypes[typeIndex], resultSetMetaData.getColumnType(i));
- actualIndexToExpectedIndexList.add(typeIndex);
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '6%6')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals("1,14,8[sS]*,%123,123%,\\", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '1_')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,616,626,6116,6%16,8[sS]*,%123,123%,\\", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '6_1%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,14,616,626,8[sS]*,%123,123%,\\", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '6\\%%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,14,616,626,6116,8[sS]*,%123,123%,\\", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '\\%%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,14,616,626,6116,6%16,8[sS]*,123%,\\", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute("select status from root.t1.wf01.wt01 where not (status like '%\\%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,14,616,626,6116,6%16,8[sS]*,%123,\\", outputResultStr(statement.getResultSet()));
+
+ hasResultSet =
+ statement.execute(
+ "select status from root.t1.wf01.wt01 where not (status like '%\\\\\\\\%')");
+ Assert.assertTrue(hasResultSet);
+ Assert.assertEquals(
+ "1,14,616,626,6116,6%16,8[sS]*,%123,123%", outputResultStr(statement.getResultSet()));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
}
- return actualIndexToExpectedIndexList;
}
@Test
- public void selectLikeAlignByDevice() throws ClassNotFoundException {
+ public void selectLikeAlignByDevice() {
String[] retArray =
new String[] {"1509465660000,root.t1.wf01.wt01,14,", "1509465600000,root.t1.wf01.wt02,14"};
- 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()) {
+ try (Statement statement = connection.createStatement()) {
boolean hasResultSet =
statement.execute(
"select status from root.t1.wf01.wt0* where status like '14%' align by device");
@@ -236,14 +267,14 @@ public class IoTDBFuzzyQueryIT {
}
Assert.assertEquals(2, cnt);
}
- } catch (Exception e) {
+ } catch (SQLException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
@Test
- public void selectRegexpAlignByDevice() throws ClassNotFoundException {
+ public void selectRegexpAlignByDevice() {
String[] retArray =
new String[] {
"1509465600000,root.t1.wf01.wt01,1,",
@@ -252,11 +283,7 @@ public class IoTDBFuzzyQueryIT {
"1509465600000,root.t1.wf01.wt02,14,"
};
- 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()) {
+ try (Statement statement = connection.createStatement()) {
boolean hasResultSet =
statement.execute(
"select status from root.t1.wf01.wt0* where status regexp '^1.*' align by device");
@@ -286,9 +313,64 @@ public class IoTDBFuzzyQueryIT {
}
Assert.assertEquals(4, cnt);
}
- } catch (Exception e) {
+ } catch (SQLException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
+
+ @Test
+ public void testLikeNonTextColumn() {
+ try (Statement statement = connection.createStatement()) {
+ statement.execute("select * from root.t1.wf01.wt01 where temperature like '1'");
+ fail("no exception!");
+ } catch (SQLException e) {
+ Assert.assertTrue(
+ e.getMessage(),
+ e.getMessage().contains("Unsupported type: [FLOAT]. Only TEXT is supported in 'Like'"));
+ }
+ }
+
+ @Test
+ public void testRegexpNonTextColumn() {
+ try (Statement statement = connection.createStatement()) {
+ statement.execute("select * from root.t1.wf01.wt01 where temperature regexp '1'");
+ fail("no exception!");
+ } catch (SQLException e) {
+ Assert.assertTrue(
+ e.getMessage(),
+ e.getMessage().contains("Unsupported type: [FLOAT]. Only TEXT is supported in 'Regexp'"));
+ }
+ }
+
+ private String outputResultStr(ResultSet resultSet) throws SQLException {
+ StringBuilder resultBuilder = new StringBuilder();
+ while (resultSet.next()) {
+ resultBuilder.append(resultSet.getString(2)).append(",");
+ }
+ String result = resultBuilder.toString();
+ if (result.isEmpty()) {
+ return result;
+ }
+ return result.substring(0, result.length() - 1);
+ }
+
+ private List<Integer> checkHeader(
+ ResultSetMetaData resultSetMetaData, String expectedHeaderStrings, int[] expectedTypes)
+ throws SQLException {
+ String[] expectedHeaders = expectedHeaderStrings.split(",");
+ Map<String, Integer> expectedHeaderToTypeIndexMap = new HashMap<>();
+ for (int i = 0; i < expectedHeaders.length; ++i) {
+ expectedHeaderToTypeIndexMap.put(expectedHeaders[i], i);
+ }
+
+ List<Integer> actualIndexToExpectedIndexList = new ArrayList<>();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ Integer typeIndex = expectedHeaderToTypeIndexMap.get(resultSetMetaData.getColumnName(i));
+ Assert.assertNotNull(typeIndex);
+ Assert.assertEquals(expectedTypes[typeIndex], resultSetMetaData.getColumnType(i));
+ actualIndexToExpectedIndexList.add(typeIndex);
+ }
+ return actualIndexToExpectedIndexList;
+ }
}