Anonymous | Login | Signup for a new account | 21-11-24 13:15 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0003435 | SAS.Планета | [All Projects] Баг | public | 16-04-2019 14:33 | 14-06-2019 13:04 | ||||
Reporter | RedRat | ||||||||
Assigned To | zed | ||||||||
Priority | urgent | Severity | major | Reproducibility | always | ||||
Status | resolved | Resolution | fixed | ||||||
Platform | Windows | OS | 8.1 | OS Version | x64 | ||||
Product Version | 181221 | ||||||||
Target Version | 190707 | Fixed in Version | 190707 | ||||||
Summary | 0003435: Удаление всех вложенных категорий при удалении одной из одноимённых родительских категорий | ||||||||
Description | Структура категорий основана исключительно на их именах, поэтому если у нас есть две родительские категории с одинаковыми именами, то при удалении любой из них будут удалены все дочерние категории независимо от того как они отображаются в деерве категорий. Программа об этом честно предупреждает, но все равно это опасное поведение. | ||||||||
Steps To Reproduce | 1. Создаем две категории с одинаковыми именами Cat1 2. Создаем метку с категорией с названием Cat1\Cat2 - такая категория будет созадана автоматически. 3. В дереве меток дочерняя категория отображается как дочерняя для одной из созданных категорий Cat1 4. Удаляем одну из категорий Cat1, у которой не отображаетсядочерних категорий. 5. Программа предупреждает, что будет удалена дочерняя категория и удаляет категорию Cat1\Cat2 вместе с вложенной меткой. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | Test.db3 [^] (73,728 bytes) 16-04-2019 14:33 CategoryTest.sml [^] (751 bytes) 20-04-2019 13:47 Test.sml [^] (2,149 bytes) 20-04-2019 13:47 | ||||||||
Notes | |
(0018674) RedRat (reporter) 20-04-2019 13:37 edited on: 20-04-2019 13:45 |
Пара уточнений: 1. При переносе любой категории на уровень с одноимённой, подкатегории из последней попадают в переносимую, а точки остаются на месте. 2. Данный баг стабильно повторяется как на SQLite, так и на SML базах данных. По всей видимости, проблема заключается в том, что в БД все подкатегории связаны с родительскими категориями только параметром пути, а не ссылкой на индекс родителя, поэтому при наличии двух или более одноимённых категорий программа просто не знает, какие подкатегории куда совать. Ошибка дизайна БД? |
(0018675) RedRat (reporter) 20-04-2019 13:51 |
Для быстрой демонстрации бага сделал маленькую базу в SML и приложил её к этому репорту. Достаточно открыть её и переименовать категорию Cat3 в Cat1 - всё сами увидите. До полноценного решения этой проблемы предлагаю в ночных сборках пока запретить создание одноимённых категорий, чтобы избежать непредвиденной потери данных. |
(0018676) zed (manager) 20-04-2019 14:10 |
В SML так было by design, а SQLite и прочие унаследовали поведение. Поэтому, запрет создания одноимённых категорий - по-моему единственный способ решения этого бага. |
(0018684) RedRat (reporter) 22-04-2019 11:18 |
Либо, как вариант, при появлении одноимённых категорий на одном уровне объединять их в одну с переносом всех точек и подкатегорий. |
(0018716) vdemidov (manager) 29-05-2019 08:33 |
Предлагаю фикс попроще. При удалении категории, проверять есть ли с еще категории с таким же именем. И если есть, то просто не запускать удаления дочерних категорий. |
(0018726) zed (manager) 04-06-2019 07:14 |
А может добавить в интерфейс поле NameInternal, сделать его уникальным (Name + ID) и использовать его, а для гуя оставить Name? Придётся залезть в реализацию SML и ORM (без изменения схемы), зато должно получиться надёжно. Кроме того, в интерфейсе меток/категорий метод GetByName надо переделать так, чтобы он возвращал список. GetMarkByName по сути используется только в одном месте, при импорте меток, когда установлен флаг не импортировать, если метка с таким именем существует. И результат функции вообще не используется, а только проверяется на nil. А вот GetCategoryByName - сплошь и всюду. |
(0018727) zed (manager) 04-06-2019 07:25 |
А, нет. Надо менять схему и добавлять ParentID. |
(0018730) zed (manager) 04-06-2019 07:53 |
Значит, буду делать так: Методы GetXXXByName переименую в GetFirstXXXByName, поскольку списки одноимённых меток/категорий нам пока нигде не нужны, но имя метода будет явно говорить, что могут быть и Next. Добавлю методы GetXXXByNameCount - который будет возвращать число одноимённых меток, чтобы где надо, можно было просто проверить есть/нету или есть ли дубликаты. В гуе сделаю запрет на создание (в том числе и методом переименования) одноимённых категорий и сделаю запрет удаления категории, если есть одноимённая. Для удаления такой категории, её надо будет сперва переименовать. |
(0018731) vdemidov (manager) 04-06-2019 08:16 |
> В гуе сделаю запрет на создание (в том числе и методом переименования) одноимённых категорий и сделаю запрет удаления категории, если есть одноимённая. Для удаления такой категории, её надо будет сперва переименовать. Старые базы все еще будут жить с дублирующимися метками. Но хозяин - барин. |
(0018732) zed (manager) 04-06-2019 08:27 |
Одинаковые имена - не проблема БД, ведь если изменять схему, то имена так и останутся одинаковыми. По хорошему, да, схему надо менять, но это слишком калечащее изменение для поддержки не очень частого случая. |
(0018733) zed (manager) 04-06-2019 12:31 |
Сделал, тестируйте следующую ночную версию. |
Users who viewed this issue | |
User List | Anonymous (2000x), RedRat (18x), vdemidov (27x), zed (22x), ingener (4x), Tolik (2x), centron (1x), rass (3x) |
Total Views | 2077 |
Last View | 21-11-2024 13:15 |
Issue History | |||
Date Modified | Username | Field | Change |
16-04-2019 14:33 | RedRat | New Issue | |
16-04-2019 14:33 | RedRat | File Added: Test.db3 | |
20-04-2019 13:37 | RedRat | Note Added: 0018674 | |
20-04-2019 13:45 | RedRat | Note Edited: 0018674 | View Revisions |
20-04-2019 13:47 | RedRat | File Added: CategoryTest.sml | |
20-04-2019 13:47 | RedRat | File Added: Test.sml | |
20-04-2019 13:51 | RedRat | Note Added: 0018675 | |
20-04-2019 14:10 | zed | Note Added: 0018676 | |
22-04-2019 11:18 | RedRat | Note Added: 0018684 | |
29-05-2019 08:30 | vdemidov | Severity | crash => major |
29-05-2019 08:30 | vdemidov | Status | new => confirmed |
29-05-2019 08:30 | vdemidov | Product Version | .Nightly => 181221 |
29-05-2019 08:30 | vdemidov | Target Version | => 190707 |
29-05-2019 08:30 | vdemidov | Summary | Самопроизвольное удаление точек при удалении одноимённых категорий => Удаление всех вложенных категорий при удалении одной из одноимённых родительских категорий |
29-05-2019 08:30 | vdemidov | Description Updated | View Revisions |
29-05-2019 08:30 | vdemidov | Steps to Reproduce Updated | View Revisions |
29-05-2019 08:33 | vdemidov | Note Added: 0018716 | |
04-06-2019 07:14 | zed | Note Added: 0018726 | |
04-06-2019 07:25 | zed | Note Added: 0018727 | |
04-06-2019 07:53 | zed | Note Added: 0018730 | |
04-06-2019 08:16 | vdemidov | Note Added: 0018731 | |
04-06-2019 08:27 | zed | Note Added: 0018732 | |
04-06-2019 09:52 | zed | Assigned To | => zed |
04-06-2019 09:52 | zed | Status | confirmed => assigned |
04-06-2019 12:31 | zed | Note Added: 0018733 | |
04-06-2019 12:31 | zed | Status | assigned => feedback |
11-06-2019 11:38 | zed | Relationship added | related to 0003454 |
14-06-2019 13:03 | zed | Status | feedback => resolved |
14-06-2019 13:03 | zed | Fixed in Version | => 190707 |
14-06-2019 13:03 | zed | Resolution | open => fixed |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |