powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
8 сообщений из 8, страница 1 из 1
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38314585
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Днями начались чудеса с историями изменений - пишу в них объекты, которые менялись, ага.

И вот ..%IsModified() говорит, что объект изменялся, но сравнивая через GetStored() его свойства(в хранилище и на памяти), различий не обнаруживаю.

Как такое может быть?
...
Рейтинг: 0 / 0
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38314586
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, идет перезапись значения на самого же себя.
Или запись другого значения и потом возврат на старое.
...
Рейтинг: 0 / 0
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38314765
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

Но это-ж в одном %Save() и вроде бы %IsModified() должен возвращать ноль в описанных Вами случаях?
...
Рейтинг: 0 / 0
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38314774
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovИ вот ..%IsModified() говорит, что объект изменялся, но сравнивая через GetStored() его свойства(в хранилище и на памяти), различий не обнаруживаю.

Как такое может быть?Например, так:Class del.test Extends %Persistent
{

Property f1 As %String [ InitialExpression = "test" ];

ClassMethod Test()
{
  do ..%KillExtent()
  
  &sql(insert into del.test default values)
  
  set p=..%OpenId(1)
  
  write p.f1," ",p.f1IsModified()," ",p.%IsModified(),!
  
   do p.f1SetModified(1)
  
  write p.f1," ",p.f1IsModified()," ",p.%IsModified(),!
}
}Результат:

Код: plaintext
1.
2.
USER>do ##class(del.test).Test()
test 0 0
test 1 1
...
Рейтинг: 0 / 0
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38314801
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovБлок А.Н.,
Но это-ж в одном %Save() и вроде бы %IsModified() должен возвращать ноль в описанных Вами случаях?
Сейчас посмотрел классы, %IsModified относиться к %LIbrary.RegistededObject. У которого еще никакого хранения нет. Так что вряд ли оно связано с тем, что хранится.
...
Рейтинг: 0 / 0
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38314959
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

Спасибо, но как-то печально не иметь возможности быстро узнать, изменены ли хранимые данные - я в итоге вписал перебор свойств и их сравнение - поштучно. Но глаза-б мои на это не смотрели ;)
...
Рейтинг: 0 / 0
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38315307
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesov,

Не смотря на то что Cache' строковая СУБД, она все же различает строки и числа для модификации

Т.е. допустим вы поднимаете объект класса User.My у которого есть св-во a As %Integer
А дальше наблюдаем
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
> Set obj = ##class(A).%New()
> Set obj.a = 111
> Do obj.%Save()
> Write obj.aIsModified() // 0 // Все правильно - объект сохранен и его св-во после сохранения не изменялось
> Set obj.a = 111
> Write obj.aIsModified() // 0 // Все правильно - хоть мы и присвоили св-ву новое значение, но оно не отличается от старого
> Set obj.a = "111"
> Write obj.aIsModified() // 1 // ??? - Несмотря на то что "111" == 111 в Cache', Cache' считает что мы изменили св-во (((((


Зачем вам нужно узнавать изменились ли хранимые данные? Какая логика на это завязана?
...
Рейтинг: 0 / 0
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
    #38315413
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov,

Узнавать изменились ли хранимые данные нужно чтобы решить - писать или нет историю их изменений.

Разница примерно в 200 000 "лишних" записей в сутки или даже больше - когда пишу "всамделишные" изменения, то их примерно 100 тысяч штук, а когда полагаясь на %IsModified() - то получается 300 тысяч и больше - это нерационально.

В итоге перебираю все свойства и сверяю все их значения со значениями в GetStored() - если хоть что-то поменялось, пишу.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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