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

changeset 231
dcb1d5a7ea3a
parent 227
f0ede8046b59
child 232
296e12ff8d1c
--- 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<VersionSummary> =
         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<Issue> =
         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 <T : Entity> applyFilter(filter: Filter<T>, 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)
     }
 
     //</editor-fold>

mercurial