luoyuxia created FLINK-27145:
--------------------------------

             Summary: The code generated for agg function accepts empty 
parameters can't be compiled
                 Key: FLINK-27145
                 URL: https://issues.apache.org/jira/browse/FLINK-27145
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / Planner
            Reporter: luoyuxia
             Fix For: 1.16.0


In batch mode, when I try to call Hive's `count` function(GenericUDAFCount) 
using the following sql:
{code:java}
select count(*) from src;
{code}
It'll throw the exception "Unexpected token ")" in primary" while compling the 
generated code.

It happens in the following generated code:
{code:java}
function_org$apache$flink$table$planner$utils$xxx.accumulate(
            acc$7,); {code}
 

The reason is the following code in  method 
`AggCodeGenHelper#genAccumulateFlatAggregateBuffer`
{code:java}
s"""
  |$externalAccTypeTerm $externalAccTerm = $externalAccCode;
  |${functionIdentifiers(function)}.accumulate(
  |  $externalAccTerm,
  |  ${operandTerms.mkString(", ")}); // but operandTerms can be empty list
  |$aggBufferName = ${genToInternalConverter(ctx, 
externalAccType)(externalAccTerm)};
  |${aggBufferExpr.nullTerm} = false;
""".stripMargin {code}
In this case, for `count(*)`, it'll regards as an agg function with empty 
parameter in Hive.

So, the exception happens.

Although the agg function with empty parameter is rare, it may happens. We 
should make the code more rubst.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to