You’re correct.

Also, for efficiency I would override clone in SqlBasicCall, to avoid 
converting operands from an array to a list and back again.

Can you please log a JIRA case and provide a patch?

Julian

> On Sep 21, 2016, at 5:37 AM, Donald,Zheng(vip.com) <donald.zh...@vipshop.com> 
> wrote:
> 
> Hi all,
> I am new to Calcite.
> I found Calcite can’t execute queries like ‘select nullif(count(distinct 
> colunm),0) from table ’, and dumped ‘Plan after trimming unused fields’ like 
> this:
> LogicalProject(NAME=[$0], GENDER=[CASE(=($1, 0), null, CAST($2):BIGINT)])
>                         LogicalAggregate(group=[{0}], agg#0=[COUNT(DISTINCT 
> $1)], agg#1=[COUNT($1)])
>                           LogicalProject(NAME=[$1], GENDER=[$3])
>                           CsvTableScan(table=[[SALES, EMPS]], fields=[[0, 1, 
> 2, 3, 4, 5, 6, 7, 8, 9]])
> Then, I checked SqlNullifFunction rewriteCall method which used 
> SqlNode.clone(SqlParserPos pos) method to create SqlCase call.
> Finally, the root cause I guess may be that the SqllCall.clone(SqlParserPos 
> pos) method discard the functionQuantifier which holds such as ‘distinct’ 
> symbol when create new SqlCall instance.
> 
> Is there any special reason for the SqllCall.clone method implemented like 
> this?
> and whether it has any side effects if I change the SqllCall.clone method as 
> followed:
> 
>    public SqlNode clone(SqlParserPos pos) {
>        List<? extends SqlNode> operandList = getOperandList();
>        return getOperator().createCall(getFunctionQuantifier(), pos, 
> operandList.toArray(
>                new SqlNode[operandList.size()]));
> }
> 
> 
> Best regards.
> 
> 本电子邮件可能为保密文件。如果阁下非电子邮件所指定之收件人,谨请立即通知本人。敬请阁下不要使用、保存、复印、打印、散布本电子邮件及其内容,或将其用于其他任何目的或向任何人披露。谢谢您的合作!
>  This communication is intended only for the addressee(s) and may contain 
> information that is privileged and confidential. You are hereby notified 
> that, if you are not an intended recipient listed above, or an authorized 
> employee or agent of an addressee of this communication responsible for 
> delivering e-mail messages to an intended recipient, any dissemination, 
> distribution or reproduction of this communication (including any attachments 
> hereto) is strictly prohibited. If you have received this communication in 
> error, please notify us immediately by a reply e-mail addressed to the sender 
> and permanently delete the original e-mail communication and any attachments 
> from all storage devices without making or otherwise retaining a copy.

Reply via email to