use of io.confluent.ksql.parser.tree.FunctionCall in project ksql by confluentinc.
the class AstBuilder method visitFunctionCall.
@Override
public Node visitFunctionCall(SqlBaseParser.FunctionCallContext context) {
Optional<Window> window = visitIfPresent(context.over(), Window.class);
QualifiedName name = getQualifiedName(context.qualifiedName());
boolean distinct = false;
if (name.toString().equals("NULLIF")) {
check(context.expression().size() == 2, "Invalid number of arguments for 'nullif' function", context);
check(!window.isPresent(), "OVER clause not valid for 'nullif' function", context);
check(!distinct, "DISTINCT not valid for 'nullif' function", context);
return new NullIfExpression(getLocation(context), (Expression) visit(context.expression(0)), (Expression) visit(context.expression(1)));
}
return new FunctionCall(getLocation(context), getQualifiedName(context.qualifiedName()), window, distinct, visit(context.expression(), Expression.class));
}
use of io.confluent.ksql.parser.tree.FunctionCall in project ksql by confluentinc.
the class AggregateExpressionRewriter method rewriteFunctionCall.
@Override
public Expression rewriteFunctionCall(FunctionCall node, Void context, ExpressionTreeRewriter<Void> treeRewriter) {
String functionName = node.getName().getSuffix();
if (functionRegistry.isAnAggregateFunction(functionName)) {
String aggVarName = AGGREGATE_FUNCTION_VARIABLE_PREFIX + aggVariableIndex;
aggVariableIndex++;
return new QualifiedNameReference(QualifiedName.of(aggVarName));
} else {
List<Expression> arguments = new ArrayList<>();
for (Expression argExpression : node.getArguments()) {
arguments.add(treeRewriter.rewrite(argExpression, context));
}
return new FunctionCall(node.getName(), arguments);
}
}
use of io.confluent.ksql.parser.tree.FunctionCall in project ksql by confluentinc.
the class ExpressionFormatterTest method shouldFormatFunctionWithDistinct.
@Test
public void shouldFormatFunctionWithDistinct() {
final FunctionCall functionCall = new FunctionCall(new NodeLocation(1, 1), QualifiedName.of("function", "COUNT"), true, Collections.singletonList(new StringLiteral("name")));
assertThat(ExpressionFormatter.formatExpression(functionCall), equalTo("function.COUNT(DISTINCT 'name')"));
}
use of io.confluent.ksql.parser.tree.FunctionCall in project ksql by confluentinc.
the class ExpressionFormatterTest method shouldFormatFunctionCallWithCount.
@Test
public void shouldFormatFunctionCallWithCount() {
final FunctionCall functionCall = new FunctionCall(QualifiedName.of("function", "COUNT"), Collections.singletonList(new StringLiteral("name")));
assertThat(ExpressionFormatter.formatExpression(functionCall), equalTo("function.COUNT('name')"));
}
use of io.confluent.ksql.parser.tree.FunctionCall in project ksql by confluentinc.
the class ExpressionFormatterTest method shouldFormatFunctionCountStar.
@Test
public void shouldFormatFunctionCountStar() {
final FunctionCall functionCall = new FunctionCall(QualifiedName.of("function", "COUNT"), Collections.emptyList());
assertThat(ExpressionFormatter.formatExpression(functionCall), equalTo("function.COUNT(*)"));
}
Aggregations