powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Наследование индексов
5 сообщений из 5, страница 1 из 1
Наследование индексов
    #34041846
Доброе время суток.

Есть два класса:
1.
Class Test.Test Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
{
Property a As %Boolean;
Index Ia On a;
}
2.
Class Test.Test2 Extends (%Persistent, Test.Test) [ ClassType = persistent, ProcedureBlock ]
{
Property b As %String;
Index Ib On b;
}

Делаю:
USER>s o=##class(Test.Test2).%New()
USER>s o.a=1
USER>s o.b="!!!"
USER>d o.%Save()

Индекс по полю "а" кашей не создан. Создается только в случае переопределения индекса Ia в классе Тест2.
Что здесь не так?
...
Рейтинг: 0 / 0
Наследование индексов
    #34043917
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогноз погоды
ООП в СУБД со своими оссобенностями.

Индексы наследуются если наследуемый класс является подмножеством базового класса - то есть храняться в одном месте (глобале).

Собсно наследования на самом деле никакого не происходить, базовый класс честно строить индексы для всех своих объектов - просто объекты это не только его получуаються.
Это же приводить к еще одному ограничению - в таким образом унаследованных классах (во всех ветвях базового) не должно быть индексов с одинаковыми названиями.

На уровне кода - и компилятора - индексы не наследуются.

В вашем случаем имеется два класса хранящийся в разных местах (глобалах) и наследующих только общую программную часть (триггеры кстати всё таки наследуются)

Для классов хранящийся в одном месте - наследование должно быть следующим:

Class Test.Test2 Extends Test.Test
В данном случае комплиятор прицепляет структуру хранения Test.Test2 к структуре хранения Test.Test, которая и будет автоматически "наследовать индексы"

Ваш же вариант:

Class Test.Test2 Extends (%Persistent, Test.Test)

Если первым стоить %Persistent то компилятор формирует новую структуру хранения на основе имени класса Test.Test2.

Если вам нужно хранить таблицы раздельно - то выход можно найти в создании в базовом Test.Test метода-генератора, который в момент компиляции будет вставлять необходимый индекс.

Либо руками переопределять .
...
Рейтинг: 0 / 0
Наследование индексов
    #34044705
Большое спасибо, за развернутый ответ. Дейсвительно, такое наследование классом Тест2 использую для хранения данных в разных глобалах.
Будем икать :)
...
Рейтинг: 0 / 0
Наследование индексов
    #34056540
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нафига, позволю себе полюбопытствовать, сначала определяете %Persistent и только потом Test.Test ? какой то скрытый смысл или по незнанию?
...
Рейтинг: 0 / 0
Наследование индексов
    #34057942
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78а нафига, позволю себе полюбопытствовать, сначала определяете %Persistent и только потом Test.Test ? какой то скрытый смысл или по незнанию?

Очевидно что бы воспользоваться оссобеностями ОПП в Cach'e и никакого скрытого смысла.

PS: посмотрите наследование триггеров например.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Наследование индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]