https://pastila.nl/?001ae728/52bc538966a011139c5dac06472b22f6
output.finish();
        return Status::Finished;
    }
    input.setNeeded();
    if (!input.hasData())
        return Status::NeedData;
    data.current_chunk = input.pull(true);
    auto rows = data.current_chunk.getNumRows();
    if (rows_before_limit_at_least)
        rows_before_limit_at_least->add(rows);
    
    rows_read += rows;
    if (rows_read <= offset)
    {
        data.current_chunk.clear();
        if (input.isFinished())
        {
            output.finish();
            return Status::Finished;
        }
        
        input.setNeeded();
        return Status::NeedData;
    }
    if (!(rows <= std::numeric_limits<UInt64>::max() - offset && rows_read >= offset + rows))
        splitChunk(data);
    output.push(std::move(data.current_chunk));
    return Status::PortFull;
}
void OffsetTransform::splitChunk(PortsData & data) const