From 1883b05bb8119e51dcf3a908fba75ef79ce2b337 Mon Sep 17 00:00:00 2001 From: Sven Klemm Date: Fri, 21 Feb 2025 11:37:21 +0100 Subject: [PATCH] Allow tsdb as alias for timescaledb in WITH clauses This patch allows tsdb as alias for timescaledb in WITH and SET clauses to save on some typing. --- src/extension_constants.h | 1 + src/with_clause_parser.c | 4 +++- tsl/test/expected/cagg_ddl-17.out | 8 ++++++++ tsl/test/shared/sql/with_clause_parser.sql | 4 +++- tsl/test/sql/cagg_ddl.sql.in | 10 ++++++++++ 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/extension_constants.h b/src/extension_constants.h index f17bbcc9917..ab9c3af2188 100644 --- a/src/extension_constants.h +++ b/src/extension_constants.h @@ -10,6 +10,7 @@ #define EXTENSION_NAME "timescaledb" /* Name of the actual extension */ #define EXTENSION_NAMESPACE "timescaledb" /* Namespace for extension objects */ +#define EXTENSION_NAMESPACE_ALIAS "tsdb" /* Namespace for extension objects */ #define EXTENSION_FDW_NAME "timescaledb_fdw" #define TSL_LIBRARY_NAME "timescaledb-tsl" #define TS_LIBDIR "$libdir/" diff --git a/src/with_clause_parser.c b/src/with_clause_parser.c index 790cb2dd718..d8826b1f918 100644 --- a/src/with_clause_parser.c +++ b/src/with_clause_parser.c @@ -40,7 +40,9 @@ ts_with_clause_filter(const List *def_elems, List **within_namespace, List **not { DefElem *def = (DefElem *) lfirst(cell); - if (def->defnamespace != NULL && pg_strcasecmp(def->defnamespace, EXTENSION_NAMESPACE) == 0) + if (def->defnamespace != NULL && + (pg_strcasecmp(def->defnamespace, EXTENSION_NAMESPACE) == 0 || + pg_strcasecmp(def->defnamespace, EXTENSION_NAMESPACE_ALIAS) == 0)) { if (within_namespace != NULL) *within_namespace = lappend(*within_namespace, def); diff --git a/tsl/test/expected/cagg_ddl-17.out b/tsl/test/expected/cagg_ddl-17.out index 2ca07315139..3f5ccbbd2d5 100644 --- a/tsl/test/expected/cagg_ddl-17.out +++ b/tsl/test/expected/cagg_ddl-17.out @@ -2121,3 +2121,11 @@ SELECT * FROM _timescaledb_catalog.compression_settings; -------+-----------+---------+--------------+-------------------- (0 rows) +-- test WITH namespace alias +CREATE TABLE with_alias(time timestamptz not null); +CREATE MATERIALIZED VIEW cagg_alias +WITH (tsdb.continuous, tsdb.materialized_only=false) AS +SELECT time_bucket(INTERVAL '1 day', time) FROM conditions GROUP BY 1 WITH NO DATA; +ALTER MATERIALIZED VIEW cagg_alias SET (timescaledb.materialized_only=false); +ALTER MATERIALIZED VIEW cagg_alias SET (tsdb.materialized_only=false); +DROP MATERIALIZED VIEW cagg_alias; diff --git a/tsl/test/shared/sql/with_clause_parser.sql b/tsl/test/shared/sql/with_clause_parser.sql index 5d1ea56582c..cc583a04fa7 100644 --- a/tsl/test/shared/sql/with_clause_parser.sql +++ b/tsl/test/shared/sql/with_clause_parser.sql @@ -18,7 +18,9 @@ SELECT * FROM test_with_clause_filter( {"baz", "bar", "foo"}, {"timescaledb", "bar", "baz"}, {"bar", "timescaledb", "baz"}, - {"timescaledb", "baz", "bar"} + {"timescaledb", "baz", "bar"}, + {"tsdb", "qux", "bar"}, + {"tsdb", "quux", "bar"} }'); SELECT * FROM test_with_clause_filter( diff --git a/tsl/test/sql/cagg_ddl.sql.in b/tsl/test/sql/cagg_ddl.sql.in index 3739b3e2a9b..b617f58361d 100644 --- a/tsl/test/sql/cagg_ddl.sql.in +++ b/tsl/test/sql/cagg_ddl.sql.in @@ -1347,3 +1347,13 @@ SELECT count(compress_chunk(ch)) FROM show_chunks('cagg1') ch; DROP MATERIALIZED VIEW cagg1; SELECT * FROM _timescaledb_catalog.compression_settings; +-- test WITH namespace alias +CREATE TABLE with_alias(time timestamptz not null); +CREATE MATERIALIZED VIEW cagg_alias +WITH (tsdb.continuous, tsdb.materialized_only=false) AS +SELECT time_bucket(INTERVAL '1 day', time) FROM conditions GROUP BY 1 WITH NO DATA; + +ALTER MATERIALIZED VIEW cagg_alias SET (timescaledb.materialized_only=false); +ALTER MATERIALIZED VIEW cagg_alias SET (tsdb.materialized_only=false); + +DROP MATERIALIZED VIEW cagg_alias;