This is an automated email from the ASF dual-hosted git repository. github-bot pushed a commit to branch gh-readonly-queue/main/pr-2176-a175cdb067ca37098ab0761999f4c2be7387aaa7 in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git
commit 153e7c57465476aa7350672c5cee4f1ef02b7365 Author: Andy Grove <[email protected]> AuthorDate: Sat Jan 24 04:30:51 2026 -0700 perf: optimize `make_word()` to avoid unnecessary allocations (#2176) Co-authored-by: Claude Opus 4.5 <[email protected]> --- src/tokenizer.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 42fa5b61..8c33ad3d 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -413,16 +413,22 @@ impl Token { /// When `quote_style` is `None`, the parser attempts a case-insensitive keyword /// lookup and sets the `Word::keyword` accordingly. pub fn make_word(word: &str, quote_style: Option<char>) -> Self { - let word_uppercase = word.to_uppercase(); + // Only perform keyword lookup for unquoted identifiers. + // Use to_ascii_uppercase() since SQL keywords are ASCII, + // avoiding Unicode case conversion overhead. + let keyword = if quote_style.is_none() { + let word_uppercase = word.to_ascii_uppercase(); + ALL_KEYWORDS + .binary_search(&word_uppercase.as_str()) + .map_or(Keyword::NoKeyword, |x| ALL_KEYWORDS_INDEX[x]) + } else { + Keyword::NoKeyword + }; + Token::Word(Word { value: word.to_string(), quote_style, - keyword: if quote_style.is_none() { - let keyword = ALL_KEYWORDS.binary_search(&word_uppercase.as_str()); - keyword.map_or(Keyword::NoKeyword, |x| ALL_KEYWORDS_INDEX[x]) - } else { - Keyword::NoKeyword - }, + keyword, }) } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
