diff --git a/hetu-carbondata/pom.xml b/hetu-carbondata/pom.xml index 3b602bc11..c219d7e71 100755 --- a/hetu-carbondata/pom.xml +++ b/hetu-carbondata/pom.xml @@ -22,7 +22,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-carbondata diff --git a/hetu-common/pom.xml b/hetu-common/pom.xml index b0403d88f..85ba92d22 100644 --- a/hetu-common/pom.xml +++ b/hetu-common/pom.xml @@ -5,7 +5,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-common diff --git a/hetu-datacenter/pom.xml b/hetu-datacenter/pom.xml index 3105c2f60..cd966fbcb 100644 --- a/hetu-datacenter/pom.xml +++ b/hetu-datacenter/pom.xml @@ -4,7 +4,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-datacenter diff --git a/hetu-filesystem-client/pom.xml b/hetu-filesystem-client/pom.xml index fb30680b6..bd072e3ed 100644 --- a/hetu-filesystem-client/pom.xml +++ b/hetu-filesystem-client/pom.xml @@ -3,7 +3,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 diff --git a/hetu-hana/pom.xml b/hetu-hana/pom.xml index dc8c69e57..085541d90 100644 --- a/hetu-hana/pom.xml +++ b/hetu-hana/pom.xml @@ -5,7 +5,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-hana diff --git a/hetu-hazelcast/pom.xml b/hetu-hazelcast/pom.xml index 312b7830d..11002b9b4 100644 --- a/hetu-hazelcast/pom.xml +++ b/hetu-hazelcast/pom.xml @@ -5,7 +5,7 @@ presto-root io.hetu.core - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-hazelcast diff --git a/hetu-hbase/pom.xml b/hetu-hbase/pom.xml index e815af796..943b0b572 100644 --- a/hetu-hbase/pom.xml +++ b/hetu-hbase/pom.xml @@ -5,7 +5,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-hbase @@ -297,6 +297,12 @@ io.hetu.core presto-tests + + + com.google.protobuf + protobuf-java + + test diff --git a/hetu-heuristic-index/pom.xml b/hetu-heuristic-index/pom.xml index 03f0b1a03..9f73f83d2 100644 --- a/hetu-heuristic-index/pom.xml +++ b/hetu-heuristic-index/pom.xml @@ -3,7 +3,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 diff --git a/hetu-hive-functions/pom.xml b/hetu-hive-functions/pom.xml index 35bb87841..4c31c0e57 100644 --- a/hetu-hive-functions/pom.xml +++ b/hetu-hive-functions/pom.xml @@ -3,7 +3,7 @@ presto-root io.hetu.core - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 diff --git a/hetu-listener/pom.xml b/hetu-listener/pom.xml index f815a7f45..aa6e18806 100644 --- a/hetu-listener/pom.xml +++ b/hetu-listener/pom.xml @@ -3,7 +3,7 @@ presto-root io.hetu.core - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 diff --git a/hetu-metastore/pom.xml b/hetu-metastore/pom.xml index f3f5c0d89..d155e671c 100644 --- a/hetu-metastore/pom.xml +++ b/hetu-metastore/pom.xml @@ -3,7 +3,7 @@ presto-root io.hetu.core - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 diff --git a/hetu-mongodb/pom.xml b/hetu-mongodb/pom.xml index 41c490ecd..6f35e5f40 100644 --- a/hetu-mongodb/pom.xml +++ b/hetu-mongodb/pom.xml @@ -3,7 +3,7 @@ presto-root io.hetu.core - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 diff --git a/hetu-mv/pom.xml b/hetu-mv/pom.xml new file mode 100644 index 000000000..a37bccb3c --- /dev/null +++ b/hetu-mv/pom.xml @@ -0,0 +1,81 @@ + + + + presto-root + io.hetu.core + 1.2.0-SNAPSHOT + + 4.0.0 + + hetu-mv + hetu-plugin + + + ${project.parent.basedir} + + + + + io.hetu.core + presto-spi + + + io.airlift + bootstrap + + + io.airlift + json + + + org.codehaus.jettison + jettison + + + com.fasterxml.jackson.core + jackson-annotations + + + io.airlift + configuration + + + com.google.guava + guava + + + com.google.inject + guice + + + com.fasterxml.jackson.core + jackson-databind + + + io.airlift + log + + + javax.inject + javax.inject + + + + org.testng + testng + test + + + io.hetu.core + presto-main + test + + + org.mockito + mockito-core + test + + + diff --git a/hetu-mv/src/test/java/io/hetu/core/materializedview/TestLocalMvMetastore.java b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestLocalMvMetastore.java new file mode 100644 index 000000000..2e2781e49 --- /dev/null +++ b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestLocalMvMetastore.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2018-2020. Huawei Technologies Co., Ltd. All rights reserved. + * Licensed 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 io.hetu.core.materializedview; + +import io.hetu.core.materializedview.conf.MaterializedViewConfig; +import io.hetu.core.materializedview.metadata.LocalMaterializedViewMetastore; +import io.hetu.core.materializedview.metadata.MaterializedView; +import io.hetu.core.materializedview.utils.MaterializedViewStatus; +import io.prestosql.spi.connector.SchemaTableName; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.File; +import java.util.List; +import java.util.Set; + +import static io.hetu.core.materializedview.TestUtils.CURRENT_SCHEMA; +import static io.hetu.core.materializedview.TestUtils.DATA_SCHEMA; +import static io.hetu.core.materializedview.TestUtils.TEST_FILE; +import static io.hetu.core.materializedview.TestUtils.VIEW_NAME; +import static io.hetu.core.materializedview.TestUtils.createMaterializedView; +import static io.hetu.core.materializedview.utils.MaterializedViewConstants.TYPE_LOCAL; +import static io.hetu.core.materializedview.utils.MaterializedViewStatus.getStatusString; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; + +public class TestLocalMvMetastore +{ + private LocalMaterializedViewMetastore localMaterializedViewMetastore; + private final String newName = "test_view"; + + @BeforeClass + public void setUp() + { + MaterializedViewConfig config = new MaterializedViewConfig(); + config.setMetastoreType(TYPE_LOCAL); + config.setMetastorePath(TEST_FILE); + localMaterializedViewMetastore = new LocalMaterializedViewMetastore(config); + localMaterializedViewMetastore.addSchema(DATA_SCHEMA); + localMaterializedViewMetastore.addMaterializedView(DATA_SCHEMA, createMaterializedView(VIEW_NAME)); + } + + @Test + public void testSchema() + { + localMaterializedViewMetastore.addSchema(CURRENT_SCHEMA); + Set schemas = localMaterializedViewMetastore.getSchemas(); + assertEquals(schemas.size(), 2); + assertTrue(schemas.contains(CURRENT_SCHEMA)); + + localMaterializedViewMetastore.dropSchema(CURRENT_SCHEMA); + schemas = localMaterializedViewMetastore.getSchemas(); + assertEquals(schemas.size(), 1); + assertFalse(schemas.contains(CURRENT_SCHEMA)); + } + + @Test + public void testMaterializedView() + { + SchemaTableName viewName = new SchemaTableName(DATA_SCHEMA, newName); + + List views = localMaterializedViewMetastore.getAllMaterializedView(DATA_SCHEMA); + assertEquals(views.size(), 1); + + MaterializedView view = createMaterializedView(newName); + localMaterializedViewMetastore.addMaterializedView(DATA_SCHEMA, view); + views = localMaterializedViewMetastore.getAllMaterializedView(DATA_SCHEMA); + assertEquals(views.size(), 2); + assertTrue(views.contains(newName)); + MaterializedView actualView = localMaterializedViewMetastore.getMaterializedView(viewName); + assertEquals(actualView.toString(), view.toString()); + + localMaterializedViewMetastore.setViewStatus(viewName, MaterializedViewStatus.ENABLE); + actualView = localMaterializedViewMetastore.getMaterializedView(viewName); + assertEquals(actualView.getStatus(), getStatusString(MaterializedViewStatus.ENABLE)); + + localMaterializedViewMetastore.dropMaterializedView(DATA_SCHEMA, newName); + views = localMaterializedViewMetastore.getAllMaterializedView(DATA_SCHEMA); + assertEquals(views.size(), 1); + assertFalse(views.contains(newName)); + } + + @AfterClass + public void down() + { + new File(TEST_FILE).delete(); + } +} diff --git a/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMaterializedView.java b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMaterializedView.java new file mode 100644 index 000000000..466cd819a --- /dev/null +++ b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMaterializedView.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2018-2020. Huawei Technologies Co., Ltd. All rights reserved. + * Licensed 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 io.hetu.core.materializedview; + +import io.hetu.core.materializedview.connector.MaterializedViewColumnHandle; +import io.hetu.core.materializedview.metadata.MaterializedView; +import io.hetu.core.materializedview.utils.MaterializedViewDateUtils; +import io.hetu.core.materializedview.utils.MaterializedViewStatus; +import io.prestosql.spi.type.TypeSignature; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.List; + +import static io.hetu.core.materializedview.TestUtils.CURRENT_CATALOG; +import static io.hetu.core.materializedview.TestUtils.CURRENT_SCHEMA; +import static io.hetu.core.materializedview.TestUtils.DATA_CATALOG; +import static io.hetu.core.materializedview.TestUtils.DATA_SCHEMA; +import static io.hetu.core.materializedview.TestUtils.DATE; +import static io.hetu.core.materializedview.TestUtils.FULL_SQL; +import static io.hetu.core.materializedview.TestUtils.META_CATALOG; +import static io.hetu.core.materializedview.TestUtils.OWNER; +import static io.hetu.core.materializedview.TestUtils.VIEW_NAME; +import static io.hetu.core.materializedview.TestUtils.VIEW_SQL; +import static io.hetu.core.materializedview.utils.MaterializedViewDateUtils.getStringFromDate; +import static io.hetu.core.materializedview.utils.MaterializedViewStatus.DISABLE; +import static io.hetu.core.materializedview.utils.MaterializedViewStatus.ENABLE; +import static io.hetu.core.materializedview.utils.MaterializedViewStatus.getStatusFromString; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; + +public class TestMaterializedView +{ + @Test + public void testMaterializedView() + { + MaterializedView materializedView = createMaterializedView(VIEW_NAME); + assertEquals(VIEW_NAME, materializedView.getViewName()); + assertEquals(VIEW_SQL, materializedView.getViewSql()); + assertEquals(FULL_SQL, materializedView.getFullSql()); + assertEquals(DATA_CATALOG, materializedView.getDataCatalog()); + assertEquals(DATA_SCHEMA, materializedView.getDataSchema()); + assertEquals(META_CATALOG, materializedView.getMetaCatalog()); + assertEquals(CURRENT_CATALOG, materializedView.getCurrentCatalog()); + assertEquals(CURRENT_SCHEMA, materializedView.getCurrentSchema()); + assertTrue(materializedView.getColumns().equals(createMaterializedViewColumns())); + assertEquals(OWNER, materializedView.getOwner()); + assertFalse(materializedView.isRunAsInvoker()); + assertEquals(materializedView.getLastRefreshTime(), getStringFromDate(DATE)); + assertEquals(getStatusFromString(materializedView.getStatus()), DISABLE); + + materializedView.setStatus(ENABLE); + assertEquals(getStatusFromString(materializedView.getStatus()), ENABLE); + } + + private MaterializedView createMaterializedView(String viewName) + { + return new MaterializedView( + viewName, + VIEW_SQL, + FULL_SQL, + DATA_CATALOG, + DATA_SCHEMA, + META_CATALOG, + CURRENT_CATALOG, + CURRENT_SCHEMA, + createMaterializedViewColumns(), + OWNER, + false, + MaterializedViewDateUtils.getStringFromDate(DATE), + MaterializedViewStatus.getStatusString(DISABLE)); + } + + private List createMaterializedViewColumns() + { + List columns = new ArrayList<>(); + columns.add(new MaterializedViewColumnHandle("column0", 0, TypeSignature.parseTypeSignature("char"))); + columns.add(new MaterializedViewColumnHandle("column1", 1, TypeSignature.parseTypeSignature("int"))); + return columns; + } +} diff --git a/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMaterializedViewConfig.java b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMaterializedViewConfig.java new file mode 100644 index 000000000..b2ae3d5ed --- /dev/null +++ b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMaterializedViewConfig.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018-2020. Huawei Technologies Co., Ltd. All rights reserved. + * Licensed 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 io.hetu.core.materializedview; + +import io.hetu.core.materializedview.conf.MaterializedViewConfig; +import org.testng.annotations.Test; + +import static io.hetu.core.materializedview.TestUtils.TEST_FILE; +import static io.hetu.core.materializedview.utils.MaterializedViewConstants.TYPE_LOCAL; +import static org.testng.Assert.assertEquals; + +public class TestMaterializedViewConfig +{ + @Test + public void testConfig() + { + MaterializedViewConfig config = new MaterializedViewConfig(); + config.setMetastoreType(TYPE_LOCAL); + config.setMetastorePath(TEST_FILE); + + assertEquals(config.getMetastoreType(), TYPE_LOCAL); + assertEquals(config.getMetastorePath(), TEST_FILE); + } +} diff --git a/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMvConnectorMetadata.java b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMvConnectorMetadata.java new file mode 100644 index 000000000..59f3c6867 --- /dev/null +++ b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestMvConnectorMetadata.java @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2018-2020. Huawei Technologies Co., Ltd. All rights reserved. + * Licensed 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 io.hetu.core.materializedview; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import io.hetu.core.materializedview.conf.MaterializedViewConfig; +import io.hetu.core.materializedview.metadata.MaterializedView; +import io.hetu.core.materializedview.metadata.MaterializedViewConnectorMetadata; +import io.hetu.core.materializedview.metadata.MaterializedViewConnectorMetadataFactory; +import io.hetu.core.materializedview.metadata.MaterializedViewMetastore; +import io.hetu.core.materializedview.metadata.MaterializedViewMetastoreFactory; +import io.hetu.core.materializedview.utils.MaterializedViewStatus; +import io.prestosql.spi.connector.ColumnHandle; +import io.prestosql.spi.connector.ColumnMetadata; +import io.prestosql.spi.connector.ConnectorMaterializedViewDefinition; +import io.prestosql.spi.connector.ConnectorSession; +import io.prestosql.spi.connector.ConnectorTableHandle; +import io.prestosql.spi.connector.ConnectorTableMetadata; +import io.prestosql.spi.connector.ConnectorViewDefinition; +import io.prestosql.spi.connector.ConnectorViewDefinition.ViewColumn; +import io.prestosql.spi.connector.SchemaTableName; +import io.prestosql.spi.metastore.HetuMetastore; +import io.prestosql.spi.type.testing.TestingTypeManager; +import io.prestosql.testing.TestingConnectorSession; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import static io.hetu.core.materializedview.utils.MaterializedViewConstants.TYPE_LOCAL; +import static io.prestosql.spi.type.VarcharType.VARCHAR; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +public class TestMvConnectorMetadata +{ + private static final String SCHEMA_NAME1 = "test1"; + private static final String SCHEMA_NAME2 = "test2"; + private static final String TABLE_NAME = "table"; + private static final String COLUMN_NAME = "column"; + private static final String CATALOG_NAME = "memory"; + private static final String SCHEMA_NAME = "demo"; + private static final String META_CATALOG_NAME = "mv"; + private static final String CURRENT_CATALOG_NAME = "hive"; + private static final String CURRENT_SCHEMA_NAME = "default"; + private static final String EXECUTE_SQL = "select column from test1.table"; + private static final String FULL_SQL = "create materialized view mv.demo.view as select column from test1.table"; + private static final String STATUS = "ENABLE"; + private static final String OWNER = "root"; + private MaterializedViewConnectorMetadata metadata; + private MockMaterializedViewMetastore mockMvMetastore; + private ConnectorSession session; + + @BeforeClass + public void setUp() + { + MaterializedViewConfig config = new MaterializedViewConfig(); + config.setMetastoreType(TYPE_LOCAL); + + mockMvMetastore = new MockMaterializedViewMetastore(); + MaterializedViewMetastoreFactory mockMetastoreFactory = mock(MaterializedViewMetastoreFactory.class); + when(mockMetastoreFactory.create(any())).thenReturn(mockMvMetastore); + + HetuMetastore hetuMetastore = mock(HetuMetastore.class); + MaterializedViewConnectorMetadataFactory factory = new MaterializedViewConnectorMetadataFactory(mockMetastoreFactory, new TestingTypeManager(), hetuMetastore); + metadata = factory.create(); + session = new TestingConnectorSession(ImmutableList.of()); + + metadata.createSchema(session, SCHEMA_NAME1, ImmutableMap.of()); + } + + @Test + public void testSchema() + { + //listSchemaNames + //createSchema + //dropSchema + metadata.createSchema(session, SCHEMA_NAME2, ImmutableMap.of()); + List schemas = metadata.listSchemaNames(session); + assertEquals(schemas.size(), 2); + assertTrue(schemas.contains(SCHEMA_NAME1)); + assertTrue(schemas.contains(SCHEMA_NAME2)); + metadata.dropSchema(session, SCHEMA_NAME2); + schemas = metadata.listSchemaNames(session); + assertEquals(schemas.size(), 1); + assertTrue(schemas.contains(SCHEMA_NAME1)); + } + + @Test + public void testViews() + { + ColumnMetadata columnMetadata = new ColumnMetadata(COLUMN_NAME, VARCHAR); + ConnectorTableMetadata tableMetadata = new ConnectorTableMetadata(new SchemaTableName(SCHEMA_NAME1, TABLE_NAME), ImmutableList.of(columnMetadata)); + ViewColumn viewColumn = new ViewColumn(COLUMN_NAME, VARCHAR.getTypeSignature()); + ConnectorMaterializedViewDefinition definition = new ConnectorMaterializedViewDefinition( + EXECUTE_SQL, + Optional.of(CATALOG_NAME), + Optional.of(SCHEMA_NAME), + ImmutableList.of(viewColumn), + Optional.of(OWNER), + false, + FULL_SQL, + META_CATALOG_NAME, + CURRENT_CATALOG_NAME, + CURRENT_SCHEMA_NAME, + STATUS); + metadata.beginCreateMaterializedView(tableMetadata, definition); + SchemaTableName schemaTableName = new SchemaTableName(SCHEMA_NAME1, TABLE_NAME); + metadata.finishCreateMaterializedView(schemaTableName); + + Optional viewDefinition = metadata.getView(session, schemaTableName); + assertTrue(viewDefinition.isPresent()); + ConnectorMaterializedViewDefinition materializedViewDefinition = (ConnectorMaterializedViewDefinition) viewDefinition.get(); + assertEquals(materializedViewDefinition.toString(), definition.toString()); + + ConnectorTableHandle tableHandle = metadata.getTableHandle(session, schemaTableName); + ConnectorTableMetadata getTableMetadata = metadata.getTableMetadata(session, tableHandle); + assertEquals(getTableMetadata.toString(), tableMetadata.toString()); + Map columnHandles = metadata.getColumnHandles(session, tableHandle); + ColumnMetadata getColumnMetadata = metadata.getColumnMetadata(session, tableHandle, columnHandles.get(COLUMN_NAME)); + assertEquals(getColumnMetadata, columnMetadata); + + List tables = metadata.listTables(session, Optional.empty()); + assertEquals(tables.size(), 1); + assertEquals(tables.get(0), schemaTableName); + + metadata.dropMaterializedView(session, tableHandle); + tables = metadata.listTables(session, Optional.empty()); + assertEquals(tables.size(), 0); + } + + class MockMaterializedViewMetastore + implements MaterializedViewMetastore + { + private Map> views; + + @Override + public void init() + { + views = new HashMap<>(); + } + + @Override + public void addMaterializedView(String schema, MaterializedView materializedView) + { + synchronized (views) { + Map viewMap = views.get(schema); + viewMap.put(materializedView.getViewName(), materializedView); + } + } + + @Override + public void dropMaterializedView(String schema, String view) + { + synchronized (views) { + Map viewMap = views.get(schema); + viewMap.remove(view); + } + } + + @Override + public void addSchema(String schemaName) + { + synchronized (views) { + if (views.containsKey(schemaName)) { + return; + } + Map viewMap = new HashMap<>(); + views.put(schemaName, viewMap); + } + } + + @Override + public void dropSchema(String schemaName) + { + synchronized (views) { + views.remove(schemaName); + } + } + + @Override + public void setViewStatus(SchemaTableName viewName, MaterializedViewStatus status) + { + synchronized (views) { + Map viewMap = views.get(viewName.getSchemaName()); + MaterializedView materializedView = viewMap.get(viewName.getTableName()); + materializedView.setStatus(status); + } + } + + @Override + public Set getSchemas() + { + synchronized (views) { + return views.keySet(); + } + } + + @Override + public List getAllMaterializedView(String schemaName) + { + List viewList = new ArrayList<>(); + synchronized (views) { + Map viewMap = views.get(schemaName); + for (MaterializedView view : viewMap.values()) { + viewList.add(view.getViewName()); + } + } + return viewList; + } + + @Override + public MaterializedView getMaterializedView(SchemaTableName viewName) + { + synchronized (views) { + Map viewMap = views.get(viewName.getSchemaName()); + return viewMap.get(viewName.getTableName()); + } + } + } +} diff --git a/hetu-mv/src/test/java/io/hetu/core/materializedview/TestUtils.java b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestUtils.java new file mode 100644 index 000000000..4eb5fd493 --- /dev/null +++ b/hetu-mv/src/test/java/io/hetu/core/materializedview/TestUtils.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2018-2020. Huawei Technologies Co., Ltd. All rights reserved. + * Licensed 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 io.hetu.core.materializedview; + +import io.hetu.core.materializedview.connector.MaterializedViewColumnHandle; +import io.hetu.core.materializedview.metadata.MaterializedView; +import io.hetu.core.materializedview.utils.MaterializedViewDateUtils; +import io.hetu.core.materializedview.utils.MaterializedViewStatus; +import io.prestosql.spi.type.TypeSignature; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static io.hetu.core.materializedview.utils.MaterializedViewStatus.DISABLE; + +public class TestUtils +{ + public static final String TEST_FILE = "testLocalMvMetadata.ini"; + + public static final String VIEW_NAME = "mv.test.view"; + public static final String FULL_SQL = "create materialized view mv.test.view as select * from hive.default.test"; + public static final String VIEW_SQL = "select * from hive.default.test"; + public static final String DATA_CATALOG = "memory"; + public static final String DATA_SCHEMA = "test"; + public static final String META_CATALOG = "mv"; + public static final String CURRENT_CATALOG = "hive"; + public static final String CURRENT_SCHEMA = "default"; + public static final String OWNER = "test"; + public static final Date DATE = new Date(); + + private TestUtils() + { + } + + public static MaterializedView createMaterializedView(String viewName) + { + return new MaterializedView( + viewName, + VIEW_SQL, + FULL_SQL, + DATA_CATALOG, + DATA_SCHEMA, + META_CATALOG, + CURRENT_CATALOG, + CURRENT_SCHEMA, + createMaterializedViewColumns(), + OWNER, + false, + MaterializedViewDateUtils.getStringFromDate(DATE), + MaterializedViewStatus.getStatusString(DISABLE)); + } + + public static List createMaterializedViewColumns() + { + List columns = new ArrayList<>(); + columns.add(new MaterializedViewColumnHandle("column0", 0, TypeSignature.parseTypeSignature("char"))); + columns.add(new MaterializedViewColumnHandle("column1", 1, TypeSignature.parseTypeSignature("int"))); + return columns; + } +} diff --git a/hetu-opengauss/pom.xml b/hetu-opengauss/pom.xml index 1289b5af6..5b7e176b3 100644 --- a/hetu-opengauss/pom.xml +++ b/hetu-opengauss/pom.xml @@ -3,7 +3,7 @@ presto-root io.hetu.core - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 @@ -153,7 +153,7 @@ io.hetu.core presto-postgresql - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT compile diff --git a/hetu-oracle/pom.xml b/hetu-oracle/pom.xml index 4d595ac20..a76e074e6 100644 --- a/hetu-oracle/pom.xml +++ b/hetu-oracle/pom.xml @@ -5,7 +5,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-oracle diff --git a/hetu-seed-store/pom.xml b/hetu-seed-store/pom.xml index 76fe35524..d451c406e 100644 --- a/hetu-seed-store/pom.xml +++ b/hetu-seed-store/pom.xml @@ -3,7 +3,7 @@ presto-root io.hetu.core - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT 4.0.0 diff --git a/hetu-server-rpm/pom.xml b/hetu-server-rpm/pom.xml index c94c8dc01..045b555e7 100644 --- a/hetu-server-rpm/pom.xml +++ b/hetu-server-rpm/pom.xml @@ -5,7 +5,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-server-rpm diff --git a/hetu-server/pom.xml b/hetu-server/pom.xml index 07357f6a2..870c8bc4b 100644 --- a/hetu-server/pom.xml +++ b/hetu-server/pom.xml @@ -5,7 +5,7 @@ io.hetu.core presto-root - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT hetu-server diff --git a/hetu-server/src/main/provisio/hetu.xml b/hetu-server/src/main/provisio/hetu.xml index 542e19133..d1392b74a 100644 --- a/hetu-server/src/main/provisio/hetu.xml +++ b/hetu-server/src/main/provisio/hetu.xml @@ -138,6 +138,12 @@ + + + + + +