|
CHECK constraint
|
|||
---|---|---|---|
#18+
Ariochи посмотреть позволит ли это IBСтроить логику системы на багах? Увольте! Ariochне пробовалиИ не буду ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 14:54 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
_Vasilisk_Строить логику системы на багах? кто вам это предлагал? не додумывайте _Vasilisk_И не буду Жаль, может ещё у кого под руками свежий IB есть ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 14:57 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
Arioch, у меня есть много свежих и несвежих ИБ. Но проверять не буду. Потому что, если правильно помню, это я рапортовал (возможно, с чьей-то подачи, а может и нет) про это поведение, которое исправили в ФБ 1 (см. коммент Влада). А вот рапортовал-ли я это в ИБ - не помню. Впрочем, у меня на очереди лежат несколько мелких багрепортов в ИБ, может и это проверю, где-нибудь в середине августа (и отправлю). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:40 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
Arioch, самое интересное зачем оно тебя надо? Пользуешься IB? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:48 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
Симонов Денис, пользовался бы - был бы IB в наличии - сам бы и проверил любопытно же ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:24 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
Ariochлюбопытно же Код: sql 1. 2. 3. 4. 5. 6.
Компилируется. Запрос Код: sql 1.
вставляет в таблицу 1. IB 2009 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:49 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
_Vasilisk_, значит в IB контекст NEW не делали readonly в AFTER триггерах. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:52 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
_Vasilisk_, спасибо. Симонов Денис, ну гипотетически могли поправить в XE3 - но вряд ли, раз они ВООБЩЕ триггеры не трогали, то почти наверняка не трогали вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:07 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
hvladНе знаю, как оно там в IB, но в FB вот так: Код: plaintext 1. 2. 3.
"system triggers first " - это те самые, что обеспечивают FK ? Как-то не очень сильно бросилось в глаза, что они "first". DDL: Код: 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
Output: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Т.е. во втором стейтменте, который пытается вставить корректное значение для check'a (pid > 0), но отсутствующее в master-таблице, мы видим ошибку о нарушении FK. Однако, значение генератора при этом такое же ( 7 ), как и в результате первого стейтмента, который обломался ввиду нарушения chek'a. Это значит, что: 1) сначала отработал tdetl_bi (он удвоил начальное значение генератора и оно стало = 10), 2) затем check (он своим хитрым условием уменьшил значение генератора на 3 и оно стало = 7), 3) а затем уже принялся за работу system-триггер, проверяющий FK. Итого получаем порядок срабатывания: user_defined trigger ==> check ==> system trigger. Или я не прав ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2016, 22:34 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
На всякий случай, вдруг кому понадобится: последовательность срабатывания триггеров на master & detail таблицах при каскадах. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2016, 22:44 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
Ваня Сусанин"system triggers first " - это те самые, что обеспечивают FK ?Нет. Это те, которые созданы системой, но не для check constraints, у них RDB$SYSTEM_FLAG = 1. Сейчас таких быть вообще не должно, может раньше были, не знаю. check constraints, о которых речь, имеют типы 3, 4 и 5. Полный список тут: Код: sql 1. 2. 3.
В твой поток бессознательного я не вникал, скажу лишь, что это Ваня Сусанин1) сначала отработал tdetl_bi (он удвоил начальное значение генератора и оно стало = 10), 2) затем check (он своим хитрым условием уменьшил значение генератора на 3 и оно стало = 7), 3) а затем уже принялся за работу system-триггер, проверяющий FK.полностью соответствует комментарию в коде, который я приводил ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2016, 23:12 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
hvladВаня Сусанин"system triggers first " - это те самые, что обеспечивают FK ?Нет. Это те, которые созданы системой, но не для check constraints, у них RDB$SYSTEM_FLAG = 1. Сейчас таких быть вообще не должно, может раньше были, не знаю. в порядке бреда тогда это м.б. были триггера для изменения БД прямыми модификациями системных таблиц? вот они и следили за этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 11:18 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
hvladполностью соответствует комментарию в коде, который я приводил ну вроде не совсем "then user triggers, then triggers that implement check constraints." это если буквально читать означает (USER) BEFORE-xxx, (USER) AFTER-xxx, CHECK_xxx а по факту идёт (USER) BEFORE-xxx, CHECK_xxx, (USER) AFTER-xxx ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 11:23 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
Ariochэто если буквально читать означает (USER) BEFORE-xxx, (USER) AFTER-xxx, CHECK_xxx Это ты неправильно читаешь. Весь коммент относится исключительно к BEFORE триггерам, ибо проверять что-то после вставки - странная идея. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 11:59 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
hvladсозданы системой, но не для check constraints, у них RDB$SYSTEM_FLAG = 1. Сейчас таких быть вообще не должно, может раньше были, не знаю.Недосмотрел, их полно :) Они не разрешают некоторые манипуляции с системным каталогом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 12:08 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAriochэто если буквально читать означает (USER) BEFORE-xxx, (USER) AFTER-xxx, CHECK_xxx Это ты неправильно читаешь. Весь коммент относится исключительно к BEFORE триггерам, ибо проверять что-то после вставки - странная идея.В комменте вообще не упоминаются BEFORE\AFTER события. Посему итоговый порядок таков BEFORE SYSTEM (1) BEFORE USER BEFORE SYSTEM (3-5) AFTER SYSTEM (1) AFTER USER AFTER SYSTEM (3-5) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 12:11 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
hvlad, т.е. сортировка "по двум столбцам", сначала по before/after и потом внутри каждого по system/user/check IMHO было бы неплохо это вно в комментарий воткнуть при случае ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 12:17 |
|
CHECK constraint
|
|||
---|---|---|---|
#18+
hvladВ комменте вообще не упоминаются BEFORE\AFTER события и обычно это означает, что раз не указаны подмножества, то в ход идёт всё множества комментарии то пишут, не для тех кто уже понял функцию, а для тех кто только начинает разбираться не код функции поясняет комментарии, а наоборот.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 12:19 |
|
|
start [/forum/topic.php?fid=40&msg=39285495&tid=1562026]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 170ms |
0 / 0 |