aboutsummaryrefslogtreecommitdiffstats
path: root/cps-ri
diff options
context:
space:
mode:
authorToine Siebelink <toine.siebelink@est.tech>2025-02-11 17:35:40 +0000
committerGerrit Code Review <gerrit@onap.org>2025-02-11 17:35:40 +0000
commitd2b635356141166c2ea05b79a5a96da31c909764 (patch)
treeaf420d3726ad55c1b764c9b3c55c5d62df3712f9 /cps-ri
parentb259b50361c7d844b8e62946463053752dcbc522 (diff)
parent56d550a3513681b1b20d612a21072b9955b12b82 (diff)
Merge "Query data nodes with limit"
Diffstat (limited to 'cps-ri')
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java12
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentQueryBuilder.java19
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQuery.java4
-rw-r--r--cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQueryImpl.java9
4 files changed, 38 insertions, 6 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java
index ac6fe38ee7..e102765a64 100644
--- a/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/ri/CpsDataPersistenceServiceImpl.java
@@ -23,6 +23,7 @@
package org.onap.cps.ri;
+import static org.onap.cps.api.CpsQueryService.NO_LIMIT;
import static org.onap.cps.api.parameters.PaginationOption.NO_PAGINATION;
import com.google.common.collect.ImmutableSet;
@@ -223,10 +224,19 @@ public class CpsDataPersistenceServiceImpl implements CpsDataPersistenceService
description = "Time taken to query data nodes")
public List<DataNode> queryDataNodes(final String dataspaceName, final String anchorName, final String cpsPath,
final FetchDescendantsOption fetchDescendantsOption) {
+ return queryDataNodes(dataspaceName, anchorName, cpsPath, fetchDescendantsOption, NO_LIMIT);
+ }
+
+ @Override
+ public List<DataNode> queryDataNodes(final String dataspaceName,
+ final String anchorName,
+ final String cpsPath,
+ final FetchDescendantsOption fetchDescendantsOption,
+ final int queryResultLimit) {
final AnchorEntity anchorEntity = getAnchorEntity(dataspaceName, anchorName);
final CpsPathQuery cpsPathQuery = getCpsPathQuery(cpsPath);
final Collection<FragmentEntity> fragmentEntities =
- fragmentRepository.findByAnchorAndCpsPath(anchorEntity, cpsPathQuery);
+ fragmentRepository.findByAnchorAndCpsPath(anchorEntity, cpsPathQuery, queryResultLimit);
return createDataNodesFromFragmentEntities(fetchDescendantsOption, fragmentEntities);
}
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentQueryBuilder.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentQueryBuilder.java
index 3f3ca79900..bf354be024 100644
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentQueryBuilder.java
+++ b/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentQueryBuilder.java
@@ -51,13 +51,18 @@ public class FragmentQueryBuilder {
private EntityManager entityManager;
/**
- * Create a sql query to retrieve by anchor(id) and cps path.
+ * Create a sql query to retrieve by anchor(id) and cps path with an optional queryResultLimit on results.
*
* @param anchorEntity the anchor
* @param cpsPathQuery the cps path query to be transformed into a sql query
+ * @param queryResultLimit queryResultLimit number of returned entities
+ * (if the queryResultLimit is less than 1 the method returns all related entities)
+ *
* @return a executable query object
*/
- public Query getQueryForAnchorAndCpsPath(final AnchorEntity anchorEntity, final CpsPathQuery cpsPathQuery) {
+ public Query getQueryForAnchorAndCpsPath(final AnchorEntity anchorEntity,
+ final CpsPathQuery cpsPathQuery,
+ final int queryResultLimit) {
final StringBuilder sqlStringBuilder = new StringBuilder();
final Map<String, Object> queryParameters = new HashMap<>();
@@ -65,6 +70,7 @@ public class FragmentQueryBuilder {
addWhereClauseForAnchor(anchorEntity, sqlStringBuilder, queryParameters);
addNodeSearchConditions(cpsPathQuery, sqlStringBuilder, queryParameters, false);
addSearchSuffix(cpsPathQuery, sqlStringBuilder, queryParameters);
+ addLimitClause(sqlStringBuilder, queryParameters, queryResultLimit);
return getQuery(sqlStringBuilder.toString(), queryParameters, FragmentEntity.class);
}
@@ -219,6 +225,15 @@ public class FragmentQueryBuilder {
}
}
+ private static void addLimitClause(final StringBuilder sqlStringBuilder,
+ final Map<String, Object> queryParameters,
+ final int queryResultLimit) {
+ if (queryResultLimit > 0) {
+ sqlStringBuilder.append(" LIMIT :queryResultLimit");
+ queryParameters.put("queryResultLimit", queryResultLimit);
+ }
+ }
+
private static Integer getTextValueAsInt(final CpsPathQuery cpsPathQuery) {
try {
return Integer.parseInt(cpsPathQuery.getTextFunctionConditionValue());
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQuery.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQuery.java
index 9c1929eaf7..4ee6555b79 100644
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQuery.java
+++ b/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQuery.java
@@ -29,7 +29,9 @@ import org.onap.cps.ri.models.DataspaceEntity;
import org.onap.cps.ri.models.FragmentEntity;
public interface FragmentRepositoryCpsPathQuery {
- List<FragmentEntity> findByAnchorAndCpsPath(AnchorEntity anchorEntity, CpsPathQuery cpsPathQuery);
+
+ List<FragmentEntity> findByAnchorAndCpsPath(AnchorEntity anchorEntity, CpsPathQuery cpsPathQuery,
+ int queryResultLimit);
List<FragmentEntity> findByDataspaceAndCpsPath(DataspaceEntity dataspaceEntity,
CpsPathQuery cpsPathQuery, List<Long> anchorIds);
diff --git a/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQueryImpl.java b/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQueryImpl.java
index e8c2725670..80fbe9b6cd 100644
--- a/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQueryImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/ri/repository/FragmentRepositoryCpsPathQueryImpl.java
@@ -41,10 +41,15 @@ public class FragmentRepositoryCpsPathQueryImpl implements FragmentRepositoryCps
@Override
@Transactional
public List<FragmentEntity> findByAnchorAndCpsPath(final AnchorEntity anchorEntity,
- final CpsPathQuery cpsPathQuery) {
- final Query query = fragmentQueryBuilder.getQueryForAnchorAndCpsPath(anchorEntity, cpsPathQuery);
+ final CpsPathQuery cpsPathQuery,
+ final int queryResultLimit) {
+ final Query query = fragmentQueryBuilder
+ .getQueryForAnchorAndCpsPath(anchorEntity, cpsPathQuery, queryResultLimit);
final List<FragmentEntity> fragmentEntities = query.getResultList();
log.debug("Fetched {} fragment entities by anchor and cps path.", fragmentEntities.size());
+ if (queryResultLimit > 0) {
+ log.debug("Result limited to {} entries", queryResultLimit);
+ }
return fragmentEntities;
}