Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Индексы с Population type = conditional / 4 сообщений из 4, страница 1 из 1
03.07.2015, 14:41
    #38999021
Mike Ivanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы с Population type = conditional
Добрый день!

Извиняюсь за дурацкий вопрос, но чувствую себя забаненным в гугле - не смог ничего найти по теме. Можете объяснить или, еще лучше, ткнуть носом в то, где можно почитать про свойства индекса Population type - conditional? Начал с хелпа, но он как-то, хм, неинформативен:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
----------------
PopulationPct
Synopsis
 

Value
The value of this keyword is a string.

Description
PopulationPct

Default Value
The default value for the PopulationPct keyword is an empty string. 
----------------
http://docs.intersystems.com/ens20102/csp/docbook/DocBook.UI.Page.cls?KEY=ROBJ_storagesqlmap_populationpct

И так про все в этой области.

Если ближе к конкретной задаче
У меня есть таблица, в которой есть ID, Field1, Field2, ...
Класс хранится посредством Cache SQL Storage
Хочу построить индекс Field1 - Field2 - ID, который будет записываться только тогда, когда Field1<>Field2.
...
Рейтинг: 0 / 0
03.07.2015, 17:17
    #38999198
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы с Population type = conditional
Mike Ivanov ,

В конце статьи есть ссылка (слайды 14 и 19)
ПримерClass my.b Extends %Persistent [ SqlRowIdPrivate, StorageStrategy = sql ]
{

Index idx On ID [ IdKey, PrimaryKey ];

Index idxMy On (Field1, Field2);

Property ID As %Integer;

Property Field1 As %String;

Property Field2 As %String;

/// d ##class(my.b).Fill()
ClassMethod Fill()
{
  k ^my.bD,^my.bI
  
  &sql(insert into my.b(ID,Field1,Field2) values(1,'a','b'))
  &sql(insert into my.b(ID,Field1,Field2) values(2,'c','c'))
  &sql(insert into my.b(ID,Field1,Field2) values(3,'c','d'))
  
  zw ^my.bD,^my.bI
}

Storage sql
{
<SQLMap name="data">
<Data name="Field1">
<Piece>1</Piece>
</Data>
<Data name="Field2">
<Piece>2</Piece>
</Data>
<Global>^my.bD</Global>
<RowIdSpec name="1">
<Expression>{L1}</Expression>
<Field>ID</Field>
</RowIdSpec>
<Subscript name="1">
<AccessType>Sub</AccessType>
<Expression>{ID}</Expression>
</Subscript>
<Type>data</Type>
</SQLMap>
<SQLMap name="index">
<Condition>{Field1}'={Field2}</Condition>
<Global>^my.bI</Global>
<PopulationType>conditional</PopulationType>
<RowIdSpec name="1">
<Expression>{L3}</Expression>
<Field>ID</Field>
</RowIdSpec>
<Subscript name="1">
<Expression>{Field1}</Expression>
</Subscript>
<Subscript name="2">
<Expression>{Field2}</Expression>
</Subscript>
<Subscript name="3">
<Expression>{ID}</Expression>
</Subscript>
<Type>index</Type>
</SQLMap>
<StreamLocation>^my.bS</StreamLocation>
<Type>%CacheSQLStorage</Type>
}

}
Результат:

Код: plaintext
1.
2.
3.
4.
5.
USER>d ##class(my.b).Fill()
^my.bD(1)=$lb("a","b","")
^my.bD(2)=$lb("c","c","")
^my.bD(3)=$lb("c","d","")
^my.bI("a","b",1)=""
^my.bI("c","d",3)=""
...
Рейтинг: 0 / 0
03.07.2015, 17:20
    #38999202
Mike Ivanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы с Population type = conditional
servit,

Большое спасибо, попробую.
Поизучал исходники, потыкался сам в интерфейсе - не очень преуспел, с готовым примером должно быть легче.

Mike
...
Рейтинг: 0 / 0
07.07.2015, 11:09
    #39001149
Mike Ivanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы с Population type = conditional
servit,

Большое спасибо, работает.
Оказывается, вся разница с вариантом, который я пробовал, была в наличии фигурных скобок вокруг имен полей в поле условия :)

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


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