Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-) / 15 сообщений из 15, страница 1 из 1
14.10.2015, 20:37
    #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
14.10.2015, 21:08
    #39076958
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
ТаблоидНо почему он прокатил в 2.5, в котором стабильности этой нету и курсор
должен был на этапе удаления id = 3 увидеть свои изменения
check-триггера - before, изменений ещё нет. Но значениями они оперируют уже из new, так
что последнее условие срабатывает всегда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.10.2015, 21:16
    #39076965
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять дурацкий вопрос про (не)стабильность курсора... кажется... :-)
Таблоид,

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

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

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

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

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

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

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

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

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


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