calcite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Donald,Zheng(" <>
Subject Discarding functionQuantifier in SqlCall.clone method leads to nullif function mistake
Date Wed, 21 Sep 2016 12:37:14 GMT
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.
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message