GD PLACE
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (→qa_test) |
SYSDBA (обсуждение | вклад) |
||
| Строка 38: | Строка 38: | ||
| | | | ||
|} | |} | ||
| + | |||
| + | === Проверка уникальности имени === | ||
| + | |||
| + | Два триггера гарантируют уникальность имени административно-территориальной единицы на одном уровне. | ||
| + | |||
| + | <pre> | ||
| + | |||
| + | CREATE EXCEPTION gd_e_placeexists 'Place already exists'; | ||
| + | |||
| + | SET TERM ^ ; | ||
| + | |||
| + | CREATE TRIGGER gd_bi_place FOR gd_place | ||
| + | BEFORE INSERT | ||
| + | POSITION 0 | ||
| + | AS | ||
| + | BEGIN | ||
| + | IF (NEW.ID IS NULL) THEN | ||
| + | NEW.ID = GEN_ID(gd_g_unique, 1) + GEN_ID(gd_g_offset, 0); | ||
| + | |||
| + | IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0) | ||
| + | AND UPPER(name) = UPPER(NEW.name))) THEN | ||
| + | BEGIN | ||
| + | EXCEPTION gd_e_placeexists; | ||
| + | END | ||
| + | END | ||
| + | ^ | ||
| + | |||
| + | CREATE TRIGGER gd_bu_place FOR gd_place | ||
| + | BEFORE UPDATE | ||
| + | POSITION 0 | ||
| + | AS | ||
| + | BEGIN | ||
| + | IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0) | ||
| + | AND UPPER(name) = UPPER(NEW.name) | ||
| + | AND ID <> NEW.id)) THEN | ||
| + | BEGIN | ||
| + | EXCEPTION gd_e_placeexists; | ||
| + | END | ||
| + | END | ||
| + | ^ | ||
| + | |||
| + | SET TERM ; ^ | ||
| + | |||
| + | </pre> | ||
| + | |||
| + | [[Category:База данных]] | ||
Версия 14:37, 28 февраля 2007
gd_place
| Имя поля | Тип данных | Описание |
|---|---|---|
| id | dintkey | Первичный ключ. |
| parent | dforeignkey | Внешняя ссылка на родителя. |
| lb | dlb | Левая граница интервала. |
| rb | drb | Правая граница интервала. |
| name | dname | Наименование административно-территориальной единицы. |
| placetype | dplacetype | РУИД настройки, от которой зависит данный тест. Если такая настройка на базе не установлена, то тест выполняться не будет. |
| telprefix | dtext8 | Внешняя ссылка на скрипт-функцию теста. |
| code | dtext8 |
Проверка уникальности имени
Два триггера гарантируют уникальность имени административно-территориальной единицы на одном уровне.
CREATE EXCEPTION gd_e_placeexists 'Place already exists';
SET TERM ^ ;
CREATE TRIGGER gd_bi_place FOR gd_place
BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(gd_g_unique, 1) + GEN_ID(gd_g_offset, 0);
IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0)
AND UPPER(name) = UPPER(NEW.name))) THEN
BEGIN
EXCEPTION gd_e_placeexists;
END
END
^
CREATE TRIGGER gd_bu_place FOR gd_place
BEFORE UPDATE
POSITION 0
AS
BEGIN
IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0)
AND UPPER(name) = UPPER(NEW.name)
AND ID <> NEW.id)) THEN
BEGIN
EXCEPTION gd_e_placeexists;
END
END
^
SET TERM ; ^