Merge "Add memory usage to integration tests [UPDATED]"
[cps.git] / cps-ri / src / main / java / org / onap / cps / spi / repository / YangResourceRepository.java
index 0b48eaa..e833796 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2020 Pantheon.tech
- *  Modifications Copyright (C) Nordix Foundation
+ *  Modifications Copyright (C) 2021-2023 Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -20,9 +20,9 @@
 
 package org.onap.cps.spi.repository;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Set;
-import javax.validation.constraints.NotNull;
 import org.onap.cps.spi.entities.YangResourceEntity;
 import org.onap.cps.spi.entities.YangResourceModuleReference;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -32,16 +32,81 @@ import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface YangResourceRepository extends JpaRepository<YangResourceEntity, Long>,
-        SchemaSetYangResourceRepository {
+public interface YangResourceRepository extends JpaRepository<YangResourceEntity, Integer>,
+    YangResourceNativeRepository, SchemaSetYangResourceRepository {
 
-    List<YangResourceEntity> findAllByChecksumIn(@NotNull Set<String> checksum);
+    List<YangResourceEntity> findAllByChecksumIn(String[] checksums);
 
-    @Query(value = "SELECT module_name, revision FROM yang_resource", nativeQuery = true)
-    List<YangResourceModuleReference> findAllModuleNameAndRevision();
+    default List<YangResourceEntity> findAllByChecksumIn(final Collection<String> checksums) {
+        return findAllByChecksumIn(checksums.toArray(new String[0]));
+    }
 
-    @Query(value = "SELECT id FROM yang_resource WHERE module_name=:name and revision=:revision", nativeQuery = true)
-    Long getIdByModuleNameAndRevision(@Param("name") String moduleName, @Param("revision") String revision);
+    @Query(value = """
+            SELECT DISTINCT
+                yang_resource.module_name AS module_name,
+                yang_resource.revision    AS revision
+            FROM
+                     dataspace
+                JOIN schema_set ON schema_set.dataspace_id = dataspace.id
+                JOIN schema_set_yang_resources ON schema_set_yang_resources.schema_set_id = schema_set.id
+                JOIN yang_resource ON yang_resource.id = schema_set_yang_resources.yang_resource_id
+            WHERE
+                dataspace.name = :dataspaceName
+            """, nativeQuery = true)
+    Set<YangResourceModuleReference> findAllModuleReferencesByDataspace(@Param("dataspaceName") String dataspaceName);
+
+    @Query(value = """
+            SELECT DISTINCT
+                yang_resource.module_name AS module_name,
+                yang_resource.revision    AS revision
+            FROM
+                     dataspace
+                JOIN anchor ON anchor.dataspace_id = dataspace.id
+                JOIN schema_set ON schema_set.id = anchor.schema_set_id
+                JOIN schema_set_yang_resources ON schema_set_yang_resources.schema_set_id = schema_set.id
+                JOIN yang_resource ON yang_resource.id = schema_set_yang_resources.yang_resource_id
+            WHERE
+                    dataspace.name = :dataspaceName
+                AND anchor.name = :anchorName
+            """, nativeQuery = true)
+    Set<YangResourceModuleReference> findAllModuleReferencesByDataspaceAndAnchor(
+        @Param("dataspaceName") String dataspaceName, @Param("anchorName") String anchorName);
+
+    @Query(value = """
+            SELECT DISTINCT
+                yang_resource.*
+            FROM
+                     dataspace
+                JOIN anchor ON anchor.dataspace_id = dataspace.id
+                JOIN schema_set ON schema_set.id = anchor.schema_set_id
+                JOIN schema_set_yang_resources ON schema_set_yang_resources.schema_set_id = schema_set.id
+                JOIN yang_resource ON yang_resource.id = schema_set_yang_resources.yang_resource_id
+            WHERE
+                    dataspace.name = :dataspaceName
+                AND anchor.name = :anchorName
+            """, nativeQuery = true)
+    Set<YangResourceEntity> findAllModuleDefinitionsByDataspaceAndAnchor(
+            @Param("dataspaceName") String dataspaceName, @Param("anchorName") String anchorName);
+
+    @Query(value = """
+            SELECT DISTINCT
+                yang_resource.*
+            FROM
+                     dataspace
+                JOIN schema_set ON schema_set.dataspace_id = dataspace.id
+                JOIN schema_set_yang_resources ON schema_set_yang_resources.schema_set_id = schema_set.id
+                JOIN yang_resource ON yang_resource.id = schema_set_yang_resources.yang_resource_id
+            WHERE
+                    dataspace.name = :dataspaceName
+                AND yang_resource.module_name = ANY ( :moduleNames )
+            """, nativeQuery = true)
+    Set<YangResourceModuleReference> findAllModuleReferencesByDataspaceAndModuleNames(
+            @Param("dataspaceName") String dataspaceName, @Param("moduleNames") String[] moduleNames);
+
+    default Set<YangResourceModuleReference> findAllModuleReferencesByDataspaceAndModuleNames(
+        final String dataspaceName, final Collection<String> moduleNames) {
+        return findAllModuleReferencesByDataspaceAndModuleNames(dataspaceName, moduleNames.toArray(new String[0]));
+    }
 
     @Modifying
     @Query(value = "DELETE FROM yang_resource yr WHERE NOT EXISTS "