-
Notifications
You must be signed in to change notification settings - Fork 67
Expand file tree
/
Copy path05_monitoring_and_explain.sql
More file actions
158 lines (120 loc) · 4.82 KB
/
Copy path05_monitoring_and_explain.sql
File metadata and controls
158 lines (120 loc) · 4.82 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
146
147
148
149
150
151
152
153
154
155
156
157
158
-- Merged from: 09_monitoring, 10_explain, 31_explain_plain_sql
-- Tests: list_instances, instance_info, status, result, df.explain() on live and dry-run,
-- df.explain() on plain SQL auto-wrap, list_instances with filter_label
SET SESSION AUTHORIZATION df_e2e_user;
-- === Test: 09_monitoring ===
CREATE TEMP TABLE _test_state (instance_id TEXT);
INSERT INTO _test_state SELECT df.start('SELECT 123', 'test-monitoring-label');
DO $$
DECLARE
inst_id TEXT;
status TEXT;
found BOOLEAN;
info_status TEXT;
result TEXT;
BEGIN
SELECT instance_id INTO inst_id FROM _test_state;
RAISE NOTICE 'Testing instance: %', inst_id;
SELECT df.wait_for_completion(inst_id) INTO status;
-- Test list_instances
SELECT EXISTS (
SELECT 1 FROM df.list_instances()
WHERE list_instances.instance_id = inst_id
) INTO found;
IF NOT found THEN
RAISE EXCEPTION 'TEST FAILED: instance not found in list_instances()';
END IF;
-- Test list_instances with filter_label (matching label)
SELECT EXISTS (
SELECT 1 FROM df.list_instances(filter_label => 'test-monitoring-label')
WHERE list_instances.instance_id = inst_id
) INTO found;
IF NOT found THEN
RAISE EXCEPTION 'TEST FAILED: instance not found in list_instances(filter_label => ''test-monitoring-label'')';
END IF;
-- Test list_instances with filter_label (non-matching label returns nothing)
SELECT EXISTS (
SELECT 1 FROM df.list_instances(filter_label => 'no-such-label')
WHERE list_instances.instance_id = inst_id
) INTO found;
IF found THEN
RAISE EXCEPTION 'TEST FAILED: instance should not appear in list_instances with non-matching filter_label';
END IF;
-- Test list_instances with both status_filter and filter_label
SELECT EXISTS (
SELECT 1 FROM df.list_instances('completed', filter_label => 'test-monitoring-label')
WHERE list_instances.instance_id = inst_id
) INTO found;
IF NOT found THEN
RAISE EXCEPTION 'TEST FAILED: instance not found in list_instances with status_filter and filter_label';
END IF;
-- Test instance_info
SELECT i.status INTO info_status FROM df.instance_info(inst_id) i;
IF info_status IS NULL THEN
RAISE EXCEPTION 'TEST FAILED: instance_info returned NULL status';
END IF;
-- Test status
IF lower(status) != 'completed' THEN
RAISE EXCEPTION 'TEST FAILED: expected completed, got %', status;
END IF;
-- Test result
SELECT r INTO result FROM df.result(inst_id) r;
IF result NOT LIKE '%123%' THEN
RAISE EXCEPTION 'TEST FAILED: result should contain 123, got %', result;
END IF;
RAISE NOTICE 'TEST PASSED: monitoring';
END $$;
DROP TABLE _test_state;
-- === Test: 10_explain ===
-- Test dry-run explain (use $body$ to avoid conflict with inner $$)
DO $body$
DECLARE
explain_output TEXT;
BEGIN
SELECT df.explain($$ 'SELECT 1' ~> 'SELECT 2' $$) INTO explain_output;
IF explain_output IS NULL OR explain_output = '' THEN
RAISE EXCEPTION 'TEST FAILED: explain returned empty output';
END IF;
IF explain_output NOT LIKE '%SQL%' THEN
RAISE EXCEPTION 'TEST FAILED: explain should contain SQL nodes, got: %', explain_output;
END IF;
RAISE NOTICE 'Dry-run explain passed';
END $body$;
-- Test live instance explain
CREATE TEMP TABLE _test_state (instance_id TEXT);
INSERT INTO _test_state SELECT df.start('SELECT 1' ~> 'SELECT 2', 'test-explain');
DO $$
DECLARE
inst_id TEXT;
status TEXT;
explain_output TEXT;
BEGIN
SELECT instance_id INTO inst_id FROM _test_state;
RAISE NOTICE 'Testing instance: %', inst_id;
SELECT df.wait_for_completion(inst_id) INTO status;
SELECT df.explain(inst_id) INTO explain_output;
IF explain_output IS NULL OR explain_output = '' THEN
RAISE EXCEPTION 'TEST FAILED: explain returned empty output for live instance';
END IF;
IF explain_output NOT LIKE '%ompleted%' AND explain_output NOT LIKE '%✓%' THEN
RAISE EXCEPTION 'TEST FAILED: explain should show completion status, got: %', explain_output;
END IF;
RAISE NOTICE 'TEST PASSED: explain';
END $$;
DROP TABLE _test_state;
-- === Test: 31_explain_plain_sql ===
DO $body$
DECLARE
explain_output TEXT;
BEGIN
SELECT df.explain('SELECT 1') INTO explain_output;
IF explain_output IS NULL OR explain_output = '' THEN
RAISE EXCEPTION 'TEST FAILED: explain returned empty output';
END IF;
IF explain_output NOT LIKE '%SQL:%' OR explain_output NOT LIKE '%SELECT 1%' THEN
RAISE EXCEPTION 'TEST FAILED: explain should show SQL: SELECT 1, got: %', explain_output;
END IF;
RAISE NOTICE 'TEST PASSED: explain plain SQL';
END $body$;
RESET SESSION AUTHORIZATION;
SELECT 'TEST PASSED' AS result;