View Issue Details

IDProjectCategoryView StatusLast Update
0003869SAS.ПланетаБаг / Bugpublic09-09-2023 18:18
Reporterfoydogumlu Assigned Tozed  
PriorityimmediateSeveritytweakReproducibilityalways
Status resolvedResolutionfixed 
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.

Activities

foydogumlu

03-09-2023 07:24

reporter   ~0020420

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.*

zed

03-09-2023 10:22

manager   ~0020421

Протестируйте этот билд: 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 работал на путях со спец символами и пробелами. Вроде бы там никаких дополнительных экранирований делать не нужно, но я не уверен.

zed

03-09-2023 10:24

manager   ~0020422

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

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

foydogumlu

03-09-2023 10:34

reporter   ~0020423

Last edited: 03-09-2023 10:46

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

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

foydogumlu

03-09-2023 10:44

reporter   ~0020424

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

Пробелы в пути - работает
Кириллица в пути - работает (в zmp указана была в utf8, удивлен что сработало на win7)
Символы + и % - работает

zed

03-09-2023 11:00

manager   ~0020425

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

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 => 41xxxx
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
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 => 41xxxx
03-09-2023 11:00 zed Resolution open => fixed
09-09-2023 18:14 zed Fixed in Version 41xxxx => 230909
09-09-2023 18:18 zed Target Version 41xxxx => 230909
08-08-2025 13:22 zed Category Баг => Баг / Bug