Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit c4f81a7

Browse files
committed
performance fix for challenges api.
1 parent 6bd3f9e commit c4f81a7

4 files changed

+462
-357
lines changed
Lines changed: 138 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,143 @@
11
SELECT
22
SKIP @firstRowIndex@
33
FIRST @pageSize@
4-
CASE WHEN (p.project_studio_spec_id IS NOT NULL) THEN 1 ELSE 0 END AS is_studio
5-
, pcl.description AS challenge_type
6-
, pn.value AS challenge_name
7-
, p.project_id AS challenge_id
8-
, p.tc_direct_project_id AS project_id
9-
, p.project_category_id AS project_type
10-
, pc3.parameter AS screening_scorecard_id
11-
, pc4.parameter AS review_scorecard_id
12-
, (select value from project_info pi70 where pi70.project_id = p.project_id and project_info_type_id = 70) AS cmc_task_id
13-
, pi4.value AS forum_id
14-
, (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id
15-
WHERE u1.project_id = p.project_id
16-
AND s1.submission_type_id IN (1, 3)
17-
AND s1.submission_status_id <> 5) AS num_submissions
18-
, (SELECT COUNT(*) FROM resource r WHERE r.project_id = p.project_id AND r.resource_role_id = 1) AS num_registrants
19-
, NVL((SELECT SUM(pr.number_of_submissions) FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 14), 0) AS number_of_checkpoints_prizes
20-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 14 AND pr.place = 1)::DECIMAL(10,2) AS top_checkpoint_prize
21-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 1)::DECIMAL(10,2) AS prize1
22-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 2)::DECIMAL(10,2) AS prize2
23-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 3)::DECIMAL(10,2) AS prize3
24-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 4)::DECIMAL(10,2) AS prize4
25-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 5)::DECIMAL(10,2) AS prize5
26-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 6)::DECIMAL(10,2) AS prize6
27-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 7)::DECIMAL(10,2) AS prize7
28-
, (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 8)::DECIMAL(10,2) AS prize8
29-
, (SELECT NVL(NVL(ppd.actual_start_time, psd.actual_start_time), ppd.scheduled_start_time)
30-
FROM project proj
31-
, OUTER project_phase psd
32-
, OUTER project_phase ppd
33-
WHERE psd.project_id = proj.project_id
34-
AND psd.phase_type_id = 2
35-
AND ppd.project_id = proj.project_id
36-
AND proj.project_id = p.project_id
37-
AND ppd.phase_type_id = 1) AS posting_date
38-
, NVL(NVL(pp1.actual_end_time, pp1.scheduled_end_time), NVL(pp2.actual_end_time, pp2.scheduled_end_time)) AS registration_end_date
39-
, NVL(pp15.actual_end_time , pp15.scheduled_end_time) AS checkpoint_submission_end_date
40-
, NVL(pp2.actual_end_time, pp2.scheduled_end_time) AS submission_end_date
41-
, NVL(NVL(pp6.actual_end_time, pp6.scheduled_end_time), NVL(pp4.actual_end_time, pp4.scheduled_end_time)) AS appeals_end_date
42-
, NVL(pp9.actual_end_time, pp9.scheduled_end_time) AS final_fix_end_date
43-
, NVL(nd_phase.actual_end_time, nd_phase.scheduled_end_time) AS current_phase_end_date
44-
, (( nd_phase.scheduled_end_time - CURRENT)::interval second(9) to second)::char(10)::int8 AS current_phase_remaining_time
45-
, pstatus.name AS current_status
46-
, CASE WHEN (nd_phase.scheduled_end_time IS NOT NULL) THEN
47-
(SELECT phase_type_lu.description FROM phase_type_lu
48-
WHERE phase_type_id = nd_phase.phase_type_id)
49-
ELSE NULL
50-
END AS current_phase_name
51-
, CASE WHEN pidr.value = 'On' THEN
52-
NVL((SELECT value::decimal FROM project_info pi_dr WHERE pi_dr.project_info_type_id = 30 AND pi_dr.project_id = p.project_id), (SELECT round(NVL(pi16.value::decimal, 0)) FROM project_info pi16 WHERE pi16.project_info_type_id = 16 AND pi16.project_id = p.project_id))
53-
ELSE NULL END AS digital_run_points
54-
FROM project p
55-
, project_status_lu pstatus
56-
, project_phase pp1 --registration phase
57-
, project_phase pp2 --submission phase
58-
, outer project_phase pp6 --appeals phase
59-
, outer project_phase pp15 --checkpoint submission phase
60-
, outer project_phase pp9 --final fix phase
61-
, outer ( project_phase pp3 --screening phase
62-
, outer phase_criteria pc3 ) --screening phase scorecard
63-
, outer ( project_phase pp4 --review phase
64-
, outer phase_criteria pc4) --review phase scorecard
65-
, project_info pn
66-
, outer project_info pidr
67-
, outer project_phase nd_phase
68-
, project_category_lu pcl
69-
, outer project_info pi4 --forum id
70-
WHERE 1=1
71-
AND p.project_status_id = pstatus.project_status_id
72-
AND p.project_id = pn.project_id
73-
AND pn.project_info_type_id = 6
74-
AND pp1.project_id = p.project_id
75-
AND pp1.phase_type_id = 1 --registration phase
76-
AND pp2.project_id = p.project_id
77-
AND pp2.phase_type_id = 2 --submission phase
78-
AND pp6.project_id = p.project_id
79-
AND pp6.phase_type_id = 6 --appeals phase
80-
AND pp15.project_id = p.project_id
81-
AND pp15.phase_type_id = 15 --checkpoint submission phase
82-
AND pp9.project_id = p.project_id
83-
AND pp9.phase_type_id = 9 --final fix phase
84-
AND pp9.project_phase_id = (SELECT MAX(project_phase_id) FROM project_phase WHERE project_id = p.project_id AND phase_type_id = 9) --last final fix only
85-
AND pp3.project_id = p.project_id
86-
AND pp3.phase_type_id = 3 --screening phase
87-
AND pp3.project_phase_id = pc3.project_phase_id
88-
AND pc3.phase_criteria_type_id = 1 -- scorecardid type
89-
AND pp4.project_id = p.project_id
90-
AND pp4.phase_type_id = 4 --review phase
91-
AND pp4.project_phase_id = pc4.project_phase_id
92-
AND pc4.phase_criteria_type_id = 1 -- scorecardid type
93-
AND pidr.project_id = p.project_id
94-
AND pidr.project_info_type_id = 26 --digital run
95-
AND pi4.project_id = p.project_id
96-
AND pi4.project_info_type_id = 4 --forum id
97-
AND p.project_Id = nd_phase.project_id
98-
AND nd_phase.project_phase_id = (SELECT MAX(project_phase_id) FROM project_phase WHERE project_id = p.project_id AND phase_status_id = 2 AND phase_type_id IN (1,2,3,4,5,6,7,8,9,10,11,12))
99-
AND p.project_category_id = pcl.project_category_id
100-
-- Filter the private challenge
101-
AND p.project_id IN (SELECT
102-
contest_id
103-
FROM contest_eligibility ce
104-
, group_contest_eligibility gce
105-
WHERE ce.contest_eligibility_id = gce.contest_eligibility_id
106-
AND gce.group_id = @communityId@)
107-
AND pcl.project_category_id NOT IN (27, 37) --exclude when spec review was a 'contest.' Also exclude MM, which is in there as a 'software' contest.
108-
-- start of parameters
109-
AND pstatus.project_status_id IN (@project_status_id@)
110-
AND pcl.project_type_id IN (@project_type_id@)
111-
AND pp1.phase_status_id IN (@registration_phase_status@)
112-
AND NVL(pp2.actual_end_time, pp2.scheduled_end_time) BETWEEN TO_DATE('@submissionEndFrom@ 00:00:00', '%Y-%m-%d %H:%M:%S') AND TO_DATE('@submissionEndTo@ 23:59:59', '%Y-%m-%d %H:%M:%S')
4+
CASE WHEN (p.project_studio_spec_id IS NOT NULL) THEN 1 ELSE 0 END AS is_studio
5+
, p.project_id AS challenge_id
6+
, pcl.description AS challenge_type
7+
, pi.challenge_name
8+
, p.tc_direct_project_id AS project_id
9+
, screening.parameter AS screening_scorecard_id
10+
, review.parameter AS review_scorecard_id
11+
, pi.cmc_task_id
12+
, pi.forum_id
13+
, (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id
14+
WHERE u1.project_id = p.project_id
15+
AND s1.submission_type_id IN (1, 3)
16+
AND s1.submission_status_id <> 5) AS num_submissions
17+
, (SELECT COUNT(*) FROM resource r WHERE r.project_id = p.project_id AND r.resource_role_id = 1) AS num_registrants
18+
, NVL((SELECT SUM(pr.number_of_submissions) FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 14), 0) AS number_of_checkpoints_prizes
19+
, pr.top_checkpoint_prize
20+
, pr.prize1
21+
, pr.prize2
22+
, pr.prize3
23+
, pr.prize4
24+
, pr.prize5
25+
, pr.prize6
26+
, pr.prize7
27+
, pr.prize8
28+
, NVL(pp.registration_actual_start_time, pp.registration_scheduled_start_time) AS posting_date
29+
, NVL(pp.registration_actual_end_time, pp.registration_scheduled_end_time) AS registration_end_date
30+
, NVL(pp.checkpoint_actual_end_time , pp.checkpoint_scheduled_end_time) AS checkpoint_submission_end_date
31+
, NVL(pp.submission_actual_end_time, pp.submission_scheduled_end_time) AS submission_end_date
32+
, NVL(pp.appeals_scheduled_end_time, review.scheduled_end_time) AS appeals_end_date
33+
, NVL(pp.final_fix_actual_end_time, pp.final_fix_scheduled_end_time) AS final_fix_end_date
34+
, NVL(nd_phase.actual_end_time, nd_phase.scheduled_end_time) AS current_phase_end_date
35+
, (( nd_phase.scheduled_end_time - CURRENT)::interval second(9) to second)::char(10)::int8 AS current_phase_remaining_time
36+
, pstatus.name AS current_status
37+
, CASE WHEN (nd_phase.scheduled_end_time IS NOT NULL) THEN
38+
(SELECT phase_type_lu.description FROM phase_type_lu
39+
WHERE phase_type_id = nd_phase.phase_type_id)
40+
ELSE NULL
41+
END AS current_phase_name
42+
, CASE WHEN pi.digital_run_flag = 'On' THEN NVL(pi.digital_run_points, pi.payments)
43+
ELSE NULL
44+
END AS digital_run_points
45+
, NVL((SELECT max(event_id) FROM contest_project_xref x, contest c WHERE project_id = p.project_id AND c.contest_id = x.contest_id), 0) AS event_id
46+
, (SELECT event_short_desc FROM event e WHERE e.event_id = nvl((SELECT max(event_id) FROM contest_project_xref x, contest c WHERE project_id = p.project_id AND c.contest_id = x.contest_id), 0)) AS event_name
47+
, technology_list(p.project_id) AS technology
48+
, platform_list(p.project_id) AS platforms
49+
FROM project p
50+
LEFT JOIN (
51+
SELECT
52+
project_id
53+
, MAX(CASE WHEN prize_type_id = 14 AND place = 1 THEN prize_amount ELSE NULL END) AS top_checkpoint_prize
54+
, MAX(CASE WHEN prize_type_id = 15 AND place = 1 THEN prize_amount ELSE NULL END) AS prize1
55+
, MAX(CASE WHEN prize_type_id = 15 AND place = 2 THEN prize_amount ELSE NULL END) AS prize2
56+
, MAX(CASE WHEN prize_type_id = 15 AND place = 3 THEN prize_amount ELSE NULL END) AS prize3
57+
, MAX(CASE WHEN prize_type_id = 15 AND place = 4 THEN prize_amount ELSE NULL END) AS prize4
58+
, MAX(CASE WHEN prize_type_id = 15 AND place = 5 THEN prize_amount ELSE NULL END) AS prize5
59+
, MAX(CASE WHEN prize_type_id = 15 AND place = 6 THEN prize_amount ELSE NULL END) AS prize6
60+
, MAX(CASE WHEN prize_type_id = 15 AND place = 7 THEN prize_amount ELSE NULL END) AS prize7
61+
, MAX(CASE WHEN prize_type_id = 15 AND place = 8 THEN prize_amount ELSE NULL END) AS prize8
62+
FROM prize
63+
WHERE prize_type_id IN (14, 15)
64+
GROUP BY project_id
65+
) pr ON pr.project_id = p.project_id
66+
INNER JOIN (
67+
SELECT
68+
project_id
69+
, MAX(DECODE(phase_type_id, 1, actual_end_time, NULL)) AS registration_actual_end_time
70+
, MAX(DECODE(phase_type_id, 1, scheduled_end_time, NULL)) AS registration_scheduled_end_time
71+
, MAX(DECODE(phase_type_id, 1, scheduled_start_time, NULL)) AS registration_scheduled_start_time
72+
, MAX(DECODE(phase_type_id, 1, actual_start_time, NULL)) AS registration_actual_start_time
73+
, MAX(DECODE(phase_type_id, 2, actual_end_time, NULL)) AS submission_actual_end_time
74+
, MAX(DECODE(phase_type_id, 2, scheduled_end_time, NULL)) AS submission_scheduled_end_time
75+
, MAX(DECODE(phase_type_id, 6, scheduled_end_time, NULL)) AS appeals_scheduled_end_time
76+
, MAX(DECODE(phase_type_id, 9, actual_end_time, NULL)) AS final_fix_actual_end_time
77+
, MAX(DECODE(phase_type_id, 9, scheduled_end_time, NULL)) AS final_fix_scheduled_end_time
78+
, MAX(DECODE(phase_type_id, 15, actual_end_time, NULL)) AS checkpoint_actual_end_time
79+
, MAX(DECODE(phase_type_id, 15, scheduled_end_time, NULL)) AS checkpoint_scheduled_end_time
80+
FROM project_phase
81+
WHERE phase_type_id IN (1,2,6,9,15)
82+
GROUP BY project_id
83+
) pp ON pp.project_id = p.project_id
84+
INNER JOIN (
85+
SELECT
86+
project_id
87+
, MAX(DECODE(project_info_type_id, 4, value, '')) AS forum_id
88+
, MAX(DECODE(project_info_type_id, 16, value, '')) AS payments
89+
, MAX(DECODE(project_info_type_id, 26, value, '')) AS digital_run_flag
90+
, MAX(DECODE(project_info_type_id, 30, value, '')) AS digital_run_points
91+
, MAX(DECODE(project_info_type_id, 70, value, '')) AS cmc_task_id
92+
, MAX(DECODE(project_info_type_id, 6, value, '')) AS challenge_name
93+
FROM project_info
94+
WHERE project_info_type_id IN (70, 30, 16, 26, 4, 6)
95+
GROUP BY project_id
96+
) pi ON pi.project_id = p.project_id
97+
LEFT OUTER JOIN (
98+
SELECT
99+
pp3.project_id
100+
, pc3.parameter
101+
FROM project_phase pp3
102+
LEFT OUTER JOIN phase_criteria pc3 ON pp3.project_phase_id = pc3.project_phase_id
103+
WHERE pp3.phase_type_id = 3
104+
AND pc3.phase_criteria_type_id = 1
105+
) screening ON screening.project_id = p.project_id
106+
LEFT OUTER JOIN (
107+
SELECT
108+
pp4.project_id
109+
, pc4.parameter
110+
, pp4.scheduled_end_time
111+
FROM project_phase pp4
112+
LEFT OUTER JOIN phase_criteria pc4 ON pp4.project_phase_id = pc4.project_phase_id
113+
WHERE pp4.phase_type_id = 4
114+
AND pc4.phase_criteria_type_id = 1
115+
) review ON review.project_id = p.project_id
116+
INNER JOIN project_phase pp1 ON pp1.project_id = p.project_id AND pp1.phase_type_id = 1
117+
INNER JOIN project_status_lu pstatus ON p.project_status_id = pstatus.project_status_id
118+
LEFT OUTER JOIN project_phase nd_phase ON p.project_Id = nd_phase.project_id
119+
, project_category_lu pcl
120+
WHERE 1=1
121+
AND p.project_category_id = pcl.project_category_id
122+
-- Filter out the challenge that user is not belong to.
123+
AND p.project_id IN (SELECT
124+
contest_id
125+
FROM contest_eligibility ce
126+
, group_contest_eligibility gce
127+
WHERE ce.contest_eligibility_id = gce.contest_eligibility_id
128+
AND gce.group_id = @communityId@)
129+
AND pcl.project_category_id NOT IN (27, 37) --exclude when spec review was a 'contest.' Also exclude MM, which is in there as a 'software' contest.
130+
AND p.project_status_id IN (@project_status_id@)
131+
AND pcl.project_type_id IN (@project_type_id@)
132+
AND pp1.phase_status_id IN (@registration_phase_status@)
133+
AND nd_phase.project_phase_id = (SELECT MAX(project_phase_id) FROM project_phase WHERE project_id = p.project_id AND phase_status_id = 2 AND phase_type_id IN (1,2,3,4,5,6,7,8,9,10,11,12))
134+
135+
AND NVL(pp.submission_actual_end_time, pp.submission_scheduled_end_time) BETWEEN TO_DATE('@submissionEndFrom@ 00:00:00', '%Y-%m-%d %H:%M:%S') AND TO_DATE('@submissionEndTo@ 23:59:59', '%Y-%m-%d %H:%M:%S')
136+
AND LOWER(pcl.description) = DECODE('@categoryName@', '', LOWER(pcl.description), '@categoryName@')
137+
AND LOWER(pi.challenge_name) LIKE ('@challengeName@')
138+
AND NVL(pr.prize1, 0) >= @prilower@
139+
AND NVL(pr.prize1, 0) <= @priupper@
140+
AND p.tc_direct_project_id = DECODE(@tcdirectid@, 0, p.tc_direct_project_id, @tcdirectid@)
141+
AND NVL(LOWER(pi.cmc_task_id), '') = DECODE('@cmc@', '', NVL(LOWER(pi.cmc_task_id), ''), '@cmc@')
113142

114-
AND LOWER(pcl.description) = DECODE('@categoryName@', '', LOWER(pcl.description), '@categoryName@')
115-
AND LOWER(pn.value) LIKE ('@challengeName@')
116-
AND NVL((SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 1), 0) >= @prilower@
117-
AND NVL((SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 1), 0) <= @priupper@
118-
AND p.tc_direct_project_id = DECODE(@tcdirectid@, 0, p.tc_direct_project_id, @tcdirectid@)
119-
AND NVL(LOWER((select value from project_info pi70 where pi70.project_id = p.project_id and project_info_type_id = 70)), '') = DECODE('@cmc@', '', NVL(LOWER((select value from project_info pi70 where pi70.project_id = p.project_id and project_info_type_id = 70)), ''), '@cmc@')
120143
ORDER BY @sortColumn@ @sortOrder@

0 commit comments

Comments
 (0)