in lib/elastic_apm/sql/signature.rb [63:133]
def parse_tokens
t = @tokenizer
case t.token
when CALL
return unless scan_until IDENT
"CALL #{t.text}"
when DELETE
return unless scan_until FROM
return unless scan_token IDENT
table = scan_dotted_identifier
"DELETE FROM #{table}"
when INSERT, REPLACE
action = t.text
return unless scan_until INTO
return unless scan_token IDENT
table = scan_dotted_identifier
"#{action} INTO #{table}"
when SELECT
level = 0
while t.scan
case t.token
when LPAREN then level += 1
when RPAREN then level -= 1
when FROM
next unless level == 0
break unless scan_token IDENT
table = scan_dotted_identifier
return "SELECT FROM #{table}"
end
end
when UPDATE
return 'UPDATE' unless scan_token IDENT
table = t.text
period = false
first_period = false
while t.scan
case t.token
when IDENT
if period
table += t.text
period = false
end
unless first_period
table = t.text
end
when PERIOD
period = true
first_period = true
table += '.'
else
return "UPDATE #{table}"
end
end
end
end