From b257b89ec8c2a20bfc2454aa7b019a1497902f82 Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Sun, 27 Dec 2020 19:03:32 +0100 Subject: add more tests --- sqlite.zig | 111 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 83 insertions(+), 28 deletions(-) diff --git a/sqlite.zig b/sqlite.zig index 4cd91fd..bc1235a 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -993,6 +993,26 @@ test "sqlite: read a single user into a struct" { } // Read a row with db.one() + { + var row = try db.one( + struct { + id: usize, + name: [128:0]u8, + age: usize, + }, + "SELECT id, name, age FROM user WHERE id = ?{usize}", + .{}, + .{@as(usize, 20)}, + ); + testing.expect(row != null); + + const exp = test_users[0]; + testing.expectEqual(exp.id, row.?.id); + testing.expectEqualStrings(exp.name, mem.spanZ(&row.?.name)); + testing.expectEqual(exp.age, row.?.age); + } + + // Read a row with db.oneAlloc() { var row = try db.oneAlloc( struct { @@ -1129,12 +1149,9 @@ test "sqlite: read a single text value" { var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); defer stmt.deinit(); - const name = try stmt.oneAlloc( - typ, - &arena.allocator, - .{}, - .{ .id = @as(usize, 20) }, - ); + const name = try stmt.oneAlloc(typ, &arena.allocator, .{}, .{ + .id = @as(usize, 20), + }); testing.expect(name != null); switch (typ) { Text, Blob => { @@ -1181,7 +1198,9 @@ test "sqlite: read a single integer value" { var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); defer stmt.deinit(); - var age = try stmt.one(typ, .{}, .{ .id = @as(usize, 20) }); + var age = try stmt.one(typ, .{}, .{ + .id = @as(usize, 20), + }); testing.expect(age != null); testing.expectEqual(@as(typ, 33), age.?); @@ -1198,7 +1217,9 @@ test "sqlite: read a single value into void" { var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); defer stmt.deinit(); - _ = try stmt.one(void, .{}, .{ .id = @as(usize, 20) }); + _ = try stmt.one(void, .{}, .{ + .id = @as(usize, 20), + }); } test "sqlite: read a single value into bool" { @@ -1211,7 +1232,9 @@ test "sqlite: read a single value into bool" { var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); defer stmt.deinit(); - const b = try stmt.one(bool, .{}, .{ .id = @as(usize, 20) }); + const b = try stmt.one(bool, .{}, .{ + .id = @as(usize, 20), + }); testing.expect(b != null); testing.expect(b.?); } @@ -1232,7 +1255,9 @@ test "sqlite: insert bool and bind bool" { var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); defer stmt.deinit(); - const b = try stmt.one(bool, .{}, .{ .is_published = true }); + const b = try stmt.one(bool, .{}, .{ + .is_published = true, + }); testing.expect(b != null); testing.expect(b.?); } @@ -1293,30 +1318,60 @@ test "sqlite: statement iterator" { testing.expectEqual(@as(usize, 1), rows_inserted); } - // Get the data with an iterator - var stmt2 = try db.prepare("SELECT name, age FROM user"); - defer stmt2.deinit(); + // Get data with a non-allocating iterator. + { + var stmt2 = try db.prepare("SELECT name, age FROM user"); + defer stmt2.deinit(); - const Type = struct { - name: Text, - age: usize, - }; + const RowType = struct { + name: [128:0]u8, + age: usize, + }; + + var iter = try stmt2.iterator(RowType, .{}); + + var rows = std.ArrayList(RowType).init(allocator); + while (true) { + const row = (try iter.next(.{})) orelse break; + try rows.append(row); + } - var iter = try stmt2.iterator(Type, .{}); + // Check the data + testing.expectEqual(expected_rows.items.len, rows.items.len); - var rows = std.ArrayList(Type).init(allocator); - while (true) { - const row = (try iter.nextAlloc(allocator, .{})) orelse break; - try rows.append(row); + for (rows.items) |row, j| { + const exp_row = expected_rows.items[j]; + testing.expectEqualStrings(exp_row.name, mem.spanZ(&row.name)); + testing.expectEqual(exp_row.age, row.age); + } } - // Check the data - testing.expectEqual(expected_rows.items.len, rows.items.len); + // Get data with an iterator + { + var stmt2 = try db.prepare("SELECT name, age FROM user"); + defer stmt2.deinit(); + + const RowType = struct { + name: Text, + age: usize, + }; - for (rows.items) |row, j| { - const exp_row = expected_rows.items[j]; - testing.expectEqualStrings(exp_row.name, row.name.data); - testing.expectEqual(exp_row.age, row.age); + var iter = try stmt2.iterator(RowType, .{}); + + var rows = std.ArrayList(RowType).init(allocator); + while (true) { + const row = (try iter.nextAlloc(allocator, .{})) orelse break; + try rows.append(row); + } + + // Check the data + testing.expectEqual(expected_rows.items.len, rows.items.len); + + for (rows.items) |row, j| { + const exp_row = expected_rows.items[j]; + testing.expectEqualStrings(exp_row.name, row.name.data); + testing.expectEqual(exp_row.age, row.age); + } } } -- cgit v1.2.3