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;
}