Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
Как сделать Primary Key на classname + Number в этой задаче?

- есть один базовый класс Base, у него есть свойство Number
- все остальные классы произведены от базового, Number уникален для каждого конечного класса, таким образом (classname,Number) уникален для таблицы Base

Служебное поле x__classname я так понимаю нельзя использовать
5 сен 18, 11:39    [21665297]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
Можно сделать вычисляемое поле и на него навесить индекс.
5 сен 18, 14:04    [21665681]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
Я тут один момент не догоняю, который возможно делает мой вопрос бесмысленным:

если классы B и С произведены от класса A, и я делаю 'select * from C', каким образом каше находит все объекты типа C? У него же нет индекса по classname. Он, что перебирает все A и откидывает все не-С? Но это же супер как неэффективно.
5 сен 18, 14:49    [21665773]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
alatalo,

А план запроса не пробовал смотреть?
5 сен 18, 15:23    [21665842]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
Вообще создание Extent индекса для каждого подкласса должно решать проблему перебора всех объектов при поиске по подклассам.
Либо делать свое хранение в каждом подклассе.
5 сен 18, 15:57    [21665911]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
а, да, это я ступил. Конечно в Data-глобале классы идут как под-глобали.

Тогда обратно к моему вопросу, уточню его: как сделать IdKey таким?

Index key On (classname,Number) [ IdKey, PrimaryKey, Unique ];
5 сен 18, 16:02    [21665921]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
alatalo
а, да, это я ступил. Конечно в Data-глобале классы идут как под-глобали.

Тогда обратно к моему вопросу, уточню его: как сделать IdKey таким?

Index key On (classname,Number) [ IdKey, PrimaryKey, Unique ];
И думаешь, этот индекс автоматически начнет использоваться? Почему?

Напиши пример запроса, который думаешь что так оптимизируешь?
5 сен 18, 16:07    [21665938]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
не, не, речь не про оптимизицию. Все проще, у меня каждый объект идентифицируется парой classname+Number и я хочу иметь возможность сказать ##class(classC).%OpenId("classC||10"), но не знаю как сказать Cache что IdKey это classname+Number
5 сен 18, 20:48    [21666258]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
alatalo
не, не, речь не про оптимизицию. Все проще, у меня каждый объект идентифицируется парой classname+Number и я хочу иметь возможность сказать ##class(classC).%OpenId("classC||10"), но не знаю как сказать Cache что IdKey это classname+Number
Хм, что-то еще запутанней становится. Number уникален в пределах класса, а зачем делать индекс по классу и Number если должно быть достаточно только Number.
По индексам типа Unique можно открывать объекты без %OpenId.
так генерятся методы IndexName с приставками Open, Exist. Куда нужно передать список значений полей по которым этот индекс.
5 сен 18, 22:25    [21666321]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
Тогда для каждого производного класса нужно отдельно делать свой Number и уникальный индекс по нему. Моя же идея простая как топор - Number определяется один раз в базовом классе и IdKey определяется как classname+Number. Тогда Data глобаль будет выгдядеть как

classB
Number1 (...record data)
Number2 (...record data)

classC
Number1 (...record data)
Number2 (...record data)
6 сен 18, 21:54    [21667514]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo, соглашусь daimor в этой теме, или krvsa в соседней теме - вы делаете что-то не то ( недоговариваете )
Class alatalo.baseA Extends %Persistent [ Abstract ] {
Property number;
Index number On number [ Unique ];
}
Class alatalo.baseB Extends (%Persistent, baseA) {}
Class alatalo.baseC Extends (%Persistent, baseA) {}

У %Persistent уже есть метод %Open( oid ), где oid = $lb( id, classname ) - если не подходит, напишите свой
12 сен 18, 16:31    [21672458]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

неа, так select по baseA не сделать
13 сен 18, 11:13    [21673240]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo, тут такое дело...

Наследование это же из ООП, мол, классB ( наследник ) такой же как классA ( родитель ), но поведение другое, так?
А у нас тут ООП с хранением - хранится состояние ( значения свойств ), а не поведение.
Также следует помнить, что это СУБД, что предполагает обработку множеств записей для множества пользователей.
Объектный доступ имеет свою цену ( память, скорость ), что рано или поздно, подтолкнет вас к необходимости все чаще использовать класс-методы ( хранимые процедуры ). А им, кроме идентификаторов, мало что нужно.
И в конце этого длинного пути, вы начнете предпочитать простые схемы хранения - таблицы, которые будете обрабатывать разным набором функций ( класс-методы, хранимки ).
Конечно, все эти предпочтения зависят от ваших обстоятельств, но вы их не раскрываете.

Возвращаясь к вашему вопросу:
1. C одинаковым интерфейсом вроде разобрались - абстрактный класс
2. С общим списком - в базовом классе можно написать ( или генерировать ) запрос объединяющим строки наследников
Select oid, number From ( 
 Select $listbuild(id,'pkg.baseB') as oid, number From pkg.baseB 
 Union 
 Select $listbuild(id,'pkg.baseC') as oid, number From pkg.baseC 
) 

и потом
s obj = ##class(%Persistent).%Open(oid)

3. Уникальность номера между всеми экземплярами наследников проверять в момент сохранения - метод, создающий и использующий идексноподобную глобаль, вам в помощь
14 сен 18, 13:53    [21674713]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
4. И чтоб совсем соответствовать, запрос из п.2 объявить как view
14 сен 18, 13:56    [21674722]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>... но вы их не раскрываете.
Именно. Вопрос этого топика - можно ли уговорить Каше использовать x__classname в Primary Key, т.е. получить такую структуру Data Global:

^data("classB",1)=...
^data("classB",2)=...
^data("classB",n)=...

^data("classС",1)=...
^data("classС",2)=...
^data("classС",n)=...

Зачем и не лучше ли использовать хранимки отстается за скобками
16 сен 18, 22:34    [21676197]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo, x__classname - служебное поле, с информацией о цепочке наследования. Вы не можете указать это поле при описании индекса. Если вам нужна определенная структура глобали, используйте другие схемы хранения ( Cache SQL Storage, Custom Storage ) вместо дефолтной ( Cache Storage )
17 сен 18, 01:03    [21676250]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>x__classname - служебное поле, с информацией о цепочке наследования. Вы не можете указать это поле при описании индекса.
Спасибо, Кеп :)

>Если вам нужна определенная структура глобали...
Cамое важное здесь не структура глобали, а чтобы Каше сам знал что в первом индексе хранится classname и мог бы его использовать как extent index. Таким образом, запрос "select * from classB order by Number" может был выполнен эффективно без дополнительных индексов. Можно ли этого добиться с помощью альтернативных схем хранения?
17 сен 18, 10:42    [21676457]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo

>... x__classname - служебное поле, с информацией о цепочке наследования ...
>> Спасибо, Кеп :)
"Здесь мало услышать, Здесь вслушаться нужно..."
alatalo
... а чтобы Каше сам знал что в первом индексе хранится classname и мог бы ...
С помощью альтернативных схем хранения можно добиться поведения, которым не обладает схема хранения по умолчанию :)
17 сен 18, 11:58    [21676611]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>С помощью альтернативных схем хранения можно добиться поведения, которым не обладает схема хранения по умолчанию :)
да ладно?! вот оно решение всем проблемам! :)

Можете привести пример такой схемы с Primary Key по classname+Number?
17 сен 18, 12:33    [21676699]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo
... решение всем проблемам ...
Не могу разделить ваш оптимизм, ведь их список вы не раскрываете.
alatalo
Можете привести пример такой схемы с Primary Key по classname+Number?
Именно в такой постановке достаточно и стандартной схемы. Но ведь список ваших требований постоянно пополняется... Готовы предоставить полную спецификацию и ответить на уточняющие вопросы?
17 сен 18, 13:04    [21676759]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>Готовы предоставить полную спецификацию
запросто:

Как сделать Primary Key на classname + Number в этой задаче?

- есть один базовый класс classA, у него есть свойство Number
- все остальные классы произведены от classA, Number уникален для каждого конечного класса, таким образом пара (classname,Number) уникален для всех объектов classA
- classA должен проецироваться как таблица доступная для 'select ... from classA'
17 сен 18, 14:43    [21676953]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
Number это если я правильно понимаю, ID идентификатор объекта.
Зачем вам индекс по classname+Number если вы и так можете открывать объект по ##class(classname).%OpenId(Number)

Если Number не Id а еще одно поле, то просто Unique индекс по нему и открывать через него
##class(classname).NumberIndexOpen(Number)

А индекс по Classname достигается через Extent индекс, его хватит чтобы sql запросы не перебирали все объекты classA
17 сен 18, 15:42    [21677070]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo
... запросто ...
Неа - вы не описали поле classname.
Если предположить, что это поле с именем класса, то решение может быть таким:
Class alatalo.baseA Extends %Persistent {
  Property classname [ InitialExpression = {$classname()}];
  Property Number;
  Index master On (classname, Number) [ PrimaryKey ];
}
Class alatalo.baseB Extends baseA{}
Class alatalo.baseC Extends baseA{}
17 сен 18, 18:41    [21677277]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
doublefint
alatalo
... запросто ...
Неа - вы не описали поле classname.
Если предположить, что это поле с именем класса, то решение может быть таким:
Class alatalo.baseA Extends %Persistent {
  Property classname [ InitialExpression = {$classname()}];
  Property Number;
  Index master On (classname, Number) [ PrimaryKey ];
}
Class alatalo.baseB Extends baseA{}
Class alatalo.baseC Extends baseA{}

Только этот индекс не поможет в SQL запросе. Только если не искать фильтровать по классу в where. Но это будет выглядеть несколько нелепо.
17 сен 18, 21:13    [21677405]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
DAiMor
doublefint
пропущено...
Неа - вы не описали поле classname.
Если предположить, что это поле с именем класса, то решение может быть таким:
Class alatalo.baseA Extends %Persistent {
  Property classname [ InitialExpression = {$classname()}];
  Property Number;
  Index master On (classname, Number) [ PrimaryKey ];
}
Class alatalo.baseB Extends baseA{}
Class alatalo.baseC Extends baseA{}

Только этот индекс не поможет в SQL запросе. Только если не искать фильтровать по классу в where. Но это будет выглядеть несколько нелепо.


Да, именно так. Собственно весь вопрос этой темы в том, можно ли сообщить Каше, что classname (a.k.a x__classname, %%CLASSNAME) хранится в Primary Key. Таким образом, Primary Key будет одновременно и Extent индексом.
18 сен 18, 08:27    [21677605]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
DAiMor,

Number уникален только в пределах одного конечного класса. Объект типа Tiger идентифицируется Number-ом, но если какой-то другой объект, Event Log например, ссылается на базовый класс Animal, то одного Number уже не достаточно.

>А индекс по Classname достигается через Extent индекс, его хватит чтобы sql запросы не перебирали все объекты classA
Да, но Extent индекс нужно будет завести для каждого конечного класса. В чем нет необходимости, если Classname будет содержаться в Primary Key
18 сен 18, 09:03    [21677620]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
DAiMor
... Только этот индекс не поможет в SQL запросе ...
Так аlatalo и не просил этого, в его спецификации таких требований нет

alatalo
... что classname (a.k.a x__classname, %%CLASSNAME) ...
Третий раз повторяю, обратите наконец внимание: classname '= x__classname!!!
classname - имя текущего класса, например "alatalo.baseB"
x__classname - ЦЕПОЧКА НАСЛЕДОВАНИЯ, например "~alatalo.baseA~alatalo.baseB~", служебное поле Cache, используется в системном методе %IsA
18 сен 18, 14:20    [21678168]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2583
alatalo
Да, именно так. Собственно весь вопрос этой темы в том, можно ли сообщить Каше, что classname (a.k.a x__classname, %%CLASSNAME) хранится в Primary Key. Таким образом, Primary Key будет одновременно и Extent индексом.
Такое не получится сделать, да и смысл так делать пока все равно не ясен.
18 сен 18, 15:04    [21678241]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>Третий раз повторяю...
Честно сказать, вы могли бы и в превый раз этого не говорить.

Мы не собираемся писать то, что я здесь называю classname, в Primary Index сами. Речь в этой теме про то, каким образом (и возможно ли это в принципе), сообщить Каше, что та "ЦЕПОЧКА НАСЛЕДОВАНИЯ", которую он подефолту пишет здесь:

Storage Default
{
<Value name="1">
<Value>%%CLASSNAME</Value>
...

находится в первом сабскрипте Primary Index.

Если это возможно, то 'select * from classB' может обойтись без перебора всей таблицы даже без Extent индекса
18 сен 18, 16:11    [21678358]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
DAiMor,

> да и смысл так делать пока все равно не ясен
смотри, у тебя 120 производных класса, зачем заводить 120 Extent индексов, если их роль может выполнить Primary Key?
18 сен 18, 16:18    [21678363]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo
... могли бы и в превый раз этого не говорить...
4. Цепочка наследования - служебное поле. Т.е предназначено и используется производителем СУБД в его собственных целях ( ..%IsA ), невидимое для большиства подсистем. Его нельзя указать в качестве свойства при определении индекса. :)
alatalo
%%CLASSNAME ...находится в первом сабскрипте ...
Нет, %%CLASSNAME находится в первой позиции $lb().
Хранение по умолчанию ( Cache Storage ) хранит данные в формате ^package.classD(ID)=$lb(%%CLASNAME, props...).
Соответственно, реализация вашей идеи приведет к полному сканированию глобали.
18 сен 18, 22:21    [21678822]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>...Его нельзя указать в качестве свойства при определении индекса
очень возможно что нельзя, но я не вижу принципиальных препятсвий почему "служебное поле предназначенное и используемое производителем СУБД в его собственных целях ( ..%IsA ), невидимое для большиства подсистем" может использоваться при определении хранения (%%CLASSNAME), но не может использоваться в индексе: его значение не меняется и известно на момент первой записи в базу.

>Нет, %%CLASSNAME находится в первой позиции $lb().
вы меня неправильно поняли: он там находится по умолчанию, но я хочу его в первый сабскрипт индекса

>Соответственно, реализация вашей идеи приведет к полному сканированию глобали
в каком сценарии?
19 сен 18, 10:54    [21679166]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo
но я не вижу принципиальных препятствий
Навскидку - совместимость и универсальность.
alatalo
но я хочу его в первый сабскрипт индекса
Если вам нужно другое поведение, то вы или заказываете его у производителя, или реализуете самостоятельно с помощью предоставленных производителем возможностей - собственные поля, индексы или альтернативные схемы хранения
alatalo
в каком сценарии?
В сценарии со схемой хранения, когда цепочка наследования ( 5. которая не эквивалентна имени класса ) находится в первом ключе или в первой позиции глобали
19 сен 18, 16:25    [21679789]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>Навскидку - совместимость и универсальность.
очень вероятно, что какие-нибудь фундаментальные проблемы с этим действительное есть, но точно не с совместимостью и универсальностью, поскольку возможность писать classname еще и в индекс помимо его обычного места ни на что из перечисленного не влияет. Ровно тоже, что и с возможностью хранить в индексе копии обычных полей.

>Если вам нужно другое поведение, то вы или заказываете его у производителя, или реализуете самостоятельно с помощью предоставленных производителем возможностей
да ну?! еще один совершенно бесценный совет :)

>В сценарии со схемой хранения, когда цепочка наследования ( 5. которая не эквивалентна имени класса ) находится в первом ключе или в первой позиции глобали
в каком сценарии (поиск объекта, чтение его полей etc) копия classname в индексе приведет к какому-либо дополнительному "сканированию глобали"?
19 сен 18, 18:32    [21679957]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo
возможность писать classname еще и в индекс помимо его обычного места, ни на что из перечисленного не влияет
6. classname не тоже самое, что и %%CLASSNAME
Предполагаемую глубину наследования вы не оговаривали.
Можете дать свою оценку размера строки ( цепочки наследования ), которую надо поместить как в индекс, так и в данные?
alatalo
да ну?!
Не благодарите. Наносить добро, причинять пользу :) Так какой путь выбираете - самостоятельно или в WRC?
alatalo
в каком сценарии копия classname в индексе приведет к какому-либо дополнительному "сканированию глобали"?
7. %%CLASSNAME сборная строка с именами классов, т.е промежуточная информация, которую еще нужно обработать.
Поэтому в любом, в котором будет необходимость использовать такой индекс ( за исключением, пожалуй, запроса "найди все id, с такой же цепочкой наследования" )
20 сен 18, 02:18    [21680212]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>classname не тоже самое, что и %%CLASSNAME
в этой теме classname=%%CLASSNAME=цепочка наследования

>Можете дать свою оценку размера строки ( цепочки наследования ), которую надо поместить как в индекс, так и в данные?
нет здесь никакой проблемы: если помещается в $lb(%%CLASSNAME, ...) то поместится и в индекс

>Так какой путь выбираете - самостоятельно или в WRC?
вне темы

> запроса "найди все id, с такой же цепочкой наследования"
это единственный вид запроса, который меня интересует. Но даже если нужно искать инстансы промежуточного класса, этот индекс можно использоваться не менее эффективно
20 сен 18, 08:04    [21680259]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo
... в этой теме classname=%%CLASSNAME=цепочка наследования ...
давайте тогда называть его classeslist, что бы все таки отличать.
alatalo
нет здесь никакой проблемы: если помещается в $lb(%%CLASSNAME, ...) то поместится и в индекс
Уверены?
alatalo
Но даже если нужно искать инстансы промежуточного класса, этот индекс можно использоваться не менее эффективно
Приведете пример кода для function( classeslist, classname ){}?
20 сен 18, 09:25    [21680311]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>давайте тогда называть его classeslist, что бы все таки отличать
в этой теме я назыаю его classname

>Уверены?
Если вы можете записать ^a=$lb(classname, ...), то в чем проблема записать ^b=classname?

>Приведете пример кода для function( classeslist, classname ){}?
classnamePrev=classname-1 ; условно, формируем предыдущее значение classname
перебираем индекс ордером начиная с classnamePrev пока строка начинается с classname
20 сен 18, 10:02    [21680354]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo
... в чем проблема записать ^b=classname? ...
alatalo
... но я хочу его в первый сабскрипт индекса ...
???
Приведите, пожалуйста, пример того, как вашему мнению, должна выглядеть индексная глобаль?

alatalo
перебираем индекс ордером начиная с classnamePrev пока строка начинается с classname
alatalo
... Но даже если нужно искать инстансы промежуточного класса ... не менее эффективно
???
20 сен 18, 10:57    [21680444]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 88
doublefint,

>Приведите, пожалуйста, пример того, как вашему мнению, должна выглядеть индексная глобаль?
как уже многократно повторялось: ^data(classname,number)=data ; $lb(classname,...)

>??
да, первым ордером попадаем сразу на первый промежуточный класс. Последущие перебираем до тех пор, пока classname начинается с искомой строки. Минимальные издержки, даже не учитывая, что в реальной системе очень ограниченное число классов
24 сен 18, 15:18    [21684183]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
alatalo,
+ classname еще и в индекс
ClassMethod test(){

	s inheritance = $lb(
		"Class.can.be.subclassed.to.a.depth.of50.but.not.further",
		"The.full.name.of.class.member.including.the.full.class.name.must.be.less.than.or.equal.to220.characters",
		"The.total.length.of.a.global.reference.is.limited.to511.encoded.characters",
		"If.you.must.have.long.subscript.or.global.names",
		"it.is.helpful.to.avoid.a.large.number.of.subscript.levels",
		"If.you.are.using.multiple.subscript.levels",
		"avoid.long.global.names.and.long.subscripts",
		"Because.you.may.not.be.able.to.control.the.character.sets.you.are.using",
		"it.is.useful.to.keep.global.names.and.subscripts.shorter"
	)
	#define isOk( %bool ) $case( %bool, 1:"OK. ",:"FAIL. " )
	s pointer = 0, class = "", ok = 1
	while $listnext( inheritance, pointer, class ){
		s valid = $system.OBJ.IsValidClassname( class )
		w !, $$$isOk( valid ), class
		s ok = ok && valid
	}
	
	w !, "Classes: ", $$$isOk( ok )
	s depth = $ll( inheritance ) w !, "Depth: ", depth
	s classes = "~" _ $lts( inheritance, "~" )_ "~" w !,"Length: ", $l( classes )
	s test = 1
	
	try {
		s data = $lb( classes, "нет здесь никакой проблемы", "точно не с совместимостью и универсальностью" )
		s ^alatolo.has.idea(classes, 1) = data
	} catch e {
		zw e s test = 0	
	}
	Q test
}
2 окт 18, 16:53    [21692994]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить