From 2aa6852dea9019e59cf258aa1946a476c5f9093d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Wed, 11 Sep 2019 21:42:25 +0000 Subject: [PATCH 1/2] Begin searching AggregateNames from 1, not 0 --- src/backend/distributed/planner/multi_logical_optimizer.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index f93312779..52db3da29 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -2896,7 +2896,9 @@ GetAggregateType(Oid aggFunctionId) } aggregateCount = lengthof(AggregateNames); - for (aggregateIndex = 0; aggregateIndex < aggregateCount; aggregateIndex++) + + Assert(AGGREGATE_INVALID_FIRST == 0); + for (aggregateIndex = 1; aggregateIndex < aggregateCount; aggregateIndex++) { const char *aggregateName = AggregateNames[aggregateIndex]; if (strncmp(aggregateName, aggregateProcName, NAMEDATALEN) == 0) From ae1171a37383f026650a5ab4c224c1e1c9757428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Wed, 11 Sep 2019 22:06:28 +0000 Subject: [PATCH 2/2] Test invalid aggregate --- .../regress/expected/multi_simple_queries.out | 11 ++++++++++- .../regress/expected/multi_simple_queries_0.out | 11 ++++++++++- src/test/regress/sql/multi_simple_queries.sql | 16 ++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/test/regress/expected/multi_simple_queries.out b/src/test/regress/expected/multi_simple_queries.out index 7a158efc2..f77983520 100644 --- a/src/test/regress/expected/multi_simple_queries.out +++ b/src/test/regress/expected/multi_simple_queries.out @@ -544,7 +544,6 @@ COPY articles_single_shard TO stdout; DEBUG: Creating router plan DEBUG: Plan is router executable 50 10 anjanette 19519 --- error out for queries with aggregates SELECT avg(word_count) FROM articles WHERE author_id = 2; @@ -556,6 +555,16 @@ DETAIL: distribution column value: 2 12356.400000000000 (1 row) +-- error out on unsupported aggregate +SET client_min_messages to 'NOTICE'; +CREATE AGGREGATE public.invalid(int) ( + sfunc = int4pl, + stype = int +); +SELECT invalid(word_count) FROM articles; +ERROR: unsupported aggregate function invalid +DROP AGGREGATE invalid(int); +SET client_min_messages to 'DEBUG2'; -- max, min, sum, count is somehow implemented -- differently in distributed planning SELECT max(word_count) as max, min(word_count) as min, diff --git a/src/test/regress/expected/multi_simple_queries_0.out b/src/test/regress/expected/multi_simple_queries_0.out index 5e5329b4e..cd11339c2 100644 --- a/src/test/regress/expected/multi_simple_queries_0.out +++ b/src/test/regress/expected/multi_simple_queries_0.out @@ -488,7 +488,6 @@ COPY articles_single_shard TO stdout; DEBUG: Creating router plan DEBUG: Plan is router executable 50 10 anjanette 19519 --- error out for queries with aggregates SELECT avg(word_count) FROM articles WHERE author_id = 2; @@ -500,6 +499,16 @@ DETAIL: distribution column value: 2 12356.400000000000 (1 row) +-- error out on unsupported aggregate +SET client_min_messages to 'NOTICE'; +CREATE AGGREGATE public.invalid(int) ( + sfunc = int4pl, + stype = int +); +SELECT invalid(word_count) FROM articles; +ERROR: unsupported aggregate function invalid +DROP AGGREGATE invalid(int); +SET client_min_messages to 'DEBUG2'; -- max, min, sum, count is somehow implemented -- differently in distributed planning SELECT max(word_count) as max, min(word_count) as min, diff --git a/src/test/regress/sql/multi_simple_queries.sql b/src/test/regress/sql/multi_simple_queries.sql index 8a03f06c9..7b4606b51 100644 --- a/src/test/regress/sql/multi_simple_queries.sql +++ b/src/test/regress/sql/multi_simple_queries.sql @@ -271,11 +271,24 @@ SELECT id -- copying from a single shard table does not require the master query COPY articles_single_shard TO stdout; --- error out for queries with aggregates SELECT avg(word_count) FROM articles WHERE author_id = 2; +-- error out on unsupported aggregate +SET client_min_messages to 'NOTICE'; + +CREATE AGGREGATE public.invalid(int) ( + sfunc = int4pl, + stype = int +); + +SELECT invalid(word_count) FROM articles; + +DROP AGGREGATE invalid(int); + +SET client_min_messages to 'DEBUG2'; + -- max, min, sum, count is somehow implemented -- differently in distributed planning SELECT max(word_count) as max, min(word_count) as min, @@ -313,5 +326,4 @@ SELECT * FROM articles TABLESAMPLE BERNOULLI (0) WHERE author_id = 1; SELECT * FROM articles TABLESAMPLE SYSTEM (100) WHERE author_id = 1 ORDER BY id; SELECT * FROM articles TABLESAMPLE BERNOULLI (100) WHERE author_id = 1 ORDER BY id; - SET client_min_messages to 'NOTICE';