diff options
Diffstat (limited to 'query.zig')
| -rw-r--r-- | query.zig | 60 |
1 files changed, 37 insertions, 23 deletions
| @@ -128,7 +128,7 @@ pub const ParsedQuery = struct { | |||
| 128 | } | 128 | } |
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | // The last character was ? so this must be an untyped bind marker. | 131 | // The last character was a bind marker prefix so this must be an untyped bind marker. |
| 132 | switch (state) { | 132 | switch (state) { |
| 133 | .bind_marker => { | 133 | .bind_marker => { |
| 134 | parsed_query.bind_markers[parsed_query.nb_bind_markers].typed = null; | 134 | parsed_query.bind_markers[parsed_query.nb_bind_markers].typed = null; |
| @@ -223,32 +223,46 @@ test "parsed query: bind markers types" { | |||
| 223 | expected_marker: BindMarker, | 223 | expected_marker: BindMarker, |
| 224 | }; | 224 | }; |
| 225 | 225 | ||
| 226 | const testCases = &[_]testCase{ | 226 | const prefixes = &[_][]const u8{ |
| 227 | .{ | 227 | "?", |
| 228 | .query = "foobar ?{usize}", | 228 | "?123", |
| 229 | .expected_marker = .{ .typed = usize }, | 229 | ":", |
| 230 | }, | 230 | ":hello", |
| 231 | .{ | 231 | "$", |
| 232 | .query = "foobar ?{text}", | 232 | "$foobar", |
| 233 | .expected_marker = .{ .typed = Text }, | 233 | "@", |
| 234 | }, | 234 | "@name", |
| 235 | .{ | ||
| 236 | .query = "foobar ?{blob}", | ||
| 237 | .expected_marker = .{ .typed = Blob }, | ||
| 238 | }, | ||
| 239 | .{ | ||
| 240 | .query = "foobar ?", | ||
| 241 | .expected_marker = .{ .typed = null }, | ||
| 242 | }, | ||
| 243 | }; | 235 | }; |
| 244 | 236 | ||
| 245 | inline for (testCases) |tc| { | 237 | inline for (prefixes) |prefix| { |
| 246 | comptime var parsed_query = ParsedQuery.from(tc.query); | 238 | const testCases = &[_]testCase{ |
| 239 | .{ | ||
| 240 | .query = "foobar " ++ prefix ++ "{usize}", | ||
| 241 | .expected_marker = .{ .typed = usize }, | ||
| 242 | }, | ||
| 243 | .{ | ||
| 244 | .query = "foobar " ++ prefix ++ "{text}", | ||
| 245 | .expected_marker = .{ .typed = Text }, | ||
| 246 | }, | ||
| 247 | .{ | ||
| 248 | .query = "foobar " ++ prefix ++ "{blob}", | ||
| 249 | .expected_marker = .{ .typed = Blob }, | ||
| 250 | }, | ||
| 251 | .{ | ||
| 252 | .query = "foobar " ++ prefix, | ||
| 253 | .expected_marker = .{ .typed = null }, | ||
| 254 | }, | ||
| 255 | }; | ||
| 247 | 256 | ||
| 248 | try testing.expectEqual(1, parsed_query.nb_bind_markers); | 257 | inline for (testCases) |tc| { |
| 258 | @setEvalBranchQuota(100000); | ||
| 259 | comptime var parsed_query = ParsedQuery.from(tc.query); | ||
| 249 | 260 | ||
| 250 | const bind_marker = parsed_query.bind_markers[0]; | 261 | try testing.expectEqual(1, parsed_query.nb_bind_markers); |
| 251 | try testing.expectEqual(tc.expected_marker.typed, bind_marker.typed); | 262 | |
| 263 | const bind_marker = parsed_query.bind_markers[0]; | ||
| 264 | try testing.expectEqual(tc.expected_marker.typed, bind_marker.typed); | ||
| 265 | } | ||
| 252 | } | 266 | } |
| 253 | } | 267 | } |
| 254 | 268 | ||