Skip to content

Transactions

Use transactions to group multiple operations with BEGIN, COMMIT, and ROLLBACK.

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

const Ledger = sqlite.table("ledger", struct { id: i64, amount: i64 });

pub fn main() !void {
    var db = try sqlite.open(std.heap.page_allocator, "valid_03.db");
    defer db.close();
    try db.createTable(Ledger, .{ .if_not_exists = true });
    try db.truncate(Ledger);
    try db.begin();
    var rolled_back_insert = try db.from(Ledger).insert(.{ .id = 1, .amount = 100 });
    rolled_back_insert.deinit();
    try db.rollback();
    try db.begin();
    var committed_insert = try db.from(Ledger).insert(.{ .id = 1, .amount = 100 });
    committed_insert.deinit();
    try db.commit();
    var result = try db.from(Ledger).selectFieldNames(&.{ "id", "amount" }).fetchAll();
    defer result.deinit();
    if (result.rowCount() != 1 or result.rows[0][0].integer != 1 or result.rows[0][1].integer != 100) return error.TransactionExampleFailed;
}

TIP

Run with: zig build run-03-transactions

Released under the MIT License.