/** * Calls the connector table service getTableNames method. * @param uri location * @param prefixSearch if false, the method looks for exact match for the uri * @return list of table names */ public List<QualifiedName> getQualifiedNames(final String uri, final boolean prefixSearch) { final List<QualifiedName> result = Lists.newArrayList(); connectorManager.getTableServices().forEach(service -> { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); try { final Map<String, List<QualifiedName>> names = service.getTableNames(connectorRequestContext, Lists.newArrayList(uri), prefixSearch); final List<QualifiedName> qualifiedNames = names.values().stream().flatMap(Collection::stream) .collect(Collectors.toList()); result.addAll(qualifiedNames); } catch (final UnsupportedOperationException uoe) { log.debug("Table service doesn't support getting table names by URI. Skipping"); } }); return result; }
/** * Calls the connector table service getTableNames method. * @param uris list of locations * @param prefixSearch if false, the method looks for exact match for the uri * @return list of table names */ public Map<String, List<QualifiedName>> getQualifiedNames(final List<String> uris, final boolean prefixSearch) { final Map<String, List<QualifiedName>> result = Maps.newHashMap(); connectorManager.getTableServices().forEach(service -> { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); try { final Map<String, List<QualifiedName>> names = service.getTableNames(connectorRequestContext, uris, prefixSearch); names.forEach((uri, qNames) -> { final List<QualifiedName> existingNames = result.get(uri); if (existingNames == null) { result.put(uri, qNames); } else { existingNames.addAll(qNames); } }); } catch (final UnsupportedOperationException uoe) { log.debug("Table service doesn't support getting table names by URI. Skipping"); } }); return result; }
futures.add(threadServiceManager.getExecutor().submit(() -> { final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); try { final Map<String, List<QualifiedName>> partitionNames = service
/** * * Returns table if <code>useCache</code> is true and object exists in the cache. If <code>useCache</code> is false * or object does not exists in the cache, it is retrieved from the store. * @param name table name * @param useCache true, if table can be retrieved from cache * @return table dto */ @Cacheable(key = "'table.' + #name", condition = "#useCache") public TableInfo get(final QualifiedName name, final boolean useCache) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); final ConnectorTableService service = connectorManager.getTableService(name); return service.get(connectorRequestContext, name); }
/** * Calls the connector table service exists method. * @param name table name * @return true, if the object exists. */ public boolean exists(final QualifiedName name) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorTableService service = connectorManager.getTableService(name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); return service.exists(connectorRequestContext, name); } }
/** * Calls the connector table service create method. * @param name table name * @param tableInfo table object */ public void create(final QualifiedName name, final TableInfo tableInfo) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorTableService service = connectorManager.getTableService(name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); service.create(connectorRequestContext, tableInfo); }
/** * Calls the connector table service delete method. * @param name table name */ @CacheEvict(key = "'table.' + #name") public void delete(final QualifiedName name) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorTableService service = connectorManager.getTableService(name); log.info("Drop table {}", name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); service.delete(connectorRequestContext, name); }
/** * Calls the connector table service update method. * @param name table name * @param tableInfo table object */ @CacheEvict(key = "'table.' + #name") public void update(final QualifiedName name, final TableInfo tableInfo) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorTableService service = connectorManager.getTableService(name); try { log.info("Updating table {}", name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); service.update(connectorRequestContext, tableInfo); } catch (UnsupportedOperationException ignored) { //Ignore if the operation is not supported, so that we can at least go ahead and save the user metadata. log.debug("Catalog {} does not support the table update operation.", name.getCatalogName()); } }
/** * {@inheritDoc} */ @Override public List<String> getPartitionUris( final QualifiedName name, @Nullable final Sort sort, @Nullable final Pageable pageable, @Nullable final GetPartitionsRequestDto getPartitionsRequestDto ) { List<String> result = Lists.newArrayList(); if (tableService.exists(name)) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorPartitionService service = connectorManager.getPartitionService(name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); try { result = service.getPartitionUris(connectorRequestContext, name, converterUtil.toPartitionListRequest( getPartitionsRequestDto, pageable, sort), this.getTableInfo(name)); } catch (final UnsupportedOperationException uoe) { log.info("Catalog {} doesn't support getPartitionUris. Ignoring.", name.getCatalogName()); } } return result; }
/** * {@inheritDoc} */ @Override public List<String> getPartitionKeys( final QualifiedName name, @Nullable final Sort sort, @Nullable final Pageable pageable, @Nullable final GetPartitionsRequestDto getPartitionsRequestDto ) { List<String> result = Lists.newArrayList(); if (tableService.exists(name)) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorPartitionService service = connectorManager.getPartitionService(name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); try { result = service.getPartitionKeys( connectorRequestContext, name, converterUtil.toPartitionListRequest(getPartitionsRequestDto, pageable, sort), this.getTableInfo(name) ); } catch (final UnsupportedOperationException uoe) { log.debug("Catalog {} doesn't support getPartitionKeys. Ignoring.", name.getCatalogName()); } } return result; }
/** * Calls the connector table service rename method. * @param oldName old table name * @param newName new table name * @param isMView true, if the object is a view */ @CacheEvict(key = "'table.' + #oldName") public void rename( final QualifiedName oldName, final QualifiedName newName, final boolean isMView ) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorTableService service = connectorManager.getTableService(oldName); try { log.info("Renaming {} {} to {}", isMView ? "view" : "table", oldName, newName); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); service.rename(connectorRequestContext, oldName, newName); } catch (UnsupportedOperationException ignored) { } }
final CatalogDto result = new CatalogDto(); result.setName(name); final ConnectorRequestContext context = converterUtil.toConnectorContext(MetacatContextManager.getContext()); final List<String> databases = Lists.newArrayList(); configs.forEach(config -> {
/** * {@inheritDoc} */ @Override public Integer count(final QualifiedName name) { Integer result = 0; if (tableService.exists(name)) { final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); final ConnectorPartitionService service = connectorManager.getPartitionService(name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); result = service.getPartitionCount(connectorRequestContext, name, this.getTableInfo(name)); } return result; }
try { final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); tableNames = service.listNames(connectorRequestContext, viewDbName, null, null, null); } catch (Exception ignored) {
final ConnectorDatabaseService service = connectorManager.getDatabaseService(name); final ConnectorTableService tableService = connectorManager.getTableService(name); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext);
= converterUtil.toConnectorContext(metacatRequestContext); final List<PartitionInfo> partitionInfos = service.getPartitions(connectorRequestContext, name, converterUtil.toPartitionListRequest(requestDto, null, null), this.getTableInfo(name));
/** * {@inheritDoc} */ @Override public void update(final QualifiedName name, final DatabaseDto dto) { validate(name); log.info("Updating schema {}", name); final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); eventBus.post(new MetacatUpdateDatabasePreEvent(name, metacatRequestContext, this)); try { final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); connectorManager.getDatabaseService(name) .update(connectorRequestContext, converterUtil.fromDatabaseDto(dto)); } catch (UnsupportedOperationException ignored) { } if (dto.getDefinitionMetadata() != null) { log.info("Saving user metadata for schema {}", name); userMetadataService.saveDefinitionMetadata(name, metacatRequestContext.getUserName(), Optional.of(dto.getDefinitionMetadata()), true); } eventBus.post(new MetacatUpdateDatabasePostEvent(name, metacatRequestContext, this)); }
/** * {@inheritDoc} */ @Override public void delete(final QualifiedName name) { validate(name); final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); this.authorizationService.checkPermission(metacatRequestContext.getUserName(), name, MetacatOperation.DELETE); log.info("Dropping schema {}", name); final DatabaseDto dto = get(name, GetDatabaseServiceParameters.builder() .disableOnReadMetadataIntercetor(false) .includeUserMetadata(true) .includeTableNames(true) .build()); eventBus.post(new MetacatDeleteDatabasePreEvent(name, metacatRequestContext, this, dto)); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); connectorManager.getDatabaseService(name).delete(connectorRequestContext, name); // Delete definition metadata if it exists if (userMetadataService.getDefinitionMetadata(name).isPresent()) { log.info("Deleting user metadata for schema {}", name); userMetadataService.deleteDefinitionMetadata(ImmutableList.of(name)); } eventBus.post(new MetacatDeleteDatabasePostEvent(name, metacatRequestContext, this, dto)); }
final PartitionsSaveRequestDto dto, final QualifiedName name, final List<PartitionDto> partitionDtos) { final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); List<HasMetadata> deletePartitions = Lists.newArrayList(); List<PartitionDto> deletePartitionDtos = Lists.newArrayList();
/** * {@inheritDoc} */ @Override public DatabaseDto create(final QualifiedName name, final DatabaseDto dto) { validate(name); log.info("Creating schema {}", name); final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext(); eventBus.post(new MetacatCreateDatabasePreEvent(name, metacatRequestContext, this)); final ConnectorRequestContext connectorRequestContext = converterUtil.toConnectorContext(metacatRequestContext); connectorManager.getDatabaseService(name).create(connectorRequestContext, converterUtil.fromDatabaseDto(dto)); if (dto.getDefinitionMetadata() != null) { log.info("Saving user metadata for schema {}", name); userMetadataService.saveDefinitionMetadata(name, metacatRequestContext.getUserName(), Optional.of(dto.getDefinitionMetadata()), true); } final DatabaseDto createdDto = get(name, GetDatabaseServiceParameters.builder() .disableOnReadMetadataIntercetor(true) .includeUserMetadata(dto.getDefinitionMetadata() != null) .includeTableNames(true) .build()); eventBus.post(new MetacatCreateDatabasePostEvent(name, metacatRequestContext, this, createdDto)); return createdDto; }