SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0003869SAS.Планета[All Projects] Багpublic03-09-2023 07:1809-09-2023 18:18
Reporterfoydogumlu 
Assigned Tozed 
PriorityimmediateSeveritytweakReproducibilityalways
StatusresolvedResolutionfixed 
PlatformWindowsOS7OS VersionUltimate
Product Version220707 
Target Version230909Fixed in Version230909 
Summary0003869: Неправильные права при открытии sqlite базы
DescriptionНе смотря на строчку IsReadOnly=1, база все равно открывается в режиме для записи
Steps To ReproduceСделать zmp-карту с флажком IsReadOnly=1 и желательно какой-то другой версией sqlite

Открыть карту в программе и убедиться, что рядом появились временные файлы:
*-shm
*-wal
Закрыть программу и убедиться, что эти файлы пропали.

Если на файловой системе поставить флажок Read Only (аттрибут файла), то в файле sasplanet\cache_sqlite\<title>\sqlite.log появляется запись:

2023-09-03 10:55:35.657 (init) 3.39.4 at c:\sasplanet\sqlite3.dll
2023-09-03 10:55:35.657 (init) attempt to write a readonly database ( error code: 8)

Временные файлы при этом не появляются, а сама карта не отображается.
Additional Informationsqlite надо сказать, что база не просто readonly, но и immutable

Нужно это для того, чтобы выложить на торренты большой кеш, но чтобы пользователям не приходилось держать по 2 копии файлов (одна для использования, вторая для продолжения раздачи на торрентах).

Если сделать md5sum файла для открытия и после, то будут изменены несколько байт. В моем случае это:
18 1 File format write version. 1 for legacy; 2 for WAL.
19 1 File format read version. 1 for legacy; 2 for WAL.
36 4 Total number of freelist pages.
92 4 The version-valid-for number.
96 4 SQLITE_VERSION_NUMBER

Увы, но это не позволяет нормально мне оформить раздачу, так как файлы постоянно меняются, а гонять туда-сюда сотни гигабайт крайне затратно.
TagsNo tags attached.
Attached Files

- Relationships

-  Notes
(0020420)
foydogumlu (reporter)
03-09-2023 07:24

immutable: The immutable parameter is a boolean query parameter that indicates that the database file is stored on read-only media. When immutable is set, SQLite assumes that the database file cannot be changed, even by a process with higher privilege, and so the database is opened read-only and all locking and change detection is disabled. Caution: Setting the immutable property on a database file that does in fact change can result in incorrect query results and/or SQLITE_CORRUPT errors. See also: **SQLITE_IOCAP_IMMUTABLE**.

*The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN flag indicates that a file cannot be deleted when open. The SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on read-only media and cannot be changed even by processes with elevated privileges.*
(0020421)
zed (manager)
03-09-2023 10:22

Протестируйте этот билд: https://cloud.mail.ru/public/HXEi/YSjwzPNeG

Сделал RO режим вот таким образом:
 
VOpenFlags := SQLITE_OPEN_READONLY or SQLITE_OPEN_URI;
FSQLite3DbHandler.Open('file:///' + FDBFilename + '?immutable=1', VOpenFlags, True);

нужно проверить, чтобы uri работал на путях со спец символами и пробелами. Вроде бы там никаких дополнительных экранирований делать не нужно, но я не уверен.
(0020422)
zed (manager)
03-09-2023 10:24

> Сделать zmp-карту с флажком IsReadOnly=1 и желательно какой-то другой версией sqlite

Про версию sqlite не понял. Последний релиз поставлялся с 3.38.3 - с ней что-то не так?
(0020423)
foydogumlu (reporter)
03-09-2023 10:34
edited on: 03-09-2023 10:46

> Про версию sqlite не понял. Последний релиз поставлялся с 3.38.3 - с ней что-то не так?

С ней все так, просто скорее всего в будущем версии будут меняться и следовательно новые версии будут патчить sqlitedb-файлы, что не есть хорошо. У меня это вылезло от того, что я вообще кеш делаю своим софтом и таким образом sqlitedb-файлы были незамедлительно пропатчены при первом открытии Sas.Планетой из-за несовпадающей версии библиотеки.

(0020424)
foydogumlu (reporter)
03-09-2023 10:44

> чтобы uri работал на путях со спец символами и пробелами

Пробелы в пути - работает
Кириллица в пути - работает (в zmp указана была в utf8, удивлен что сработало на win7)
Символы + и % - работает
(0020425)
zed (manager)
03-09-2023 11:00

Ок, будем считать, что всё работает как надо. Изменения ушли в ночную сборку.

- Users who viewed this issue
User List Anonymous (333x), foydogumlu (23x), zed (13x)
Total Views 369
Last View 27-04-2024 12:08

- Issue History
Date Modified Username Field Change
03-09-2023 07:18 foydogumlu New Issue
03-09-2023 07:24 foydogumlu Note Added: 0020420
03-09-2023 10:22 zed Note Added: 0020421
03-09-2023 10:24 zed Note Added: 0020422
03-09-2023 10:25 zed Product Version .Nightly => 220707
03-09-2023 10:25 zed Assigned To => zed
03-09-2023 10:25 zed Status new => feedback
03-09-2023 10:25 zed Target Version => 24xxxx
03-09-2023 10:34 foydogumlu Note Added: 0020423
03-09-2023 10:34 foydogumlu Status feedback => assigned
03-09-2023 10:44 foydogumlu Note Added: 0020424
03-09-2023 10:46 foydogumlu Note Edited: 0020423 View Revisions
03-09-2023 11:00 zed Note Added: 0020425
03-09-2023 11:00 zed Status assigned => resolved
03-09-2023 11:00 zed Fixed in Version => 24xxxx
03-09-2023 11:00 zed Resolution open => fixed
09-09-2023 18:14 zed Fixed in Version 24xxxx => 230909
09-09-2023 18:18 zed Target Version 24xxxx => 230909



Copyright © 2007 - 2024 SAS.Planet Team