This is an automated email from the ASF dual-hosted git repository.
zyk pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.2 by this push:
new e078ccc3c77 [To rel/1.2]Added ITs for logical views & Fix duplicate
rows in show views. (#10026)
e078ccc3c77 is described below
commit e078ccc3c77d41ca52b7331f321e40de60aea24b
Author: 橘子 <[email protected]>
AuthorDate: Fri Jun 2 15:57:16 2023 +0800
[To rel/1.2]Added ITs for logical views & Fix duplicate rows in show views.
(#10026)
---
.../iotdb/db/it/view/IoTDBCreateAndShowViewIT.java | 294 +++++++++++++++++++++
1 file changed, 294 insertions(+)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/db/it/view/IoTDBCreateAndShowViewIT.java
b/integration-test/src/test/java/org/apache/iotdb/db/it/view/IoTDBCreateAndShowViewIT.java
new file mode 100644
index 00000000000..fb04ad91a08
--- /dev/null
+++
b/integration-test/src/test/java/org/apache/iotdb/db/it/view/IoTDBCreateAndShowViewIT.java
@@ -0,0 +1,294 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.it.view;
+
+import org.apache.iotdb.db.mpp.common.header.ColumnHeaderConstant;
+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.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/** This is an example for integration test. */
+@RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
+public class IoTDBCreateAndShowViewIT {
+
+ private static String[] sqls =
+ new String[] {
+ "CREATE DATABASE root.db;",
+ "CREATE DATABASE root.myview;",
+ "CREATE DATABASE root.cal_view;",
+ "CREATE TIMESERIES root.db.d01.s01 INT32 encoding=RLE
compression=SNAPPY;",
+ "CREATE TIMESERIES root.db.d01.s02 INT32 encoding=RLE
compression=SNAPPY;",
+ "CREATE TIMESERIES root.db.d02.s01 INT32 encoding=RLE
compression=SNAPPY;",
+ "CREATE TIMESERIES root.db.d02.s02 INT32 encoding=RLE
compression=SNAPPY;",
+ "CREATE VIEW root.myview.d01.s01 AS root.db.d01.s01;",
+ "CREATE VIEW root.myview.d01.s02 AS SELECT s02 FROM root.db.d01;",
+ "CREATE VIEW root.myview.d02(s01, s02) AS SELECT s01, s02 FROM
root.db.d02;",
+ "CREATE VIEW root.cal_view.avg AS SELECT (s01+s02)/2 FROM
root.db.d01;",
+ "CREATE VIEW root.cal_view(multiple, divide) AS SELECT s01*s02,
s01/s02 FROM root.db.d02;",
+ "CREATE VIEW root.cal_view(agg_max1, agg_max2) AS SELECT
MAX_VALUE(s01) FROM root.db.d01, root.db.d02 ;",
+ "CREATE VIEW root.cal_view.cast_view AS SELECT CAST(s01 as TEXT) FROM
root.db.d01;",
+ };
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ EnvFactory.getEnv().initClusterEnvironment();
+
+ createSchema();
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ EnvFactory.getEnv().cleanClusterEnvironment();
+ }
+
+ // region Test show timesereis
+ @Test
+ public void showOriginTimeseries() {
+
+ Set<String> retSet =
+ new HashSet<>(
+ Arrays.asList(
+ "root.db.d01.s01,null,root.db,INT32,RLE,SNAPPY,null,null,;",
+ "root.db.d01.s02,null,root.db,INT32,RLE,SNAPPY,null,null,;",
+ "root.db.d02.s01,null,root.db,INT32,RLE,SNAPPY,null,null,;",
+ "root.db.d02.s02,null,root.db,INT32,RLE,SNAPPY,null,null,;"));
+
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+
+ ResultSet resultSet = statement.executeQuery("SHOW TiMESERIES
root.db.**;");
+ int count = 0;
+ while (resultSet.next()) {
+ String ans =
+ resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ALIAS)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATABASE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ENCODING)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.COMPRESSION)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.TAGS)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ATTRIBUTES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.VIEW_TYPE)
+ + ";";
+
+ System.out.println("actual result:" + ans);
+ assertTrue(retSet.contains(ans));
+ count++;
+ }
+ assertEquals(retSet.size(), count);
+ resultSet.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void showAliasViewsWithShowTimeseries() {
+
+ Set<String> retSet =
+ new HashSet<>(
+ Arrays.asList(
+
"root.myview.d01.s01,null,root.myview,INT32,null,null,null,null,logical;",
+
"root.myview.d01.s02,null,root.myview,INT32,null,null,null,null,logical;",
+
"root.myview.d02.s01,null,root.myview,INT32,null,null,null,null,logical;",
+
"root.myview.d02.s02,null,root.myview,INT32,null,null,null,null,logical;"));
+
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+
+ ResultSet resultSet = statement.executeQuery("SHOW TiMESERIES
root.myview.**;");
+ int count = 0;
+ while (resultSet.next()) {
+ String ans =
+ resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ALIAS)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATABASE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ENCODING)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.COMPRESSION)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.TAGS)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ATTRIBUTES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.VIEW_TYPE)
+ + ";";
+
+ System.out.println("actual result:" + ans);
+ assertTrue(retSet.contains(ans));
+ count++;
+ }
+ assertEquals(retSet.size(), count);
+ resultSet.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void showViewsWithCalculationWithShowTimeseries() {
+
+ Set<String> retSet =
+ new HashSet<>(
+ Arrays.asList(
+
"root.cal_view.avg,null,root.cal_view,DOUBLE,null,null,null,null,logical;",
+
"root.cal_view.multiple,null,root.cal_view,DOUBLE,null,null,null,null,logical;",
+
"root.cal_view.divide,null,root.cal_view,DOUBLE,null,null,null,null,logical;",
+
"root.cal_view.agg_max1,null,root.cal_view,INT32,null,null,null,null,logical;",
+
"root.cal_view.agg_max2,null,root.cal_view,INT32,null,null,null,null,logical;",
+
"root.cal_view.cast_view,null,root.cal_view,TEXT,null,null,null,null,logical;"));
+
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+
+ ResultSet resultSet = statement.executeQuery("SHOW TiMESERIES
root.cal_view.*;");
+ int count = 0;
+ while (resultSet.next()) {
+ String ans =
+ resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ALIAS)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATABASE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ENCODING)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.COMPRESSION)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.TAGS)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ATTRIBUTES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.VIEW_TYPE)
+ + ";";
+
+ System.out.println("actual result:" + ans);
+ assertTrue(retSet.contains(ans));
+ count++;
+ }
+ assertEquals(retSet.size(), count);
+ resultSet.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+ // endregion
+
+ // region Test Show View
+ @Test
+ public void showAllViewsWithShowView() {
+
+ Set<String> retSet =
+ new HashSet<>(
+ Arrays.asList(
+
"root.myview.d01.s01,root.myview,INT32,null,null,logical,root.db.d01.s01;",
+
"root.myview.d01.s02,root.myview,INT32,null,null,logical,root.db.d01.s02;",
+
"root.myview.d02.s01,root.myview,INT32,null,null,logical,root.db.d02.s01;",
+
"root.myview.d02.s02,root.myview,INT32,null,null,logical,root.db.d02.s02;",
+
"root.cal_view.avg,root.cal_view,DOUBLE,null,null,logical,(root.db.d01.s01 +
root.db.d01.s02) / 2;",
+
"root.cal_view.multiple,root.cal_view,DOUBLE,null,null,logical,root.db.d02.s01
* root.db.d02.s02;",
+
"root.cal_view.divide,root.cal_view,DOUBLE,null,null,logical,root.db.d02.s01 /
root.db.d02.s02;",
+
"root.cal_view.agg_max1,root.cal_view,INT32,null,null,logical,max_value(root.db.d01.s01);",
+
"root.cal_view.agg_max2,root.cal_view,INT32,null,null,logical,max_value(root.db.d02.s01);",
+
"root.cal_view.cast_view,root.cal_view,TEXT,null,null,logical,cast(type=TEXT)(root.db.d01.s01);"));
+
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+
+ ResultSet resultSet = statement.executeQuery("SHOW VIEW root.**;");
+ int count = 0;
+ while (resultSet.next()) {
+ String ans =
+ resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATABASE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.TAGS)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.ATTRIBUTES)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.VIEW_TYPE)
+ + ","
+ + resultSet.getString(ColumnHeaderConstant.SOURCE)
+ + ";";
+
+ System.out.println("actual result:" + ans);
+ assertTrue(retSet.contains(ans));
+ count++;
+ }
+ assertEquals(retSet.size(), count);
+ resultSet.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+ // endregion
+
+ private static void createSchema() {
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+
+ for (String sql : sqls) {
+ statement.execute(sql);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}