[ 
https://issues.apache.org/jira/browse/CALCITE-4665?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17379558#comment-17379558
 ] 

duan xiong commented on CALCITE-4665:
-------------------------------------

[~yanjing.wang] Thanks for your review. This problem I have been considering. 

The grouping_id is a grouping function's assembled. For Example:

grouping_id(A,B)===> grouping(A)+grouping(B) and the result is a binaries. 
right?

Then the call grouping() function is used to distinguish different null 
values,If the origin value is null, the grouping function return 0, if this 
column's value because grouping set return null, Then the grouping function 
returns 1. So this method can work correctly. If I am mistaken, please let me 
know. Thank you again.

> When group key is a superset of the union of the groupKeys will generate the 
> wrong Sql
> --------------------------------------------------------------------------------------
>
>                 Key: CALCITE-4665
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4665
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.22.0
>            Reporter: xiejiajun
>            Assignee: duan xiong
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.28.0
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> The UT:
> {code:java}
> private RelBuilder example5(RelBuilder builder) {
>   return builder
>       .scan("EMP")
>       .aggregate(builder.groupKey(ImmutableBitSet.of(0, 1 ,2),
>           (Iterable<ImmutableBitSet>)
>               
> ImmutableList.of(ImmutableBitSet.of(0,1),ImmutableBitSet.of(0))),
>           builder.count(false, "C"),
>           builder.sum(false, "S", builder.field("SAL"))).filter(
>           builder.call(SqlStdOperatorTable.GREATER_THAN, builder.field("C"),
>               builder.literal(10)))
>       
> .filter(builder.call(SqlStdOperatorTable.EQUALS,builder.field("JOB"),builder.literal("DEVELOP")))
>       .project(builder.field("JOB"));
> }
> {code}
> The RelNode will generate the wrong Sql:
> {code:java}
> SELECT "JOB"
> FROM (SELECT "EMPNO", "ENAME", "JOB", COUNT(*) AS "C", SUM("SAL") AS "S"
> FROM "scott"."EMP"
> GROUP BY GROUPING SETS(("EMPNO", "ENAME"), "EMPNO")
> HAVING COUNT(*) > 10) AS "t0"
> WHERE "JOB" = 'DEVELOP'
> {code}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to