mirror of https://github.com/citusdata/citus.git
Add a helper function to check explain has a single task
In order to avoid adding an alternative output, a function to check if a given explan plan has a single task added. This doesn't change what the changed tests intend to do.pull/5209/head
parent
e0faf34417
commit
e7607b6bed
|
@ -226,78 +226,55 @@ EXPLAIN (COSTS FALSE) INSERT INTO sensors_2003 VALUES (3, '2003-01-01', row_to_j
|
||||||
-> Result
|
-> Result
|
||||||
(7 rows)
|
(7 rows)
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors WHERE measureid = 3 AND eventdatetime = '2000-02-02';
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors WHERE measureid = 3 AND eventdatetime = '2000-02-02';
|
||||||
QUERY PLAN
|
$$
|
||||||
|
);
|
||||||
|
explain_has_single_task
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Custom Scan (Citus Adaptive)
|
t
|
||||||
Task Count: 1
|
(1 row)
|
||||||
Tasks Shown: All
|
|
||||||
-> Task
|
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
|
||||||
-> Aggregate
|
|
||||||
-> Index Only Scan using sensors_2000_pkey_2580005 on sensors_2000_2580005 sensors
|
|
||||||
Index Cond: ((measureid = 3) AND (eventdatetime = '2000-02-02'::date))
|
|
||||||
(8 rows)
|
|
||||||
|
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2000 WHERE measureid = 3;
|
|
||||||
QUERY PLAN
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
Custom Scan (Citus Adaptive)
|
|
||||||
Task Count: 1
|
|
||||||
Tasks Shown: All
|
|
||||||
-> Task
|
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
|
||||||
-> Aggregate
|
|
||||||
-> Bitmap Heap Scan on sensors_2000_2580005 sensors_xxx
|
|
||||||
Recheck Cond: (measureid = 3)
|
|
||||||
-> Bitmap Index Scan on sensors_2000_pkey_2580005
|
|
||||||
Index Cond: (measureid = 3)
|
|
||||||
(10 rows)
|
|
||||||
|
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2001 WHERE measureid = 3;
|
|
||||||
QUERY PLAN
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
Custom Scan (Citus Adaptive)
|
|
||||||
Task Count: 1
|
|
||||||
Tasks Shown: All
|
|
||||||
-> Task
|
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
|
||||||
-> Aggregate
|
|
||||||
-> Bitmap Heap Scan on sensors_2001_2580009 sensors_xxx
|
|
||||||
Recheck Cond: (measureid = 3)
|
|
||||||
-> Bitmap Index Scan on sensors_2001_pkey_2580009
|
|
||||||
Index Cond: (measureid = 3)
|
|
||||||
(10 rows)
|
|
||||||
|
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2002 WHERE measureid = 3;
|
|
||||||
QUERY PLAN
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
Custom Scan (Citus Adaptive)
|
|
||||||
Task Count: 1
|
|
||||||
Tasks Shown: All
|
|
||||||
-> Task
|
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
|
||||||
-> Aggregate
|
|
||||||
-> Bitmap Heap Scan on sensors_2002_2580013 sensors_xxx
|
|
||||||
Recheck Cond: (measureid = 3)
|
|
||||||
-> Bitmap Index Scan on sensors_2002_pkey_2580013
|
|
||||||
Index Cond: (measureid = 3)
|
|
||||||
(10 rows)
|
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2003 WHERE measureid = 3;
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2003 WHERE measureid = 3;
|
||||||
QUERY PLAN
|
$$
|
||||||
|
);
|
||||||
|
explain_has_single_task
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Custom Scan (Citus Adaptive)
|
t
|
||||||
Task Count: 1
|
(1 row)
|
||||||
Tasks Shown: All
|
|
||||||
-> Task
|
SELECT public.explain_has_single_task(
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
$$
|
||||||
-> Aggregate
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2000 WHERE measureid = 3;
|
||||||
-> Bitmap Heap Scan on sensors_2003_2580017 sensors_xxx
|
$$
|
||||||
Recheck Cond: (measureid = 3)
|
);
|
||||||
-> Bitmap Index Scan on sensors_2003_pkey_2580017
|
explain_has_single_task
|
||||||
Index Cond: (measureid = 3)
|
---------------------------------------------------------------------
|
||||||
(10 rows)
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2001 WHERE measureid = 3;
|
||||||
|
$$
|
||||||
|
);
|
||||||
|
explain_has_single_task
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2002 WHERE measureid = 3;
|
||||||
|
$$
|
||||||
|
);
|
||||||
|
explain_has_single_task
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- execute 7 times to make sure it is re-cached
|
-- execute 7 times to make sure it is re-cached
|
||||||
EXECUTE drop_col_prepare_insert(3, '2000-10-01', row_to_json(row(1)));
|
EXECUTE drop_col_prepare_insert(3, '2000-10-01', row_to_json(row(1)));
|
||||||
|
|
|
@ -57,6 +57,20 @@ BEGIN
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN false;
|
RETURN false;
|
||||||
END; $$ language plpgsql;
|
END; $$ language plpgsql;
|
||||||
|
--helper function to check there is a single task
|
||||||
|
CREATE OR REPLACE FUNCTION explain_has_single_task(explain_command text)
|
||||||
|
RETURNS BOOLEAN AS $$
|
||||||
|
DECLARE
|
||||||
|
query_plan text;
|
||||||
|
BEGIN
|
||||||
|
FOR query_plan IN EXECUTE explain_command LOOP
|
||||||
|
IF query_plan ILIKE '%Task Count: 1%'
|
||||||
|
THEN
|
||||||
|
RETURN true;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
RETURN false;
|
||||||
|
END; $$ language plpgsql;
|
||||||
-- helper function to quickly run SQL on the whole cluster
|
-- helper function to quickly run SQL on the whole cluster
|
||||||
CREATE OR REPLACE FUNCTION run_command_on_coordinator_and_workers(p_sql text)
|
CREATE OR REPLACE FUNCTION run_command_on_coordinator_and_workers(p_sql text)
|
||||||
RETURNS void LANGUAGE plpgsql AS $$
|
RETURNS void LANGUAGE plpgsql AS $$
|
||||||
|
|
|
@ -111,11 +111,36 @@ EXPLAIN (COSTS FALSE) INSERT INTO sensors_2001 VALUES (3, '2001-01-01', row_to_j
|
||||||
EXPLAIN (COSTS FALSE) INSERT INTO sensors_2002 VALUES (3, '2002-01-01', row_to_json(row(1)));
|
EXPLAIN (COSTS FALSE) INSERT INTO sensors_2002 VALUES (3, '2002-01-01', row_to_json(row(1)));
|
||||||
EXPLAIN (COSTS FALSE) INSERT INTO sensors_2003 VALUES (3, '2003-01-01', row_to_json(row(1)));
|
EXPLAIN (COSTS FALSE) INSERT INTO sensors_2003 VALUES (3, '2003-01-01', row_to_json(row(1)));
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors WHERE measureid = 3 AND eventdatetime = '2000-02-02';
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors WHERE measureid = 3 AND eventdatetime = '2000-02-02';
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2000 WHERE measureid = 3;
|
$$
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2001 WHERE measureid = 3;
|
);
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2002 WHERE measureid = 3;
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2003 WHERE measureid = 3;
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2003 WHERE measureid = 3;
|
||||||
|
$$
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2000 WHERE measureid = 3;
|
||||||
|
$$
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2001 WHERE measureid = 3;
|
||||||
|
$$
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT public.explain_has_single_task(
|
||||||
|
$$
|
||||||
|
EXPLAIN (COSTS FALSE) SELECT count(*) FROM sensors_2002 WHERE measureid = 3;
|
||||||
|
$$
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
-- execute 7 times to make sure it is re-cached
|
-- execute 7 times to make sure it is re-cached
|
||||||
EXECUTE drop_col_prepare_insert(3, '2000-10-01', row_to_json(row(1)));
|
EXECUTE drop_col_prepare_insert(3, '2000-10-01', row_to_json(row(1)));
|
||||||
|
|
|
@ -63,6 +63,21 @@ BEGIN
|
||||||
RETURN false;
|
RETURN false;
|
||||||
END; $$ language plpgsql;
|
END; $$ language plpgsql;
|
||||||
|
|
||||||
|
--helper function to check there is a single task
|
||||||
|
CREATE OR REPLACE FUNCTION explain_has_single_task(explain_command text)
|
||||||
|
RETURNS BOOLEAN AS $$
|
||||||
|
DECLARE
|
||||||
|
query_plan text;
|
||||||
|
BEGIN
|
||||||
|
FOR query_plan IN EXECUTE explain_command LOOP
|
||||||
|
IF query_plan ILIKE '%Task Count: 1%'
|
||||||
|
THEN
|
||||||
|
RETURN true;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
RETURN false;
|
||||||
|
END; $$ language plpgsql;
|
||||||
|
|
||||||
-- helper function to quickly run SQL on the whole cluster
|
-- helper function to quickly run SQL on the whole cluster
|
||||||
CREATE OR REPLACE FUNCTION run_command_on_coordinator_and_workers(p_sql text)
|
CREATE OR REPLACE FUNCTION run_command_on_coordinator_and_workers(p_sql text)
|
||||||
RETURNS void LANGUAGE plpgsql AS $$
|
RETURNS void LANGUAGE plpgsql AS $$
|
||||||
|
|
Loading…
Reference in New Issue