powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / DDL: CREATE INDEX по полю SUPER-класса
9 сообщений из 9, страница 1 из 1
DDL: CREATE INDEX по полю SUPER-класса
    #38498007
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно - создавать индекс с помощью DDL
Пока я использую поля определенные в данном класса (как в примерах) - все ОК. Отлично, работает.

Но как только мне нужно создать индекс с участием поля определенного в базовом класса:
Код: sql
1.
CREATE INDEX MyIndex ON TABLE MyTable (superClassField)

Получаю послание идти лесом:автор[SQLCODE: <-31>:<Поле не (найдено/уникально) в таблице (-ах) >]
[Location: <ServerLoop>]
[%msg: <Attempt to CREATE INDEX 'MyIndex ' with field 'superClassField' failed. No such field found in table MyTable.>]
SQL(0):CREATE INDEX MyIndex ON TABLE MyTable (superClassField)
Error: [SQLCODE: <-31>:<Поле не (найдено/уникально) в таблице (-ах) >]
[Location: <ServerLoop>]
[%msg: <Attempt to CREATE INDEX 'MyIndex' with field 'superClassField' failed. No such field found in table MyTable.>]
Кто знает как заставить это работать?
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38498021
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov , ты бы привел тестовый пример тех классов... И программку бы написал где все это проявляется...
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38498177
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmovНо как только мне нужно создать индекс с участием поля определенного в базовом классаНе пробовали этот индекс создать в самом базовом классе?
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38498212
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa sigmov , ты бы привел тестовый пример тех классов...И желательно в рамках конструкции CREATE TABLE , так как я не уверен в поддержке в ней наследования.
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38499411
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsasigmov, ты бы привел тестовый пример тех классов... И программку бы написал где все это проявляется...Ок. Классы:
Код: ruby
1.
2.
3.
4.
5.
6.
7.
8.
Class Test.AbstractClass [ Abstract, DdlAllowed ]
{
  Property superField As %String;
}
Class Test.MyClass Extends (Test.AbstractClass, %Persistent) [ ClassType = persistent, DdlAllowed ]
{
  Property myField As %String;
}

Работает:
Код: sql
1.
CREATE INDEX myFieldIdx ON TABLE Test.MyClass(myField)

Не работает:
Код: sql
1.
CREATE INDEX superFieldIdx ON TABLE Test.MyClass(superField)

Выдает ошибку[SQLCODE: <-31>:<Поле не (найдено/уникально) в таблице (-ах) >]
[Location: <ServerLoop>]
[%msg: <Attempt to CREATE INDEX 'superFieldIdx' with field 'SUPERFIELD' failed. No such field found in table TEST.MYCLASS.>]
SQL(0):CREATE INDEX superFieldIdx ON TABLE Test.MyClass(superField)
Error: [SQLCODE: <-31>:<Поле не (найдено/уникально) в таблице (-ах) >]
[Location: <ServerLoop>]
[%msg: <Attempt to CREATE INDEX 'superFieldIdx' with field 'SUPERFIELD' failed. No such field found in table TEST.MYCLASS.>]servitНе пробовали этот индекс создать в самом базовом классе?Не получится - базовый класс не хранимый
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38499570
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov , я создал такие классы
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
/// one
Class tmp.one [ Abstract ]
{

/// fldOne
Property fldOne As %String;

}


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
/// two
Class tmp.two Extends (%Persistent, tmp.one)
{

/// fldTwo
Property fldTwo As %String;

}


И программку
Код: vbnet
1.
2.
3.
	n
	&sql(CREATE INDEX inTwo ON TABLE tmp.two(fldTwo))	
	&sql(CREATE INDEX inOne ON TABLE tmp.two(fldOne))


Все отработало как нужно. Т.ч. все остальное в особенностях твоих классов...
Код: vbnet
1.
Class Test.AbstractClass [ Abstract, DdlAllowed ]


Код: vbnet
1.
Class Test.MyClass Extends (Test.AbstractClass, %Persistent) [ ClassType = persistent, DdlAllowed ]
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38499582
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov , стал смотреть докуметацию на предмет обнаружения DdlAllowed ...
В аглицком я не силен... Т.ч. только яндекс-перевод
автор описание  
В случае стойкого классе показывает, является ли DDL заявления могут быть использованы для изменения или удаления определение класса. Обычно вы не хотите, чтобы пользователи SQL, чтобы иметь возможность изменить классов с использованием DDL заявления. Этот флаг позволяет управлять такое поведение. Когда этот флаг отсутствует, SQL DDL заявления (например, DROP TABLE, ALTER TABLE, DROP INDEX и т.д.) не может быть выполнена на «представления таблицы SQL класса.  Если вы создаете класс, выполнив DDL Создать таблицу о, ключевое слово DdlAllowed первоначально будет установлен на верно для этого класса.
Предполагаю, что твои проблемы именно из-за этого...
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38499616
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замодифицировал программку... Выяснил, что DdlAllowed нужна для Ddl команд, без нее они вообще не выполняются...
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
/// one
Class tmp.one [ Abstract ]
{

/// fldOne
Property fldOne As %String;

}


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
/// two
Class tmp.two Extends (%Persistent, tmp.one) [ DdlAllowed ]
{

Index inTwo On fldTwo [ SqlName = inTwo, Type = index ];

/// fldTwo
Property fldTwo As %String;

}


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE
	n
	&sql(CREATE INDEX inTwo ON TABLE tmp.two(fldTwo))	
	w !,"SQLCODE=",SQLCODE
	&sql(CREATE INDEX inOne ON TABLE tmp.two(fldOne))
	w !,"SQLCODE=",SQLCODE
	q
DELETE
	&sql(DROP INDEX inTwo ON TABLE tmp.two)
	w !,"SQLCODE=",SQLCODE
	&sql(DROP INDEX inOne ON TABLE tmp.two)
	w !,"SQLCODE=",SQLCODE
	q


Код: vbnet
1.
2.
3.
4.
TEST>d CREATE^tmp
 
SQLCODE=0
SQLCODE=-31


-31 это
авторField not (found/unique) in table(s)
...
Рейтинг: 0 / 0
DDL: CREATE INDEX по полю SUPER-класса
    #38499684
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov , Поскольку Вы классы построили не используя CREATE TABLE , то соответственно и индекс на поле базового класса построить через CREATE INDEX не удастся, так как
  • Inheritance is an important feature within object-based systems and is completely lacking within relational databases.
  • Inheritance and SQL
  • inheritance is not part of the relational model Certain features of a Caché class definition may not be accessible as both object and relational features, due to the nature of the object and relational models (rather than the limitations of Caché or any other tools). Inheritance and SQL
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / DDL: CREATE INDEX по полю SUPER-класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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