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

changeset 284
671c1c8fbf1c
parent 268
ca5501d851fa
child 292
703591e739f4
equal deleted inserted replaced
283:ea6181255423 284:671c1c8fbf1c
24 */ 24 */
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.CommitRef
29 import de.uapcore.lightpit.types.IssueHistoryType 30 import de.uapcore.lightpit.types.IssueHistoryType
30 import de.uapcore.lightpit.types.RelationType 31 import de.uapcore.lightpit.types.RelationType
31 import de.uapcore.lightpit.types.WebColor 32 import de.uapcore.lightpit.types.WebColor
32 import de.uapcore.lightpit.viewmodel.ComponentSummary 33 import de.uapcore.lightpit.viewmodel.ComponentSummary
33 import de.uapcore.lightpit.viewmodel.IssueSummary 34 import de.uapcore.lightpit.viewmodel.IssueSummary
356 //<editor-fold desc="Project"> 357 //<editor-fold desc="Project">
357 358
358 //language=SQL 359 //language=SQL
359 private val projectQuery = 360 private val projectQuery =
360 """ 361 """
361 select projectid, name, node, ordinal, description, repourl, 362 select projectid, name, node, ordinal, description, vcs, repourl,
362 userid, username, lastname, givenname, mail 363 userid, username, lastname, givenname, mail
363 from lpit_project 364 from lpit_project
364 left join lpit_user owner on lpit_project.owner = owner.userid 365 left join lpit_user owner on lpit_project.owner = owner.userid
365 """.trimIndent() 366 """.trimIndent()
366 367
368 Project(getInt("projectid")).apply { 369 Project(getInt("projectid")).apply {
369 name = getString("name") 370 name = getString("name")
370 node = getString("node") 371 node = getString("node")
371 ordinal = getInt("ordinal") 372 ordinal = getInt("ordinal")
372 description = getString("description") 373 description = getString("description")
374 vcs = getEnum("vcs")
373 repoUrl = getString("repourl") 375 repoUrl = getString("repourl")
374 owner = extractOptionalUser() 376 owner = extractOptionalUser()
375 } 377 }
376 378
377 private fun PreparedStatement.setProject(index: Int, project: Project): Int { 379 private fun PreparedStatement.setProject(index: Int, project: Project): Int {
379 with(project) { 381 with(project) {
380 setStringSafe(i++, name) 382 setStringSafe(i++, name)
381 setStringSafe(i++, node) 383 setStringSafe(i++, node)
382 setInt(i++, ordinal) 384 setInt(i++, ordinal)
383 setStringOrNull(i++, description) 385 setStringOrNull(i++, description)
386 setEnum(i++, vcs)
384 setStringOrNull(i++, repoUrl) 387 setStringOrNull(i++, repoUrl)
385 setIntOrNull(i++, owner?.id) 388 setIntOrNull(i++, owner?.id)
386 } 389 }
387 return i 390 return i
388 } 391 }
403 setString(1, node) 406 setString(1, node)
404 querySingle { it.extractProject() } 407 querySingle { it.extractProject() }
405 } 408 }
406 409
407 override fun insertProject(project: Project) { 410 override fun insertProject(project: Project) {
408 withStatement("insert into lpit_project (name, node, ordinal, description, repourl, owner) values (?, ?, ?, ?, ?, ?)") { 411 withStatement("insert into lpit_project (name, node, ordinal, description, vcs, repourl, owner) values (?, ?, ?, ?, ?::vcstype, ?, ?)") {
409 setProject(1, project) 412 setProject(1, project)
410 executeUpdate() 413 executeUpdate()
411 } 414 }
412 } 415 }
413 416
414 override fun updateProject(project: Project) { 417 override fun updateProject(project: Project) {
415 withStatement("update lpit_project set name = ?, node = ?, ordinal = ?, description = ?, repourl = ?, owner = ? where projectid = ?") { 418 withStatement("update lpit_project set name = ?, node = ?, ordinal = ?, description = ?, vcs = ?::vcstype, repourl = ?, owner = ? where projectid = ?") {
416 val col = setProject(1, project) 419 val col = setProject(1, project)
417 setInt(col, project.id) 420 setInt(col, project.id)
418 executeUpdate() 421 executeUpdate()
419 } 422 }
420 } 423 }
468 } 471 }
469 } 472 }
470 summary 473 summary
471 } 474 }
472 } 475 }
476
477 override fun mergeCommitRefs(refs: List<CommitRef>) {
478 withStatement("insert into lpit_commit_ref (issueid, commit_hash, commit_brief) values (?,?,?) on conflict do nothing") {
479 refs.forEach { ref ->
480 setInt(1, ref.issueId)
481 setString(2, ref.hash)
482 setString(3, ref.message)
483 executeUpdate()
484 }
485 }
486 }
473 487
474 //</editor-fold> 488 //</editor-fold>
475 489
476 //<editor-fold desc="Issue"> 490 //<editor-fold desc="Issue">
477 491
633 setStringOrNull(8, issue.resolved?.name) 647 setStringOrNull(8, issue.resolved?.name)
634 setInt(9, eventid) 648 setInt(9, eventid)
635 executeUpdate() 649 executeUpdate()
636 } 650 }
637 } 651 }
652
653 override fun listCommitRefs(issue: Issue): List<CommitRef> =
654 withStatement("select commit_hash, commit_brief from lpit_commit_ref where issueid = ?") {
655 setInt(1, issue.id)
656 queryAll {
657 CommitRef(
658 issueId = issue.id,
659 hash = it.getString("commit_hash"),
660 message = it.getString("commit_brief")
661 )
662 }
663 }
638 664
639 //</editor-fold> 665 //</editor-fold>
640 666
641 //<editor-fold desc="Issue Relations"> 667 //<editor-fold desc="Issue Relations">
642 override fun insertIssueRelation(rel: IssueRelation) { 668 override fun insertIssueRelation(rel: IssueRelation) {

mercurial