Обновить именно текущий товар открытого курсора и сохранить сверку остатков

Фактические данные получены через расширение interbase от отдельной локальной базы Firebird. Собственные учебные объекты удалены после наблюдений.

Наблюдаемый результат программы
НаблюдениеРезультат
Имя назначено открытому результатуда
Кабель: остаток до сверки0
Кабель: остаток после сверки10
Клемма: остаток до сверки4
Клемма: остаток после сверки14
Товар вне выборки сохранил остаток9
Обновлено текущих строк2
Оба обновления подтверждены одной транзакциейда
Курсор дошёл до конца без ошибкида
Строки и дополнительные наблюдения
{
    "cursor_name": "FB156_STOCK_CURSOR",
    "counted": {
        "1": 10,
        "2": 14
    },
    "applied": {
        "1": {
            "before": 0,
            "after": 10,
            "changed": 1
        },
        "2": {
            "before": 4,
            "after": 14,
            "changed": 1
        }
    },
    "stored": [
        {
            "ID": 1,
            "STOCK": 10
        },
        {
            "ID": 2,
            "STOCK": 14
        },
        {
            "ID": 3,
            "STOCK": 9
        }
    ],
    "selection_condition": "ID <= 2",
    "same_explicit_transaction": true,
    "update_before_next_fetch": true,
    "query_and_result_released_before_commit": true,
    "concurrency_load_test": false
}

Самостоятельный запуск создаёт result.json с данными и metrics.json с проверками рядом с example.php.