prestodb/presto · error · SemanticException
INVALID_FUNCTION_NAME
INVALID_FUNCTION_NAME
Error message
Temporary functions cannot be qualified.
What it means
Analysis error: a temporary (session) function was referenced with a qualified name such as catalog.func or schema.func. Temporary functions live only in the session namespace and must be invoked unqualified; qualifying one is rejected because no catalog can resolve it.
Source
Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java:4276
SingleColumn column = (SingleColumn) item;
Optional<Identifier> alias = column.getAlias();
if (alias.isPresent()) {
assignments.put(QualifiedName.of(alias.get().getValue()), column.getExpression()); // TODO: need to know if alias was quoted
}
else if (column.getExpression() instanceof Identifier) {
assignments.put(QualifiedName.of(((Identifier) column.getExpression()).getValue()), column.getExpression());
}
}
}
return assignments.build();
}
private void checkFunctionName(Statement node, QualifiedName functionName, boolean isTemporary)
{
if (isTemporary) {
if (functionName.getParts().size() != 1) {
throw new SemanticException(INVALID_FUNCTION_NAME, node, "Temporary functions cannot be qualified.");
}
List<String> builtInFunctionNames = functionAndTypeResolver.listBuiltInFunctions().stream()
.map(SqlFunction::getSignature)
.map(Signature::getName)
.map(QualifiedObjectName::getObjectName)
.collect(toImmutableList());
if (builtInFunctionNames.contains(functionName.toString())) {
throw new SemanticException(INVALID_FUNCTION_NAME, node, format("Function %s is already registered as a built-in function.", functionName));
}
}
else {
if (functionName.getParts().size() != 3) {
throw new SemanticException(INVALID_FUNCTION_NAME, node, format("Function name should be in the form of catalog.schema.function_name, found: %s", functionName));
}
}
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Call the temporary function without any qualifier, e.g. my_func(x)
- Create a permanent function in a catalog if qualified access is needed
- Rename conflicting permanent functions and drop the temporary one
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java:4276 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/a09432fc30b63d90.
Report an issue: GitHub.