powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Из глобалов в sql
25 сообщений из 62, страница 1 из 3
Из глобалов в sql
    #38702973
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробую создать классы на основе глобалов.
Пока структура была простая, все получалось.
А теперь чуть сложнее и выходит ошибка

Код: plaintext
ОШИБКА #5316: Циклическая зависимость для класса 'Lena.Authors,Lena.Book'
Структура глобала такая:^book(17,"at",1)="Иванов А.П."
^book(17,"at",2)="Петров С.А."
^book(17,"at",3)="Сидоров Ю.Н."
^book(17,"av")=0
^book(17,"nm")="Черный человек"
^book(17,"yr")=1995
^book(18,"at",1)="Иванова Т.Ю."
^book(18,"at",2)="Ладыгина И.А."
^book(18,"av")=1
^book(18,"nm")="Энциклопедия кошек"
^book(18,"yr")=2009Класс книг:Class Lena.Book Extends %Persistent [ StorageStrategy = BookStorage ]
{
Relationship ID As Lena.Authors [ Cardinality = children, Inverse = BkId ];
Index BookId On ID [ IdKey, PrimaryKey, Unique ];
Property Name As %String;
Property Year As %String;
Property Num As %Integer;
}Класс авторов:Class Lena.Authors Extends %Persistent [ StorageStrategy = AuthorStg ]
{
Relationship BkId As Lena.Book [ Cardinality = parent, Inverse = ID ];
Property Name As %String;
Property Cnt As %Integer;
Index AuthorId On (BookId, Cnt) [ IdKey, PrimaryKey, Unique ];
}Способ хранения авторов:<Storage name="AuthorStg">
 <SequenceNumber>4</SequenceNumber>
 <SQLMap name="AuthorMap">
   <ConditionalWithHostVars></ConditionalWithHostVars>
   <Data name="Name"/>
   <Global>^book(BkId,"at")</Global>
   <PopulationType>full</PopulationType>
   <Subscript name="1">
     <Expression>{Lena.Books.Id}</Expression>
   </Subscript>
   <Subscript name="2">
     <Expression>{Cnt}</Expression>
   </Subscript>
   <Type>data</Type>
 </SQLMap>
 <Type>%CacheSQLStorage</Type>
</Storage>Помогите разобраться, что я не так делаю.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703026
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl,
Добрый день.

Статью смотрели? Там есть и не только простые примеры.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703091
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шваров Евгений, по ней и пыталась сделать.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703106
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переделала способ хранения, больше похоже на то, что в примере, но все равно на цикл ругается.<Storage name="AuthorStg">
 <SequenceNumber>4</SequenceNumber>
 <SQLMap name="AuthorMap">
  <ConditionalWithHostVars></ConditionalWithHostVars>
  <Data name="Name"/>
  <Global>^book</Global>
  <PopulationType>full</PopulationType>
  <Subscript name="1">
   <Expression>{Lena.Books.Id}</Expression>
  </Subscript>
  <Subscript name="2">
   <Expression>"at"</Expression>
  </Subscript>
  <Subscript name="3">
   <Expression>{Cnt}</Expression>
  </Subscript>
  <Type>data</Type>
 </SQLMap>
<Type>%CacheSQLStorage</Type>
</Storage>
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703123
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl,

Эта ошибка не из-за Storage.
Какое отношение между Book и Authors?
Одной книге соответствует много авторов и каждому автору соответствует одна книга?

Странно, что в классе Book, свойство ID — коллекция авторов, является IdKey. Может быть, вам нужно создать отдельное свойство для списка авторов?:Relationship Authors As Lena.Authors [ Cardinality = children, Inverse = BkId ];

Index BookId On ID [ IdKey, PrimaryKey, Unique ];
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703142
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Александр КобловКакое отношение между Book и Authors?
Одной книге соответствует много авторов и каждому автору соответствует одна книга?

Да, один ко многим отношение.
Странно, что в классе Book, свойство ID — коллекция авторов, является IdKey. Может быть, вам нужно создать отдельное свойство для списка авторов?:Relationship Authors As Lena.Authors [ Cardinality = children, Inverse = BkId ];

Index BookId On ID [ IdKey, PrimaryKey, Unique ];Ага. Появилась куча других ошибок. )) После исправления кучи осталось:

Код: plaintext
1.
Lena.Book.1.INT(819) ERROR #1054: Invalid expression : '%objcsd(%qHandle,6)=()' : Offset:25 [%0ZmBk1+4^Lena.Book.1]
 TEXT:  s %objcsd(%qHandle,6)=()

Что-то совсем непонятно, что тут имеется в виду.

Классы при этом скомпилировались, но при попытке запроса ругаются, что возникла ошибка при компиляции класса Lena.Book.

Может быть, я неправильно поняла смысл отношений...
Автор задается ID книги,"at",номером автора.
Мне казалось, что отношение должно ссылаться на ID книги. Типа foreign key. А тут оно сослалось вообще на что-то несуществующее.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703143
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl ,
РешениеLena.BookClass Lena.Book Extends %Persistent [ StorageStrategy = BookStg ]
{

Relationship Authors As Lena.Authors [ Cardinality = children, Inverse = Book ];

Property Name As %String;

Property Year As %String;

Property Num As %Integer;

<Storage name="BookStg">
<ExtentSize>100000</ExtentSize>
<SequenceNumber>5</SequenceNumber>
<SQLMap name="data">
<Data name="Name">
<Node>"nm"</Node>
</Data>
<Data name="Num">
<Node>"av"</Node>
</Data>
<Data name="Year">
<Node>"yr"</Node>
</Data>
<Global>^book</Global>
<Subscript name="1">
<Expression>{ID}</Expression>
</Subscript>
<Type>data</Type>
</SQLMap>
<StreamLocation>^Lena.BookS</StreamLocation>
<Type>%CacheSQLStorage</Type>
</Storage>

}
Lena.AuthorsClass Lena.Authors Extends %Persistent [ StorageStrategy = AuthorStg ]
{

Relationship Book As Lena.Book [ Cardinality = parent, Inverse = Authors ];

Property Name As %String;

Property Cnt As %Integer;

Index AuthorId On (Book, Cnt) [ IdKey ];

<Storage name="AuthorStg">
<ExtentSize>100000</ExtentSize>
<SequenceNumber>5</SequenceNumber>
<SQLMap name="data">
<Data name="Name"/>
<Global>^book</Global>
<Subscript name="1">
<Expression>{Book.ID}</Expression>
</Subscript>
<Subscript name="2">
<Expression>"at"</Expression>
</Subscript>
<Subscript name="3">
<Expression>{Cnt}</Expression>
</Subscript>
<Type>data</Type>
</SQLMap>
<StreamLocation>^Lena.AuthorsS</StreamLocation>
<Type>%CacheSQLStorage</Type>
</Storage>

}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
USER>d $system.SQL.Shell()
SQL Command Line Shell
----------------------------------------------------
 
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
USER>>select * from Lena.Book
1.      select * from Lena.Book
 
IDNameNumYear17Черный человек0199518Энциклопедия кошек12009
2 Rows(s) Affected
statement prepare time: 0.1370s, elapsed execute time: 0.0423s.
---------------------------------------------------------------------------
USER>>select * from Lena.Authors
2. select * from Lena.Authors

BookIDCntName1717||11Иванов А.П.1717||22Петров С.А.1717||33Сидоров Ю.Н.1818||11Иванова Т.Ю.1818||22Ладыгина И.А.
5 Rows(s) Affected
statement prepare time: 0.1219s, elapsed execute time: 0.0004s.
---------------------------------------------------------------------------
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
USER>zw ^book
^book(17,"at",1)="Иванов А.П."
^book(17,"at",2)="Петров С.А."
^book(17,"at",3)="Сидоров Ю.Н."
^book(17,"av")=0
^book(17,"nm")="Черный человек"
^book(17,"yr")=1995
^book(18,"at",1)="Иванова Т.Ю."
^book(18,"at",2)="Ладыгина И.А."
^book(18,"av")=1
^book(18,"nm")="Энциклопедия кошек"
^book(18,"yr")=2009
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703151
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

Спасибо большое. Буду разбираться, что не так.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703242
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl,

надеюсь, что более опытные товарищи ещё расскажут вам о том, что реализовывать отношение 1:M в виде "parent-child" в Cache' не следует никогда . Хуже будет, если этому научит жизнь :)
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703257
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

Прям таки никогда?
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703282
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

про то, почему "нельзя", написано много, в том числе на этом форуме. Вот хороший пример от иностранных коллег . В двух словах: медленный поиск по "child"ам, если "parent"ы хорошо "набиты данными". Если кому-то нужен более подробный пересказ, пишите ))

Будет интересно, если Вы напишете, когда "можно", и какие преимущества достигаются при этом перед "one-many".
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703323
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

Например, parent - класс-пустышка, а child-история его изменений. Причем наиболее частым запросом будет "получить состояние объекта на ..."
Преимущество - близкое хранение данных одного родителя.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703456
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот схему как в стартовом посте я бы точно не рекомендовал. Раздувает глобал неимоверно.
Класс на него лепить есть смысл только если данные уже есть и программы с ними работают. И для того, чтобы программы переписать на объекты\sql, а потом изменить структуру.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703483
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.
Класс леплю только для того, чтобы поучиться лепить классы. -))

Alexey Maslov
А как правильно делать связь 1:M?
Или это на уровне глобала надо было другую структуру делать? Заводить отдельный глобал ^authors(Id,BookId)="name"?
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703545
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю класс выдачи книг.
Связь много к многим.
Опять на что-то непонятное мне ругается.

Код: plaintext
ОШИБКА #5547: В выражении извлечения значения неверная конструкция '{Dgive}'. Здесь должно быть обращение к полю. Если работа идет с Master Map, поле должно быть идентификатором.
Глобал, класс, хранение:Структура глобала:^lib(№читателя,№книги,датаВыдачи)=срок_$c(31)_датаВозврата
^lib(7,10,63314)="14"_$c(31)_"63389"                                            
^lib(8,10,63389)="14"_$c(31)_"0"                                                
^lib(9,12,63350)="30"_$c(31)_"0"                                                
^lib(10,16,63389)="14"_$c(31)_"0"                                               
^lib(10,19,63383)="16"_$c(31)_"0"
Класс:Class Lena.Lib Extends %Persistent [ StorageStrategy = LibStrg ]
{
Property Rid As %String;
ForeignKey Rdr(Rid) References Lena.Reader(Prkey);
Property Bid As %String;
ForeignKey Bk(Bid) References Lena.Book(BkInd);
Property Dgive As %Date;
Property limit As %Integer;
Property Dtake As %String;
}Хранение:<Storage name="Default">
 <Data name="LibDefaultData">
  <Value name="1">
   <Value>%%CLASSNAME</Value>
  </Value>
  <Value name="2">
   <Value>Rid</Value>
  </Value>
  <Value name="3">
   <Value>Bid</Value>
  </Value>
 </Data>
 <DataLocation>^Lena.LibD</DataLocation>
 <DefaultData>LibDefaultData</DefaultData>
 <ExtentSize>100000</ExtentSize>
 <IdLocation>^Lena.LibD</IdLocation>
 <IndexLocation>^Lena.LibI</IndexLocation>
 <StreamLocation>^Lena.LibS</StreamLocation>
 <Type>%Library.CacheStorage</Type>
</Storage>

<Storage name="LibStrg">
 <ExtentSize>100000</ExtentSize>
 <SequenceNumber>8</SequenceNumber>
 <SQLMap name="LibMap">
  <Data name="Dtake">
   <Delimiter>$c(31)</Delimiter>
   <Piece>2</Piece>
  </Data>
  <Data name="limit">
   <Delimiter>$c(31)</Delimiter>
   <Piece>1</Piece>
  </Data>
  <Global>^lib</Global>
  <Subscript name="1">
   <Expression>Reader.SSN</Expression>
  </Subscript>
  <Subscript name="2">
   <Expression>Book.ID</Expression>
  </Subscript>
  <Subscript name="3">
   <Expression>{Dgive}</Expression>
  </Subscript>
  <Type>data</Type>
 </SQLMap>
 <StreamLocation>^Lena.LibS</StreamLocation>
 <Type>%CacheSQLStorage</Type>
</Storage>Все вроде бы аналогично авторам делаю:Property Cnt As %Integer;
Index AuthorId On (Book, Cnt) [ IdKey ];

<Subscript name="3">
<Expression>{Cnt}</Expression>
</Subscript>А тут:Property Dgive As %Date;

<Subscript name="3">
<Expression>{Dgive}</Expression>
</Subscript>Разница, что здесь индекс не завожу.

Если завожу индекс вот так:Index LibId On (Rid, Bid, Dgive) [ IdKey ];Ругается:

Код: plaintext
ОШИБКА #5585: Не удалось определить RowID для класса Lena.Lib, карты LibMap, поля Lena.Lib.Rid. RowID должен быть определен вручную для этой карты.

Если определяю RowId<RowIdSpec name="1">
 <Field>Rid</Field>
</RowIdSpec>
<RowIdSpec name="2">
 <Field>Bid</Field>
</RowIdSpec>
<RowIdSpec name="3">
 <Field>Dgive</Field>
</RowIdSpec>То
вот такой ужас
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Lena.Lib.1.INT(527) ERROR #1054: Invalid expression : '%objcsd(%qHandle,6)=()_"||"_()_"||"_(),%objcsd(%qHandle,7)=$s($zu(115,5)=2:$$%0MmBs1(%objcsd(%qHandle,6)),1:%objcsd(%qHandle,6))' : Offset:25 [%0MmBk1+2^Lena.Lib.1]
 TEXT:  s %objcsd(%qHandle,6)=()_"||"_()_"||"_(),%objcsd(%qHandle,7)=$s($zu(115,5)=2:$$%0MmBs1(%objcsd(%qHandle,6)),1:%objcsd(%qHandle,6))
Lena.Lib.1.INT(614) ERROR #1054: Invalid expression : 'id=()_"||"_()_"||"_()' : Offset:8 [%0TmBk1+2^Lena.Lib.1]
 TEXT:  s id=()_"||"_()_"||"_()
Lena.Lib.1.INT(650) ERROR #1054: Invalid expression : '%mmmsqld(5)=()_"||"_()_"||"_()' : Offset:17 [%0VmBk1+2^Lena.Lib.1]
 TEXT:  s %mmmsqld(5)=()_"||"_()_"||"_()
Lena.Lib.1.INT(685) ERROR #1054: Invalid expression : 'id=()_"||"_()_"||"_()' : Offset:8 [%0XmBk1+2^Lena.Lib.1]
 TEXT:  s id=()_"||"_()_"||"_()
Lena.Lib.1.INT(721) ERROR #1054: Invalid expression : 'id=()_"||"_()_"||"_()' : Offset:8 [%0ZmBk1+2^Lena.Lib.1]
 TEXT:  s id=()_"||"_()_"||"_()
Lena.Lib.1.INT(757) ERROR #1054: Invalid expression : '%mmmsqld(5)=()_"||"_()_"||"_()' : Offset:17 [%01mBk1+2^Lena.Lib.1]
 TEXT:  s %mmmsqld(5)=()_"||"_()_"||"_()
Lena.Lib.1.INT(792) ERROR #1054: Invalid expression : 'id=()_"||"_()_"||"_()' : Offset:8 [%03mBk1+2^Lena.Lib.1]
 TEXT:  s id=()_"||"_()_"||"_()
Lena.Lib.1.INT(833) ERROR #1054: Invalid expression : '%mmmsqld(9)=()_"||"_()_"||"_()' : Offset:17 [%05o+8^Lena.Lib.1]
 TEXT:  s %mmmsqld(9)=()_"||"_()_"||"_()
Lena.Lib.1.INT(885) ERROR #1054: Invalid expression : '%mmmsqld(7)=()_"||"_()_"||"_(),id=$s($zu(115,5)=2:$$%07mBs1(%mmmsqld(7)),1:%mmmsqld(7))' : Offset:17 [%07o+8^Lena.Lib.1]
 TEXT:  s %mmmsqld(7)=()_"||"_()_"||"_(),id=$s($zu(115,5)=2:$$%07mBs1(%mmmsqld(7)),1:%mmmsqld(7))
Подскажите, плз, что конкретно ему не нравится?
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703635
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov ,

"Никогда не говори никогда."
"Всё хорошо в меру."

Пошерстите системные хранимые классы и Вы найдёте множество примеров с использованием отношения parent-children:
  • Тест : результаты
  • Транзакция : записи
  • Роль : ресурсы
  • ...
е́ в голове будет каш а .
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703636
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl ,

Совет:
Один файл проекта (*.PRJ) со всеми классами (*.CLS) и данными (*.GBL) лучше длинной простыни с разрозненным неполным, а потому нерабочим, кодом.
К тому же это сильно увеличивает как скорость ответа, так и шансы на само его наличие.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703735
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,
я, конечно, идиот, но нашла только как экспортировать проект в xml через студию и как экспортировать глобалы в формате *.gof через портал.
Это оно или не то?
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703748
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl ,

%SYSTEM.OBJ.Export
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703797
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, получилось :))
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703820
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girlА как правильно делать связь 1:M?One-many, [ как правило ], удобнее по многим причинам. Главная из них, пожалуй, в том, что при проектировании БД существует тенденция в превращении связей 1:M в M:N (возможно, вы читали об этом у классиков). Если изначально была допущена ошибка, разбить связь One-many на две One-many будет относительно несложно; с Parent-Child перелопачивать придётся намного больше.
Midnight_girlИли это на уровне глобала надо было другую структуру делать? Заводить отдельный глобал ^authors(Id,BookId)="name"?У вас ведь тоже M:N :) поэтому лучше сразу, например, так:
^author(aid)=adata

^book(bid)=bdata

^ablink(aid,bid)=""

Эта модель всё равно сильно упрощённая, т.к. не отслеживаются различные издания той же книги, переводы на другие языки и пр.

Ну и как совершенно справедливо заметил А.Н.Блок, заниматься отображением глобалов в хранимые классы в новых проектах смысла нет, делайте сразу на классах.
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38703965
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl ,

Замените в Lena.Lib<Subscript name="1">
<Expression>Reader.SSN</Expression>
</Subscript>
<Subscript name="2">
<Expression>Book.ID</Expression>
</Subscript>
<Subscript name="3">
<Expression>Dgive</Expression>
</Subscript>на<Subscript name="1">
<Expression>{Rid}</Expression>
</Subscript>
<Subscript name="2">
<Expression>{Bid}</Expression>
</Subscript>
<Subscript name="3">
<Expression>{Dgive}</Expression>
</Subscript>Там же удалите лишнюю схему хранения Default.

Ещё можете добавить SqlRowIdPrivate в Lena.Book.

PS: Index BkInd On ID [ IdKey, PrimaryKey, Unique ]; //Unique здесь излишен .
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38704016
Midnight_girl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit Спасибо огромное! Заработало! =))
Alexey Maslov меня на новой работе пока заставляют работать в терминале (учусь), просто наткнулась на статью на хабре про работу с глобалами через sql и решила попробовать. Раньше же oracle dba была -))))
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38704127
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Midnight_girl... меня на новой работе пока заставляют работать в терминале...Жёстко, но может и правильно, ибо "все великие дела творятся в командной строке".
Удачи!
...
Рейтинг: 0 / 0
Из глобалов в sql
    #38708352
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь: чем отличается Один-ко-Многим и Родитель-Потомок...
http://lusindane.at.tut.by/files/object09.html
До сих пор в Cache, как и в других системах хранения и обработки данных, связи между типами сущностей не поддерживаются. Связи моделируются с помощью свойств, что принцпиально неверно. Впрочем, то же самое делают и разработчики, использующие реляционные СХОД, в своих многочисленных "фреймворках"))... В последнем, который я видел, используется даже понятие "навигируемое свойство"))
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 1 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Из глобалов в sql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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