Skip to content

Commit f6a12c6

Browse files
committed
Dealing with review comments
1 parent b2d9a58 commit f6a12c6

File tree

3 files changed

+30
-69
lines changed

3 files changed

+30
-69
lines changed

sql/cagg_api.sql

Lines changed: 4 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,15 @@ SET search_path TO pg_catalog, pg_temp;
102102
CREATE OR REPLACE FUNCTION _timescaledb_functions.get_materialization_invalidations(
103103
continuous_aggregate REGCLASS,
104104
restriction TSTZRANGE
105-
) RETURNS TSTZMULTIRANGE AS
105+
) RETURNS TABLE (invalidations TSTZMULTIRANGE) AS
106106
$body$
107107
DECLARE
108-
result TSTZMULTIRANGE;
109108
info RECORD := _timescaledb_functions.get_materialization_info(continuous_aggregate);
110109
aligned TSTZRANGE := _timescaledb_functions.align_to_bucket(info.bucket_width, restriction);
111110
BEGIN
112111
-- Compute the multirange for the invalidations inside the
113-
-- restriction passed down to the function and store this in the
114-
-- result record.
112+
-- restriction passed down to the function and return the ranges.
113+
RETURN QUERY
115114
WITH
116115
ranges AS (
117116
SELECT materialization_id,
@@ -121,53 +120,10 @@ BEGIN
121120
FROM _timescaledb_functions.get_raw_materialization_ranges('timestamptz'::regtype)
122121
GROUP BY materialization_id
123122
)
124-
SELECT range_agg(invals * multirange(aligned)) INTO result
123+
SELECT range_agg(invals * multirange(aligned))
125124
FROM ranges
126125
WHERE invals && aligned
127126
AND materialization_id = info.materialization_id;
128-
129-
-- Delete all tuples that intersect with the restriction passed
130-
-- down and insert the "residue" resulting from removing the
131-
-- invalidation ranges after being restricted.
132-
WITH
133-
ranges AS (
134-
SELECT materialization_id,
135-
range_agg(_timescaledb_functions.as_multirange(lowest_modified_value,
136-
greatest_modified_value,
137-
null::tstzrange)) AS invals
138-
FROM _timescaledb_functions.get_raw_materialization_ranges('timestamptz'::regtype)
139-
GROUP BY materialization_id
140-
),
141-
residue AS (
142-
DELETE FROM _timescaledb_catalog.continuous_aggs_materialization_invalidation_log
143-
WHERE _timescaledb_functions.as_multirange(lowest_modified_value,
144-
greatest_modified_value,
145-
null::tstzrange)
146-
&& aligned
147-
AND materialization_id = info.materialization_id
148-
AND lowest_modified_value
149-
BETWEEN _timescaledb_functions.get_min_for_type('timestamptz'::regtype)
150-
AND _timescaledb_functions.get_max_for_type('timestamptz'::regtype)
151-
AND greatest_modified_value
152-
BETWEEN _timescaledb_functions.get_min_for_type('timestamptz'::regtype)
153-
AND _timescaledb_functions.get_max_for_type('timestamptz'::regtype)
154-
RETURNING materialization_id,
155-
_timescaledb_functions.as_multirange(lowest_modified_value,
156-
greatest_modified_value,
157-
null::tstzrange)
158-
- multirange(aligned) as rng
159-
)
160-
INSERT INTO _timescaledb_catalog.continuous_aggs_materialization_invalidation_log
161-
SELECT materialization_id,
162-
_timescaledb_functions.to_unix_microseconds(lower(rng)),
163-
_timescaledb_functions.to_unix_microseconds(upper(rng))
164-
FROM (
165-
SELECT materialization_id, unnest(range_agg(rng))
166-
FROM residue
167-
GROUP BY materialization_id
168-
) t(materialization_id, rng);
169-
170-
RETURN result;
171127
END
172128
$body$
173129
LANGUAGE plpgsql

tsl/test/expected/cagg_api.out

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,20 @@ SELECT table_name, get_materialization_info(table_name)
9595
SELECT get_materialization_info('hyper_no_cagg');
9696
ERROR: "public.hyper_no_cagg" is not a continuous aggregate
9797
\set ON_ERROR_STOP 1
98-
SELECT * INTO before FROM _timescaledb_catalog.continuous_aggs_materialization_invalidation_log;
98+
-- This is not part of the API either, but added a test here to make
99+
-- sure that it works as expected.
100+
SELECT materialization_id,
101+
to_timestamp(lowest_modified_value),
102+
to_timestamp(greatest_modified_value)
103+
FROM get_raw_materialization_ranges('timestamptz');
104+
materialization_id | to_timestamp | to_timestamp
105+
--------------------+--------------+--------------
106+
(0 rows)
107+
108+
-- Here are tests of the API
109+
SELECT *
110+
INTO before
111+
FROM _timescaledb_catalog.continuous_aggs_materialization_invalidation_log;
99112
CALL _timescaledb_functions.add_materialization_invalidations(
100113
'tstz_temperature_15m'::regclass,
101114
'["2025-04-25 11:10:00+02","2025-04-26 11:14:00+02"]'::tsrange
@@ -121,23 +134,12 @@ SELECT materialization_id,
121134
8 | 2025-04-25 11:00:00+02 | 2025-04-26 11:15:00+02
122135
(1 row)
123136

124-
START TRANSACTION;
125137
SELECT * FROM _timescaledb_functions.get_materialization_invalidations(
126138
'tstz_temperature_15m'::regclass,
127139
'["2025-04-25","2025-04-26"]'::tstzrange
128140
);
129-
get_materialization_invalidations
141+
invalidations
130142
-------------------------------------------------------
131143
{["2025-04-25 11:00:00+02","2025-04-26 00:00:00+02")}
132144
(1 row)
133145

134-
COMMIT;
135-
SELECT materialization_id,
136-
to_timestamp(lowest_modified_value),
137-
to_timestamp(greatest_modified_value)
138-
FROM get_raw_materialization_ranges('timestamptz');
139-
materialization_id | to_timestamp | to_timestamp
140-
--------------------+------------------------+------------------------
141-
8 | 2025-04-26 00:00:00+02 | 2025-04-26 11:15:00+02
142-
(1 row)
143-

tsl/test/sql/cagg_api.sql

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,17 @@ SELECT table_name, get_materialization_info(table_name)
7878
SELECT get_materialization_info('hyper_no_cagg');
7979
\set ON_ERROR_STOP 1
8080

81-
SELECT * INTO before FROM _timescaledb_catalog.continuous_aggs_materialization_invalidation_log;
81+
-- This is not part of the API either, but added a test here to make
82+
-- sure that it works as expected.
83+
SELECT materialization_id,
84+
to_timestamp(lowest_modified_value),
85+
to_timestamp(greatest_modified_value)
86+
FROM get_raw_materialization_ranges('timestamptz');
87+
88+
-- Here are tests of the API
89+
SELECT *
90+
INTO before
91+
FROM _timescaledb_catalog.continuous_aggs_materialization_invalidation_log;
8292

8393
CALL _timescaledb_functions.add_materialization_invalidations(
8494
'tstz_temperature_15m'::regclass,
@@ -98,14 +108,7 @@ SELECT materialization_id,
98108
to_timestamp(greatest_modified_value)
99109
FROM get_raw_materialization_ranges('timestamptz');
100110

101-
START TRANSACTION;
102111
SELECT * FROM _timescaledb_functions.get_materialization_invalidations(
103112
'tstz_temperature_15m'::regclass,
104113
'["2025-04-25","2025-04-26"]'::tstzrange
105114
);
106-
COMMIT;
107-
108-
SELECT materialization_id,
109-
to_timestamp(lowest_modified_value),
110-
to_timestamp(greatest_modified_value)
111-
FROM get_raw_materialization_ranges('timestamptz');

0 commit comments

Comments
 (0)