Прочитать первую строку и остаток результата без потерь

Ответы получены от MySQL через X Protocol. Созданные программой таблицы и представления после чтения удалены.

Наблюдаемый результат программы
НаблюдениеРезультат
Заголовки результатаproduct_id, article, cost_cents
Количество столбцов3
Первая строкаLED
fetchAll вернул весь буферLED, CABLE, STRIP
Повтор fetchAll дал тот же буферда
Оставшиеся строки через fetchOneCABLE, STRIP
fetchOne после конца — nullда
Пустой SELECT: строк0
Пустой SELECT: столбцов2
Пустой SELECT: имена колонокproduct_id, article
Строки и дополнительные наблюдения
{
    "result_type": "mysql_xdevapi\\RowResult",
    "first": {
        "product_id": 1,
        "article": "LED",
        "cost_cents": 120000
    },
    "remaining_via_fetch_one": [
        {
            "product_id": 2,
            "article": "CABLE",
            "cost_cents": 30000
        },
        {
            "product_id": 3,
            "article": "STRIP",
            "cost_cents": 50000
        }
    ],
    "buffer": [
        {
            "product_id": 1,
            "article": "LED",
            "cost_cents": 120000
        },
        {
            "product_id": 2,
            "article": "CABLE",
            "cost_cents": 30000
        },
        {
            "product_id": 3,
            "article": "STRIP",
            "cost_cents": 50000
        }
    ],
    "buffer_again": [
        {
            "product_id": 1,
            "article": "LED",
            "cost_cents": 120000
        },
        {
            "product_id": 2,
            "article": "CABLE",
            "cost_cents": 30000
        },
        {
            "product_id": 3,
            "article": "STRIP",
            "cost_cents": 50000
        }
    ],
    "after_end": null,
    "empty_column_names": [
        "product_id",
        "article"
    ],
    "empty_rows": []
}

Полный JSON результата, включая реальные идентификаторы, сохранён рядом в result.json.