From 2656d885f94b9a249937ede8d09024b570cd72fb Mon Sep 17 00:00:00 2001 From: Sait Talha Nisanci Date: Mon, 23 Aug 2021 11:30:33 +0300 Subject: [PATCH] Rewrite AppendColumnNames for Pg14 Postgres changed stats expression types as of PG14. Hence we needed to write the AppendColumnNames method. Also they removed the error on PG side so we remove it as well. Relevant commits on pg14: a4d75c86bf15220df22de0a92c819ecef9db3849 388e75ad33489b77cfb9a8590a91e9287d8fb960 --- .../deparser/deparse_statistics_stmts.c | 22 ++++++++++++++++++- .../regress/expected/propagate_statistics.out | 5 ----- src/test/regress/sql/propagate_statistics.sql | 3 --- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/backend/distributed/deparser/deparse_statistics_stmts.c b/src/backend/distributed/deparser/deparse_statistics_stmts.c index 4da69a041..e6f8fc262 100644 --- a/src/backend/distributed/deparser/deparse_statistics_stmts.c +++ b/src/backend/distributed/deparser/deparse_statistics_stmts.c @@ -12,6 +12,8 @@ */ #include "postgres.h" +#include "distributed/pg_version_constants.h" + #include "distributed/citus_ruleutils.h" #include "distributed/deparser.h" #include "distributed/listutils.h" @@ -231,7 +233,25 @@ AppendStatTypes(StringInfo buf, CreateStatsStmt *stmt) appendStringInfoString(buf, ")"); } +#if PG_VERSION_NUM >= PG_VERSION_14 +static void +AppendColumnNames(StringInfo buf, CreateStatsStmt *stmt) +{ + StatsElem *column = NULL; + foreach_ptr(column, stmt->exprs) + { + const char *columnName = quote_identifier(column->name); + + appendStringInfoString(buf, columnName); + + if (column != llast(stmt->exprs)) + { + appendStringInfoString(buf, ", "); + } + } +} +#else static void AppendColumnNames(StringInfo buf, CreateStatsStmt *stmt) { @@ -257,7 +277,7 @@ AppendColumnNames(StringInfo buf, CreateStatsStmt *stmt) } } } - +#endif static void AppendTableName(StringInfo buf, CreateStatsStmt *stmt) diff --git a/src/test/regress/expected/propagate_statistics.out b/src/test/regress/expected/propagate_statistics.out index 1c798c526..fd4f8e6e2 100644 --- a/src/test/regress/expected/propagate_statistics.out +++ b/src/test/regress/expected/propagate_statistics.out @@ -99,12 +99,7 @@ SELECT create_distributed_table('test','x'); (1 row) -CREATE STATISTICS stats_xy ON (x, y) FROM test; -ERROR: only simple column references are allowed in CREATE STATISTICS -CREATE STATISTICS stats_xy ON x+y FROM test; -ERROR: only simple column references are allowed in CREATE STATISTICS CREATE STATISTICS stats_xy ON x,y FROM test; -CREATE STATISTICS IF NOT EXISTS stats_xy ON x+y FROM test; \c - - - :worker_1_port SELECT stxname FROM pg_statistic_ext diff --git a/src/test/regress/sql/propagate_statistics.sql b/src/test/regress/sql/propagate_statistics.sql index 51d3076f2..898387eaa 100644 --- a/src/test/regress/sql/propagate_statistics.sql +++ b/src/test/regress/sql/propagate_statistics.sql @@ -79,10 +79,7 @@ SELECT create_distributed_table('ownertest','a'); CREATE TABLE test (x int, y int); SELECT create_distributed_table('test','x'); -CREATE STATISTICS stats_xy ON (x, y) FROM test; -CREATE STATISTICS stats_xy ON x+y FROM test; CREATE STATISTICS stats_xy ON x,y FROM test; -CREATE STATISTICS IF NOT EXISTS stats_xy ON x+y FROM test; \c - - - :worker_1_port SELECT stxname