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

changeset 263
aa22103809cd
parent 260
fb2ae2d63a56
child 268
ca5501d851fa
equal deleted inserted replaced
262:c357c4e69b9e 263:aa22103809cd
532 setIntOrNull(i++, resolved?.id) 532 setIntOrNull(i++, resolved?.id)
533 } 533 }
534 return i 534 return i
535 } 535 }
536 536
537 override fun listIssues(project: Project): List<Issue> =
538 withStatement("$issueQuery where i.project = ?") {
539 setInt(1, project.id)
540 queryAll { it.extractIssue() }
541 }
542
537 override fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> = 543 override fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> =
538 withStatement( 544 withStatement(
539 """$issueQuery where 545 """$issueQuery where i.project = ? and
540 (not ? or i.project = ?) and
541 (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and 546 (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and
542 (not ? or component = ?) and (not ? or component is null) 547 (not ? or component = ?) and (not ? or component is null)
543 """.trimIndent() 548 """.trimIndent()
544 ) { 549 ) {
545 fun <T : Entity> applyFilter(search: T?, fflag: Int, nflag: Int, idcol: Int) { 550 fun <T : Entity> applyFilter(search: T?, fflag: Int, nflag: Int, idcol: Int) {
551 setBoolean(fflag, true) 556 setBoolean(fflag, true)
552 setBoolean(nflag, false) 557 setBoolean(nflag, false)
553 setInt(idcol, search.id) 558 setInt(idcol, search.id)
554 } 559 }
555 } 560 }
556 setBoolean(1, true) 561 setInt(1, project.id)
557 setInt(2, project.id) 562 applyFilter(version, 2, 4, 3)
558 applyFilter(version, 3, 5, 4) 563 applyFilter(component, 5, 7, 6)
559 applyFilter(component, 6, 8, 7)
560 564
561 queryAll { it.extractIssue() } 565 queryAll { it.extractIssue() }
562 } 566 }
563 567
564 override fun findIssue(id: Int): Issue? = 568 override fun findIssue(id: Int): Issue? =
625 setInt(9, eventid) 629 setInt(9, eventid)
626 executeUpdate() 630 executeUpdate()
627 } 631 }
628 } 632 }
629 633
634 //</editor-fold>
635
636 //<editor-fold desc="Issue Relations">
637 override fun insertIssueRelation(rel: IssueRelation) {
638 withStatement(
639 """
640 insert into lpit_issue_relation (from_issue, to_issue, type)
641 values (?, ?, ?::relation_type)
642 on conflict do nothing
643 """.trimIndent()
644 ) {
645 if (rel.reverse) {
646 setInt(2, rel.from.id)
647 setInt(1, rel.to.id)
648 } else {
649 setInt(1, rel.from.id)
650 setInt(2, rel.to.id)
651 }
652 setEnum(3, rel.type)
653 executeUpdate()
654 }
655 }
656
657 override fun deleteIssueRelation(rel: IssueRelation) {
658 withStatement("delete from lpit_issue_relation where from_issue = ? and to_issue = ? and type=?::relation_type") {
659 if (rel.reverse) {
660 setInt(2, rel.from.id)
661 setInt(1, rel.to.id)
662 } else {
663 setInt(1, rel.from.id)
664 setInt(2, rel.to.id)
665 }
666 setEnum(3, rel.type)
667 executeUpdate()
668 }
669 }
670
671 override fun listIssueRelations(issue: Issue): List<IssueRelation> = buildList {
672 withStatement("select to_issue, type from lpit_issue_relation where from_issue = ?") {
673 setInt(1, issue.id)
674 queryAll { IssueRelation(issue, findIssue(it.getInt("to_issue"))!!, it.getEnum("type"), false) }
675 }.forEach(this::add)
676 withStatement("select from_issue, type from lpit_issue_relation where to_issue = ?") {
677 setInt(1, issue.id)
678 queryAll { IssueRelation(issue, findIssue(it.getInt("from_issue"))!!, it.getEnum("type"), true) }
679 }.forEach(this::add)
680 }
630 //</editor-fold> 681 //</editor-fold>
631 682
632 //<editor-fold desc="IssueComment"> 683 //<editor-fold desc="IssueComment">
633 684
634 private fun ResultSet.extractIssueComment() = 685 private fun ResultSet.extractIssueComment() =

mercurial