From d4bc0c0ee29e5c8b253d80c0fa5f2bbecbaeda39 Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Mon, 2 May 2022 19:21:22 +0200 Subject: the '_' character is valid in a named bind parameter --- query.zig | 7 ++++++- sqlite.zig | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/query.zig b/query.zig index bc1bbc1..45577a1 100644 --- a/query.zig +++ b/query.zig @@ -16,7 +16,7 @@ const BindMarker = struct { }; fn isNamedIdentifierChar(c: u8) bool { - return std.ascii.isAlpha(c) or std.ascii.isDigit(c); + return std.ascii.isAlpha(c) or std.ascii.isDigit(c) or c == '_'; } pub const ParsedQuery = struct { @@ -341,6 +341,11 @@ test "parsed query: query bind identifier" { .expected_query = "SELECT id, name, age FROM user WHER age > :ageGT AND age < $ageLT", .expected_nb_bind_markers = 2, }, + .{ + .query = "SELECT id, name, age FROM user WHER age > $my_age{i32} AND age < :your_age{i32}", + .expected_query = "SELECT id, name, age FROM user WHER age > $my_age AND age < :your_age", + .expected_nb_bind_markers = 2, + }, }; inline for (testCases) |tc| { diff --git a/sqlite.zig b/sqlite.zig index 5299e7f..d9cff3b 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -3534,9 +3534,9 @@ test "sqlite: one with all named parameters" { const id = try db.one( usize, - "SELECT id FROM user WHERE age = $age AND weight < :weight and id < @id", + "SELECT id FROM user WHERE age = $age AND weight < :weight and id < @my_id", .{ .diags = &diags }, - .{ .id = 400, .age = 33, .weight = 200 }, + .{ .my_id = 400, .age = 33, .weight = 200 }, ); try testing.expect(id != null); try testing.expectEqual(@as(usize, 20), id.?); -- cgit v1.2.3