mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 11:03:36 +08:00
When DecompressChunk is used in parallel plans the scan on the compressed hypertable chunk needs to be parallel aware to prevent duplicating work. This patch will change DecompressChunk to always create a non parallel safe path and if requested a parallel safe partial path with a parallel aware scan.
126 lines
3.9 KiB
SQL
126 lines
3.9 KiB
SQL
-- This file and its contents are licensed under the Timescale License.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-TIMESCALE for a copy of the license.
|
|
|
|
|
|
-- this should use DecompressChunk node
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time LIMIT 5;
|
|
|
|
-- test RECORD by itself
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time;
|
|
|
|
-- test expressions
|
|
:PREFIX SELECT
|
|
time_bucket('1d',time),
|
|
v1 + v2 AS "sum",
|
|
COALESCE(NULL,v1,v2) AS "coalesce",
|
|
NULL AS "NULL",
|
|
'text' AS "text",
|
|
:TEST_TABLE AS "RECORD"
|
|
FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id;
|
|
|
|
-- test empty targetlist
|
|
:PREFIX SELECT FROM :TEST_TABLE;
|
|
|
|
-- test empty resultset
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id < 0;
|
|
|
|
-- test targetlist not referencing columns
|
|
:PREFIX SELECT 1 FROM :TEST_TABLE;
|
|
|
|
-- test constraints not present in targetlist
|
|
:PREFIX SELECT v1 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1;
|
|
|
|
-- test order not present in targetlist
|
|
:PREFIX SELECT v2 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1;
|
|
|
|
-- test column with all NULL
|
|
:PREFIX SELECT v3 FROM :TEST_TABLE WHERE device_id = 1;
|
|
|
|
--
|
|
-- test qual pushdown
|
|
--
|
|
|
|
-- time is not segment by column so should not be pushed down
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE time < '2000-01-08' ORDER BY time, device_id;
|
|
|
|
-- device_id constraint should be pushed down
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time, device_id LIMIT 10;
|
|
|
|
-- test IS NULL / IS NOT NULL
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id IS NOT NULL ORDER BY time, device_id LIMIT 10;
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id IS NULL ORDER BY time, device_id LIMIT 10;
|
|
|
|
-- test IN (Const,Const)
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id IN (1,2) ORDER BY time, device_id LIMIT 10;
|
|
|
|
-- test cast pushdown
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id = '1'::text::int ORDER BY time, device_id LIMIT 10;
|
|
|
|
-- test expressions
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id = 1 + 4/2 ORDER BY time, device_id LIMIT 10;
|
|
|
|
-- test function calls
|
|
-- not yet pushed down
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE device_id = length(substring(version(),1,3)) ORDER BY time, device_id LIMIT 10;
|
|
|
|
--
|
|
-- test constraint exclusion
|
|
--
|
|
|
|
-- test plan time exclusion
|
|
-- first chunk should be excluded
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE time > '2000-01-08' ORDER BY time, device_id;
|
|
|
|
-- test runtime exclusion
|
|
-- first chunk should be excluded
|
|
:PREFIX SELECT * FROM :TEST_TABLE WHERE time > '2000-01-08'::text::timestamptz ORDER BY time, device_id;
|
|
|
|
-- test aggregate
|
|
:PREFIX SELECT count(*) FROM :TEST_TABLE;
|
|
|
|
-- test aggregate with GROUP BY
|
|
:PREFIX SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id;
|
|
|
|
-- test window functions with GROUP BY
|
|
:PREFIX SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id;
|
|
|
|
-- test CTE
|
|
:PREFIX WITH
|
|
q AS (SELECT v1 FROM :TEST_TABLE ORDER BY time)
|
|
SELECT * FROM q ORDER BY v1;
|
|
|
|
-- test CTE join
|
|
:PREFIX WITH
|
|
q1 AS (SELECT time, v1 FROM :TEST_TABLE WHERE device_id=1 ORDER BY time),
|
|
q2 AS (SELECT time, v2 FROM :TEST_TABLE WHERE device_id=2 ORDER BY time)
|
|
SELECT * FROM q1 INNER JOIN q2 ON q1.time=q2.time ORDER BY q1.time;
|
|
|
|
-- test prepared statement
|
|
PREPARE prep AS SELECT count(time) FROM :TEST_TABLE WHERE device_id = 1;
|
|
:PREFIX EXECUTE prep;
|
|
EXECUTE prep;
|
|
EXECUTE prep;
|
|
EXECUTE prep;
|
|
EXECUTE prep;
|
|
EXECUTE prep;
|
|
EXECUTE prep;
|
|
DEALLOCATE prep;
|
|
|
|
-- test explicit self-join
|
|
-- XXX FIXME
|
|
-- :PREFIX SELECT * FROM :TEST_TABLE m1 INNER JOIN :TEST_TABLE m2 ON m1.time = m2.time ORDER BY m1.time;
|
|
|
|
-- test implicit self-join
|
|
-- XXX FIXME
|
|
-- :PREFIX SELECT * FROM :TEST_TABLE m1, :TEST_TABLE m2 WHERE m1.time = m2.time ORDER BY m1.time;
|
|
|
|
-- test self-join with sub-query
|
|
-- XXX FIXME
|
|
-- :PREFIX SELECT * FROM (SELECT * FROM :TEST_TABLE m1) m1 INNER JOIN (SELECT * FROM :TEST_TABLE m2) m2 ON m1.time = m2.time ORDER BY m1.time;
|
|
|
|
-- test system columns
|
|
-- XXX FIXME
|
|
--SELECT xmin FROM :TEST_TABLE ORDER BY time;
|
|
|