Fix read-only open semantics, Studio prompt localization, and multi-process config docs#125
Conversation
|
@copilot review |
Reviewed the latest PR state. CI run status was checked, targeted tests/builds passed locally for the touched areas, and I did not find additional changes needed at this time. |
There was a problem hiding this comment.
Pull request overview
This PR tightens BLite’s read-only semantics end-to-end (core storage + Studio) to avoid unintended read/write file opens that can trigger lock/permission failures, while also cleaning up Studio UI prompts and correcting multi-process configuration docs. It also adds focused regression tests around multi-process reader/writer coexistence and read-only “no-create” behavior.
Changes:
- Core:
PageFile.Open()now derivesFileMode/FileAccessfromPageFileConfig.Access(read-only opens existing files read-only). - Studio: propagates selected access mode during open (including encrypted path) and standardizes UI strings to English.
- Tests/Docs: adds regression coverage for read-only + multi-process scenarios and updates READMEs to use
AllowMultiProcessAccess.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/BLite.Studio/Views/MainWindow.axaml.cs | Updates file picker title/labels and removes hardcoded Italian UI text. |
| tools/BLite.Studio/ViewModels/MainWindowViewModel.cs | Threads selected read-only vs read/write access into open configuration and standardizes error prefix. |
| tests/BLite.Tests/MultiProcessAccessConfigTests.cs | Adds regression tests for read-only reader alongside writer and for read-only open not creating missing files. |
| src/BLite.Core/Storage/PageFile.cs | Makes file open mode/access honor PageFileConfig.Access to support true read-only opens. |
| README.md | Fixes documentation to reference AllowMultiProcessAccess. |
| README-5.0.0-preview.0.md | Fixes documentation to reference AllowMultiProcessAccess. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| var access = IsReadOnly | ||
| ? MemoryMappedFileAccess.Read | ||
| : MemoryMappedFileAccess.ReadWrite; | ||
| var crypto = new CryptoOptions(EncryptionPassphrase); | ||
| var baseConfig = new PageFileConfig { AllowMultiProcessAccess = true }; | ||
| var baseConfig = new PageFileConfig { AllowMultiProcessAccess = true, Access = access }; | ||
| _engine = new BLiteEngine(path, crypto, baseConfig: baseConfig); | ||
| _openedConfig = PageFileConfig.Default with { AllowMultiProcessAccess = true }; | ||
| _openedConfig = PageFileConfig.Default with { AllowMultiProcessAccess = true, Access = access }; |
| var fileExists = File.Exists(_filePath); | ||
|
|
||
| var isReadOnlyAccess = _config.Access == MemoryMappedFileAccess.Read; | ||
| var fileMode = isReadOnlyAccess ? FileMode.Open : FileMode.OpenOrCreate; | ||
| var fileAccess = isReadOnlyAccess ? FileAccess.Read : FileAccess.ReadWrite; | ||
|
|
Opening a DB in read-only mode could still fail with file lock/denied errors because the storage layer opened files as read-write/create regardless of requested access. In parallel, Studio shipped with hardcoded Italian UI strings, and docs referenced a stale multi-process flag name.
Storage: honor read-only access at file-open time
PageFile.Open()now derivesFileMode/FileAccessfromPageFileConfig.Access.MemoryMappedFileAccess.Readopens existing files as read-only (FileMode.Open,FileAccess.Read) instead ofOpenOrCreate + ReadWrite.Studio: align runtime open behavior with selected access mode
Access = Readwhen “Read only” is selected.Studio UI text: remove hardcoded Italian prompts
Open BLite database,All files).Errore:toError:.Docs: correct multi-process flag name
EnableMultiProcessAccesstoAllowMultiProcessAccessin current and preview READMEs.Focused regression coverage
PageFileopen does not create missing DB files.