Новости | 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) }Это изменяет вложенность, как узла, так и поддерева, только проблема в том, что это тупой метод, он не сравнивает дистанцию и не меняет ее, если она изменилась.