Change SQL query syntax for delete resource/template
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / resource-resolution / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / resource / resolution / db / TemplateResolutionRepository.kt
1 /*
2  * Copyright (C) 2019 Bell Canada.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.db
17
18 import org.springframework.data.jpa.repository.JpaRepository
19 import org.springframework.data.jpa.repository.Modifying
20 import org.springframework.data.jpa.repository.Query
21 import org.springframework.data.repository.query.Param
22 import org.springframework.stereotype.Repository
23 import javax.transaction.Transactional
24
25 @Repository
26 interface TemplateResolutionRepository : JpaRepository<TemplateResolution, String> {
27
28     @Query(
29         value = """
30         SELECT * FROM TEMPLATE_RESOLUTION
31              WHERE resource_type = :resourceType AND resource_id = :resourceId
32              AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion
33              AND artifact_name = :artifactName AND occurrence = :occurrence
34              ORDER BY creation_date DESC LIMIT 1
35         """,
36         nativeQuery = true
37     )
38     fun findByResourceIdAndResourceTypeAndBlueprintNameAndBlueprintVersionAndArtifactNameAndOccurrence(
39         resourceId: String,
40         resourceType: String,
41         blueprintName: String?,
42         blueprintVersion: String?,
43         artifactName: String,
44         occurrence: Int
45     ): TemplateResolution?
46
47     @Query(
48         value = """
49         SELECT * FROM TEMPLATE_RESOLUTION WHERE resolution_key = :key 
50              AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion 
51              AND artifact_name = :artifactName AND occurrence = :occurrence
52              ORDER BY creation_date DESC LIMIT 1
53         """,
54         nativeQuery = true
55     )
56     fun findByResolutionKeyAndBlueprintNameAndBlueprintVersionAndArtifactNameAndOccurrence(
57         key: String,
58         blueprintName: String?,
59         blueprintVersion: String?,
60         artifactName: String,
61         occurrence: Int
62     ): TemplateResolution?
63
64     @Query(
65         value = """
66          SELECT * FROM TEMPLATE_RESOLUTION WHERE resolution_key = :key 
67             AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion 
68             AND artifact_name = :artifactName 
69             AND occurrence <=  :firstN
70         """,
71         nativeQuery = true
72     )
73     fun findFirstNOccurrences(
74         @Param("key")key: String,
75         @Param("blueprintName")blueprintName: String,
76         @Param("blueprintVersion")blueprintVersion: String,
77         @Param("artifactName")artifactName: String,
78         @Param("firstN")begin: Int
79     ): List<TemplateResolution>
80
81     @Query(
82         value = """
83         SELECT * FROM TEMPLATE_RESOLUTION WHERE resolution_key = :key 
84             AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion 
85             AND artifact_name = :artifactName 
86             AND occurrence > ( 
87                 select max(occurrence) - :lastN from RESOURCE_RESOLUTION 
88                 WHERE resolution_key = :key 
89                     AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion 
90                     AND artifact_name = :artifactName) 
91                     ORDER BY occurrence DESC, creation_date DESC
92       """,
93         nativeQuery = true
94     )
95     fun findLastNOccurrences(
96         @Param("key")key: String,
97         @Param("blueprintName")blueprintName: String,
98         @Param("blueprintVersion")blueprintVersion: String,
99         @Param("artifactName")artifactName: String,
100         @Param("lastN")begin: Int
101     ): List<TemplateResolution>
102
103     @Query(
104         value = """
105         SELECT * FROM TEMPLATE_RESOLUTION WHERE resolution_key = :key 
106             AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion 
107             AND artifact_name = :artifactName 
108             AND occurrence BETWEEN :begin AND :end 
109             ORDER BY occurrence DESC, creation_date DESC
110        """,
111         nativeQuery = true
112     )
113     fun findOccurrencesWithinRange(
114         @Param("key")key: String,
115         @Param("blueprintName")blueprintName: String,
116         @Param("blueprintVersion")blueprintVersion: String,
117         @Param("artifactName")artifactName: String,
118         @Param("begin")begin: Int,
119         @Param("end")end: Int
120     ): List<TemplateResolution>
121
122     fun findByResolutionKeyAndBlueprintNameAndBlueprintVersionAndArtifactName(
123         resolutionKey: String,
124         blueprintName: String,
125         blueprintVersion: String,
126         artifactPrefix: String
127     ): List<TemplateResolution>
128
129     @Query(
130         "select tr.resolutionKey from TemplateResolution tr where tr.blueprintName = :blueprintName and tr.blueprintVersion = :blueprintVersion and tr.artifactName = :artifactName and tr.occurrence = :occurrence"
131     )
132     fun findResolutionKeysByBlueprintNameAndBlueprintVersionAndArtifactNameAndOccurrence(
133         @Param("blueprintName") blueprintName: String?,
134         @Param("blueprintVersion") blueprintVersion: String?,
135         @Param("artifactName") artifactName: String,
136         @Param("occurrence") occurrence: Int
137     ): List<String>?
138
139     @Query(
140         "select tr.artifactName as artifactName, tr.resolutionKey as resolutionKey from TemplateResolution tr where tr.blueprintName = :blueprintName and tr.blueprintVersion = :blueprintVersion and tr.occurrence = :occurrence"
141     )
142     fun findArtifactNamesAndResolutionKeysByBlueprintNameAndBlueprintVersionAndOccurrence(
143         @Param("blueprintName") blueprintName: String?,
144         @Param("blueprintVersion") blueprintVersion: String?,
145         @Param("occurrence") occurrence: Int
146     ): List<TemplateResolutionSelector>?
147
148     @Transactional
149     fun deleteByResourceIdAndResourceTypeAndBlueprintNameAndBlueprintVersionAndArtifactNameAndOccurrence(
150         resourceId: String,
151         resourceType: String,
152         blueprintName: String?,
153         blueprintVersion: String?,
154         artifactName: String,
155         occurrence: Int
156     )
157
158     @Transactional
159     fun deleteByResolutionKeyAndBlueprintNameAndBlueprintVersionAndArtifactNameAndOccurrence(
160         key: String,
161         blueprintName: String?,
162         blueprintVersion: String?,
163         artifactName: String,
164         occurrence: Int
165     )
166
167     @Transactional
168     fun deleteByResourceIdAndResourceTypeAndBlueprintNameAndBlueprintVersionAndArtifactName(
169         resourceId: String,
170         resourceType: String,
171         blueprintName: String,
172         blueprintVersion: String,
173         artifactName: String
174     ): Int
175
176     @Transactional
177     fun deleteByResolutionKeyAndBlueprintNameAndBlueprintVersionAndArtifactName(
178         key: String,
179         blueprintName: String,
180         blueprintVersion: String,
181         artifactName: String
182     ): Int
183
184     @Transactional
185     @Modifying
186     @Query(
187         value = """
188         DELETE FROM TEMPLATE_RESOLUTION WHERE resolution_key = :resolutionKey
189             AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion
190             AND artifact_name = :artifactName
191             AND occurrence > (
192                 SELECT MAX(occurrence) - :lastN FROM (
193                     SELECT occurrence FROM TEMPLATE_RESOLUTION
194                     WHERE resolution_key = :resolutionKey
195                         AND blueprint_name = :blueprintName
196                         AND blueprint_version = :blueprintVersion
197                         AND artifact_name = :artifactName) AS o
198                 )
199     """,
200         nativeQuery = true
201     )
202     fun deleteTemplates(
203         blueprintName: String,
204         blueprintVersion: String,
205         artifactName: String,
206         resolutionKey: String,
207         lastN: Int
208     ): Int
209
210     @Transactional
211     @Modifying
212     @Query(
213         value = """
214         DELETE FROM TEMPLATE_RESOLUTION WHERE resource_type = :resourceType
215             AND resource_id = :resourceId AND artifact_name = :artifactName
216             AND blueprint_name = :blueprintName AND blueprint_version = :blueprintVersion
217             AND occurrence > (
218                 SELECT MAX(occurrence) - :lastN FROM (
219                     SELECT occurrence FROM TEMPLATE_RESOLUTION
220                     WHERE resource_type = :resourceType
221                         AND resource_id = :resourceId
222                         AND blueprint_name = :blueprintName
223                         AND blueprint_version = :blueprintVersion
224                         AND artifact_name = :artifactName) AS o
225                 )
226     """,
227         nativeQuery = true
228     )
229     fun deleteTemplates(
230         blueprintName: String,
231         blueprintVersion: String,
232         artifactName: String,
233         resourceType: String,
234         resourceId: String,
235         lastN: Int
236     ): Int
237 }