powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Блок BEGIN - WHEN - END
6 сообщений из 31, страница 2 из 2
Блок BEGIN - WHEN - END
    #39201489
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКак в таблицу s_test попало -1, когда оно должно было пропуститься из-за выкинутого в четвёртом внутреннем обработчике исключения?
Почему пятый обработчик не только выполнился, но и его результат выжил (а первый и третий при этом умерли)?
это один и тот же вопрос на самом деле. Получается, что исключение из WHEN ловится следующим же WHEN того же уровня? Прелестно!
...
Рейтинг: 0 / 0
Блок BEGIN - WHEN - END
    #39201495
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrПолучается, что исключение из WHEN ловится следующим же WHEN того же уровня?
Прелестно!
Увы, нет. Всё гораздо хуже и прямо связано с твоим комментом к пулл-реквесту на CORE-5173.
Обрати внимание на порядок записей в таблице errs.

Работает это так: обработчики исключений вызываются рекурсивно. (Ага!)
Четвёртый внутренний обработчик вызвал внешний обработчик, тот откатил что откатить мог
(всё что было сделано внутренним блоком плюс работу первого и третьего обработчиков), и
вернулся. А уже потом управление пошло дальше - к пятому обработчику, вставке -1 и далее
везде.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Блок BEGIN - WHEN - END
    #39201498
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня давно уже сидит подозрение, что рекурсия обработчикам нафиг не нужна. Но глубоко эту мысль я не копал...
...
Рейтинг: 0 / 0
Блок BEGIN - WHEN - END
    #39201501
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если я правильно понимаю, то вызов обработчика вместо:

temp = EXE_looper(tdbb, request, temp);

должен быть:

EXE_looper(tdbb, request, temp);

и ниже возврат parentStmt. Тогда по выходу из текущего обработчика управление всегда перейдет на END того же блока, а не туда, откуда пришло исключение. И я даже показывал тебе патч с этим изменением. Только ХЗ, что еще это может сломать...
...
Рейтинг: 0 / 0
Блок BEGIN - WHEN - END
    #39201504
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrу меня давно уже сидит подозрение, что рекурсия обработчикам нафиг не нужна.
Но глубоко эту мысль я не копал...
Меня тоже удивляет чего надо накуриться чтобы сделать итерационный лупер с элементами
рекурсии в самых неподходящих местах.

dimitrИ я даже показывал тебе патч с этим изменением. Только ХЗ, что еще это может
сломать...
Точно не мне. И таки да, это может наломать разных дров. Но четвёрка-то ещё в пелёнках,
она и без этого иногда падает, так что хуже стать не должно по идее.

Имеет смысл этот тесткейс загнать в трекер как бага или он таки as designed?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Блок BEGIN - WHEN - END
    #39201505
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возврат из внешнего обработчика обратно во внутренний - явно бага, можно занести в трекер
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Блок BEGIN - WHEN - END
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]