Автоматизированная реализация |
Объектные индексы типа navigate реализуются используя следующий синтаксис:
index [<имя_OBJ_интерфейса>.]<имя_индекса> navigate <таблица> <предложение_where>;
<имя_индекса> - имя объектного индекса, описанного в obj-интерфейсе.
<таблица> - имя таблицы или объекта, по которой будет осуществляться навигация.
<предложение_where> - конструкция where используемая при описании модификаторов.
Такой способ указания работает аналогично конструкциям getFirst <таблица> where ... , getNext <таблица> where ... , _loop <таблица> where ... . Позволяет динамически менять реляционные связи в процессе работы алгоритма. При использовании этого индекса система будет автоматически добавлять ограничения, в соответствии с тем, как описан данный индекс.
Пример.
// -------------------- Подготовка ----------------- create table Master "Master" ( code : word "Код", name : string[50] "Название" ) with index ( master1 = code, master2 = name ); Create table Detail "Detail" ( code : word "Код", name : string[50] "Название" ) with index ( detail1 = code, detail2 = name ); // -------------------- Описание ------------------- objInterface iTest; property pMName : string[50] read; property pDName : string[50] read; index iByMName = pMName; index iByDName = pDName; end; // ------------------- Реализация ------------------ vipInterface cTest1 implements iTest; interface cTest1; create view as select * from Master, Detail; property pMName : string[50] absolute Master.name read; property pDName : string[50] absolute Detail.name read; index iByMName navigate Master where ((Master.code == Detail.code)); index iByDName navigate Detail where ((Detail.code == Master.code)); end. // -------------------- Использование -------------- interface test; var pTest : iTest(cTest1) new; create view as select * from pTest order m by pMName order d by pDName; handleEvent cmInit: { SetOrder(tiM); _loop pTest { LogStrToFile('ex3.log','|' + pTest.pDName + '|' + pTest.pMName + '|'); } SetOrder(tiD); _loop pTest { LogStrToFile('ex3.log','|' + pTest.pDName + '|' + pTest.pMName + '|'); } } end; end.
Версия : Атлантис 5.0.