diff options
Diffstat (limited to '')
| -rw-r--r-- | sqlite.zig | 25 |
1 files changed, 24 insertions, 1 deletions
| @@ -166,6 +166,12 @@ pub const Db = struct { | |||
| 166 | }; | 166 | }; |
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | /// getLastInsertRowID returns the last inserted rowid. | ||
| 170 | pub fn getLastInsertRowID(self: *Self) i64 { | ||
| 171 | const rowid = c.sqlite3_last_insert_rowid(self.db); | ||
| 172 | return rowid; | ||
| 173 | } | ||
| 174 | |||
| 169 | /// pragmaAlloc is like `pragma` but can allocate memory. | 175 | /// pragmaAlloc is like `pragma` but can allocate memory. |
| 170 | /// | 176 | /// |
| 171 | /// Useful when the pragma command returns text, for example: | 177 | /// Useful when the pragma command returns text, for example: |
| @@ -941,7 +947,7 @@ const test_users = &[_]TestUser{ | |||
| 941 | .{ .name = "José", .id = 60, .age = 40, .weight = 240.2 }, | 947 | .{ .name = "José", .id = 60, .age = 40, .weight = 240.2 }, |
| 942 | }; | 948 | }; |
| 943 | 949 | ||
| 944 | fn addTestData(db: *Db) !void { | 950 | fn createTestTables(db: *Db) !void { |
| 945 | const AllDDL = &[_][]const u8{ | 951 | const AllDDL = &[_][]const u8{ |
| 946 | \\CREATE TABLE user( | 952 | \\CREATE TABLE user( |
| 947 | \\ id integer PRIMARY KEY, | 953 | \\ id integer PRIMARY KEY, |
| @@ -963,6 +969,10 @@ fn addTestData(db: *Db) !void { | |||
| 963 | inline for (AllDDL) |ddl| { | 969 | inline for (AllDDL) |ddl| { |
| 964 | try db.exec(ddl, .{}); | 970 | try db.exec(ddl, .{}); |
| 965 | } | 971 | } |
| 972 | } | ||
| 973 | |||
| 974 | fn addTestData(db: *Db) !void { | ||
| 975 | try createTestTables(db); | ||
| 966 | 976 | ||
| 967 | for (test_users) |user| { | 977 | for (test_users) |user| { |
| 968 | try db.exec("INSERT INTO user(name, id, age, weight) VALUES(?{[]const u8}, ?{usize}, ?{usize}, ?{f32})", user); | 978 | 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" { | |||
| 1015 | } | 1025 | } |
| 1016 | } | 1026 | } |
| 1017 | 1027 | ||
| 1028 | test "sqlite: last insert row id" { | ||
| 1029 | var db = try getTestDb(); | ||
| 1030 | try createTestTables(&db); | ||
| 1031 | |||
| 1032 | try db.exec("INSERT INTO user(name, age) VALUES(?, ?{u32})", .{ | ||
| 1033 | .name = "test-user", | ||
| 1034 | .age = @as(u32, 400), | ||
| 1035 | }); | ||
| 1036 | |||
| 1037 | const id = db.getLastInsertRowID(); | ||
| 1038 | testing.expectEqual(@as(i64, 1), id); | ||
| 1039 | } | ||
| 1040 | |||
| 1018 | test "sqlite: statement exec" { | 1041 | test "sqlite: statement exec" { |
| 1019 | var db = try getTestDb(); | 1042 | var db = try getTestDb(); |
| 1020 | try addTestData(&db); | 1043 | try addTestData(&db); |