Автоматизированная реализация Назад В начало Вперед

Объектные индексы типа 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.