This is an automated email from the ASF dual-hosted git repository.

lahirujayathilake pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airavata-data-catalog.git


The following commit(s) were added to refs/heads/main by this push:
     new 6793363  Pagination support
6793363 is described below

commit 67933634ec7f160ce906d7f6664d3da5a497dc5b
Author: Miu0703 <[email protected]>
AuthorDate: Thu Feb 27 15:52:18 2025 -0500

    Pagination support
    
    * pagination feature
    ---------
    
    Co-authored-by: Miao <[email protected]>
---
 .../api/query/MetadataSchemaQueryExecutor.java     |  5 ++---
 .../api/query/MetadataSchemaQueryResult.java       |  5 ++---
 .../impl/MetadataSchemaQueryExecutorImpl.java      | 16 ++++++++++++---
 .../api/service/DataCatalogAPIService.java         | 24 ++++++++++++++--------
 .../api/service/DataCatalogService.java            |  2 +-
 .../api/service/impl/DataCatalogServiceImpl.java   |  4 ++--
 .../{DataCatalogAPI.proto => data_catalog.proto}   |  5 +++++
 7 files changed, 41 insertions(+), 20 deletions(-)

diff --git 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java
 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java
index b158662..4ac7a2a 100644
--- 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java
+++ 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java
@@ -5,7 +5,6 @@ import 
org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlValidateEx
 import org.apache.airavata.datacatalog.api.model.UserEntity;
 
 public interface MetadataSchemaQueryExecutor {
-
-    MetadataSchemaQueryResult execute(UserEntity userEntity, String sql)
-            throws MetadataSchemaSqlParseException, 
MetadataSchemaSqlValidateException;
+    MetadataSchemaQueryResult execute(UserEntity userEntity, String sql, int 
page, int pageSize)
+        throws MetadataSchemaSqlParseException, 
MetadataSchemaSqlValidateException;       
 }
diff --git 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryResult.java
 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryResult.java
index 9d2c0f6..ddbc30a 100644
--- 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryResult.java
+++ 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryResult.java
@@ -4,6 +4,5 @@ import java.util.List;
 
 import org.apache.airavata.datacatalog.api.DataProduct;
 
-public record MetadataSchemaQueryResult(List<DataProduct> dataProducts) {
-
-}
+public record MetadataSchemaQueryResult(List<DataProduct> dataProducts, int 
totalCount) {
+}
\ No newline at end of file
diff --git 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
index 2b6e2c5..c1dee8d 100644
--- 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
+++ 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
@@ -69,7 +69,7 @@ public class MetadataSchemaQueryExecutorImpl implements 
MetadataSchemaQueryExecu
     DataProductMapper dataProductMapper;
 
     @Override
-    public MetadataSchemaQueryResult execute(UserEntity userEntity, String sql)
+    public MetadataSchemaQueryResult execute(UserEntity userEntity, String 
sql, int page, int pageSize)
             throws MetadataSchemaSqlParseException, 
MetadataSchemaSqlValidateException {
 
         // Create a schema that contains the data_product table and all of the 
metadata
@@ -167,6 +167,17 @@ public class MetadataSchemaQueryExecutorImpl implements 
MetadataSchemaQueryExecu
                 tableAliases);
         logger.debug("Metadata schema query final sql: {}", finalSql);
 
+        // total count
+        String countSql = "SELECT COUNT(*) FROM (" + finalSql + ") as 
count_alias";
+        Number countResult = (Number) 
entityManager.createNativeQuery(countSql).getSingleResult();
+        int totalCount = countResult.intValue();
+
+        if (page > 0 && pageSize >0) {
+        // offset
+        int offset = (page - 1) * pageSize;
+        finalSql = finalSql + " LIMIT " + pageSize + " OFFSET " + offset;
+        }
+
         List<DataProductEntity> dataProductEntities = 
entityManager.createNativeQuery(finalSql, DataProductEntity.class)
                 .getResultList();
 
@@ -177,8 +188,7 @@ public class MetadataSchemaQueryExecutorImpl implements 
MetadataSchemaQueryExecu
             dataProductMapper.mapEntityToModel(dataProductEntity, dpBuilder);
             dataProducts.add(dpBuilder.build());
         }
-
-        return new MetadataSchemaQueryResult(dataProducts);
+        return new MetadataSchemaQueryResult(dataProducts, totalCount);
     }
 
     private SqlValidator getValidator(SchemaPlus schema, FrameworkConfig 
config, Planner planner) {
diff --git 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java
 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java
index 6208852..f53b5bf 100644
--- 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java
+++ 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java
@@ -194,17 +194,25 @@ public class DataCatalogAPIService extends 
DataCatalogAPIServiceGrpc.DataCatalog
             StreamObserver<DataProductSearchResponse> responseObserver) {
 
         try {
-            MetadataSchemaQueryResult searchResult = 
dataCatalogService.searchDataProducts(request.getUserInfo(),
-                    request.getSql());
+            MetadataSchemaQueryResult searchResult = 
dataCatalogService.searchDataProducts(
+                    request.getUserInfo(),
+                    request.getSql(),
+                    request.getPage(),
+                    request.getPageSize()
+            );
             List<DataProduct> dataProducts = searchResult.dataProducts();
-            
responseObserver.onNext(DataProductSearchResponse.newBuilder().addAllDataProducts(dataProducts).build());
+            int totalCount = searchResult.totalCount();
+            responseObserver.onNext(
+                    DataProductSearchResponse.newBuilder()
+                            .addAllDataProducts(dataProducts)
+                            .setTotalCount(totalCount)
+                            .build()
+            );
             responseObserver.onCompleted();
         } catch (MetadataSchemaSqlParseException e) {
-            responseObserver
-                    .onError(Status.INVALID_ARGUMENT.withDescription("Failed 
to parse SQL query.").asException());
+            
responseObserver.onError(Status.INVALID_ARGUMENT.withDescription("Failed to 
parse SQL query.").asException());
         } catch (MetadataSchemaSqlValidateException e) {
-            responseObserver
-                    .onError(Status.INVALID_ARGUMENT.withDescription("Failed 
to validate SQL query.").asException());
+            
responseObserver.onError(Status.INVALID_ARGUMENT.withDescription("Failed to 
validate SQL query.").asException());
         }
     }
 
@@ -328,4 +336,4 @@ public class DataCatalogAPIService extends 
DataCatalogAPIServiceGrpc.DataCatalog
         return false;
     }
 
-}
+}
\ No newline at end of file
diff --git 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java
 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java
index f6c6729..1129c3b 100644
--- 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java
+++ 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java
@@ -46,6 +46,6 @@ public interface DataCatalogService {
 
     MetadataSchemaField updateMetadataSchemaField(MetadataSchemaField 
metadataSchemaField);
 
-    MetadataSchemaQueryResult searchDataProducts(UserInfo userInfo, String sql)
+    MetadataSchemaQueryResult searchDataProducts(UserInfo userInfo, String 
sql, int page, int pageSize)
             throws MetadataSchemaSqlParseException, 
MetadataSchemaSqlValidateException;
 }
diff --git 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java
 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java
index 1b63aab..c4acf80 100644
--- 
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java
+++ 
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java
@@ -123,11 +123,11 @@ public class DataCatalogServiceImpl implements 
DataCatalogService {
     }
 
     @Override
-    public MetadataSchemaQueryResult searchDataProducts(UserInfo userInfo, 
String sql)
+    public MetadataSchemaQueryResult searchDataProducts(UserInfo userInfo, 
String sql, int page, int pageSize)
             throws MetadataSchemaSqlParseException, 
MetadataSchemaSqlValidateException {
         try {
             UserEntity userEntity = sharingManager.resolveUser(userInfo);
-            return metadataSchemaQueryExecutor.execute(userEntity, sql);
+            return metadataSchemaQueryExecutor.execute(userEntity, sql, page, 
pageSize);
         } catch (SharingException e) {
             throw new RuntimeException("Unable to resolve " + userInfo, e);
         }
diff --git a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto 
b/data-catalog-api/stubs/src/main/proto/data_catalog.proto
similarity index 98%
rename from data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
rename to data-catalog-api/stubs/src/main/proto/data_catalog.proto
index 24326e7..9ed5620 100644
--- a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
+++ b/data-catalog-api/stubs/src/main/proto/data_catalog.proto
@@ -129,9 +129,14 @@ message DataProductRemoveFromMetadataSchemaResponse {
 message DataProductSearchRequest {
     UserInfo user_info = 1;
     string sql = 2;
+    int32 page = 3;
+    int32 page_size = 4;
+    
+
 }
 message DataProductSearchResponse {
     repeated DataProduct data_products = 1;
+    int32 total_count = 2;
 }
 
 

Reply via email to