Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/backend/distributed/commands/statistics.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,15 @@ PreprocessCreateStatisticsStmt(Node *node, const char *queryString,
{
CreateStatsStmt *stmt = castNode(CreateStatsStmt, node);

RangeVar *relation = (RangeVar *) linitial(stmt->relations);
Node *relationNode = (Node *) linitial(stmt->relations);

if (!IsA(relationNode, RangeVar))
{
return NIL;
}

RangeVar *relation = (RangeVar *) relationNode;

Oid relationId = RangeVarGetRelid(relation, ShareUpdateExclusiveLock, false);

if (!IsCitusTable(relationId) || !ShouldPropagate())
Expand Down
9 changes: 8 additions & 1 deletion src/backend/distributed/deparser/qualify_statistics_stmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,14 @@ QualifyCreateStatisticsStmt(Node *node)
{
CreateStatsStmt *stmt = castNode(CreateStatsStmt, node);

RangeVar *relation = (RangeVar *) linitial(stmt->relations);
Node *relationNode = (Node *) linitial(stmt->relations);

if (!IsA(relationNode, RangeVar))
{
return;
}

RangeVar *relation = (RangeVar *) relationNode;

if (relation->schemaname == NULL)
{
Expand Down
11 changes: 11 additions & 0 deletions src/test/regress/expected/pg16.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,17 @@
SHOW server_version \gset
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
\gset
-- test invalid statistics
-- behavior is same among PG versions, error message differs
-- relevant PG16 commits: d84a6c3dad1 and f30c04682cd
CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo;
ERROR: CREATE STATISTICS only supports relation names in the FROM clause
CREATE FUNCTION tftest(int) returns table(a int, b int) as $$
SELECT $1, $1+i FROM generate_series(1,5) g(i);
$$ LANGUAGE sql IMMUTABLE STRICT;
CREATE STATISTICS alt_stat2 ON a FROM tftest(1);
ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DROP FUNCTION tftest;
\if :server_version_ge_16
\else
\q
Expand Down
11 changes: 11 additions & 0 deletions src/test/regress/expected/pg16_0.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,17 @@
SHOW server_version \gset
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
\gset
-- test invalid statistics
-- behavior is same among PG versions, error message differs
-- relevant PG16 commits: d84a6c3dad1 and f30c04682cd
CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo;
ERROR: only a single relation is allowed in CREATE STATISTICS
CREATE FUNCTION tftest(int) returns table(a int, b int) as $$
SELECT $1, $1+i FROM generate_series(1,5) g(i);
$$ LANGUAGE sql IMMUTABLE STRICT;
CREATE STATISTICS alt_stat2 ON a FROM tftest(1);
ERROR: only a single relation is allowed in CREATE STATISTICS
DROP FUNCTION tftest;
\if :server_version_ge_16
\else
\q
12 changes: 12 additions & 0 deletions src/test/regress/sql/pg16.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@
SHOW server_version \gset
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
\gset

-- test invalid statistics
-- behavior is same among PG versions, error message differs
-- relevant PG16 commits: d84a6c3dad1 and f30c04682cd
CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo;

CREATE FUNCTION tftest(int) returns table(a int, b int) as $$
SELECT $1, $1+i FROM generate_series(1,5) g(i);
$$ LANGUAGE sql IMMUTABLE STRICT;
CREATE STATISTICS alt_stat2 ON a FROM tftest(1);
DROP FUNCTION tftest;

\if :server_version_ge_16
\else
\q
Expand Down
Loading