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

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

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

Но это-ж в одном %Save() и вроде бы %IsModified() должен возвращать ноль в описанных Вами случаях?
...
Рейтинг: 0 / 0
29.06.2013, 17:28
    #38314774
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
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
29.06.2013, 18:59
    #38314801
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
kolesovБлок А.Н.,
Но это-ж в одном %Save() и вроде бы %IsModified() должен возвращать ноль в описанных Вами случаях?
Сейчас посмотрел классы, %IsModified относиться к %LIbrary.RegistededObject. У которого еще никакого хранения нет. Так что вряд ли оно связано с тем, что хранится.
...
Рейтинг: 0 / 0
30.06.2013, 04:25
    #38314959
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
Блок А.Н.,

Спасибо, но как-то печально не иметь возможности быстро узнать, изменены ли хранимые данные - я в итоге вписал перебор свойств и их сравнение - поштучно. Но глаза-б мои на это не смотрели ;)
...
Рейтинг: 0 / 0
01.07.2013, 04:00
    #38315307
sigmov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
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
01.07.2013, 09:49
    #38315413
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот: ..%IsModified() = 1, но ни одно свойство не поменялось - как такое может быть???
sigmov,

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

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

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


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