From 18951b9d8e1903d97a6b97a094cc03b0b87651bc Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Sat, 18 Dec 2021 22:27:32 +0100 Subject: add a test for bind markers inside strings --- query.zig | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/query.zig b/query.zig index 9f816cf..198d308 100644 --- a/query.zig +++ b/query.zig @@ -95,7 +95,7 @@ pub const ParsedQuery = struct { state = .BindMarkerType; current_bind_marker_type_pos = 0; - // A bind marker with id and type: ?AAA{[]const u8}, we don't need move the pointer. + // A bind marker with id and type: ?AAA{[]const u8}, we don't need to move the pointer. if (current_bind_marker_id_pos > 0) { parsed_query.bind_markers[parsed_query.nb_bind_markers].identifier = current_bind_marker_id[0..current_bind_marker_id_pos]; } @@ -218,6 +218,7 @@ test "parsed query: query" { }; inline for (testCases) |tc| { + @setEvalBranchQuota(100000); comptime var parsed_query = ParsedQuery.from(tc.query); try testing.expectEqualStrings(tc.expected_query, parsed_query.getQuery()); } @@ -353,3 +354,32 @@ test "parsed query: bind markers identifier type" { try testing.expectEqual(tc.expected_marker.identifier_type, bind_marker.identifier_type); } } + +test "parsed query: bind marker character inside string" { + const testCase = struct { + query: []const u8, + exp_bind_markers: comptime_int, + exp: []const u8, + }; + + const testCases = &[_]testCase{ + .{ + .query = "SELECT json_extract(metadata, '$.name') AS name FROM foobar", + .exp_bind_markers = 0, + .exp = "SELECT json_extract(metadata, '$.name') AS name FROM foobar", + }, + .{ + .query = "SELECT json_extract(metadata, '$.name') AS name FROM foobar WHERE name = $name{text}", + .exp_bind_markers = 1, + .exp = "SELECT json_extract(metadata, '$.name') AS name FROM foobar WHERE name = $name", + }, + }; + + inline for (testCases) |tc| { + @setEvalBranchQuota(100000); + comptime var parsed_query = ParsedQuery.from(tc.query); + + try testing.expectEqual(@as(usize, tc.exp_bind_markers), parsed_query.nb_bind_markers); + try testing.expectEqualStrings(tc.exp, parsed_query.getQuery()); + } +} -- cgit v1.2.3