Ручная реализация |
Объектные индексы типа manual реализуются используя следующий синтаксис:
index [<имя_OBJ_интерфейса>.]<имя_индекса> manual ;
<имя_индекса> - имя объектного индекса, описанного в obj-интерфейсе.
Ручная реализация подразумевает полностью ручной механизм навигации. Это не обязательно должна быть навигация по физическим таблицам. Реально это может быть всё что угодно. При этом объект, имеющий индекс типа manual, должен реализовать объектный интерфейс IManualIndex, который, собственно, будет отвечать за навигацию.
При компиляции прототипа obj-интерфейса происходит создание констант, уникально идентифицирующих:
Номер свойства;
Номер объектного индекса;
Направление движения;
Операции сравнения.
Номер свойства - константа с префиксом pn.
Формирование имени константы происходит по правилу: pn + имя obj-интерфейса + _ + имя свойства.
Пример: pnITest_pName
Номер объектного индекса - константа с префиксом in.
Формирование имени константы происходит по правилу: in + имя obj-интерфейса + _ + имя объектного индекса
Пример: inITest_iByName
Направление движения - константа с префиксом id.
Эти константы используются в функциях Find и Move.
Доступны следующие константы:
idForward - движение вперед;
idBackward - движение назад.
Операции сравнения - константа с префиксом cnd.
Эти константы возвращаются функцией GetFilterSeg.
Доступны следующие константы:
cndEqual - сравнение на равно;
cndGreater - сравнение на больше;
cndLess - сравнение на меньше;
cndNotEqual - сравнение на не равно;
cndGreaterOrEqual - сравнение на больше или равно;
cndLessOrEqual - сравнение на меньше или равно.
Структура интерфейса IManualIndex:
objInterface IManualIndex; function IndexActivated (indexNum : longInt) : word; function IndexDeactivated (indexNum : longInt) : word; function FilterChanged : word; function Count : longInt; function Find (direction : byte) : word; function Move (direction : byte) : word; function GetAddr (var address : comp) : word; function GetDirect (address : comp) : word; end;
Так же вводятся зарегистрированные сервисные функции:
function FilterSegsCount : word; function ValidateFilterSeg (segNum : word) : boolean; function ValidateAllFilterSegs : boolean; function ValidateBooleanFilters : boolean; function GetFilterSeg ( segNum : word; var value : anyType; var op : byte; var propertyNumber : longInt ) : word;
Использование реляционных свойств аналогично использованию обычных индексов физических таблиц. Отличие состоит в том, что экземпляры ссылок на таблицы заводятся автоматически или посредством синонимов. Экземпляры ссылок же на obj-интерфейсы заводятся посредством секции var. Алгоритм подбора индексов работает как и у физических таблиц.
Версия : Атлантис 5.0.