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 
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 

    public SqlNode clone(SqlParserPos pos) {
        List<? extends SqlNode> operandList = getOperandList();
        return getOperator().createCall(getFunctionQuantifier(), pos, 
                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