src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt

changeset 225
87328572e36f
parent 215
028792eda9b7
child 227
f0ede8046b59
equal deleted inserted replaced
224:da975b1f188d 225:87328572e36f
127 setInt(4, id) 127 setInt(4, id)
128 } 128 }
129 executeUpdate() 129 executeUpdate()
130 } 130 }
131 } 131 }
132 //</editor-fold> 132 //</editor-fold>
133 133
134 //<editor-fold desc="Version"> 134 //<editor-fold desc="Version">
135 //language=SQL 135 //language=SQL
136 private val versionQuery = "select versionid, project, name, node, ordinal, status from lpit_version" 136 private val versionQuery = "select versionid, project, name, node, ordinal, status, release, eol from lpit_version"
137 137
138 private fun ResultSet.extractVersion() = 138 private fun ResultSet.extractVersion() =
139 Version(getInt("versionid"), getInt("project")).apply { 139 Version(getInt("versionid"), getInt("project")).apply {
140 name = getString("name") 140 name = getString("name")
141 node = getString("node") 141 node = getString("node")
142 ordinal = getInt("ordinal") 142 ordinal = getInt("ordinal")
143 release = getDate("release")
144 eol = getDate("eol")
143 status = getEnum("status") 145 status = getEnum("status")
144 } 146 }
145 147
146 override fun listVersions(project: Project): List<Version> = 148 override fun listVersions(project: Project): List<Version> =
147 withStatement("$versionQuery where project = ? order by ordinal desc, lower(name) desc") { 149 withStatement("$versionQuery where project = ? order by ordinal desc, lower(name) desc") {
169 summary as ( 171 summary as (
170 select versionid, phase, isresolved, total 172 select versionid, phase, isresolved, total
171 from lpit_version v 173 from lpit_version v
172 left join issues using (versionid) 174 left join issues using (versionid)
173 ) 175 )
174 select v.versionid, project, name, node, ordinal, status, 176 select v.versionid, project, name, node, ordinal, status, release, eol,
175 ro.total as resolved_open, ra.total as resolved_active, rd.total as resolved_done, 177 ro.total as resolved_open, ra.total as resolved_active, rd.total as resolved_done,
176 ao.total as affected_open, aa.total as affected_active, ad.total as affected_done 178 ao.total as affected_open, aa.total as affected_active, ad.total as affected_done
177 from lpit_version v 179 from lpit_version v
178 left join summary ro on ro.versionid = v.versionid and ro.phase = 0 and ro.isresolved 180 left join summary ro on ro.versionid = v.versionid and ro.phase = 0 and ro.isresolved
179 left join summary ra on ra.versionid = v.versionid and ra.phase = 1 and ra.isresolved 181 left join summary ra on ra.versionid = v.versionid and ra.phase = 1 and ra.isresolved
210 setString(2, node) 212 setString(2, node)
211 querySingle { it.extractVersion() } 213 querySingle { it.extractVersion() }
212 } 214 }
213 215
214 override fun insertVersion(version: Version) { 216 override fun insertVersion(version: Version) {
215 withStatement("insert into lpit_version (name, node, ordinal, status, project) values (?, ?, ?, ?::version_status, ?)") { 217 withStatement("insert into lpit_version (name, node, ordinal, status, project, release, eol) values (?, ?, ?, ?::version_status, ?, ?, ?)") {
216 with(version) { 218 with(version) {
217 setStringSafe(1, name) 219 setStringSafe(1, name)
218 setStringSafe(2, node) 220 setStringSafe(2, node)
219 setInt(3, ordinal) 221 setInt(3, ordinal)
220 setEnum(4, status) 222 setEnum(4, status)
221 setInt(5, version.projectid) 223 setInt(5, version.projectid)
224 setDateOrNull(6, version.release)
225 setDateOrNull(7, version.eol)
222 } 226 }
223 executeUpdate() 227 executeUpdate()
224 } 228 }
225 229
226 } 230 }
227 231
228 override fun updateVersion(version: Version) { 232 override fun updateVersion(version: Version) {
229 withStatement("update lpit_version set name = ?, node = ?, ordinal = ?, status = ?::version_status where versionid = ?") { 233 withStatement("update lpit_version set name = ?, node = ?, ordinal = ?, status = ?::version_status, release=?,eol=? where versionid = ?") {
230 with(version) { 234 with(version) {
231 setStringSafe(1, name) 235 setStringSafe(1, name)
232 setStringSafe(2, node) 236 setStringSafe(2, node)
233 setInt(3, ordinal) 237 setInt(3, ordinal)
234 setEnum(4, status) 238 setEnum(4, status)
235 setInt(5, id) 239 setDateOrNull(5, version.release)
236 } 240 setDateOrNull(6, version.eol)
237 executeUpdate() 241 setInt(7, id)
238 } 242 }
239 } 243 executeUpdate()
240 //</editor-fold> 244 }
245 }
246 //</editor-fold>
241 247
242 //<editor-fold desc="Component"> 248 //<editor-fold desc="Component">
243 //language=SQL 249 //language=SQL
244 private val componentQuery = 250 private val componentQuery =
245 """ 251 """
345 setInt(col, component.id) 351 setInt(col, component.id)
346 executeUpdate() 352 executeUpdate()
347 } 353 }
348 } 354 }
349 355
350 //</editor-fold> 356 //</editor-fold>
351 357
352 //<editor-fold desc="Project"> 358 //<editor-fold desc="Project">
353 359
354 //language=SQL 360 //language=SQL
355 private val projectQuery = 361 private val projectQuery =
356 """ 362 """
357 select projectid, name, node, ordinal, description, repourl, 363 select projectid, name, node, ordinal, description, repourl,
439 } 445 }
440 summary 446 summary
441 } 447 }
442 } 448 }
443 449
444 //</editor-fold> 450 //</editor-fold>
445 451
446 //<editor-fold desc="Issue"> 452 //<editor-fold desc="Issue">
447 453
448 //language=SQL 454 //language=SQL
449 private val issueQuery = 455 private val issueQuery =
450 """ 456 """
451 select issueid, 457 select issueid,
483 updated = getTimestamp("updated") 489 updated = getTimestamp("updated")
484 eta = getDate("eta") 490 eta = getDate("eta")
485 } 491 }
486 492
487 //language=SQL 493 //language=SQL
488 fun versionQuery(table: String) = 494 val queryAffected =
489 """ 495 """
490 select versionid, project, name, status, ordinal, node 496 $versionQuery join lpit_issue_affected_version using (versionid)
491 from lpit_version join $table using (versionid) 497 where issueid = ? order by ordinal, name
492 where issueid = ?
493 order by ordinal, name
494 """.trimIndent() 498 """.trimIndent()
495 499
496 issue.affectedVersions = withStatement(versionQuery("lpit_issue_affected_version")) { 500 //language=SQL
501 val queryResolved =
502 """
503 $versionQuery join lpit_issue_resolved_version using (versionid)
504 where issueid = ? order by ordinal, name
505 """.trimIndent()
506
507 issue.affectedVersions = withStatement(queryAffected) {
497 setInt(1, issue.id) 508 setInt(1, issue.id)
498 queryAll { it.extractVersion() } 509 queryAll { it.extractVersion() }
499 } 510 }
500 issue.resolvedVersions = withStatement(versionQuery("lpit_issue_resolved_version")) { 511 issue.resolvedVersions = withStatement(queryResolved) {
501 setInt(1, issue.id) 512 setInt(1, issue.id)
502 queryAll { it.extractVersion() } 513 queryAll { it.extractVersion() }
503 } 514 }
504 return issue 515 return issue
505 } 516 }
638 executeUpdate() 649 executeUpdate()
639 } 650 }
640 insertVersionInfo(issue.id, issue) 651 insertVersionInfo(issue.id, issue)
641 } 652 }
642 653
643 //</editor-fold> 654 //</editor-fold>
644 655
645 //<editor-fold desc="IssueComment"> 656 //<editor-fold desc="IssueComment">
646 657
647 private fun ResultSet.extractIssueComment() = 658 private fun ResultSet.extractIssueComment() =
648 IssueComment(getInt("commentid"), getInt("issueid")).apply { 659 IssueComment(getInt("commentid"), getInt("issueid")).apply {
649 created = getTimestamp("created") 660 created = getTimestamp("created")
650 updated = getTimestamp("updated") 661 updated = getTimestamp("updated")
691 executeUpdate() 702 executeUpdate()
692 updateIssueDate.executeUpdate() 703 updateIssueDate.executeUpdate()
693 } 704 }
694 } 705 }
695 } 706 }
696 //</editor-fold> 707 //</editor-fold>
697 } 708 }

mercurial