From 3a61e81024c4a9259387982a84210489eb698c9c Mon Sep 17 00:00:00 2001 From: MrBounty Date: Tue, 12 Nov 2024 21:17:49 +0100 Subject: [PATCH] Added not in keyword --- src/tokenizers/ziql.zig | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/tokenizers/ziql.zig b/src/tokenizers/ziql.zig index b8d7a74..d3076b6 100644 --- a/src/tokenizers/ziql.zig +++ b/src/tokenizers/ziql.zig @@ -32,6 +32,7 @@ pub const Token = struct { keyword_delete, keyword_add, keyword_in, + keyword_not_in, keyword_and, keyword_or, keyword_to, @@ -272,7 +273,16 @@ pub const Tokenizer = struct { self.index += 1; break; }, - //TODO Add the !IN + 'I' => { + if (self.buffer.len > self.index + 1 and self.buffer[self.index + 1] == 'N') { + result.tag = .keyword_not_in; + self.index += 2; // Skip 'I' and 'N' + break; + } else { + result.tag = .bang; + break; + } + }, else => { result.tag = .bang; break; @@ -393,6 +403,12 @@ test "basic date" { try testTokenize("1998/01/21-17:55:31.0000", &.{.datetime_literal}); } +test "not in keyword" { + try testTokenize("!IN", &.{.keyword_not_in}); + try testTokenize("!IN(", &.{ .keyword_not_in, .l_paren }); + try testTokenize("!Ind", &.{ .bang, .identifier }); +} + fn testTokenize(source: [:0]const u8, expected_token_tags: []const Token.Tag) !void { var tokenizer = Tokenizer.init(source); for (expected_token_tags) |expected_token_tag| {