@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Builder table = InMemoryRecordSet.builder(CATALOG_TABLE); for (Map.Entry<String, ConnectorId> entry : listCatalogs(session, metadata, accessControl).entrySet()) { table.addRow(entry.getKey(), entry.getValue().toString()); } return table.build().cursor(); } }
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Optional<String> catalogFilter = FilterUtil.stringFilter(constraint, 1); Builder table = InMemoryRecordSet.builder(METADATA); for (String catalog : filter(listCatalogs(session, metadata, accessControl).keySet(), catalogFilter)) { for (String schema : listSchemas(session, metadata, accessControl, catalog)) { table.addRow(schema, catalog); } } return table.build().cursor(); } }
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Optional<String> catalogFilter = stringFilter(constraint, 0); Optional<String> schemaFilter = stringFilter(constraint, 1); Optional<String> tableFilter = stringFilter(constraint, 2); Builder table = InMemoryRecordSet.builder(METADATA); for (String catalog : filter(listCatalogs(session, metadata, accessControl).keySet(), catalogFilter)) { QualifiedTablePrefix prefix = FilterUtil.tablePrefix(catalog, schemaFilter, tableFilter); for (Entry<SchemaTableName, List<ColumnMetadata>> entry : listTableColumns(session, metadata, accessControl, prefix).entrySet()) { addColumnRows(table, catalog, entry.getKey(), entry.getValue()); } } return table.build().cursor(); }
private InternalTable buildTables(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_TABLES)); for (QualifiedTablePrefix prefix : prefixes) { Set<SchemaTableName> tables = listTables(session, metadata, accessControl, prefix); Set<SchemaTableName> views = listViews(session, metadata, accessControl, prefix); for (SchemaTableName name : union(tables, views)) { // if table and view names overlap, the view wins String type = views.contains(name) ? "VIEW" : "BASE TABLE"; table.add( prefix.getCatalogName(), name.getSchemaName(), name.getTableName(), type); } } return table.build(); }
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Optional<String> catalogFilter = stringFilter(constraint, 0); Optional<String> schemaFilter = stringFilter(constraint, 1); Optional<String> tableFilter = stringFilter(constraint, 2); Optional<String> typeFilter = stringFilter(constraint, 3); Builder table = InMemoryRecordSet.builder(METADATA); for (String catalog : filter(listCatalogs(session, metadata, accessControl).keySet(), catalogFilter)) { QualifiedTablePrefix prefix = tablePrefix(catalog, schemaFilter, tableFilter); if (FilterUtil.emptyOrEquals(typeFilter, "TABLE")) { for (SchemaTableName name : listTables(session, metadata, accessControl, prefix)) { table.addRow(tableRow(catalog, name, "TABLE")); } } if (FilterUtil.emptyOrEquals(typeFilter, "VIEW")) { for (SchemaTableName name : listViews(session, metadata, accessControl, prefix)) { table.addRow(tableRow(catalog, name, "VIEW")); } } } return table.build().cursor(); }
private InternalTable buildSchemata(Session session, String catalogName) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_SCHEMATA)); for (String schema : listSchemas(session, metadata, accessControl, catalogName)) { table.add(catalogName, schema); } return table.build(); }
private InternalTable buildTablePrivileges(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_TABLE_PRIVILEGES)); for (QualifiedTablePrefix prefix : prefixes) { List<GrantInfo> grants = ImmutableList.copyOf(listTablePrivileges(session, metadata, accessControl, prefix)); for (GrantInfo grant : grants) { table.add( grant.getGrantor().map(PrestoPrincipal::getName).orElse(null), grant.getGrantor().map(principal -> principal.getType().toString()).orElse(null), grant.getGrantee().getName(), grant.getGrantee().getType().toString(), prefix.getCatalogName(), grant.getSchemaTableName().getSchemaName(), grant.getSchemaTableName().getTableName(), grant.getPrivilegeInfo().getPrivilege().name(), grant.getPrivilegeInfo().isGrantOption() ? "YES" : "NO", grant.getWithHierarchy().map(withHierarchy -> withHierarchy ? "YES" : "NO").orElse(null)); } } return table.build(); }
private InternalTable buildColumns(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_COLUMNS)); for (QualifiedTablePrefix prefix : prefixes) { for (Entry<SchemaTableName, List<ColumnMetadata>> entry : listTableColumns(session, metadata, accessControl, prefix).entrySet()) { SchemaTableName tableName = entry.getKey(); int ordinalPosition = 1; for (ColumnMetadata column : entry.getValue()) { if (column.isHidden()) { continue; } table.add( prefix.getCatalogName(), tableName.getSchemaName(), tableName.getTableName(), column.getName(), ordinalPosition, null, "YES", column.getType().getDisplayName(), column.getComment(), column.getExtraInfo()); ordinalPosition++; } } } return table.build(); }
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Optional<String> catalogFilter = stringFilter(constraint, 0); Optional<String> schemaFilter = stringFilter(constraint, 1); Optional<String> tableFilter = stringFilter(constraint, 2); Optional<String> typeFilter = stringFilter(constraint, 3); Builder table = InMemoryRecordSet.builder(METADATA); for (String catalog : filter(listCatalogs(session, metadata, accessControl).keySet(), catalogFilter)) { QualifiedTablePrefix prefix = tablePrefix(catalog, schemaFilter, tableFilter); if (FilterUtil.emptyOrEquals(typeFilter, "TABLE")) { for (SchemaTableName name : listTables(session, metadata, accessControl, prefix)) { table.addRow(tableRow(catalog, name, "TABLE")); } } if (FilterUtil.emptyOrEquals(typeFilter, "VIEW")) { for (SchemaTableName name : listViews(session, metadata, accessControl, prefix)) { table.addRow(tableRow(catalog, name, "VIEW")); } } } return table.build().cursor(); }
private InternalTable buildTables(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_TABLES)); for (QualifiedTablePrefix prefix : prefixes) { Set<SchemaTableName> tables = listTables(session, metadata, accessControl, prefix); Set<SchemaTableName> views = listViews(session, metadata, accessControl, prefix); for (SchemaTableName name : union(tables, views)) { // if table and view names overlap, the view wins String type = views.contains(name) ? "VIEW" : "BASE TABLE"; table.add( prefix.getCatalogName(), name.getSchemaName(), name.getTableName(), type); } } return table.build(); }
private InternalTable buildSchemata(Session session, String catalogName) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_SCHEMATA)); for (String schema : listSchemas(session, metadata, accessControl, catalogName)) { table.add(catalogName, schema); } return table.build(); }
private InternalTable buildTablePrivileges(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_TABLE_PRIVILEGES)); for (QualifiedTablePrefix prefix : prefixes) { List<GrantInfo> grants = ImmutableList.copyOf(listTablePrivileges(session, metadata, accessControl, prefix)); for (GrantInfo grant : grants) { table.add( grant.getGrantor().map(PrestoPrincipal::getName).orElse(null), grant.getGrantor().map(principal -> principal.getType().toString()).orElse(null), grant.getGrantee().getName(), grant.getGrantee().getType().toString(), prefix.getCatalogName(), grant.getSchemaTableName().getSchemaName(), grant.getSchemaTableName().getTableName(), grant.getPrivilegeInfo().getPrivilege().name(), grant.getPrivilegeInfo().isGrantOption() ? "YES" : "NO", grant.getWithHierarchy().map(withHierarchy -> withHierarchy ? "YES" : "NO").orElse(null)); } } return table.build(); }
private InternalTable buildColumns(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_COLUMNS)); for (QualifiedTablePrefix prefix : prefixes) { for (Entry<SchemaTableName, List<ColumnMetadata>> entry : listTableColumns(session, metadata, accessControl, prefix).entrySet()) { SchemaTableName tableName = entry.getKey(); int ordinalPosition = 1; for (ColumnMetadata column : entry.getValue()) { if (column.isHidden()) { continue; } table.add( prefix.getCatalogName(), tableName.getSchemaName(), tableName.getTableName(), column.getName(), ordinalPosition, null, "YES", column.getType().getDisplayName(), column.getComment(), column.getExtraInfo()); ordinalPosition++; } } } return table.build(); }
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Builder table = InMemoryRecordSet.builder(CATALOG_TABLE); for (Map.Entry<String, ConnectorId> entry : listCatalogs(session, metadata, accessControl).entrySet()) { table.addRow(entry.getKey(), entry.getValue().toString()); } return table.build().cursor(); } }
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Optional<String> catalogFilter = FilterUtil.stringFilter(constraint, 1); Builder table = InMemoryRecordSet.builder(METADATA); for (String catalog : filter(listCatalogs(session, metadata, accessControl).keySet(), catalogFilter)) { for (String schema : listSchemas(session, metadata, accessControl, catalog)) { table.addRow(schema, catalog); } } return table.build().cursor(); } }
@Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession connectorSession, TupleDomain<Integer> constraint) { Session session = toSession(transactionHandle, connectorSession); Optional<String> catalogFilter = stringFilter(constraint, 0); Optional<String> schemaFilter = stringFilter(constraint, 1); Optional<String> tableFilter = stringFilter(constraint, 2); Builder table = InMemoryRecordSet.builder(METADATA); for (String catalog : filter(listCatalogs(session, metadata, accessControl).keySet(), catalogFilter)) { QualifiedTablePrefix prefix = FilterUtil.tablePrefix(catalog, schemaFilter, tableFilter); for (Entry<SchemaTableName, List<ColumnMetadata>> entry : listTableColumns(session, metadata, accessControl, prefix).entrySet()) { addColumnRows(table, catalog, entry.getKey(), entry.getValue()); } } return table.build().cursor(); }
Set<String> allowedSchemas = listSchemas(session, metadata, accessControl, catalogName); for (String schema : allowedSchemas) { accessControl.checkCanShowTablesMetadata(session.getRequiredTransactionId(), session.getIdentity(), new CatalogSchemaName(catalogName, schema));
@Override protected Node visitShowCatalogs(ShowCatalogs node, Void context) { List<Expression> rows = listCatalogs(session, metadata, accessControl).keySet().stream() .map(name -> row(new StringLiteral(name))) .collect(toList()); Optional<Expression> predicate = Optional.empty(); Optional<String> likePattern = node.getLikePattern(); if (likePattern.isPresent()) { predicate = Optional.of(new LikePredicate(identifier("Catalog"), new StringLiteral(likePattern.get()), Optional.empty())); } return simpleQuery( selectList(new AllColumns()), aliased(new Values(rows), "catalogs", ImmutableList.of("Catalog")), predicate, Optional.of(ordering(ascending("Catalog")))); }
Set<String> allowedSchemas = listSchemas(session, metadata, accessControl, catalogName); for (String schema : allowedSchemas) { accessControl.checkCanShowTablesMetadata(session.getRequiredTransactionId(), session.getIdentity(), new CatalogSchemaName(catalogName, schema));
@Override protected Node visitShowCatalogs(ShowCatalogs node, Void context) { List<Expression> rows = listCatalogs(session, metadata, accessControl).keySet().stream() .map(name -> row(new StringLiteral(name))) .collect(toList()); Optional<Expression> predicate = Optional.empty(); Optional<String> likePattern = node.getLikePattern(); if (likePattern.isPresent()) { predicate = Optional.of(new LikePredicate(identifier("Catalog"), new StringLiteral(likePattern.get()), Optional.empty())); } return simpleQuery( selectList(new AllColumns()), aliased(new Values(rows), "catalogs", ImmutableList.of("Catalog")), predicate, Optional.of(ordering(ascending("Catalog")))); }