From 41d0f260938aa86165e926f9c3ff3f1110b0b8d1 Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Sun, 31 Jan 2021 00:19:30 +0100 Subject: add the Db.getLastInsertRowID method --- sqlite.zig | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'sqlite.zig') diff --git a/sqlite.zig b/sqlite.zig index 9ded620..b911e0e 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -166,6 +166,12 @@ pub const Db = struct { }; } + /// getLastInsertRowID returns the last inserted rowid. + pub fn getLastInsertRowID(self: *Self) i64 { + const rowid = c.sqlite3_last_insert_rowid(self.db); + return rowid; + } + /// pragmaAlloc is like `pragma` but can allocate memory. /// /// Useful when the pragma command returns text, for example: @@ -941,7 +947,7 @@ const test_users = &[_]TestUser{ .{ .name = "José", .id = 60, .age = 40, .weight = 240.2 }, }; -fn addTestData(db: *Db) !void { +fn createTestTables(db: *Db) !void { const AllDDL = &[_][]const u8{ \\CREATE TABLE user( \\ id integer PRIMARY KEY, @@ -963,6 +969,10 @@ fn addTestData(db: *Db) !void { inline for (AllDDL) |ddl| { try db.exec(ddl, .{}); } +} + +fn addTestData(db: *Db) !void { + try createTestTables(db); for (test_users) |user| { try db.exec("INSERT INTO user(name, id, age, weight) VALUES(?{[]const u8}, ?{usize}, ?{usize}, ?{f32})", user); @@ -1015,6 +1025,19 @@ test "sqlite: db pragma" { } } +test "sqlite: last insert row id" { + var db = try getTestDb(); + try createTestTables(&db); + + try db.exec("INSERT INTO user(name, age) VALUES(?, ?{u32})", .{ + .name = "test-user", + .age = @as(u32, 400), + }); + + const id = db.getLastInsertRowID(); + testing.expectEqual(@as(i64, 1), id); +} + test "sqlite: statement exec" { var db = try getTestDb(); try addTestData(&db); -- cgit v1.2.3