Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Колчество экземпляров класса? / 10 сообщений из 10, страница 1 из 1
12.06.2008, 12:58
    #35371122
CacheLot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
Как узнать количество экземпляров класса, храниящихся в БД, реально существкющих в даннй момент времени?
То есть в каком свойстве хранится эта величина?
Я пока обходился глобалом типа ^User.ClassD, но подозреваю что есть какое то свойство??
...
Рейтинг: 0 / 0
12.06.2008, 15:18
    #35371362
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
Свойства нет - можно посчитать элементарой агрегатной функией SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
/// Возвращает количество объектов данного класса (число строк в таблице)
ClassMethod GetExtentSize() As %Library.Integer [ CodeMode = objectgenerator, SqlProc ]
{
	If (%class.ClassType = "persistent") {		
		Do %code.WriteLine(" New count,SQLCODE,%ROWID,%ROWCOUNT")
		Do %code.WriteLine(" &sql(SELECT COUNT(%ID) INTO :count FROM "_%class.Name_" )")
		Do %code.WriteLine(" Quit:SQLCODE'=0 count=0")
	}
	Do %code.WriteLine(" Quit 0")
    Quit $$$OK
}

...
Рейтинг: 0 / 0
12.06.2008, 15:20
    #35371367
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
Вариант с генератором класс метода приведен на всякий случай - в нем могут быть сложности так как имя класса не всегда совпадает с именем отображаемой таблицы...

но в общем то SELECT COUNT(*) FROM Таблица
...
Рейтинг: 0 / 0
12.06.2008, 15:22
    #35371368
CacheLot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
Поэкспериментиовал, получилось, что:
1) Добавляем 10 экземпляров класса, через забинденную форму;
2) После этого глобал ^User.ClassD=10
3) Удаляем допустим запись ^User.ClassD(3)
4) После этого глобал всё равно ^User.ClassD=10
5) При этом последовательность записей ^User.ClassD(2)....^User.ClassD(5)
Удалял командой
Код: plaintext
 k ^User.ClassD( 3 )

Вот как теперь получить именно количество записей, а не Id последней записи?
...
Рейтинг: 0 / 0
12.06.2008, 15:32
    #35371384
CacheLot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
Мож просто пройтись по всем узлам глобала, и при этом в цикле счётчик поставить?
Щас что то попробую, потом отпишусь.
...
Рейтинг: 0 / 0
12.06.2008, 15:59
    #35371413
CacheLot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BeginProc
 s x=""
 s Count= 0 
 f {
	s x=$O(^User.ClassD(x))
	q:x=""
	s Count=Count+ 1 
	;w x
 }
 w "Всего экземпляров= ",Count
 q


Так вроде работает, НО всё-таки смущает отсутствие такой встроенной функции!
Мож всё-таки что о есть? Должно ж быть!
...
Рейтинг: 0 / 0
12.06.2008, 22:09
    #35371761
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
Нет такой функции и не должно быть - если у вас несколько процессов пишут в таблицы каждый в своей транзакции - то что с такой функцией будет ? Получите деадлок в чистом виде...


SQL мной приведенный выполняет именно то что вы написали - только он не требует знания глобала и может выполняться динамически.

У Вас запрет на использование SQL ?
...
Рейтинг: 0 / 0
13.06.2008, 03:15
    #35371881
Dmitry V. Liseev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
PtnВариант с генератором класс метода приведен на всякий случай - в нем могут быть сложности так как имя класса не всегда совпадает с именем отображаемой таблицы...

но в общем то SELECT COUNT(*) FROM Таблица
"SELECT COUNT(*) FROM "_$$$CLASSsqlqualifiednameQ($$$MGINFO,%class)
...
Рейтинг: 0 / 0
13.06.2008, 16:11
    #35372456
CacheLot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
PtnУ Вас запрет на использование SQL ?
Нее запрета никокого нет...
PtnНет такой функции и не должно быть - если у вас несколько процессов пишут в таблицы каждый в своей транзакции - то что с такой функцией будет?

А что будет с ней? Точнее что может с ней произойти?
Или : как сделать так, чтоб при использовании приведённого выше Вами варианта, не произошло то же, что по-Вашему может произойти с встроенной такой функцией?
Короче, мне не понятно, почему этот ваш метод нельзя было встроить в Cache?
Лично мне ответ не очевиден. Если можно, поподробнее ответье!
...
Рейтинг: 0 / 0
13.06.2008, 18:45
    #35372622
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Колчество экземпляров класса?
>>А что будет с ней? Точнее что может с ней произойти?

Вы недопоняли - приведенная функция - это вычислимое значение...

Если же попытаться сдеать это хранимым свойством - наподобие ^User.ClassD=10 - то там будут проблемы...

Почему такой функции нет в базовом функционале не знаю, на мой взгляд она мало востребованна и легко реализуется самостоятельно.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Колчество экземпляров класса? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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