| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Mizter Egoist 25.04.2016 17:35
Триггеры мне нужны, чтобы правильно манипулировать деревьями.CREATE TRIGGER test2_link_ai FOR test2_link
AFTER INSERT
POSITION 32000
AS
DECLARE VARIABLE AnID INTEGER;
DECLARE VARIABLE ADistance INTEGER;
BEGIN
IF (NEW.distance = 1) THEN
BEGIN
INSERT INTO test2_link (id_from, id_to, distance)
SELECT down.id_from, up.id_to,
down.distance + up.distance + 1
FROM test2_link up, test2_link down
WHERE up.id_from = NEW.id_to
AND down.id_to = NEW.id_from
AND down.distance + up.distance > 0;
END
END;Сейчас думаю над изменением иерархии дерева.$_update[^table::sql{
SELECT anc
FROM path
WHERE dsc = $form:id AND lvl = 1
}]
^void:sql{
DELETE FROM path
WHERE dsc = $form:id
AND anc = $_update.anc
AND lvl = 1
}
^void:sql{
INSERT INTO path (anc, dsc, lvl)
VALUES ($form:catalog, $form:id, 1)
}Это изменяет вложенность, как узла, так и поддерева, только проблема в том, что это тупой метод, он не сравнивает дистанцию и не меняет ее, если она изменилась.