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

Reply via email to