Add configurable SQLite journal modes to SQLiteConfiguration
#114
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
SQLite journal mode has an impact on performance, concurrency, and durability characteristics. Exposing this as a configuration option allows users to:
PRAGMAsetupModifications
SQLiteConfiguration.JournalModeenum covering all supported SQLite journal modes:DELETE: Delete journal mode (SQLite default). Journal file is deleted after each transaction.WAL: WAL (Write-Ahead Logging) mode. Provides better concurrency and performance.TRUNCATE: Truncate journal mode. Journal file is truncated to zero length instead of deleted.PERSIST: Persist journal mode. Journal file is left on disk but header is overwritten.MEMORY: Memory journal mode. Journal is stored in memory.OFF: No journal mode. No rollback capability (dangerous).journalModeproperty toSQLiteConfigurationwith a default of.deleteduring the initialization, preserving existing behavior.Additionally, tests have been added to verify that each supported journal mode is correctly applied and that the journal mode configuration works alongside foreign key enforcement.
This change is fully backward-compatible and opt-in.
Future directions
SQLite has an experimental
wal2journal mode under active development. With the introduction of theJournalModeenum, supportingwal2in the future would be a straightforward, non-breaking extension once it becomes stable and widely available.