summaryrefslogtreecommitdiffstats
path: root/cps-ri
diff options
context:
space:
mode:
authormpriyank <priyank.maheshwari@est.tech>2022-08-19 15:25:58 +0100
committermpriyank <priyank.maheshwari@est.tech>2022-08-22 11:53:34 +0100
commit754f24ff9e9165be375731947108fbc58c07e16d (patch)
tree596c13e32e17f5cfa1c6b5d70f221acfaa1ae29d /cps-ri
parenta1a33160054bb9e7ffa57e18270dfa0f9a2ad77e (diff)
Performance Improvement: Detach FragmentEntities
- Querying fragment entities and moving them to detached state as they are not needed to be managed by the JPA provider. - Addressed legacy change to provide actual type instead of var generic type. Issue-ID: CPS-1126 Issue-ID: CPS-1207 Change-Id: Ibbdbb197a6d480a8b2f7b9cae6052b82ea3686c6 Signed-off-by: mpriyank <priyank.maheshwari@est.tech>
Diffstat (limited to 'cps-ri')
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepositoryCpsPathQueryImpl.java23
1 files changed, 18 insertions, 5 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepositoryCpsPathQueryImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepositoryCpsPathQueryImpl.java
index 37202498f..f07f7f8d5 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepositoryCpsPathQueryImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepositoryCpsPathQueryImpl.java
@@ -20,12 +20,14 @@
package org.onap.cps.spi.repository;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
+import javax.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.onap.cps.cpspath.parser.CpsPathPrefixType;
import org.onap.cps.cpspath.parser.CpsPathQuery;
@@ -43,8 +45,9 @@ public class FragmentRepositoryCpsPathQueryImpl implements FragmentRepositoryCps
private final JsonObjectMapper jsonObjectMapper;
@Override
+ @Transactional
public List<FragmentEntity> findByAnchorAndCpsPath(final int anchorId, final CpsPathQuery cpsPathQuery) {
- final var sqlStringBuilder = new StringBuilder("SELECT * FROM FRAGMENT WHERE anchor_id = :anchorId");
+ final StringBuilder sqlStringBuilder = new StringBuilder("SELECT * FROM FRAGMENT WHERE anchor_id = :anchorId");
final Map<String, Object> queryParameters = new HashMap<>();
queryParameters.put("anchorId", anchorId);
sqlStringBuilder.append(" AND xpath SIMILAR TO :xpathRegex");
@@ -57,13 +60,23 @@ public class FragmentRepositoryCpsPathQueryImpl implements FragmentRepositoryCps
}
addTextFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters);
- final var query = entityManager.createNativeQuery(sqlStringBuilder.toString(), FragmentEntity.class);
+ final Query query = entityManager.createNativeQuery(sqlStringBuilder.toString(), FragmentEntity.class);
setQueryParameters(query, queryParameters);
- return query.getResultList();
+ return getFragmentEntitiesAsStream(query);
+ }
+
+ private List<FragmentEntity> getFragmentEntitiesAsStream(final Query query) {
+ final List<FragmentEntity> fragmentEntities = new ArrayList<>();
+ query.getResultStream().forEach(fragmentEntity -> {
+ fragmentEntities.add((FragmentEntity) fragmentEntity);
+ entityManager.detach(fragmentEntity);
+ });
+
+ return fragmentEntities;
}
private static String getSimilarToXpathSqlRegex(final CpsPathQuery cpsPathQuery) {
- final var xpathRegexBuilder = new StringBuilder();
+ final StringBuilder xpathRegexBuilder = new StringBuilder();
if (CpsPathPrefixType.ABSOLUTE.equals(cpsPathQuery.getCpsPathPrefixType())) {
xpathRegexBuilder.append(escapeXpath(cpsPathQuery.getXpathPrefix()));
} else {
@@ -96,7 +109,7 @@ public class FragmentRepositoryCpsPathQueryImpl implements FragmentRepositoryCps
.append(" OR attributes @> jsonb_build_object(:textLeafName, json_build_array(:textValue))");
queryParameters.put("textLeafName", cpsPathQuery.getTextFunctionConditionLeafName());
queryParameters.put("textValue", cpsPathQuery.getTextFunctionConditionValue());
- final var textValueAsInt = getTextValueAsInt(cpsPathQuery);
+ final Integer textValueAsInt = getTextValueAsInt(cpsPathQuery);
if (textValueAsInt != null) {
sqlStringBuilder.append(" OR attributes @> jsonb_build_object(:textLeafName, :textValueAsInt)");
sqlStringBuilder