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

yanjing.wang commented on CALCITE-4512:
---------------------------------------

I find the culprit is invoking 'expandGroupByOrHavingExpr' method in 
'validateGroupClause' method of 'SqlValidatorImpl' class.

it uses 'ExtendedExpander' visitor to expand every group item. when we group by 
an expression rather an identifier,  'ExtendedExpander' expands every arguments 
of the expression operator, so *name* in *replace(name, 'a', 'b')* has been 
expanded to *group by replace(replace(name, 'a', 'b'), 'a', 'b')* because 
select list has an item with *alias name*.

> group by expression has argument name same with select list item alias, 
> causes validation error
> -----------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-4512
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4512
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.26.0
>         Environment: jvm: open-jdk8
>            Reporter: yanjing.wang
>            Priority: Major
>             Fix For: 1.27.0
>
>
> String sql = "select replace(name, 'a', 'b') as name from users group by 
> replace(name, 'a', 'b')";
>  
> when group by expression has argument name same with select list item alias, 
> the group by argument will be expanded to select list item when sql 
> conformance supports 'groupByAlias', so the above sql will be expanded to 
> String sql = "select replace(name, 'a', 'b') as name from users group by 
> replace(replace(name, 'a', 'b'), 'a', 'b')";
>  
> this is unexpected.



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

Reply via email to