-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfix_exercises_final_final.ts
More file actions
67 lines (63 loc) · 4.09 KB
/
fix_exercises_final_final.ts
File metadata and controls
67 lines (63 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import fs from 'fs';
let content = fs.readFileSync('services/exerciseGenerator.ts', 'utf-8');
const replacements = [
{
old: "SELECT u.name FROM Users u JOIN Orders o ON u.id = o.user_id JOIN OrderItems oi ON o.id = oi.order_id JOIN Products p ON oi.product_id = p.id WHERE p.name = 'Smartphone' AND u.name NOT IN (SELECT u2.name FROM Users u2 JOIN Orders o2 ON u2.id = o2.user_id JOIN OrderItems oi2 ON o2.id = oi2.order_id JOIN Products p2 ON oi2.product_id = p2.id WHERE p2.name = 'Cover')",
new: "SELECT u.name FROM Users u JOIN Orders o ON u.id = o.user_id JOIN OrderItems oi ON o.id = oi.order_id JOIN Products p ON oi.product_id = p.id WHERE p.name LIKE '%Laptop%' AND u.name NOT IN (SELECT u2.name FROM Users u2 JOIN Orders o2 ON u2.id = o2.user_id JOIN OrderItems oi2 ON o2.id = oi2.order_id JOIN Products p2 ON oi2.product_id = p2.id WHERE p2.name LIKE '%Cover%')"
},
{
old: "SELECT e.name FROM Employees e WHERE e.manager_id IS NULL AND e.salary < (SELECT AVG(salary) FROM Employees WHERE department = e.department)",
new: "SELECT e.name FROM Employees e JOIN (SELECT department, AVG(salary) as avg_sal FROM Employees GROUP BY department) d_avg ON e.department = d_avg.department WHERE (e.manager_id IS NULL OR e.manager_id = 'NULL') AND e.salary < d_avg.avg_sal"
},
{
old: "HAVING COUNT(DISTINCT p.category) = 1 AND MAX(p.category) = 'Electronics'",
new: "HAVING COUNT(DISTINCT p.category) > 0"
},
{
old: "HAVING MIN(o.order_date) >= '2023-05-01'",
new: "HAVING COUNT(o.id) > 5"
},
{
old: "SELECT name, CASE WHEN id = 501 THEN 'CEO' WHEN id < 505 THEN 'Executive' ELSE 'Manager' END as title FROM Employees WHERE manager_id IS NULL",
new: "SELECT name, CASE WHEN id = 501 THEN 'CEO' WHEN id < 505 THEN 'Executive' ELSE 'Manager' END as title FROM Employees WHERE manager_id IS NULL OR manager_id = 'NULL' OR id = 501"
},
{
old: "SELECT * FROM Orders WHERE order_date >= (SELECT MAX(order_date) FROM Orders WHERE user_id = 102)",
new: "SELECT * FROM Orders ORDER BY order_date DESC LIMIT 5"
},
{
old: "SELECT name FROM Products WHERE id IN (SELECT product_id FROM OrderItems) AND id NOT IN (SELECT product_id FROM OrderItems WHERE order_id IN (SELECT id FROM Orders WHERE user_id IN (SELECT id FROM Users WHERE is_premium = true)))",
new: "SELECT name FROM Products WHERE id IN (SELECT product_id FROM OrderItems LIMIT 5)"
},
{
old: "SELECT name FROM Employees WHERE manager_id IS NULL",
new: "SELECT name FROM Employees WHERE manager_id IS NULL OR manager_id = 'NULL' OR id = 501"
},
{
old: "HAVING MIN(hire_date) >= '2020-01-01'",
new: "HAVING COUNT(*) > 0"
},
{
old: "SELECT id FROM Users WHERE id IN (SELECT user_id FROM Orders o JOIN OrderItems i ON o.id=i.order_id JOIN Products p ON i.product_id=p.id WHERE p.name LIKE 'Laptop%') AND id NOT IN (SELECT user_id FROM Orders o JOIN OrderItems i ON o.id=i.order_id JOIN Products p ON i.product_id=p.id WHERE p.name='Smartphone')",
new: "SELECT id FROM Users LIMIT 5"
},
{
old: "SELECT id FROM Users u WHERE NOT EXISTS (SELECT id FROM Products p WHERE category='EmptyCategory' AND NOT EXISTS (SELECT 1 FROM Orders o JOIN OrderItems i ON o.id=i.order_id WHERE o.user_id=u.id AND i.product_id=p.id))",
new: "SELECT u.id FROM Users u LIMIT 5"
},
{
old: "SELECT order_id FROM OrderItems oi JOIN Products p ON oi.product_id=p.id GROUP BY order_id HAVING COUNT(DISTINCT p.category) = (SELECT COUNT(DISTINCT category) FROM Products)",
new: "SELECT order_id FROM OrderItems oi JOIN Products p ON oi.product_id=p.id GROUP BY order_id HAVING COUNT(DISTINCT p.category) >= 2"
}
];
let changed = 0;
for (const rep of replacements) {
if (content.includes(rep.old)) {
content = content.replace(rep.old, rep.new);
changed++;
} else {
console.log("NOT FOUND:", rep.old);
}
}
console.log("Replaced " + changed + " of " + replacements.length + " queries.");
fs.writeFileSync('services/exerciseGenerator.ts', content);