Guest User

Untitled

a guest
May 24th, 2018
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. --issue_status_changes, a view which shows all issue status changes
  2. CREATE OR REPLACE VIEW issue_status_changes AS
  3. SELECT *
  4. FROM dblink('host=localhost dbname=redmine user=root password=123456',
  5. '
  6. SELECT
  7. i.id AS issue_id,
  8. s1.name AS old_status,
  9. s2.name AS new_status,
  10. j.created_on AS created_on
  11. FROM journal_details AS jd
  12. INNER JOIN journals AS j ON j.id = jd.journal_id AND jd.property = ''attr'' AND jd.prop_key = ''status_id''
  13. INNER JOIN issues AS i ON i.id = j.journalized_id AND ''Issue'' = j.journalized_type
  14. INNER JOIN issue_statuses AS s1 ON s1.id = jd.old_value::integer
  15. INNER JOIN issue_statuses AS s2 ON s2.id = jd.value::integer
  16. ORDER BY j.created_on ASC
  17. ')
  18. AS t1(issue_id INTEGER, old_status VARCHAR, new_status VARCHAR, created_on TIMESTAMP);
  19. ---------------------------------------------------------------
  20.  
  21.  
  22. --issue_statuses, a view which shows all issues and it's status names
  23. CREATE OR REPLACE VIEW issue_statuses AS
  24. SELECT *
  25. FROM dblink('host=localhost dbname=redmine user=root password=123456',
  26. '
  27. SELECT i.id, s.name
  28. FROM issues AS i
  29. INNER JOIN issue_statuses AS s ON s.id = i.status_id
  30. ')
  31. AS t1(id INTEGER, "name" VARCHAR);
  32. ---------------------------------------------------------------
  33.  
  34.  
  35. --data_flow_vw, the timer view
  36. CREATE OR REPLACE VIEW data_flow_vw AS
  37. SELECT
  38. CASE
  39. WHEN NOT EXISTS (SELECT issue_id FROM issue_status_changes WHERE issue_id = a.ticket) --no any issue changes
  40. THEN
  41. array_to_string(
  42. array(
  43. SELECT name
  44. FROM issue_statuses
  45. WHERE id = a.ticket
  46. LIMIT 1
  47. ), ', '
  48. )
  49. WHEN EXISTS (SELECT issue_id FROM issue_status_changes WHERE issue_id = a.ticket AND created_on >= a.start_time AND created_on <= a.end_time)
  50. THEN
  51. array_to_string(
  52. array(
  53. (
  54. SELECT old_status AS status
  55. FROM issue_status_changes
  56. WHERE issue_id = a.ticket
  57. AND created_on >= a.start_time
  58. AND created_on <= a.end_time
  59. ORDER BY created_on ASC
  60. LIMIT 1
  61. )
  62. UNION ALL
  63. (
  64. SELECT new_status AS status
  65. FROM issue_status_changes
  66. WHERE issue_id = a.ticket
  67. AND created_on >= a.start_time
  68. AND created_on <= a.end_time
  69. ORDER BY created_on ASC
  70. )
  71. ), ', '
  72. )
  73. WHEN EXISTS (SELECT issue_id FROM issue_status_changes WHERE issue_id = a.ticket AND created_on < a.start_time ORDER BY created_on DESC LIMIT 1)
  74. THEN
  75. array_to_string(
  76. array(
  77. SELECT new_status
  78. FROM issue_status_changes
  79. WHERE issue_id = a.ticket AND created_on < a.start_time
  80. ORDER BY created_on DESC
  81. LIMIT 1
  82. ), ', '
  83. )
  84. ELSE
  85. array_to_string(
  86. array(
  87. SELECT old_status
  88. FROM issue_status_changes
  89. WHERE issue_id = a.ticket AND created_on > a.end_time
  90. ORDER BY created_on ASC
  91. LIMIT 1
  92. ), ', '
  93. )
  94. END AS status,
  95. a.*
  96. FROM
  97. (
  98. SELECT
  99. wi.id,
  100. wi.wbegin AS start_int,
  101. wi.wend AS end_int,
  102. (di.daydate::TIMESTAMP + wi.wbegin * '1 second'::INTERVAL) AS start_time,
  103. (di.daydate::TIMESTAMP + wi.wend * '1 second'::INTERVAL) AS end_time,
  104. 'Timer' AS type,
  105. array_to_string(
  106. array(
  107. SELECT a.name
  108. FROM t4u_projects AS a
  109. WHERE pj.parentkey like '%' || a.id || '%'
  110. ORDER BY a.id ASC
  111. ), ', '
  112. ) || ', ' || t.name AS info,
  113. t.name AS info_2,
  114. pn.surname AS developer,
  115. (wi.wend - wi.wbegin) AS duration,
  116. '' AS time_elapsed,
  117. pj.name AS project,
  118. substring(t.name FROM E'#(\\d+)')::INTEGER AS ticket,
  119. '' AS min_guess,
  120. '' AS best_guess,
  121. '' AS max_guess,
  122. '' AS calculated_estimate,
  123. wi.wcomment AS developer_comment,
  124. '' AS approver_comment,
  125. '' AS time_pass_requested,
  126. '' AS time_estimate_approved,
  127. '' AS time_estimate_approved_by,
  128. '' AS time_estimate_approved_at
  129. FROM t4u_workitems AS wi
  130. INNER JOIN t4u_dayinfos AS di ON wi.dayinfo_id = di.id
  131. INNER JOIN t4u_persons AS pn ON pn.id = di.person_id
  132. INNER JOIN t4u_tasks AS t ON t.id = wi.task_id
  133. INNER JOIN t4u_projects AS pj ON pj.id = t.project_id
  134. ) AS a
Add Comment
Please, Sign In to add comment