prestodb/presto · error · IllegalStateException
Get function is not supported
Error message
Get function is not supported
What it means
HiveFunctionNamespaceManager.getFunctions() is deliberately unimplemented for transactional lookups; the Hive function namespace only supports listing all functions and resolving functions by name, not fetching a single function by QualifiedObjectName via a transaction handle. The library throws IllegalStateException to signal the caller is using an API surface this namespace does not implement.
Source
Thrown at presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/HiveFunctionNamespaceManager.java:141
public void alterFunction(QualifiedObjectName functionName, Optional<List<TypeSignature>> parameterTypes, AlterRoutineCharacteristics alterRoutineCharacteristics)
{
throw new IllegalStateException(format("Cannot alter function in hive function namespace: %s", functionName));
}
public void dropFunction(QualifiedObjectName functionName, Optional<List<TypeSignature>> parameterTypes, boolean exists)
{
throw new IllegalStateException(format("Cannot drop function in hive function namespace: %s", functionName));
}
@Override
public Collection<HiveFunction> listFunctions(Optional<String> likePattern, Optional<String> escape)
{
return getCurrentFunctionNames().stream().map(functionName -> createDummyHiveFunction(functionName)).collect(toImmutableList());
}
public Collection<HiveFunction> getFunctions(Optional<? extends FunctionNamespaceTransactionHandle> transactionHandle, QualifiedObjectName functionName)
{
throw new IllegalStateException("Get function is not supported");
}
public FunctionHandle getFunctionHandle(Optional<? extends FunctionNamespaceTransactionHandle> transactionHandle, Signature signature)
{
throw new IllegalStateException("Get function handle is not supported");
}
public FunctionHandle resolveFunction(Optional<? extends FunctionNamespaceTransactionHandle> transactionHandle, QualifiedObjectName functionName, List<TypeSignature> parameterTypes)
{
return new HiveFunctionHandle(initializeFunction(FunctionKey.of(functionName, parameterTypes)).getSignature());
}
public FunctionMetadata getFunctionMetadata(FunctionHandle functionHandle)
{
checkArgument(functionHandle instanceof HiveFunctionHandle);
HiveFunction function = functions.getUnchecked(FunctionKey.from((HiveFunctionHandle) functionHandle));
return function.getFunctionMetadata();
}View on GitHub (pinned to 55bb57d202)
Solutions
- Use listFunctions() instead, which returns dummy HiveFunction instances for every current function name.
- Use resolveFunction(transactionHandle, QualifiedObjectName, parameterTypes) to obtain a FunctionHandle for a specific function.
- If name-based lookup is required, implement a custom FunctionNamespaceManager for the Hive functions rather than relying on this one.
Example fix
// before
Collection<? extends SqlFunction> fns = manager.getFunctions(txnHandle, QualifiedObjectName.valueOf("hive.default.my_func"));
// after
FunctionHandle handle = manager.resolveFunction(txnHandle, QualifiedObjectName.valueOf("hive.default.my_func"), parameterTypes); Defensive patterns
Strategy: fallback
Validate before calling
if (manager instanceof HiveFunctionNamespaceManager) {
// name-based getFunctions(txn, name) is unsupported; use listFunctions()/resolveFunction
} Try / catch
try {
return manager.getFunctions(txnHandle, name);
} catch (IllegalStateException e) {
return manager.listFunctions().stream()
.filter(f -> f.getFunctionMetadata().getName().getObjectName().equals(name.getObjectName()))
.collect(toImmutableList());
} Prevention
- Prefer resolveFunction() for locating Hive functions by name.
- Do not write code against FunctionNamespaceManager assuming all methods are implemented for every namespace.
- Check the namespace type before invoking transactional lookup methods.
When it happens
Trigger: Calling getFunctions(Optional<FunctionNamespaceTransactionHandle>, QualifiedObjectName) on the Hive function namespace manager with a specific qualified object name.
Common situations: Plugin or connector code written against the generic FunctionNamespaceManager interface that assumes name-based function lookup works the same as in other namespaces (e.g. built-in SQL function namespace); custom integrations or tests invoking transactional lookups against Hive functions.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Get function handle is not supported
- Execute function is not supported
- User defined type is not supported
- dropping a table added/modified in the same transaction is n
- Inserting into an unpartitioned table that were added, alter
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/61bb6923737e2399.
Report an issue: GitHub.