diff -r 95b419e054fa -r dcb1d5a7ea3a src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt --- a/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Wed Aug 18 16:02:40 2021 +0200 +++ b/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Thu Aug 19 14:51:04 2021 +0200 @@ -153,18 +153,13 @@ override fun listVersionSummaries(project: Project): List = withStatement( - """ - with version_map(issueid, versionid, isresolved) as ( - select issueid, versionid, true - from lpit_issue_resolved_version - union - select issueid, versionid, false - from lpit_issue_affected_version - ), - issues as ( - select versionid, phase, isresolved, count(issueid) as total - from lpit_issue - join version_map using (issueid) + """with + version_map as ( + select issueid, status, resolved as versionid, true as isresolved from lpit_issue + union all + select issueid, status, affected as versionid, false as isresolved from lpit_issue + ), issues as ( + select versionid, phase, isresolved, count(issueid) as total from version_map join lpit_issue_phases using (status) group by versionid, phase, isresolved ), @@ -461,7 +456,7 @@ component, c.name as componentname, c.node as componentnode, status, category, subject, i.description, userid, username, givenname, lastname, mail, - created, updated, eta + created, updated, eta, affected, resolved from lpit_issue i join lpit_project p on i.project = projectid left join lpit_component c on component = c.id @@ -490,30 +485,10 @@ created = getTimestamp("created") updated = getTimestamp("updated") eta = getDate("eta") + affected = getInt("affected").takeIf { it > 0 }?.let { findVersion(it) } + resolved = getInt("resolved").takeIf { it > 0 }?.let { findVersion(it) } } - //language=SQL - val queryAffected = - """ - $versionQuery join lpit_issue_affected_version using (versionid) - where issueid = ? order by ordinal, name - """.trimIndent() - - //language=SQL - val queryResolved = - """ - $versionQuery join lpit_issue_resolved_version using (versionid) - where issueid = ? order by ordinal, name - """.trimIndent() - - issue.affectedVersions = withStatement(queryAffected) { - setInt(1, issue.id) - queryAll { it.extractVersion() } - } - issue.resolvedVersions = withStatement(queryResolved) { - setInt(1, issue.id) - queryAll { it.extractVersion() } - } return issue } @@ -527,26 +502,18 @@ setStringOrNull(i++, description) setIntOrNull(i++, assignee?.id) setDateOrNull(i++, eta) + setIntOrNull(i++, affected?.id) + setIntOrNull(i++, resolved?.id) } return i } override fun listIssues(filter: IssueFilter): List = withStatement( - """ - with issue_version as ( - select issueid, versionid from lpit_issue_affected_version - union select issueid, versionid from lpit_issue_resolved_version - ), - filtered_issues as ( - select distinct issueid from lpit_issue - left join issue_version using (issueid) - where - (not ? or project = ?) and - (not ? or versionid = ?) and (not ? or versionid is null) and + """$issueQuery where + (not ? or i.project = ?) and + (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and (not ? or component = ?) and (not ? or component is null) - ) - $issueQuery join filtered_issues using (issueid) """.trimIndent() ) { fun applyFilter(filter: Filter, fflag: Int, nflag: Int, idcol: Int) { @@ -594,27 +561,10 @@ querySingle { it.extractIssue() } } - private fun insertVersionInfo(id: Int, issue: Issue) { - withStatement("insert into lpit_issue_affected_version (issueid, versionid) values (?,?)") { - setInt(1, id) - issue.affectedVersions.forEach { - setInt(2, it.id) - executeUpdate() - } - } - withStatement("insert into lpit_issue_resolved_version (issueid, versionid) values (?,?)") { - setInt(1, id) - issue.resolvedVersions.forEach { - setInt(2, it.id) - executeUpdate() - } - } - } - override fun insertIssue(issue: Issue): Int { val id = withStatement( """ - insert into lpit_issue (component, status, category, subject, description, assignee, eta, project) + insert into lpit_issue (component, status, category, subject, description, assignee, eta, affected, resolved, project) values (?, ?::issue_status, ?::issue_category, ?, ?, ?, ?, ?) returning issueid """.trimIndent() @@ -623,7 +573,6 @@ setInt(col, issue.project.id) querySingle { it.getInt(1) }!! } - insertVersionInfo(id, issue) return id } @@ -632,7 +581,7 @@ """ update lpit_issue set updated = now(), component = ?, status = ?::issue_status, category = ?::issue_category, subject = ?, - description = ?, assignee = ?, eta = ? + description = ?, assignee = ?, eta = ?, affected = ?, resolved = ? where issueid = ? """.trimIndent() ) { @@ -640,17 +589,6 @@ setInt(col, issue.id) executeUpdate() } - - // TODO: improve by only inserting / deleting changed version information - withStatement("delete from lpit_issue_affected_version where issueid = ?") { - setInt(1, issue.id) - executeUpdate() - } - withStatement("delete from lpit_issue_resolved_version where issueid = ?") { - setInt(1, issue.id) - executeUpdate() - } - insertVersionInfo(issue.id, issue) } //