scan_keyword_or_identifier

in lib/elastic_apm/sql/tokenizer.rb [105:130]


      def scan_keyword_or_identifier(possible_keyword:)
        while (peek = peek_char)
          if peek == '_' || peek == '$' || peek =~ DIGIT
            possible_keyword = false
            next next_char
          end

          next next_char if ALPHA.match?(peek)

          break
        end

        return IDENT unless possible_keyword

        snap = text

        if snap.length < KEYWORD_MIN_LENGTH || snap.length > KEYWORD_MAX_LENGTH
          return IDENT
        end

        keyword = KEYWORDS[snap.length].find { |kw| snap.upcase == kw.to_s }
        return keyword if keyword

        IDENT
      end