diff --git a/src/driver/sqlite/SqliteConnectionOptions.ts b/src/driver/sqlite/SqliteConnectionOptions.ts index 2abd621053f..8e092b9c697 100644 --- a/src/driver/sqlite/SqliteConnectionOptions.ts +++ b/src/driver/sqlite/SqliteConnectionOptions.ts @@ -26,9 +26,18 @@ export interface SqliteConnectionOptions extends BaseConnectionOptions { * Since SQLite cannot handle parallel saves this error cannot be avoided. * * To simplify life's of those who have this error this particular option sets a timeout within which ORM will try - * to perform requested write operation again and again until it recieves SQLITE_BUSY error. + * to perform requested write operation again and again until it receives SQLITE_BUSY error. * + * Enabling WAL can improve your app performance and face less SQLITE_BUSY issues. * Time in milliseconds. */ readonly busyErrorRetry?: number; + + /** + * Enables WAL mode. By default its disabled. + * + * @see https://www.sqlite.org/wal.html + */ + readonly enableWAL?: boolean; + } diff --git a/src/driver/sqlite/SqliteQueryRunner.ts b/src/driver/sqlite/SqliteQueryRunner.ts index d1ac916d7d6..1658c20186b 100644 --- a/src/driver/sqlite/SqliteQueryRunner.ts +++ b/src/driver/sqlite/SqliteQueryRunner.ts @@ -4,6 +4,7 @@ import {AbstractSqliteQueryRunner} from "../sqlite-abstract/AbstractSqliteQueryR import {SqliteConnectionOptions} from "./SqliteConnectionOptions"; import {SqliteDriver} from "./SqliteDriver"; import {Broadcaster} from "../../subscriber/Broadcaster"; +import {IsolationLevel} from "../types/IsolationLevel"; /** * Runs queries on a single sqlite database connection. @@ -83,4 +84,12 @@ export class SqliteQueryRunner extends AbstractSqliteQueryRunner { await execute(); }); } -} \ No newline at end of file + + async startTransaction(isolationLevel?: IsolationLevel): Promise { + if ((this.connection.options as SqliteConnectionOptions).enableWAL === true) { + await this.query("PRAGMA journal_mode = WAL"); + } + + return super.startTransaction(isolationLevel); + } +}