@@ -5,7 +5,7 @@ FIRST @pageSize@
55FROM table(MULTISET(
66SELECT
77 p.problem_id
8- , c.component_id
8+ , c.component_id
99, ro.room_id
1010, rc.round_id
1111, rc.division_id
@@ -16,15 +16,62 @@ SELECT
1616 WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 3) THEN 'Hard'::nvarchar(50)
1717 END AS difficulty
1818, rc.points
19- , 'New' AS status
20- , 0 AS my_points
19+ , NVL(CASE WHEN EXISTS (
20+ SELECT 1
21+ FROM component_state cs
22+ WHERE cs.status_id < 120
23+ AND cs.component_id = c.component_id
24+ AND cs.coder_id = @userId@
25+ UNION ALL
26+ SELECT 1
27+ FROM practice_component_state pcs
28+ WHERE pcs.status_id < 120
29+ AND pcs.component_id = c.component_id
30+ AND pcs.coder_id = @userId@
31+ ) THEN 'New'::nvarchar(50)
32+ WHEN EXISTS (
33+ SELECT 1
34+ FROM component_state cs
35+ WHERE cs.status_id = 150
36+ AND cs.component_id = c.component_id
37+ AND cs.coder_id = @userId@
38+ UNION ALL
39+ SELECT 1
40+ FROM practice_component_state pcs
41+ WHERE pcs.status_id = 150
42+ AND pcs.component_id = c.component_id
43+ AND pcs.coder_id = @userId@
44+ ) THEN 'Solved'::nvarchar(50)
45+ WHEN EXISTS (
46+ SELECT 1
47+ FROM component_state cs
48+ WHERE cs.status_id >= 120
49+ AND cs.component_id = c.component_id
50+ AND cs.status_id != 150
51+ AND cs.coder_id = @userId@
52+ UNION ALL
53+ SELECT 1
54+ FROM practice_component_state pcs
55+ WHERE pcs.status_id >= 120
56+ AND pcs.component_id = c.component_id
57+ AND pcs.status_id != 150
58+ AND pcs.coder_id = @userId@
59+ ) THEN 'Viewed'::nvarchar(50)
60+ END, 'New') AS status
61+ , NVL((
62+ SELECT
63+ points
64+ FROM practice_component_state pcs
65+ WHERE pcs.round_id = rc.round_id
66+ AND pcs.component_id = c.component_id
67+ AND pcs.coder_id = @userId@
68+ ), 0) AS my_points
2169FROM problem p
2270INNER JOIN component c ON c.problem_id = p.problem_id
2371INNER JOIN round_component rc ON rc.component_id = c.component_id
2472INNER JOIN round r ON r.round_id = rc.round_id AND r.status = 'A' AND r.round_type_id = 3
2573INNER JOIN room ro ON ro.round_id = rc.round_id AND ro.room_type_id = 3 -- practice room
2674INNER JOIN problem_type_lu ptl ON ptl.problem_type_id = p.problem_type_id
27- INNER JOIN contest con ON con.contest_id = r.contest_id
2875WHERE p.status_id = 90
2976)) srp
3077WHERE 1=1
0 commit comments