diff --git a/src/network/cache/SqliteCache.zig b/src/network/cache/SqliteCache.zig index e9667ee5f..86b4b6c0b 100644 --- a/src/network/cache/SqliteCache.zig +++ b/src/network/cache/SqliteCache.zig @@ -126,7 +126,7 @@ pub fn get(self: *SqliteCache, arena: std.mem.Allocator, req: CacheRequest) !?Ca const conn = try self.pool.acquire(); defer self.pool.release(conn); - try conn.begin(); + try conn.begin(.immediate); defer conn.rollback() catch {}; var entry = try conn.row( @@ -252,7 +252,7 @@ pub fn put(self: *SqliteCache, meta: CachedMetadata, body: []const u8) !void { const conn = try self.pool.acquire(); defer self.pool.release(conn); - try conn.begin(); + try conn.begin(.immediate); defer conn.rollback() catch {}; try conn.exec("delete from metadata where url = $1", .{meta.url}); @@ -327,7 +327,7 @@ pub fn renew(self: *SqliteCache, _: std.mem.Allocator, req: RenewResponse) !void const conn = try self.pool.acquire(); defer self.pool.release(conn); - try conn.begin(); + try conn.begin(.immediate); defer conn.rollback() catch {}; const exists = try conn.row("select 1 from metadata where url = $1", .{req.url}); diff --git a/src/storage/sqlite/Sqlite.zig b/src/storage/sqlite/Sqlite.zig index f520ce5bf..bb3c5bbb9 100644 --- a/src/storage/sqlite/Sqlite.zig +++ b/src/storage/sqlite/Sqlite.zig @@ -65,7 +65,7 @@ pub const Migrations = struct { return start; } - try conn.begin(); + try conn.begin(.immediate); errdefer conn.rollback() catch {}; for (migrations[start..], start..) |migration, i| { @@ -168,8 +168,13 @@ pub const Conn = struct { return .{ .stmt = stmt.?, .conn = self.conn }; } - pub fn begin(self: Conn) !void { - try self.exec("begin", .{}); + pub const BeginKind = enum { deferred, immediate, exclusive }; + pub fn begin(self: Conn, kind: BeginKind) !void { + switch (kind) { + .deferred => try self.exec("begin deferred", .{}), + .immediate => try self.exec("begin immediate", .{}), + .exclusive => try self.exec("begin exclusive", .{}), + } } pub fn commit(self: Conn) !void {