2017-08-22 16:51:53 +00:00
|
|
|
module Gitlab
|
|
|
|
module SQL
|
|
|
|
class Pattern
|
|
|
|
MIN_CHARS_FOR_PARTIAL_MATCHING = 3
|
|
|
|
|
|
|
|
attr_reader :query
|
|
|
|
|
|
|
|
def initialize(query)
|
|
|
|
@query = query
|
|
|
|
end
|
|
|
|
|
|
|
|
def to_sql
|
|
|
|
if exact_matching?
|
2017-08-26 13:32:55 +00:00
|
|
|
sanitized_query
|
2017-08-22 16:51:53 +00:00
|
|
|
else
|
2017-08-26 13:32:55 +00:00
|
|
|
"%#{sanitized_query}%"
|
2017-08-22 16:51:53 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def exact_matching?
|
|
|
|
!partial_matching?
|
|
|
|
end
|
|
|
|
|
|
|
|
def partial_matching?
|
|
|
|
@query.length >= MIN_CHARS_FOR_PARTIAL_MATCHING
|
|
|
|
end
|
2017-08-26 13:32:55 +00:00
|
|
|
|
|
|
|
def sanitized_query
|
|
|
|
# Note: ActiveRecord::Base.sanitize_sql_like is a protected method
|
|
|
|
ActiveRecord::Base.__send__(:sanitize_sql_like, query)
|
|
|
|
end
|
2017-08-22 16:51:53 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|