\set ECHO 0 \set QUIET 1 BEGIN; \t SET IntervalStyle = 'postgres'; \i sql/explanation.sql -- Need to mock md5() so that it emits known values, so the tests will pass. CREATE SCHEMA mock; CREATE TEMPORARY SEQUENCE md5seq; CREATE TEMPORARY TABLE md5s ( md5 TEXT, id INTEGER DEFAULT NEXTVAL('md5seq') ); INSERT INTO md5s VALUES ('029dde3a3c872f0c960f03d2ecfaf5ee'), ('3e4c4968cee7653037613c234a953be1'), ('dd3d1b1fb6c70be827075e01b306250c'), ('037a8fe70739ed1be6a3006d0ab80c82'), ('2c4e922dc19ce9f01a3bf08fbd76b041'), ('709b2febd8e560dd8830f4c7277c3758'), ('9dd89be09ea07a1000a21cbfc09121c7'), ('8dc3d35ab978f6c6e46f7927e7b86d21'), ('3d7c72f13ae7571da70f434b5bc9e0af'); CREATE FUNCTION mock.md5(TEXT) RETURNS TEXT LANGUAGE plpgsql AS $$ DECLARE rec md5s; BEGIN SELECT * INTO rec FROM md5s WHERE id = (SELECT MIN(id) FROM md5s); DELETE FROM md5s WHERE id = rec.id; RETURN rec.md5; END; $$; SET client_min_messages = warning; SET log_min_messages = warning; SET search_path = mock,public,pg_catalog; CREATE TEMPORARY TABLE plans ( node_id TEXT PRIMARY KEY, parent_id TEXT REFERENCES plans(node_id), node_type TEXT NOT NULL, total_runtime INTERVAL, strategy TEXT, operation TEXT, startup_cost FLOAT, total_cost FLOAT, plan_rows FLOAT, plan_width INTEGER, actual_startup_time INTERVAL, actual_total_time INTERVAL, actual_rows FLOAT, actual_loops FLOAT, parent_relationship TEXT, sort_key TEXT[], sort_method TEXT[], sort_space_used BIGINT, sort_space_type TEXT, join_type TEXT, join_filter TEXT, hash_cond TEXT, relation_name TEXT, alias TEXT, scan_direction TEXT, index_name TEXT, index_cond TEXT, recheck_cond TEXT, tid_cond TEXT, merge_cond TEXT, subplan_name TEXT, function_name TEXT, function_call TEXT, filter TEXT, one_time_filter TEXT, command TEXT, shared_hit_blocks BIGINT, shared_read_blocks BIGINT, shared_written_blocks BIGINT, local_hit_blocks BIGINT, local_read_blocks BIGINT, local_written_blocks BIGINT, temp_read_blocks BIGINT, temp_written_blocks BIGINT, output TEXT[], hash_buckets BIGINT, hash_batches BIGINT, original_hash_batches BIGINT, peak_memory_usage BIGINT, schema TEXT, cte_name TEXT, triggers trigger_plan[] ); RESET client_min_messages; RESET log_min_messages; INSERT INTO plans SELECT * FROM parse_node($$ Aggregate Sorted 258.13 262.31 4 324 0.121 0.121 0 1 Sort Outer 258.13 258.14 4 324 0.117 0.117 0 1 d.name d.version d.abstract d.description d.relstatus d.owner d.sha1 d.meta quicksort 25 Memory Nested Loop Outer Left 16.75 258.09 4 324 0.009 0.009 0 1 (semver_cmp(d.version, dt.version) = 0) Hash Join Outer Inner 16.75 253.06 4 292 0.009 0.009 0 1 (de.distribution = d.name) (semver_cmp(d.version, de.dist_version) = 0) Seq Scan Outer distribution_extensions de 0.00 15.10 510 128 0.008 0.008 0 1 Hash Inner 13.00 13.00 300 228 0.000 0.000 0 0 Seq Scan Outer distributions d 0.00 13.00 300 228 0.000 0.000 0 0 Index Scan Inner NoMovement distribution_tags_pkey distribution_tags dt 0.00 0.46 3 96 0.000 0.000 0 0 (d.name = dt.distribution) Function Scan SubPlan SubPlan 1 unnest g 0.00 1.00 100 32 0.000 0.000 0 0 (x IS NOT NULL) $$, NULL, '14.35 ms', ARRAY[ROW('Harry', 'Melissa', 'users', '00:00:00.000234', 14)::trigger_plan]); SELECT * FROM plans; ROLLBACK;