-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_sql.sh
More file actions
executable file
·145 lines (112 loc) · 3.62 KB
/
test_sql.sh
File metadata and controls
executable file
·145 lines (112 loc) · 3.62 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
set -euo pipefail
TOOL="bazel-bin/service/tools/kv/api_tools/kv_service_tools"
CONFIG="service/tools/config/interface/service.config"
LOGFILE="sql_test.log"
# Colors
BLUE="\033[1;34m"
GREEN="\033[1;32m"
YELLOW="\033[1;33m"
RESET="\033[0m"
run_sql() {
echo -e "${GREEN}>>> $1${RESET}"
echo "---- $1 ----" >> $LOGFILE
$TOOL --config $CONFIG --cmd sql --sql "$2" | tee -a $LOGFILE
echo "" >> $LOGFILE
}
echo -e "${BLUE}===== Starting SQL Test Suite =====${RESET}"
echo "SQL Test Log - $(date)" > $LOGFILE
echo "" >> $LOGFILE
# 1. CREATE TABLES
run_sql "Create table: users" \
"CREATE TABLE users (id INTEGER, name VARCHAR, age INTEGER);"
run_sql "Create table: orders" \
"CREATE TABLE orders (order_id INTEGER, user_id INTEGER, amount DOUBLE, status VARCHAR);"
# 2. INSERT DATA
run_sql "Insert into users" \
"INSERT INTO users VALUES
(1,'Alice',30),
(2,'Bob',22),
(3,'Charlie',27),
(4,'Diana',35);"
run_sql "Insert into orders" \
"INSERT INTO orders VALUES
(101,1,250.50,'shipped'),
(102,1,120.00,'processing'),
(103,2,75.00,'cancelled'),
(104,3,500.00,'shipped'),
(105,3,20.00,'processing');"
# 3. BASIC SELECTS
run_sql "Select all users" \
"SELECT * FROM users;"
run_sql "Filter: age > 25" \
"SELECT name, age FROM users WHERE age > 25;"
# 4. ORDER BY
run_sql "Order users by age DESC" \
"SELECT * FROM users ORDER BY age DESC;"
# 5. AGGREGATIONS
run_sql "Count users" \
"SELECT COUNT(*) AS total_users FROM users;"
run_sql "Average order amount" \
"SELECT AVG(amount) AS avg_order FROM orders;"
run_sql "Total spent per user" \
"SELECT user_id, SUM(amount) AS total_spent FROM orders GROUP BY user_id;"
# 6. JOIN TESTS
run_sql "JOIN: users + orders" \
"SELECT u.name, o.order_id, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id;"
run_sql "JOIN + filter amount > 100" \
"SELECT u.name, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.amount > 100;"
run_sql "LEFT JOIN" \
"SELECT u.id, u.name, o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
ORDER BY u.id;"
# 7. UPDATE / DELETE
run_sql "Update Bob's age" \
"UPDATE users SET age = age + 1 WHERE id = 2;"
run_sql "Delete cancelled orders" \
"DELETE FROM orders WHERE status = 'cancelled';"
# 8. GROUPED JOIN AGGREGATE
run_sql "Total spent by each user (ordered)" \
"SELECT u.name, SUM(o.amount) AS total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name
ORDER BY total_spent DESC;"
# 9. DISTINCT / LIKE / BETWEEN / LIMIT
run_sql "Distinct order statuses" \
"SELECT DISTINCT status FROM orders;"
run_sql "Names starting with A" \
"SELECT * FROM users WHERE name LIKE 'A%';"
run_sql "Age between 25 and 35" \
"SELECT * FROM users WHERE age BETWEEN 25 AND 35;"
run_sql "Top orders (limit + offset)" \
"SELECT * FROM orders ORDER BY amount DESC LIMIT 2 OFFSET 1;"
# 10. STRING FUNCTIONS
run_sql "String functions test" \
"SELECT UPPER(name), LENGTH(name) FROM users;"
# 11. TRANSACTION BLOCK
run_sql "Transaction test" \
"BEGIN TRANSACTION;
INSERT INTO users VALUES (10, 'Eva', 40);
UPDATE users SET age = 41 WHERE id = 10;
COMMIT;"
# 12. ERROR TESTS (expected failure)
echo -e "${YELLOW}>>> Testing expected errors (these should fail)${RESET}"
run_sql "Malformed row insert (should error)" \
"INSERT INTO users VALUES ('bad','data',123);" || true
run_sql "Select from invalid table (should error)" \
"SELECT * FROM nonexistent;" || true
echo -e "${BLUE}===== Now cleaning up =====${RESET}"
# 13. CLEANUP
run_sql "Drop table: orders" \
"DROP TABLE orders;"
run_sql "Drop table: users" \
"DROP TABLE users;"
echo -e "${BLUE}===== SQL Test Suite Complete =====${RESET}"
echo "Full output written to $LOGFILE"