Skip to content

Transactions

ACID transactions with commit, rollback, auto commit (update), and auto rollback (view).

TIP

Use view() for read only transactions that automatically rollback, and update() for write transactions that automatically commit.

zig
const std = @import("std");
const zkv = @import("zkv");

pub fn main() !void {
    var da: std.heap.DebugAllocator(.{}) = .init;
    defer _ = da.deinit();
    const allocator = da.allocator();

    var db = try zkv.Database.open(allocator, .{
        .path = "examples/transactions.zkv",
    });
    defer db.close();

    const users = db.collection("users");
    try users.set("1:name", "Alice");
    try users.set("1:balance", "1000");
    try users.set("2:name", "Bob");
    try users.set("2:balance", "500");

    // Commit: atomic transfer
    var txn = try db.transaction();
    try txn.put("users:1:balance", "900");
    try txn.put("users:2:balance", "600");
    try db.commitTransaction(&txn);

    // Rollback: discard changes
    var txn2 = try db.transaction();
    try txn2.put("users:1:balance", "0");
    try db.rollbackTransaction(&txn2);

    // view(): auto-rollback read
    // update(): auto-commit write
}

Released under the MIT License.