SASGIS - SAS.Планета
View Issue Details
0002809SAS.Планета[All Projects] Багpublic06-09-2015 16:1808-09-2015 15:26
Tolik 
zed 
normalmajoralways
resolvedfixed 
Windows7Ultimate
.Nightly 
150915150915 
0002809: Метки в SQLite3: не сохраняется выбор категорий при выходе
SAS.Planet.Nightly.150905.9015.7z
Метки в SQLite3.
После перезапуска САС всегда выбрана куча разных категорий, одна и та же куча, непонятно, почему именно эта.
См. скриншоты.
1. Использую метки в SML (26 МБ), выбираю одну категорию, делаю экспорт всей базы в файл test1.db3
2. Добавляю эту базу
3. Переключаюсь на неё - выбраны все метки
4. Выбираю одну категорию
5. После выхода и входа выбрано много категорий.
Если переключиться в SML и обратно в SQLite3 - выбраны те же самые категории, как на 5-м скриншоте.
No tags attached.
png 2015-09-06_190740.png (17,465) 06-09-2015 16:19
https://bugtracker.sasgis.org/file_download.php?file_id=1929&type=bug
png

png 2015-09-06_190827.png (7,861) 06-09-2015 16:20
https://bugtracker.sasgis.org/file_download.php?file_id=1930&type=bug
png

png 2015-09-06_190846.png (14,904) 06-09-2015 16:20
https://bugtracker.sasgis.org/file_download.php?file_id=1931&type=bug
png

png 2015-09-06_190857.png (17,315) 06-09-2015 16:20
https://bugtracker.sasgis.org/file_download.php?file_id=1932&type=bug
png

png 2015-09-06_190938.png (14,924) 06-09-2015 16:21
https://bugtracker.sasgis.org/file_download.php?file_id=1933&type=bug
png
Issue History
06-09-2015 16:18TolikNew Issue
06-09-2015 16:19TolikFile Added: 2015-09-06_190740.png
06-09-2015 16:20TolikFile Added: 2015-09-06_190827.png
06-09-2015 16:20TolikFile Added: 2015-09-06_190846.png
06-09-2015 16:20TolikFile Added: 2015-09-06_190857.png
06-09-2015 16:21TolikFile Added: 2015-09-06_190938.png
06-09-2015 16:23TolikAdditional Information Updatedbug_revision_view_page.php?rev_id=6692#r6692
06-09-2015 16:26TolikSteps to Reproduce Updatedbug_revision_view_page.php?rev_id=6694#r6694
06-09-2015 16:28TolikSummaryМетки в mysql: не сохраняется выбор категорий при выходе => Метки в SQLite3: не сохраняется выбор категорий при выходе
06-09-2015 16:28TolikDescription Updatedbug_revision_view_page.php?rev_id=6696#r6696
06-09-2015 16:28TolikAdditional Information Updatedbug_revision_view_page.php?rev_id=6697#r6697
06-09-2015 16:54PapazolNote Added: 0016416
06-09-2015 18:00zedNote Added: 0016417
06-09-2015 19:07TolikNote Added: 0016418
06-09-2015 19:08TolikNote Edited: 0016418bug_revision_view_page.php?bugnote_id=16418#r6699
06-09-2015 19:12TolikNote Edited: 0016418bug_revision_view_page.php?bugnote_id=16418#r6700
07-09-2015 06:50zedNote Added: 0016419
07-09-2015 06:57zedNote Added: 0016420
07-09-2015 07:37PapazolNote Added: 0016421
07-09-2015 07:44zedNote Added: 0016422
07-09-2015 08:17PapazolNote Added: 0016423
07-09-2015 08:21zedNote Added: 0016424
07-09-2015 08:23PapazolNote Edited: 0016423bug_revision_view_page.php?bugnote_id=16423#r6702
07-09-2015 08:24PapazolNote Added: 0016425
07-09-2015 08:30zedNote Added: 0016426
07-09-2015 08:42PapazolNote Added: 0016427
07-09-2015 13:13zedNote Added: 0016431
07-09-2015 14:20zedNote Added: 0016432
07-09-2015 14:29zedNote Edited: 0016432bug_revision_view_page.php?bugnote_id=16432#r6704
07-09-2015 15:02vdemidovTarget Version => 150915
07-09-2015 15:07vdemidovStatusnew => feedback
07-09-2015 16:56PapazolFile Added: SASPlanet.zip
07-09-2015 17:07PapazolNote Added: 0016433
07-09-2015 17:08PapazolFile Added: Логи.zip
07-09-2015 20:43zedNote Added: 0016434
07-09-2015 20:43zedAssigned To => zed
07-09-2015 20:43zedStatusfeedback => assigned
08-09-2015 15:04zedNote Added: 0016435
08-09-2015 15:04zedStatusassigned => feedback
08-09-2015 15:22TolikNote Added: 0016436
08-09-2015 15:22TolikStatusfeedback => assigned
08-09-2015 15:24TolikNote Added: 0016437
08-09-2015 15:25zedNote Added: 0016438
08-09-2015 15:25zedFile Deleted: SASPlanet.zip
08-09-2015 15:25zedFile Deleted: Логи.zip
08-09-2015 15:26zedStatusassigned => resolved
08-09-2015 15:26zedFixed in Version => 150915
08-09-2015 15:26zedResolutionopen => fixed

Notes
(0016416)
Papazol   
06-09-2015 16:54   
Подтверждаю. Выбор отображаемых меток программа делает сама по непонятному алгоритму.
(0016417)
zed   
06-09-2015 18:00   
Только при экспорте? Если базу создавать и заполнять вручную, проблем нет?
(0016418)
Tolik   
06-09-2015 19:07   
(edited on: 06-09-2015 19:12)
Ну, если добавить пару категорий, то нормально.
Если добавить пару десятков - не знаю.
Наверно, баг в экспорте.

(0016419)
zed   
07-09-2015 06:50   
Предлагаю сразу после экспорта, заглянуть в БД при помощи какой-нибудь внешней утилиты. Смотреть надо в таблицу CategoryView - там в колонке cvVisible будут булевые значения 0 - категория не видна, 1 - видна. Если категория в таблице отсутствует, то она видна по-умолчанию, т.е. пользователь ешё ни разу не изменял видимость этой категории вручную.

Соответственно, после импорта, эта таблица должна быть пустой. После отключения видимости у всех категорий, таблица заполнится категориями и в колонке cvVisible будет 0. Если какую-то категорию сделать видимой, там станет 1.

Если в БД всё именно так, значит проблема где-то в кэшировании на стороне SAS.

P.S. Таблицу CategoryView или её содержимое можно смело удалять вручную - она будет создана автоматически при новом запуске SAS.
(0016420)
zed   
07-09-2015 06:57   
Я выполняю все шаги описанные в "Шаги по воспроизведению" и у меня не воспроизводится. Может быть есть какая-то зависимость от количества категорий в корневой категории?
(0016421)
Papazol   
07-09-2015 07:37   
Для ускорения процесса хорошо бы ссылку на внешнюю утилиту.
(0016422)
zed   
07-09-2015 07:44   
SQLiteStudio
(0016423)
Papazol   
07-09-2015 08:17   
(edited on: 07-09-2015 08:23)
Ну в общем, так. Открыв БД сразу после экспорта, видим у всех категорий cvVisible=1. Потом в SASPlanet'е убираем/ставим галки на нужных категориях (я оставил видимыми две). Закрываем SASPlanet'у. Studio показывает, что у всех категорий cvVisible=0, а у двух (они в таблице последние) - 1. К сожалению, непонятно, какие именно категории имеют 1. Затем открываем SASPlanet'у. Вылезают кучи меток, которые не были отмечены галками. Если бы программа считывала видимость меток из БД, то показывала бы те две, у которых 1.

Непонятно, почему в таблице Category содержится (в моём случае) 35 категорий (они полностью соответствуют исходному списку из sml), а в таблице CategoryView только 20.

(0016424)
zed   
07-09-2015 08:21   
>Открыв БД сразу после экспорта, видим у всех категорий cvVisible=1
Странно, у меня таблица сразу после экспорта пустая.

>К сожалению, непонятно, какие именно категории имеют 1.
В колонке cvCategory записаны id категорий, по которым их можно найти в таблице Category.

>Если бы программа считывала видимость меток из БД, то показывала бы те две, у которых 1.
Ок, надо смотреть. Плохо, что оно ещё и не всегда воспроизводится.
(0016425)
Papazol   
07-09-2015 08:24   
Количество категорий в двух таблицах разное...
(0016426)
zed   
07-09-2015 08:30   
В CategoryView содержатся записи только для тех категорий, которым вручную была изменена видимость. Как я уже писал, если категории в этой таблице нету, то она видима по дефолту. И теперь становится вдвойне непонятно: выходит что при экспорте некоторые категории таки попадают в эту таблицу, хотя не должны.

После экспорта все категории должны быть видимы, поскольку видимость категории (и метки) завязана на конкретного пользователя. А при импорте из sml никакой информации о юзере не передаётся, потому и устанавлявается видимость всех меток/категорий вне зависимости от того в каком они были состоянии в исходном sml.
(0016427)
Papazol   
07-09-2015 08:42   
> выходит что при экспорте некоторые категории таки попадают в эту таблицу, хотя не должны

Это не так, потому что при экспорте я выбирал "Экспорт всех меток и категорий". Все они и экспортировались.
Разве установка/снятие галки "Все" не приводит к изменению видимости вручную? Изначально видимы действительно все, но если пару раз ткнуть "Все", галки со всех снимаются, следовательно, происходит изменение состояния для всех, и это должно записываться в БД.
(0016431)
zed   
07-09-2015 13:13   
>Это не так
Что-то я не понял. Вы же написали: "Открыв БД сразу после экспорта, видим у всех категорий cvVisible=1".
(0016432)
zed   
07-09-2015 14:20   
(edited on: 07-09-2015 14:29)
Ок, Tolik, Papazol воспроизведите баг на своей стороне вот на этом exe: https://yadi.sk/d/dwwQyaxsivVVB и пришлите мне все логи (появятся текстовые файлы в корне с программой).

(0016433)
Papazol   
07-09-2015 17:07   
У меня получилось два лога. Они в архиве.

Насчёт "Это не так". Действительно, если при экспорте выбрать все метки (независимо от видимости), то не должно быть таких, которые экспортировались, хотя не должны были. Все были должны. И, если исходить из обозначенной логики процесса, в данном случае всё происходит правильно. Неправильно начинает быть потом, когда мы вручную пытаемся установить видимость нужных нам меток.

PS Два лога - это не всё. Получил ещё третий. Первый - сразу после экспорта БД. Программу закрыл, затем снова открыл. Подключил БД SQLite. Все метки отмечены как видимые (это правильно). Убрал галки со всех и установил на две, которые нужны. Программу закрыл. Появился второй лог. Снова открыл программу. В списке меток отмечено не две, а значительно больше (но не все). Закрыл программу. Появился третий лог. Логи в архиве Логи.zip.
(0016434)
zed   
07-09-2015 20:43   
Да, логи помогли - нашёл баг в методе TMarkCategoryDbImplORMHelper.SetAllCategoriesVisibleSQL. Завтра исправлю.
(0016435)
zed   
08-09-2015 15:04   
Тестируйте: https://yadi.sk/d/a6nRjIlhiww6p
(0016436)
Tolik   
08-09-2015 15:22   
Проблема решена, спасибо.
(0016437)
Tolik   
08-09-2015 15:24   
Также ушла проблема, что после перезапуска нет ни одной базы.
(0016438)
zed   
08-09-2015 15:25   
>Также ушла проблема, что после перезапуска нет ни одной базы.
Не трогал, так что она скорее всего спряталась, а не ушла :)