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

changeset 268
ca5501d851fa
parent 263
aa22103809cd
child 284
671c1c8fbf1c
equal deleted inserted replaced
267:d8ec2d8ffa82 268:ca5501d851fa
25 25
26 package de.uapcore.lightpit.dao 26 package de.uapcore.lightpit.dao
27 27
28 import de.uapcore.lightpit.entities.* 28 import de.uapcore.lightpit.entities.*
29 import de.uapcore.lightpit.types.IssueHistoryType 29 import de.uapcore.lightpit.types.IssueHistoryType
30 import de.uapcore.lightpit.types.RelationType
30 import de.uapcore.lightpit.types.WebColor 31 import de.uapcore.lightpit.types.WebColor
31 import de.uapcore.lightpit.viewmodel.ComponentSummary 32 import de.uapcore.lightpit.viewmodel.ComponentSummary
32 import de.uapcore.lightpit.viewmodel.IssueSummary 33 import de.uapcore.lightpit.viewmodel.IssueSummary
33 import de.uapcore.lightpit.viewmodel.VersionSummary 34 import de.uapcore.lightpit.viewmodel.VersionSummary
34 import org.intellij.lang.annotations.Language 35 import org.intellij.lang.annotations.Language
478 private val issueQuery = 479 private val issueQuery =
479 """ 480 """
480 select issueid, 481 select issueid,
481 i.project, p.name as projectname, p.node as projectnode, 482 i.project, p.name as projectname, p.node as projectnode,
482 component, c.name as componentname, c.node as componentnode, 483 component, c.name as componentname, c.node as componentnode,
483 status, category, subject, i.description, 484 status, phase, category, subject, i.description,
484 userid, username, givenname, lastname, mail, 485 userid, username, givenname, lastname, mail,
485 created, updated, eta, affected, resolved 486 created, updated, eta, affected, resolved
486 from lpit_issue i 487 from lpit_issue i
487 join lpit_project p on i.project = projectid 488 join lpit_project p on i.project = projectid
489 join lpit_issue_phases using (status)
488 left join lpit_component c on component = c.id 490 left join lpit_component c on component = c.id
489 left join lpit_user on userid = assignee 491 left join lpit_user on userid = assignee
490 """.trimIndent() 492 """.trimIndent()
491 493
492 private fun ResultSet.extractIssue(): Issue { 494 private fun ResultSet.extractIssue(): Issue {
532 setIntOrNull(i++, resolved?.id) 534 setIntOrNull(i++, resolved?.id)
533 } 535 }
534 return i 536 return i
535 } 537 }
536 538
537 override fun listIssues(project: Project): List<Issue> = 539 override fun listIssues(project: Project, includeDone: Boolean): List<Issue> =
538 withStatement("$issueQuery where i.project = ?") { 540 withStatement("$issueQuery where i.project = ? and (? or phase < 2)") {
539 setInt(1, project.id) 541 setInt(1, project.id)
542 setBoolean(2, includeDone)
540 queryAll { it.extractIssue() } 543 queryAll { it.extractIssue() }
541 } 544 }
542 545
543 override fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> = 546 override fun listIssues(project: Project, includeDone: Boolean, version: Version?, component: Component?): List<Issue> =
544 withStatement( 547 withStatement(
545 """$issueQuery where i.project = ? and 548 """$issueQuery where i.project = ? and
549 (? or phase < 2) and
546 (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and 550 (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and
547 (not ? or component = ?) and (not ? or component is null) 551 (not ? or component = ?) and (not ? or component is null)
548 """.trimIndent() 552 """.trimIndent()
549 ) { 553 ) {
550 fun <T : Entity> applyFilter(search: T?, fflag: Int, nflag: Int, idcol: Int) { 554 fun <T : Entity> applyFilter(search: T?, fflag: Int, nflag: Int, idcol: Int) {
557 setBoolean(nflag, false) 561 setBoolean(nflag, false)
558 setInt(idcol, search.id) 562 setInt(idcol, search.id)
559 } 563 }
560 } 564 }
561 setInt(1, project.id) 565 setInt(1, project.id)
562 applyFilter(version, 2, 4, 3) 566 setBoolean(2, includeDone)
563 applyFilter(component, 5, 7, 6) 567 applyFilter(version, 3, 5, 4)
568 applyFilter(component, 6, 8, 7)
564 569
565 queryAll { it.extractIssue() } 570 queryAll { it.extractIssue() }
566 } 571 }
567 572
568 override fun findIssue(id: Int): Issue? = 573 override fun findIssue(id: Int): Issue? =
676 withStatement("select from_issue, type from lpit_issue_relation where to_issue = ?") { 681 withStatement("select from_issue, type from lpit_issue_relation where to_issue = ?") {
677 setInt(1, issue.id) 682 setInt(1, issue.id)
678 queryAll { IssueRelation(issue, findIssue(it.getInt("from_issue"))!!, it.getEnum("type"), true) } 683 queryAll { IssueRelation(issue, findIssue(it.getInt("from_issue"))!!, it.getEnum("type"), true) }
679 }.forEach(this::add) 684 }.forEach(this::add)
680 } 685 }
686
687 override fun getIssueRelationMap(project: Project, includeDone: Boolean): IssueRelationMap =
688 withStatement(
689 """
690 select r.from_issue, r.to_issue, r.type
691 from lpit_issue_relation r
692 join lpit_issue i on i.issueid = r.from_issue
693 join lpit_issue_phases p on i.status = p.status
694 where i.project = ? and (? or p.phase < 2)
695 """.trimIndent()
696 ) {
697 setInt(1, project.id)
698 setBoolean(2, includeDone)
699 queryAll { Pair(it.getInt("from_issue"), Pair(it.getInt("to_issue"), it.getEnum<RelationType>("type"))) }
700 }.groupBy({it.first},{it.second})
681 //</editor-fold> 701 //</editor-fold>
682 702
683 //<editor-fold desc="IssueComment"> 703 //<editor-fold desc="IssueComment">
684 704
685 private fun ResultSet.extractIssueComment() = 705 private fun ResultSet.extractIssueComment() =

mercurial