Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Продолжаем разговор про ИТЗ (число прочтений - 6809 )
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Продолжаем разговор про ИТЗ
05. Марта 2008 :: 16:34
Печать  
Мне всё труднее и труднее отлавливать новые баги Улыбка, для поимки этого потратил целый вечер Печаль

в общем просьба потестить



Тест
  

IndexTable6.ert ( 7 KB | Загрузки )
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Продолжаем разговор про ИТЗ
Ответ #1 - 05. Марта 2008 :: 21:21
Печать  
Nick

Браво.
Блин, теперь я понимаю, как нам тебя не хватало.

ADirks

http://www.1cpp.ru/bugs/show_bug.cgi?id=3609
Леша, тема серьезная, я даже присвоил статус major.

Если честно, пока не представляю, как должно выглядеть решение.
Не копировать же ключевую строку в node...
Видимо, в методе Заполнить() стоит удалять из дерева непосредственно ДО изменения значений колонок - по всем индексам, кроме индекса, по которому идет выборка.

Как ты думаешь, такая фигня только в Заполнить() присутствует, больше нигде нет?
  

IndexTable6_lite.ert ( 7 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Продолжаем разговор про ИТЗ
Ответ #2 - 06. Марта 2008 :: 00:03
Печать  
+
Скорее всего, можно пойти по следующей условной схеме:

В теле цикла:
1. модификация значения: pIterator->CurrentRow()->SetValue
2. отражение изменения по всем индексам, кроме pIndex: Indexes.OnChangeValue(i, nDestCol, pIndex)

для этого потребуется перегруженный вариант OnChangeValue, с пропуском pIndex

После окончания:
3. отражение изменения по pIndex.

В принципе, п. 3 не нужен, ибо приведет к тем же самым проблемам
Лучше явно задокументировать, что индекс, по которому идет заполнение, модифицироваться не должен.
И выбрасывать исключение при попытке его модифицировать (изменить зависимые колонки).

Если так сделать, то и перегруженный вариант Indexes.OnChangeValue не нужен.

P.S.
Не уверен, что мне удалось все 100% понятно объяснить.
Но я старался Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #3 - 06. Марта 2008 :: 03:06
Печать  
Цитата:
Лучше явно задокументировать, что индекс, по которому идет заполнение, модифицироваться не должен.
И выбрасывать исключение при попытке его модифицировать (изменить зависимые колонки).


Мне такой вариант решения не нравится, я специально использую ИТЗ чтоб быстро находить те значения которые нужно изменить, а если при этом их нельзя менять то мы возвращаемся к полному перебору строк Печаль
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #4 - 06. Марта 2008 :: 03:13
Печать  
Цитата:
В теле цикла:
1. модификация значения: pIterator->CurrentRow()->SetValue
2. отражение изменения по всем индексам, кроме pIndex: Indexes.OnChangeValue(i, nDestCol, pIndex)

для этого потребуется перегруженный вариант OnChangeValue, с пропуском pIndex

После окончания:
3. отражение изменения по pIndex.


А нельзя вообще перестройку всех индексов выполнять уже после заполнения?

Цитата:
В принципе, п. 3 не нужен, ибо приведет к тем же самым проблемам


Почему?
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #5 - 06. Марта 2008 :: 09:30
Печать  
Так какой будит вердикт? Или хоть какие то сроки обрисуйте там завтра, через неделю .... никогда?
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Продолжаем разговор про ИТЗ
Ответ #6 - 06. Марта 2008 :: 09:40
Печать  
Nick писал(а) 06. Марта 2008 :: 09:30:
Так какой будит вердикт? Или хоть какие то сроки обрисуйте там завтра, через неделю .... никогда?

Я думаю, что я понимаю, как решить проблему.
Видишь, я даже проснулся в 3 утра, чтобы предложить решение.

Вопрос нетривиальный, я просто так браво кричать не буду.
Нужно время, чтобы Леша принял решение.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #7 - 06. Марта 2008 :: 09:57
Печать  
Кокое решение...  Я даже не разобрался пока толком. Вечером разбираться буду, или уже код выкладывай  Улыбка
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #8 - 06. Марта 2008 :: 10:04
Печать  
Цитата:
Я думаю, что я понимаю, как решить проблему.
Видишь, я даже проснулся в 3 утра, чтобы предложить решение.

Вопрос нетривиальный, я просто так браво кричать не буду.
Нужно время, чтобы Леша принял решение.


Понятно, просто у меня тут проект в котором весь движок завязан на ИТЗ Печаль. Хотя может конечно можно было решить как то по другому. К стати никто не пробовал SQLite к ТП прикручивать?
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Продолжаем разговор про ИТЗ
Ответ #9 - 06. Марта 2008 :: 10:11
Печать  
ADirks писал(а) 06. Марта 2008 :: 09:57:
Кокое решение...  Я даже не разобрался пока толком. Вечером разбираться буду, или уже код выкладывай  Улыбка

Примерно так.

Самое главное - начни издалека, надо продумать логически, нет ли такой батвы где-то еще.
Я смотрел джойны - там чистый reindex, проблемы быть не должно.

Проблема интересная, поэтому лучше подольше поразбираться, чтобы понять, в чем дело.

P.S.
В моем варианте надо еще добавить проверку на зависимость индекса выборки от модифицируемой колонки - с выдачей исключения.
  

vtext_fillcolumn.txt ( 2 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Продолжаем разговор про ИТЗ
Ответ #10 - 06. Марта 2008 :: 10:15
Печать  
Nick писал(а) 06. Марта 2008 :: 10:04:
Цитата:
Я думаю, что я понимаю, как решить проблему.
Видишь, я даже проснулся в 3 утра, чтобы предложить решение.

Вопрос нетривиальный, я просто так браво кричать не буду.
Нужно время, чтобы Леша принял решение.


Понятно, просто у меня тут проект в котором весь движок завязан на ИТЗ Печаль. Хотя может конечно можно было решить как то по другому. К стати никто не пробовал SQLite к ТП прикручивать?

Гы.
Я б тебе посоветовал на коммерческую версию подписаться, да нету такой Очень довольный

P.S.
Подожди чутка, все будет ок.
Просто НЕ ИСПОЛЬЗУЙ пока "ЗаполнитьКолонку" по колонкам, которые участвуют в каких-либо индексах.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #11 - 06. Марта 2008 :: 10:23
Печать  
Цитата:
Подожди чутка, все будет ок.
Просто НЕ ИСПОЛЬЗУЙ пока "ЗаполнитьКолонку" по колонкам, которые участвуют в каких-то индексах.


У меня все колонки участвуют в индексах Печаль. И их всего пять (колонок)
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Продолжаем разговор про ИТЗ
Ответ #12 - 06. Марта 2008 :: 10:26
Печать  
Nick

Поясни-ка мне вот это свое утверждение

Nick писал(а) 06. Марта 2008 :: 03:06:
Цитата:
Лучше явно задокументировать, что индекс, по которому идет заполнение, модифицироваться не должен.
И выбрасывать исключение при попытке его модифицировать (изменить зависимые колонки).


Мне такой вариант решения не нравится, я специально использую ИТЗ чтоб быстро находить те значения которые нужно изменить, а если при этом их нельзя менять то мы возвращаемся к полному перебору строк Печаль

Т.е. ты делаешь что-то типа "ЗаполнитьКолонку("Ид2", "Ид2", 100);" что ли?
Т.е. заполняешь колонку, по которой у тебя идет выборка?

Или нет?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #13 - 06. Марта 2008 :: 10:30
Печать  
Цитата:
Т.е. ты делаешь что-то типа "ЗаполнитьКолонку("Ид2", "Ид2", 100);" что ли?
Т.е. заполняешь колонку, по которой у тебя идет выборка?


Да, я конечно подозреваю что это несколько не правильно, но что мишает сначала заполнить по старому индексу, а потом его перестороить?
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Продолжаем разговор про ИТЗ
Ответ #14 - 06. Марта 2008 :: 10:33
Печать  
Например для SQL совершенно нормально писать так:

Update MyTab Set k = 1 where k = 2
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать