You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Feng Zhu (Jira)" <ji...@apache.org> on 2020/04/03 10:13:00 UTC
[jira] [Created] (CALCITE-3895) When the group sets of Aggregate is
not null, union of its members should contain group key
Feng Zhu created CALCITE-3895:
---------------------------------
Summary: When the group sets of Aggregate is not null, union of its members should contain group key
Key: CALCITE-3895
URL: https://issues.apache.org/jira/browse/CALCITE-3895
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.22.0
Reporter: Feng Zhu
Assignee: Feng Zhu
Fix For: 1.23.0
In general, the following query will fail in validation phase with “deptno is not being grouped”.
{code:java}
select deptno, count(*) as c
from emp
group by grouping sets (())
{code}
However, there is no constraint in Aggregate. For example, we can still create the RelNode by RelBuilder.
{code:java}
@Test void testAggregate6() {
// Equivalent SQL (illegal):
// SELECT deptno, count(*) AS C
// FROM emp
// GROUP BY grouping sets (())
final RelBuilder builder = RelBuilder.create(config().build());
RelNode aggregate = builder.scan("EMP")
.aggregate(
builder.groupKey(ImmutableBitSet.of(0),
(Iterable<ImmutableBitSet>) ImmutableList.of(
ImmutableBitSet.of())),
builder.countStar("C"))
.build();
});
}
{code}
It is interesting that the rutime can process illegal RelNode and return result as expected.
This issue is exposed in CALCITE-3893. However, we can also find the same case in _*RelMetadataTest#checkAverageRowSize*_. So I opened an individual Jira to discuss it.
I propose to add the constraint below: assert
{code:java}
ImmutableBitSet.union(groupSets).contains(groupSet)
: "the union of group sets should contain group key";
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)