powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
15 сообщений из 15, страница 1 из 1
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39076931
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Вот DDL, с совершенно идиоцким check'ом:
Код: 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.
recreate table foo(id int primary key);
commit;
set term ^;
execute block as
begin
  execute statement 'drop sequence g'; when any do begin end
end
^ set term ;^
commit;
create sequence g;
commit;

insert into foo values(1);
insert into foo values(2);
insert into foo values(3);
commit;

alter table foo add constraint foo_bar
check(
     exists(select * from foo x where gen_id(g,1) >= 0 and x.id > 0  and x.id <> foo.id ) 
    );

set count on;
set echo on;

update foo set id = -id; -- должен обломаться или нет ? 

set count off;

select * from foo;
select gen_id(g, 0) from rdb$database;

На 2.5 он выдаст:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
update foo set id = -id;
Records affected: 3

set count off;

select * from foo;

          ID
============
          -1
          -2
          -3

select gen_id(g, 0) from rdb$database;

               GEN_ID
=====================
                    3

На 3.0:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
update foo set id = -id;
Records affected: 3

set count off;

select * from foo;

          ID
============
          -1
          -2
          -3

select gen_id(g, 0) from rdb$database;

               GEN_ID
=====================
                    6

Судя по значению gen_id, встроенный check-триггер на update точно отрабатывал. То, что в 3.0 он это делал большее число раз - хрен с ним. То, что в 3.0 он позволил выполниться апдейту - ну, наверное, так и должно быть: курсор не должен видеть свои собственные изменения, пока работает.
Но почему он прокатил в 2.5, в котором стабильности этой нету и курсор должен был на этапе удаления id = 3 увидеть свои изменения и, след-но, exists() в этот момент должен был вернуть false - ?
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39076958
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидНо почему он прокатил в 2.5, в котором стабильности этой нету и курсор
должен был на этапе удаления id = 3 увидеть свои изменения
check-триггера - before, изменений ещё нет. Но значениями они оперируют уже из new, так
что последнее условие срабатывает всегда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39076965
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

check с запросом само по себе ужасно
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39076977
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

где-то лежат щипчики для ногтей, пальцами которых такие штуки делаются на клавиатуре :-)
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39076979
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисcheck с запросом само по себе ужасноя знаю, знаю :)
однако ж, довелось видеть в одной базейке и похлеще: запросы к какой-то процедурке, которая к тому же еще и меняет внутр себя что-то... Она мне внезапно вспомнилась, вот и решил проверить.
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077000
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

значит, надо запрещать нахрен, как бы грубо это не выглядело. Этот вычисляемый индекс ведь просто п.ц. Впрочем, я видал вычисляемые столбцы и пострашнее. Но не догадывался, что такой код можно запихнуть в выражение вычисляемого индекса.
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077008
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvЭтот вычисляемый индекс ведь просто п.ц. Впрочем, я видал вычисляемые столбцы и пострашнее. Но не догадывался, что такой код можно запихнуть в выражение вычисляемого индекса.Для тех, кто не видит в этом топике вычисляемого индекса: тынц .
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077011
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

спасибо, я и там отметился.
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077015
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

о боже... Это ещё больший изврат. Уникальный вычисляемый индекс с запросом в качестве выражения это вообще за гранью добра и зла.
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077018
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык... что разрешено - то и делаю. Не докопаетесь!
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077022
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ты не видел что я видел у германцев в апреле. :-)
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077025
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvчто я видел у германцев в апреле. :-)А чего в тайне держишь ? или там вообще всё заваливается в усмерть и потому показывать нельзя ? ;-)
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077029
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

коммерческая тайна. но страшная как смерть :-) я могу только про пиво в Ашаффенбурге рассказать (и уже рассказал), не более.
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077252
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТаблоид,

значит, надо запрещать нахрен, как бы грубо это не выглядело. Этот вычисляемый индекс ведь просто п.ц. Впрочем, я видал вычисляемые столбцы и пострашнее. Но не догадывался, что такой код можно запихнуть в выражение вычисляемого индекса.

Запрещать бесполезно. Желающие выстрелить себе в ногу найдут другие пути. Вон в Firebird 3 появились PSQL функции. Никто не запрещает создавать вычисляемые индексы с использованием PSQL функций. И если такая функция детерминирована, то это нормально. Но никто не запрещает внутрь этой функции навтыкать SELECT, и даже хуже INSERT/UPDATE/DELETE
...
Рейтинг: 0 / 0
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
    #39077257
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я пожалуй внесу в документацию страшилку про использование в вычисляемых индексах выражений, которые могут выдать не детерминированный результат типа SELECT, rand(), gen_uuid(), gen_id() и т.д.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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