File tree Expand file tree Collapse file tree 1 file changed +13
-7
lines changed
Expand file tree Collapse file tree 1 file changed +13
-7
lines changed Original file line number Diff line number Diff line change @@ -413,16 +413,22 @@ impl Token {
413413 /// When `quote_style` is `None`, the parser attempts a case-insensitive keyword
414414 /// lookup and sets the `Word::keyword` accordingly.
415415 pub fn make_word ( word : & str , quote_style : Option < char > ) -> Self {
416- let word_uppercase = word. to_uppercase ( ) ;
416+ // Only perform keyword lookup for unquoted identifiers.
417+ // Use to_ascii_uppercase() since SQL keywords are ASCII,
418+ // avoiding Unicode case conversion overhead.
419+ let keyword = if quote_style. is_none ( ) {
420+ let word_uppercase = word. to_ascii_uppercase ( ) ;
421+ ALL_KEYWORDS
422+ . binary_search ( & word_uppercase. as_str ( ) )
423+ . map_or ( Keyword :: NoKeyword , |x| ALL_KEYWORDS_INDEX [ x] )
424+ } else {
425+ Keyword :: NoKeyword
426+ } ;
427+
417428 Token :: Word ( Word {
418429 value : word. to_string ( ) ,
419430 quote_style,
420- keyword : if quote_style. is_none ( ) {
421- let keyword = ALL_KEYWORDS . binary_search ( & word_uppercase. as_str ( ) ) ;
422- keyword. map_or ( Keyword :: NoKeyword , |x| ALL_KEYWORDS_INDEX [ x] )
423- } else {
424- Keyword :: NoKeyword
425- } ,
431+ keyword,
426432 } )
427433 }
428434}
You can’t perform that action at this time.
0 commit comments