powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Повторный ввод commit'a после получения "operation was cancelled"
5 сообщений из 5, страница 1 из 1
Повторный ввод commit'a после получения "operation was cancelled"
    #38448731
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Объясните, плз, почему после того, как коннект получает облом коммита с сообщением: "operation was cancelled", повторный ввод команды commit работает так, как будто бы операция вовсе и не была "cancelled" ?

Вот сценарий:
Intro:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> -- create sequence g; commit;
SQL> alter sequence g restart with 0; commit;
SQL> insert into t select gen_id(g,1), 1 from rdb$types rows 5; commit;
SQL> select * from t;

          ID          F01
============ ============
           1            1
           2            1
           3            1
           4            1
           5            1



Далее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 session #1 
SQL> update t set f01=2;

 session #2 
SQL> commit; select * from mon$statements where mon$attachment_id<>current_connection;

MON$STATEMENT_ID                128
MON$ATTACHMENT_ID               57
MON$TRANSACTION_ID              <null>
MON$STATE                       0
MON$TIMESTAMP                   <null>
MON$SQL_TEXT                    0:4
 update t set f01=2 
MON$STAT_ID                     7

SQL> commit; delete from mon$statements where mon$attachment_id<>current_connection;

 session #1 
SQL> commit;
Statement failed, SQLSTATE = HY008
operation was cancelled

SQL> commit;  -- again! 
SQL> select * from t;

          ID          F01
============ ============
           1            2
           2            2
           3            2
           4            2
           5            2

Если стейтмент был отменён, то почему повторный commit выполнил что-то типа "redo" ?
...
Рейтинг: 0 / 0
Повторный ввод commit'a после получения "operation was cancelled"
    #38448916
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отменён был первый коммит, апдейт выполнился задолго до того, как ты что-то отменял.
...
Рейтинг: 0 / 0
Повторный ввод commit'a после получения "operation was cancelled"
    #38448959
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОтменён был первый коммит, апдейт выполнился задолго до того, как ты что-то отменял.я этот "первый коммит" сделал в окне-1 после того, как ввёл delete from mon$statements в окне-2.
Правильно ли понимаю, что ввод команд:
Код: sql
1.
commit; delete from mon$statements where ...

- приводит к:
1) срубанию выполняющего СЕЙЧАС стейтмента, а если такого нет, то
2) облому стейтмента, который будет введён сразу после этих команд
- ?
...
Рейтинг: 0 / 0
Повторный ввод commit'a после получения "operation was cancelled"
    #38449033
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. да
2. видимо, да - точнее dimitr скажет
Если это так, то я не уверен, что это есть правильно...
...
Рейтинг: 0 / 0
Повторный ввод commit'a после получения "operation was cancelled"
    #38449252
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad2. видимо, да - точнее dimitr скажет
Если это так, то я не уверен, что это есть правильно...
так и есть. DELETE FROM MON$STATEMENTS является просто обвязкой над fb_cancel_operation(), которая не привязана к конкретному запросу или транзакции, вместо этого она оперирует с коннектом и соответственно останавливает любую активность в данном коннекте, сейчас или в будущем (однократно). Строго говоря, для MON$ это действительно не есть правильно, но это побочный эффект текущей реализации.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Повторный ввод commit'a после получения "operation was cancelled"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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