From ff5959f8f9c1d40dfe8b36a18cbd28d78ac77dca Mon Sep 17 00:00:00 2001 From: Rafia Sabih <rafia.sabih@gmail.com> Date: Tue, 28 Mar 2023 12:17:06 +0200 Subject: [PATCH] Handle when FROM clause is missing in continuous aggregate definition It now errors out for such a case. Fixes #5500 --- CHANGELOG.md | 1 + tsl/src/continuous_aggs/create.c | 6 +++++- tsl/test/expected/cagg_errors.out | 3 +++ tsl/test/sql/cagg_errors.sql | 2 ++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51921b802..f423bfdf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ accidentally triggering the load of a previous DB version.** * #5459 Fix issue creating dimensional constraints * #5499 Do not segfault on large histogram() parameters * #5497 Allow named time_bucket arguments in Cagg definition +* #5500 Fix when no FROM clause in continuous aggregate definition **Thanks** * @nikolaps for reporting an issue with the COPY fetcher diff --git a/tsl/src/continuous_aggs/create.c b/tsl/src/continuous_aggs/create.c index b9d23a030..b917732f0 100644 --- a/tsl/src/continuous_aggs/create.c +++ b/tsl/src/continuous_aggs/create.c @@ -1050,7 +1050,11 @@ cagg_query_supported(const Query *query, StringInfo hint, StringInfo detail, con } #endif #endif - + if (!query->jointree->fromlist) + { + appendStringInfoString(hint, "FROM clause missing in the query"); + return false; + } if (query->commandType != CMD_SELECT) { appendStringInfoString(hint, "Use a SELECT query in the continuous aggregate view."); diff --git a/tsl/test/expected/cagg_errors.out b/tsl/test/expected/cagg_errors.out index 5fd68b716..60c9cba22 100644 --- a/tsl/test/expected/cagg_errors.out +++ b/tsl/test/expected/cagg_errors.out @@ -631,3 +631,6 @@ ERROR: invalid continuous aggregate query CREATE MATERIALIZED VIEW matv1 AS SELECT now() AS time; CREATE MATERIALIZED VIEW cagg1 WITH (timescaledb.continuous) AS SELECT time_bucket('1h',time) FROM matv1 GROUP BY 1; ERROR: invalid continuous aggregate view +-- No FROM clause in CAGG definition +CREATE MATERIALIZED VIEW cagg1 with (timescaledb.continuous) AS SELECT 1 GROUP BY 1 WITH NO DATA; +ERROR: invalid continuous aggregate query diff --git a/tsl/test/sql/cagg_errors.sql b/tsl/test/sql/cagg_errors.sql index ca5114d14..120fc933d 100644 --- a/tsl/test/sql/cagg_errors.sql +++ b/tsl/test/sql/cagg_errors.sql @@ -523,3 +523,5 @@ CREATE MATERIALIZED VIEW cagg1 WITH (timescaledb.continuous) AS SELECT time_buck CREATE MATERIALIZED VIEW matv1 AS SELECT now() AS time; CREATE MATERIALIZED VIEW cagg1 WITH (timescaledb.continuous) AS SELECT time_bucket('1h',time) FROM matv1 GROUP BY 1; +-- No FROM clause in CAGG definition +CREATE MATERIALIZED VIEW cagg1 with (timescaledb.continuous) AS SELECT 1 GROUP BY 1 WITH NO DATA;