sundapeng commented on code in PR #5200: URL: https://github.com/apache/paimon/pull/5200#discussion_r1977541986
########## paimon-core/src/main/java/org/apache/paimon/rest/RESTCatalog.java: ########## @@ -257,16 +270,133 @@ public void alterDatabase(String name, List<PropertyChange> changes, boolean ign @Override public List<String> listTables(String databaseName) throws DatabaseNotExistException { + try { + String pageToken = null; + Map<String, String> queryParams = Maps.newHashMap(); + Integer maxResults = context.options().get(RESTCatalogOptions.REST_PAGE_MAX_RESULTS); + if (Objects.nonNull(maxResults) && maxResults > 0) { + queryParams.put(MAX_RESULTS, String.valueOf(maxResults)); + } + List<String> tables = new ArrayList<>(); + do { + queryParams.put(PAGE_TOKEN, pageToken); + ListTablesResponse response = + client.get( + resourcePaths.tables(databaseName), + queryParams, + ListTablesResponse.class, + restAuthFunction); + if (Objects.nonNull(response)) { + pageToken = response.getNextPageToken(); + tables.addAll(response.getTables()); + } else { + LOG.warn( + "response of listTables for {} is null with params {}", + databaseName, + queryParams); + } + } while (pageToken != null); + return tables; + } catch (NoSuchResourceException e) { + throw new DatabaseNotExistException(databaseName); + } + } + + @Override + public PagedList<String> listTablesPaged( + String databaseName, Integer maxResults, String pageToken) + throws DatabaseNotExistException { + Map<String, String> queryParams = Maps.newHashMap(); + if (Objects.nonNull(maxResults) && maxResults > 0) { + queryParams.put(MAX_RESULTS, maxResults.toString()); + } + if (Objects.nonNull(pageToken)) { + queryParams.put(PAGE_TOKEN, pageToken); + } try { ListTablesResponse response = client.get( resourcePaths.tables(databaseName), + queryParams, ListTablesResponse.class, restAuthFunction); - if (response.getTables() != null) { - return response.getTables(); + if (Objects.nonNull(response) && Objects.nonNull(response.getTables())) { + return new PagedList<>(response.getTables(), response.getNextPageToken()); + } else { + LOG.warn( + "response of listTablesPaged for {} is null with maxResults {} and pageToken {}", + databaseName, + maxResults, + pageToken); + return new PagedList<>(Collections.emptyList(), null); + } + } catch (NoSuchResourceException e) { + throw new DatabaseNotExistException(databaseName); + } + } + + @Override + public PagedList<Table> listTableDetailsPaged( + String databaseName, Integer maxResults, String pageToken) + throws DatabaseNotExistException { + Map<String, String> queryParams = Maps.newHashMap(); + if (Objects.nonNull(maxResults) && maxResults > 0) { + queryParams.put(MAX_RESULTS, maxResults.toString()); + } + if (Objects.nonNull(pageToken)) { + queryParams.put(PAGE_TOKEN, pageToken); + } + try { + ListTableDetailsResponse response = + client.get( + resourcePaths.tableDetails(databaseName), + queryParams, + ListTableDetailsResponse.class, + restAuthFunction); + if (Objects.nonNull(response) && Objects.nonNull(response.getTableDetails())) { + return new PagedList<>( + response.getTableDetails().stream() + .map( + getTableResponse -> { + Identifier identifier = + Identifier.create( + databaseName, + getTableResponse.getName()); + try { Review Comment: Is it possible to reuse some utility methods, such as `getTable(Identifier identifier)` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@paimon.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org