mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 18:43:18 +08:00
This PR adds test infrastructure for running tests with shared tables. This allows having hypertables with specific configurations usable for all tests. Since these tests also don't require creating a new database for each test case some of the overhead of the normal tests is removed. While this will lead to much faster query tests some tests will still require their own database to test things, but most queres could be moved to this infrastructure to improve test coverage and speed them up.
124 lines
3.3 KiB
SQL
124 lines
3.3 KiB
SQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
-- print chunks ordered by time to ensure ordering we want
|
|
SELECT
|
|
ht.table_name AS hypertable,
|
|
c.table_name AS chunk,
|
|
ds.range_start
|
|
FROM
|
|
_timescaledb_catalog.chunk c
|
|
INNER JOIN LATERAL(SELECT * FROM _timescaledb_catalog.chunk_constraint cc WHERE c.id = cc.chunk_id ORDER BY cc.dimension_slice_id LIMIT 1) cc ON true
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON ds.id=cc.dimension_slice_id
|
|
INNER JOIN _timescaledb_catalog.dimension d ON ds.dimension_id = d.id
|
|
INNER JOIN _timescaledb_catalog.hypertable ht ON d.hypertable_id = ht.id
|
|
ORDER BY ht.table_name, range_start, chunk;
|
|
|
|
-- test ASC for reverse ordered chunks
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM ordered_append_reverse
|
|
ORDER BY time ASC LIMIT 1;
|
|
|
|
-- test DESC for reverse ordered chunks
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM ordered_append_reverse
|
|
ORDER BY time DESC LIMIT 1;
|
|
|
|
-- test query with ORDER BY time_bucket, device_id
|
|
-- must not use ordered append
|
|
:PREFIX SELECT
|
|
time_bucket('1d',time), device_id, name
|
|
FROM dimension_last
|
|
ORDER BY time_bucket('1d',time), device_id LIMIT 1;
|
|
|
|
-- test query with ORDER BY date_trunc, device_id
|
|
-- must not use ordered append
|
|
:PREFIX SELECT
|
|
date_trunc('day',time), device_id, name
|
|
FROM dimension_last
|
|
ORDER BY 1,2 LIMIT 1;
|
|
|
|
-- test with table with only dimension column
|
|
:PREFIX SELECT * FROM dimension_only ORDER BY time DESC LIMIT 1;
|
|
|
|
-- test LEFT JOIN against hypertable
|
|
:PREFIX_NO_ANALYZE SELECT *
|
|
FROM dimension_last
|
|
LEFT JOIN dimension_only USING (time)
|
|
ORDER BY dimension_last.time DESC
|
|
LIMIT 2;
|
|
|
|
-- test INNER JOIN against non-hypertable
|
|
:PREFIX_NO_ANALYZE SELECT *
|
|
FROM dimension_last
|
|
INNER JOIN dimension_only USING (time)
|
|
ORDER BY dimension_last.time DESC
|
|
LIMIT 2;
|
|
|
|
-- test join against non-hypertable
|
|
:PREFIX SELECT *
|
|
FROM dimension_last
|
|
INNER JOIN devices USING(device_id)
|
|
ORDER BY dimension_last.time DESC
|
|
LIMIT 2;
|
|
|
|
-- test hypertable with index missing on one chunk
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM ht_missing_indexes
|
|
ORDER BY time ASC LIMIT 1;
|
|
|
|
-- test hypertable with index missing on one chunk
|
|
-- and no data
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM ht_missing_indexes
|
|
WHERE device_id = 2
|
|
ORDER BY time DESC LIMIT 1;
|
|
|
|
-- test hypertable with index missing on one chunk
|
|
-- and no data
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM ht_missing_indexes
|
|
WHERE time > '2000-01-07'
|
|
ORDER BY time LIMIT 10;
|
|
|
|
-- test hypertable with dropped columns
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM ht_dropped_columns
|
|
ORDER BY time ASC LIMIT 1;
|
|
|
|
-- test hypertable with dropped columns
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM ht_dropped_columns
|
|
WHERE device_id = 1
|
|
ORDER BY time DESC;
|
|
|
|
-- test hypertable with 2 space dimensions
|
|
:PREFIX SELECT
|
|
time, device_id, value
|
|
FROM space2
|
|
ORDER BY time DESC;
|
|
|
|
-- test hypertable with 3 space dimensions
|
|
:PREFIX SELECT
|
|
time
|
|
FROM space3
|
|
ORDER BY time DESC;
|
|
|
|
-- test COLLATION
|
|
-- cant be tested in our ci because alpine doesnt support locales
|
|
-- :PREFIX SELECT * FROM sortopt_test ORDER BY time, device COLLATE "en_US.utf8";
|
|
|
|
-- test NULLS FIRST
|
|
:PREFIX SELECT * FROM sortopt_test ORDER BY time, device NULLS FIRST;
|
|
|
|
-- test NULLS LAST
|
|
:PREFIX SELECT * FROM sortopt_test ORDER BY time, device DESC NULLS LAST;
|