From f42a3026dd255eb5612bb2be03ed1f04cad9958d Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 19 Mar 2022 03:30:42 -0300 Subject: fix splitting logic for runMulti --- sqlite.zig | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/sqlite.zig b/sqlite.zig index ba87c12..63b7a7d 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -887,12 +887,21 @@ pub const Db = struct { new_options.sql_tail_ptr = &sql_tail_ptr; while (true) { - // continuously prepare and execute - var stmt = try self.prepareWithDiags(query, new_options); + // continuously prepare and execute (dynamically as there's no + // values to bind in this case) + var stmt: DynamicStatement = undefined; + if (sql_tail_ptr != null) { + const new_query = std.mem.span(sql_tail_ptr.?); + if (new_query.len == 0) break; + stmt = try self.prepareDynamicWithDiags(new_query, new_options); + } else { + stmt = try self.prepareDynamicWithDiags(query, new_options); + } + defer stmt.deinit(); - if (sql_tail_ptr == null) break; + try stmt.exec(new_options, .{}); - try stmt.exec(options, .{}); + if (sql_tail_ptr == null) break; } } }; @@ -2313,6 +2322,14 @@ test "sqlite: db init" { _ = db; } +test "sqlite: run multi" { + var db = try getTestDb(); + defer db.deinit(); + try db.runMulti("create table a(b int); create table b(c int);", .{}); + const val = try db.one(i32, "select max(c) from b", .{}, .{}); + try testing.expectEqual(@as(?i32, 0), val); +} + test "sqlite: db pragma" { var arena = std.heap.ArenaAllocator.init(testing.allocator); defer arena.deinit(); -- cgit v1.2.3