@Override public Optional<ViewDefinition> getView(Session session, QualifiedObjectName viewName) { Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, viewName.getCatalogName()); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); ConnectorId connectorId = catalogMetadata.getConnectorId(session, viewName); ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); Map<SchemaTableName, ConnectorViewDefinition> views = metadata.getViews( session.toConnectorSession(connectorId), viewName.asSchemaTableName().toSchemaTablePrefix()); ConnectorViewDefinition view = views.get(viewName.asSchemaTableName()); if (view != null) { ViewDefinition definition = deserializeView(view.getViewData()); if (view.getOwner().isPresent()) { definition = definition.withOwner(view.getOwner().get()); } return Optional.of(definition); } } return Optional.empty(); }
@Override public void dropView(ConnectorSession session, SchemaTableName viewName) { ConnectorViewDefinition view = getViews(session, viewName.toSchemaTablePrefix()).get(viewName); if (view == null) { throw new ViewNotFoundException(viewName); } try { metastore.dropTable(session, viewName.getSchemaName(), viewName.getTableName()); } catch (TableNotFoundException e) { throw new ViewNotFoundException(e.getTableName()); } }
@Test public void testGetTableSchemaOffline() { try (Transaction transaction = newTransaction()) { ConnectorMetadata metadata = transaction.getMetadata(); Map<SchemaTableName, List<ColumnMetadata>> columns = metadata.listTableColumns(newSession(), tableOffline.toSchemaTablePrefix()); assertEquals(columns.size(), 1); Map<String, ColumnMetadata> map = uniqueIndex(getOnlyElement(columns.values()), ColumnMetadata::getName); assertPrimitiveField(map, "t_string", createUnboundedVarcharType(), false); } }
@Test public void testCreateViewWithReplace() { SchemaTableName test = new SchemaTableName("test", "test_view"); metadata.createSchema(SESSION, "test", ImmutableMap.of()); metadata.createView(SESSION, test, "aaa", true); metadata.createView(SESSION, test, "bbb", true); assertEquals(metadata.getViews(SESSION, test.toSchemaTablePrefix()).get(test).getViewData(), "bbb"); }
private void doCreateView(SchemaTableName viewName, boolean replace) { String viewData = "test data"; try (Transaction transaction = newTransaction()) { transaction.getMetadata().createView(newSession(), viewName, viewData, replace); transaction.commit(); } try (Transaction transaction = newTransaction()) { ConnectorMetadata metadata = transaction.getMetadata(); Map<SchemaTableName, ConnectorViewDefinition> views = metadata.getViews(newSession(), viewName.toSchemaTablePrefix()); assertEquals(views.size(), 1); assertEquals(views.get(viewName).getViewData(), viewData); assertTrue(metadata.listViews(newSession(), viewName.getSchemaName()).contains(viewName)); } }
assertEquals(metadata.getViews(newSession(), temporaryCreateView.toSchemaTablePrefix()).size(), 0); assertFalse(metadata.listViews(newSession(), temporaryCreateView.getSchemaName()).contains(temporaryCreateView));
private boolean viewExists(ConnectorSession session, SchemaTableName viewName) { return !getViews(session, viewName.toSchemaTablePrefix()).isEmpty(); }
@Override public Optional<ViewDefinition> getView(Session session, QualifiedObjectName viewName) { ConnectorEntry entry = getConnectorFor(session, viewName); if (entry != null) { ConnectorMetadata metadata = entry.getMetadata(session); Map<SchemaTableName, ConnectorViewDefinition> views = metadata.getViews( session.toConnectorSession(entry.getCatalog()), viewName.asSchemaTableName().toSchemaTablePrefix()); ConnectorViewDefinition view = views.get(viewName.asSchemaTableName()); if (view != null) { return Optional.of(deserializeView(view.getViewData())); } } return Optional.empty(); }
@Test public void testGetTableSchemaOffline() { try (Transaction transaction = newTransaction()) { ConnectorMetadata metadata = transaction.getMetadata(); Map<SchemaTableName, List<ColumnMetadata>> columns = metadata.listTableColumns(newSession(), tableOffline.toSchemaTablePrefix()); assertEquals(columns.size(), 1); Map<String, ColumnMetadata> map = uniqueIndex(getOnlyElement(columns.values()), ColumnMetadata::getName); assertPrimitiveField(map, "t_string", createUnboundedVarcharType(), false); } }
@Override public void dropView(ConnectorSession session, SchemaTableName viewName) { ConnectorViewDefinition view = getViews(session, viewName.toSchemaTablePrefix()).get(viewName); if (view == null) { throw new ViewNotFoundException(viewName); } try { metastore.dropTable(viewName.getSchemaName(), viewName.getTableName()); } catch (TableNotFoundException e) { throw new ViewNotFoundException(e.getTableName()); } }
private void doCreateView(SchemaTableName viewName, boolean replace) { String viewData = "test data"; ConnectorMetadata metadata = newMetadata(); metadata.createView(newSession(), viewName, viewData, replace); Map<SchemaTableName, ConnectorViewDefinition> views = metadata.getViews(newSession(), viewName.toSchemaTablePrefix()); assertEquals(views.size(), 1); assertEquals(views.get(viewName).getViewData(), viewData); assertTrue(metadata.listViews(newSession(), viewName.getSchemaName()).contains(viewName)); }
private void doCreateView(SchemaTableName viewName, boolean replace) { String viewData = "test data"; try (Transaction transaction = newTransaction()) { transaction.getMetadata().createView(newSession(), viewName, viewData, replace); transaction.commit(); } try (Transaction transaction = newTransaction()) { ConnectorMetadata metadata = transaction.getMetadata(); Map<SchemaTableName, ConnectorViewDefinition> views = metadata.getViews(newSession(), viewName.toSchemaTablePrefix()); assertEquals(views.size(), 1); assertEquals(views.get(viewName).getViewData(), viewData); assertTrue(metadata.listViews(newSession(), viewName.getSchemaName()).contains(viewName)); } }
private void verifyViewCreation() { // replace works for new view doCreateView(temporaryCreateView, true); // replace works for existing view doCreateView(temporaryCreateView, true); // create fails for existing view try { doCreateView(temporaryCreateView, false); fail("create existing should fail"); } catch (ViewAlreadyExistsException e) { assertEquals(e.getViewName(), temporaryCreateView); } ConnectorMetadata metadata = newMetadata(); // drop works when view exists metadata.dropView(newSession(), temporaryCreateView); assertEquals(metadata.getViews(newSession(), temporaryCreateView.toSchemaTablePrefix()).size(), 0); assertFalse(metadata.listViews(newSession(), temporaryCreateView.getSchemaName()).contains(temporaryCreateView)); // drop fails when view does not exist try { metadata.dropView(newSession(), temporaryCreateView); fail("drop non-existing should fail"); } catch (ViewNotFoundException e) { assertEquals(e.getViewName(), temporaryCreateView); } // create works for new view doCreateView(temporaryCreateView, false); }
assertEquals(metadata.getViews(newSession(), temporaryCreateView.toSchemaTablePrefix()).size(), 0); assertFalse(metadata.listViews(newSession(), temporaryCreateView.getSchemaName()).contains(temporaryCreateView));