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.