Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как получить информацию об индексах? / 21 сообщений из 21, страница 1 из 1
07.09.2007, 08:57
    #34783175
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Поспрошаю умных людей...

Как получить информацию об индексах? Т.е. есть имя класса - нужно получить список индексов...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
07.09.2007, 10:20
    #34783416
LenRover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
krvsaПоспрошаю умных людей...

Как получить информацию об индексах? Т.е. есть имя класса - нужно получить список индексов...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT

Думаю, надо пробежаться по метаданным класса и узнать у каких свойств стоит тип INDEX
...
Рейтинг: 0 / 0
07.09.2007, 10:32
    #34783453
LenRover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Set cdef=##class(%ClassDefinition).%OpenId("classname")
For i=1:1:cdef.Indices.Count() {w cdef.Indices.GetAt(i) }

тут еще можно просмотреть %Library.IndexDefinition

For i=1:1:cdef.Properties.Count() { w cdef.Properties.GetAt(i).Type, !}
...
Рейтинг: 0 / 0
07.09.2007, 10:33
    #34783457
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Это и я понял! Вопрос как? Вот так не желает...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 s ocls=##class(%Dictionary.ClassDefinition).%OpenId(ClsName)
 s o=##class(%ResultSet).%New("%DynamicQuery:SQL")
 s sql="Select * From %Dictionary.IndexDefinition Where parent=?"
 s ok=o.Prepare(sql)
 w !,ok
 s ok=o.Execute(ocls.%Id())
 while o.Next() {
	w !,o.Get("Description")
 }
 d o.Close()
 d ocls.%Close()
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
07.09.2007, 10:35
    #34783464
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
LenRover , спасибо!

А как потом работать со свойствами индекса? Например узнать дескрипшен и по каким свойствам класса он (индекс) создавался
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
07.09.2007, 10:36
    #34783470
LenRover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
LenRoverSet cdef=##class(%ClassDefinition).%OpenId("classname")
For i=1:1:cdef.Indices.Count() {w cdef.Indices.GetAt(i) }

тут еще можно просмотреть %Library.IndexDefinition

For i=1:1:cdef.Properties.Count() { w cdef.Properties.GetAt(i).Type, !}

вот названия индексов

For i=1:1:cdef.Indices.Count() {w cdef.Indices.GetAt(i).Name }
...
Рейтинг: 0 / 0
07.09.2007, 10:39
    #34783477
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Ясненько! Благодарю.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
07.09.2007, 10:48
    #34783514
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
А SQLно никак?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
07.09.2007, 10:51
    #34783528
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
А вот мне нравится через глобалы.
Кстати, как-то делал классы с маппингом на глобалы классов ;-)
...
Рейтинг: 0 / 0
07.09.2007, 10:53
    #34783542
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Не-е-е... Через глобалы точно не стану информацию брать. Только "классово" или SQL. Лично для меня SQL предпочтительнее...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
07.09.2007, 11:00
    #34783564
LenRover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
даже не знаю... никогда не сталкивалась с необходимостью работы с метаданными через sql.
Можно в принципе создать метод в классе типа
ClassMethod cPut(Name As %String) As %Boolean [ SqlProc ],
в который подавать название колонки, а далее средствами COSa вернуть true или flase (является ли индексом или нет).

а в запросе, чтобы запустить метод:
where ISS.forSql_cPut(cPut)=1

где ISS.forSql - класс где лежит метод
а cPut - название метода..


не уверена, что вам это поможет.. но вдруг окажется полезным.
...
Рейтинг: 0 / 0
07.09.2007, 11:05
    #34783586
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
>Не-е-е... Через глобалы точно не стану информацию брать.
Измена? М-щик не хочет брать данные из глобала?

Сделайте маппинг, правда все равно ковырять глобалы придется. Но не вижу проблемы.
...
Рейтинг: 0 / 0
07.09.2007, 11:09
    #34783600
LenRover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Блок А.Н.>Не-е-е... Через глобалы точно не стану информацию брать.
Измена? М-щик не хочет брать данные из глобала?

Сделайте маппинг, правда все равно ковырять глобалы придется. Но не вижу проблемы.

Совсем необязательно через глобалы. Достаточно средствамми COS - %ClassDefinition
...
Рейтинг: 0 / 0
07.09.2007, 11:17
    #34783633
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
>Совсем необязательно через глобалы. Достаточно средствамми COS - %ClassDefinition
И правда. Раньше не знал. Вот так приходится изобретать велосипед...
...
Рейтинг: 0 / 0
07.09.2007, 11:19
    #34783643
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Не знал, что они поддерживают SQL.
А в каше 4 поддерживало?
...
Рейтинг: 0 / 0
07.09.2007, 11:20
    #34783657
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
krvsaА SQLно никак?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT

Никак.... если только не выгрузить DDL и разобрать его
...
Рейтинг: 0 / 0
07.09.2007, 11:24
    #34783675
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Код: plaintext
1.
SELECT *
FROM %Dictionary.CompiledIndex
?
...
Рейтинг: 0 / 0
07.09.2007, 11:42
    #34783746
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Блок А.Н.Измена? М-щик не хочет брать данные из глобала?
Скорее настороженость/опасение Сегодня у них так... Потом вот эндак... Зачем рисковать?

Про SQL понял... Спасибо.
...
Рейтинг: 0 / 0
07.09.2007, 12:35
    #34783995
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
Если индекс делается по нескольким свойствам (это возможно?), то как имена свойств будут храниться в ocls.Indices.GetAt(i).Properties?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
07.09.2007, 12:45
    #34784041
LenRover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
krvsaЕсли индекс делается по нескольким свойствам (это возможно?), то как имена свойств будут храниться в ocls.Indices.GetAt(i).Properties?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT

Да, это возможно. В этом случае индекс прописывается в виде
Index IndProp On (Prop1, Prop2);

и чтобы получить их имена:

EZH>Set cdef=##class(%ClassDefinition).%OpenId("test.class")
EZH>For i=1:1:cdef.Indices.Count() {w cdef.Indices.GetAt(i).Properties, ! }
Name
Prop1,Prop2

то есть, они просто через запятую выводятся
...
Рейтинг: 0 / 0
07.09.2007, 12:48
    #34784052
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить информацию об индексах?
LenRoverто есть, они просто через запятую выводятся
Ясненько... Спасибо большее! -<-@
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как получить информацию об индексах? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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