@Test public void testCatalog() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog"); assertEquals("catalog", tableName.getCatalogName()); assertFalse(tableName.hasSchemaName()); assertFalse(tableName.hasTableName()); }
@Override public List<QualifiedObjectName> listViews(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); Set<QualifiedObjectName> views = new LinkedHashSet<>(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); ConnectorSession connectorSession = session.toConnectorSession(connectorId); metadata.listViews(connectorSession, prefix.getSchemaName()).stream() .map(convertFromSchemaTableName(prefix.getCatalogName())) .filter(prefix::matches) .forEach(views::add); } } return ImmutableList.copyOf(views); }
@Override public List<GrantInfo> listTablePrivileges(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); SchemaTablePrefix tablePrefix = prefix.asSchemaTablePrefix(); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); ImmutableSet.Builder<GrantInfo> grantInfos = ImmutableSet.builder(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); ConnectorSession connectorSession = session.toConnectorSession(catalogMetadata.getConnectorId()); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); grantInfos.addAll(metadata.listTablePrivileges(connectorSession, tablePrefix)); } } return ImmutableList.copyOf(grantInfos.build()); }
public QualifiedTablePrefix asQualifiedTablePrefix() { return new QualifiedTablePrefix(catalogName, schemaName, objectName); }
public static Set<GrantInfo> listTablePrivileges(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { List<GrantInfo> grants = metadata.listTablePrivileges(session, prefix); Set<SchemaTableName> allowedTables = accessControl.filterTables( session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), grants.stream().map(GrantInfo::getSchemaTableName).collect(toImmutableSet())); return grants.stream() .filter(grantInfo -> allowedTables.contains(grantInfo.getSchemaTableName())) .collect(toImmutableSet()); }
public Set<QualifiedTablePrefix> calculatePrefixesWithTableName( ConnectorSession connectorSession, Set<QualifiedTablePrefix> prefixes, TupleDomain<ColumnHandle> constraint, Optional<Predicate<Map<ColumnHandle, NullableValue>>> predicate) { Session session = ((FullConnectorSession) connectorSession).getSession(); Optional<Set<String>> tables = filterString(constraint, TABLE_NAME_COLUMN_HANDLE); if (tables.isPresent()) { return prefixes.stream() .flatMap(prefix -> tables.get().stream() .filter(this::isLowerCase) .map(table -> table.toLowerCase(ENGLISH)) .map(table -> new QualifiedObjectName(catalogName, prefix.getSchemaName().get(), table))) .filter(objectName -> metadata.getTableHandle(session, objectName).isPresent() || metadata.getView(session, objectName).isPresent()) .map(QualifiedObjectName::asQualifiedTablePrefix) .collect(toImmutableSet()); } return prefixes.stream() .flatMap(prefix -> Stream.concat( metadata.listTables(session, prefix).stream(), metadata.listViews(session, prefix).stream())) .filter(objectName -> !predicate.isPresent() || predicate.get().test(asFixedValues(objectName))) .map(QualifiedObjectName::asQualifiedTablePrefix) .collect(toImmutableSet()); }
public QualifiedTablePrefix asQualifiedTablePrefix() { return new QualifiedTablePrefix(catalogName, schemaName, objectName); }
public static Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { Map<SchemaTableName, List<ColumnMetadata>> tableColumns = metadata.listTableColumns(session, prefix).entrySet().stream() .collect(toImmutableMap(entry -> entry.getKey().asSchemaTableName(), Entry::getValue)); Set<SchemaTableName> allowedTables = accessControl.filterTables( session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), tableColumns.keySet()); ImmutableMap.Builder<SchemaTableName, List<ColumnMetadata>> result = ImmutableMap.builder(); for (Entry<SchemaTableName, List<ColumnMetadata>> entry : tableColumns.entrySet()) { if (allowedTables.contains(entry.getKey())) { result.put(entry); } } return result.build(); } }
public Set<QualifiedTablePrefix> calculatePrefixesWithTableName( ConnectorSession connectorSession, Set<QualifiedTablePrefix> prefixes, TupleDomain<ColumnHandle> constraint, Optional<Predicate<Map<ColumnHandle, NullableValue>>> predicate) { Session session = ((FullConnectorSession) connectorSession).getSession(); Optional<Set<String>> tables = filterString(constraint, TABLE_NAME_COLUMN_HANDLE); if (tables.isPresent()) { return prefixes.stream() .flatMap(prefix -> tables.get().stream() .filter(this::isLowerCase) .map(table -> table.toLowerCase(ENGLISH)) .map(table -> new QualifiedObjectName(catalogName, prefix.getSchemaName().get(), table))) .filter(objectName -> metadata.getTableHandle(session, objectName).isPresent() || metadata.getView(session, objectName).isPresent()) .map(QualifiedObjectName::asQualifiedTablePrefix) .collect(toImmutableSet()); } return prefixes.stream() .flatMap(prefix -> Stream.concat( metadata.listTables(session, prefix).stream(), metadata.listViews(session, prefix).stream())) .filter(objectName -> !predicate.isPresent() || predicate.get().test(asFixedValues(objectName))) .map(QualifiedObjectName::asQualifiedTablePrefix) .collect(toImmutableSet()); }
@Test public void testCatalog() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog"); assertEquals("catalog", tableName.getCatalogName()); assertFalse(tableName.hasSchemaName()); assertFalse(tableName.hasTableName()); }
public static QualifiedTablePrefix tablePrefix(String catalog, Optional<String> schema, Optional<String> table) { QualifiedTablePrefix prefix = new QualifiedTablePrefix(catalog); if (schema.isPresent()) { prefix = new QualifiedTablePrefix(catalog, schema.get()); if (table.isPresent()) { prefix = new QualifiedTablePrefix(catalog, schema.get(), table.get()); } } return prefix; }
@Override public List<QualifiedObjectName> listTables(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); Set<QualifiedObjectName> tables = new LinkedHashSet<>(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); ConnectorSession connectorSession = session.toConnectorSession(connectorId); metadata.listTables(connectorSession, prefix.getSchemaName()).stream() .map(convertFromSchemaTableName(prefix.getCatalogName())) .filter(prefix::matches) .forEach(tables::add); } } return ImmutableList.copyOf(tables); }
public static Set<GrantInfo> listTablePrivileges(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { List<GrantInfo> grants = metadata.listTablePrivileges(session, prefix); Set<SchemaTableName> allowedTables = accessControl.filterTables( session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), grants.stream().map(GrantInfo::getSchemaTableName).collect(toImmutableSet())); return grants.stream() .filter(grantInfo -> allowedTables.contains(grantInfo.getSchemaTableName())) .collect(toImmutableSet()); }
@Override public List<GrantInfo> listTablePrivileges(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); SchemaTablePrefix tablePrefix = prefix.asSchemaTablePrefix(); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); ImmutableSet.Builder<GrantInfo> grantInfos = ImmutableSet.builder(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); ConnectorSession connectorSession = session.toConnectorSession(catalogMetadata.getConnectorId()); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); grantInfos.addAll(metadata.listTablePrivileges(connectorSession, tablePrefix)); } } return ImmutableList.copyOf(grantInfos.build()); }
@Test public void testSchema() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog", "schema"); assertEquals("catalog", tableName.getCatalogName()); assertTrue(tableName.hasSchemaName()); assertEquals("schema", tableName.getSchemaName().get()); assertFalse(tableName.hasTableName()); }
public static QualifiedTablePrefix tablePrefix(String catalog, Optional<String> schema, Optional<String> table) { QualifiedTablePrefix prefix = new QualifiedTablePrefix(catalog); if (schema.isPresent()) { prefix = new QualifiedTablePrefix(catalog, schema.get()); if (table.isPresent()) { prefix = new QualifiedTablePrefix(catalog, schema.get(), table.get()); } } return prefix; }
@Override public List<QualifiedObjectName> listTables(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); Set<QualifiedObjectName> tables = new LinkedHashSet<>(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); ConnectorSession connectorSession = session.toConnectorSession(connectorId); metadata.listTables(connectorSession, prefix.getSchemaName()).stream() .map(convertFromSchemaTableName(prefix.getCatalogName())) .filter(prefix::matches) .forEach(tables::add); } } return ImmutableList.copyOf(tables); }
public static Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { Map<SchemaTableName, List<ColumnMetadata>> tableColumns = metadata.listTableColumns(session, prefix).entrySet().stream() .collect(toImmutableMap(entry -> entry.getKey().asSchemaTableName(), Entry::getValue)); Set<SchemaTableName> allowedTables = accessControl.filterTables( session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), tableColumns.keySet()); ImmutableMap.Builder<SchemaTableName, List<ColumnMetadata>> result = ImmutableMap.builder(); for (Entry<SchemaTableName, List<ColumnMetadata>> entry : tableColumns.entrySet()) { if (allowedTables.contains(entry.getKey())) { result.put(entry); } } return result.build(); } }
@Override public Map<QualifiedObjectName, ViewDefinition> getViews(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); Map<QualifiedObjectName, ViewDefinition> views = new LinkedHashMap<>(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); SchemaTablePrefix tablePrefix = prefix.asSchemaTablePrefix(); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); ConnectorSession connectorSession = session.toConnectorSession(connectorId); for (Entry<SchemaTableName, ConnectorViewDefinition> entry : metadata.getViews(connectorSession, tablePrefix).entrySet()) { QualifiedObjectName viewName = new QualifiedObjectName( prefix.getCatalogName(), entry.getKey().getSchemaName(), entry.getKey().getTableName()); views.put(viewName, deserializeView(entry.getValue().getViewData())); } } } return ImmutableMap.copyOf(views); }
@Test public void testTable() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog", "schema", "table"); assertEquals("catalog", tableName.getCatalogName()); assertTrue(tableName.hasSchemaName()); assertEquals("schema", tableName.getSchemaName().get()); assertTrue(tableName.hasTableName()); assertEquals("table", tableName.getTableName().get()); }