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, |
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") |