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

  1. Ensure the connector supports updates and returns a real updatable page source for the given split
  2. Refrain from running UPDATE statements on tables from connectors lacking update support
  3. Connector authors: return a proper UpdatablePageSource or fail earlier with NOT_SUPPORTED PrestoException
  4. 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

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


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/899052ed6d33e2e1. Report an issue: GitHub.