Skip to content

Commit 5fb342c

Browse files
committed
rework execMulti
We don't have to expose the tail pointer to get execMulti to work: the tail pointer can stay local to execMulti instead of polluting the QueryOptions. This is a breaking change but as far as I can tell people only use execMulti, never the tail pointer for anything, so I guess it's fine.
1 parent 39237dc commit 5fb342c

File tree

1 file changed

+6
-25
lines changed

1 file changed

+6
-25
lines changed

sqlite.zig

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -810,30 +810,16 @@ pub const Db = struct {
810810
///
811811
/// Exmaple: 'create table a(); create table b();'
812812
pub fn execMulti(self: *Self, query: []const u8, options: QueryOptions) !void {
813-
var new_options = options;
814-
var sql_tail_ptr: ?[*:0]const u8 = null;
815-
new_options.sql_tail_ptr = &sql_tail_ptr;
813+
var sql_tail: [*c]const u8 = query.ptr;
816814

817815
while (true) {
818-
// continuously prepare and execute (dynamically as there's no
819-
// values to bind in this case)
820-
var stmt: DynamicStatement = undefined;
821-
if (sql_tail_ptr != null) {
822-
const new_query = std.mem.span(sql_tail_ptr.?);
823-
if (new_query.len == 0) break;
824-
stmt = self.prepareDynamicWithDiags(new_query, new_options) catch |err| switch (err) {
825-
error.EmptyQuery => break,
826-
else => return err,
827-
};
828-
} else {
829-
stmt = self.prepareDynamicWithDiags(query, new_options) catch |err| switch (err) {
830-
error.EmptyQuery => break,
831-
else => return err,
832-
};
833-
}
816+
const new_query = std.mem.span(sql_tail);
817+
if (new_query.len == 0) return;
834818

819+
var stmt = try DynamicStatement.prepareWithTail(self, new_query, options, 0, &sql_tail);
835820
defer stmt.deinit();
836-
try stmt.exec(new_options, .{});
821+
822+
try stmt.exec(options, .{});
837823
}
838824
}
839825

@@ -1030,11 +1016,6 @@ pub const Savepoint = struct {
10301016
pub const QueryOptions = struct {
10311017
/// if provided, diags will be populated in case of failures.
10321018
diags: ?*Diagnostics = null,
1033-
1034-
/// if provided, sql_tail_ptr will point to the last uncompiled statement
1035-
/// in the prepare() call. this is useful for multiple-statements being
1036-
/// processed.
1037-
sql_tail_ptr: ?*?[*:0]const u8 = null,
10381019
};
10391020

10401021
/// Iterator allows iterating over a result set.

0 commit comments

Comments
 (0)