prestodb/presto · error · UnsupportedOperationException
updateRows called on EmptySplitPageSource
Error message
updateRows called on EmptySplitPageSource
What it means
EmptySplitPageSource.updateRows throws UnsupportedOperationException: this placeholder page source cannot apply row updates. Updates require a real connector-implemented UpdatablePageSource with actual data channels.
Source
Thrown at presto-main-base/src/main/java/com/facebook/presto/split/EmptySplitPageSource.java:40
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import static java.util.concurrent.CompletableFuture.completedFuture;
public class EmptySplitPageSource
implements UpdatablePageSource
{
@Override
public void deleteRows(Block rowIds)
{
throw new UnsupportedOperationException("deleteRows called on EmptySplitPageSource");
}
@Override
public void updateRows(Page page, List<Integer> columnValueAndRowIdChannels)
{
throw new UnsupportedOperationException("updateRows called on EmptySplitPageSource");
}
@Override
public CompletableFuture<Collection<Slice>> finish()
{
return completedFuture(ImmutableList.of());
}
@Override
public long getCompletedBytes()
{
return 0;
}
@Override
public long getCompletedPositions()
{
return 0;View on GitHub (pinned to 55bb57d202)
Solutions
- Ensure the connector supports updates and returns a real updatable page source for the given split
- Refrain from running UPDATE statements on tables from connectors lacking update support
- Connector authors: return a proper UpdatablePageSource or fail earlier with NOT_SUPPORTED PrestoException
- Inspect split assignment to confirm empty splits are not incorrectly used in DML plans
Defensive patterns
Strategy: validation
Validate before calling
// before issuing UPDATE on a connector table, verify connector support:
if (!connectorMetadata.supportsUpdate()) throw new IllegalStateException("connector does not support update"); Type guard
function isUpdatable(src) { return src !== null && typeof src.updateRows === 'function' && !(src instanceof EmptySplitPageSource); } Try / catch
try { pageSource.updateRows(page, channels); } catch (UnsupportedOperationException e) { throw new PrestoException(NOT_SUPPORTED, "table does not support update", e); } Prevention
- Verify connector update support before planning UPDATE statements
- Connector authors: return real updatable sources for splits of updatable tables
- Add integration tests covering UPDATE with empty splits
When it happens
Trigger: An UPDATE plan whose page source is an EmptySplitPageSource reaches updateRows(Page, List<Integer> columnValueAndRowIdChannels), i.e. the connector's split provider returned an empty split where a real updatable source was required.
Common situations: Connector tables that do not support UPDATE being targeted by UPDATE statements; connector authors returning EmptySplitPageSource from getPageSource in connectors that advertise updatability.
Related errors
- deleteRows called on EmptySplitPageSource
- partition-aware grouped execution requires an implementation
- This connector does not support row-level delete
- This connector does not support row update
- ARROW_INTERNAL_ERROR
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/899052ed6d33e2e1.
Report an issue: GitHub.