class SqlFingerprint::AbstractQuery
Public Class Methods
build(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 6 def build(query) query = query.downcase.chomp query = remove_comments(query) query = remove_quotes(query) query = remove_constants(query) query = remove_double_spaces(query) query = remove_newlines(query) query = remove_in_values(query) query = remove_offsets(query) query.strip end
Private Class Methods
remove_comments(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 20 def remove_comments(query) query .gsub(/(?:--|#)[^'"\r\n]*(?=[\r\n]|\Z)/, ' ') .gsub(%r{/\*[^!].*?\*/}m, ' ') end
remove_constants(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 38 def remove_constants(query) query .gsub(/".*?"/, '?') .gsub(/'.*?'/, '?') .gsub(/\bfalse\b|\btrue\b/, '?') .gsub(/[0-9+-][0-9a-f.xb+-]*/, '?') .gsub(/\b[0-9+-][0-9a-f.xb+-]*/, '?') .gsub(/\bnull\b/, '?') end
remove_double_spaces(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 30 def remove_double_spaces(query) query.gsub(/\s+/, ' ') end
remove_in_values(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 48 def remove_in_values(query) query.gsub(/\b(in|values?)(?:[\s,]*\([\s?,]*\))+/, '\1(?+)') end
remove_newlines(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 26 def remove_newlines(query) query.gsub(/\r\n?/, ' ') end
remove_offsets(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 52 def remove_offsets(query) query.gsub(/\blimit \?(?:, ?\?| offset \?)?/, 'limit ?') end
remove_quotes(query)
click to toggle source
# File lib/sql_fingerprint/abstract_query.rb, line 34 def remove_quotes(query) query.gsub(/\\["']/, '') end