diff --git a/app/models/artist.rb b/app/models/artist.rb index e6301ace2..d0336800e 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -226,7 +226,11 @@ class Artist < ActiveRecord::Base end def other_names_match(string) - where("other_names_index @@ to_tsquery('danbooru', E?)", Artist.normalize_name(string).to_escaped_for_tsquery) + if string =~ /\*/ && CurrentUser.user.is_builder? + where("other_names ILIKE ? ESCAPE E'\\\\'", string.to_escaped_for_sql_like) + else + where("other_names_index @@ to_tsquery('danbooru', E?)", Artist.normalize_name(string).to_escaped_for_tsquery) + end end def group_name_matches(name) @@ -241,8 +245,12 @@ class Artist < ActiveRecord::Base def any_name_matches(name) stripped_name = normalize_name(name).to_escaped_for_sql_like - name_for_tsquery = normalize_name(name).to_escaped_for_tsquery - where("(name LIKE ? ESCAPE E'\\\\' OR other_names_index @@ to_tsquery('danbooru', E?))", stripped_name, name_for_tsquery) + if name =~ /\*/ && CurrentUser.user.is_builder? + where("(name LIKE ? ESCAPE E'\\\\' OR other_names LIKE ? ESCAPE E'\\\\')", stripped_name, stripped_name) + else + name_for_tsquery = normalize_name(name).to_escaped_for_tsquery + where("(name LIKE ? ESCAPE E'\\\\' OR other_names_index @@ to_tsquery('danbooru', E?))", stripped_name, name_for_tsquery) + end end def search(params) diff --git a/app/models/comment.rb b/app/models/comment.rb index 45029b1c6..254f91760 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -18,7 +18,11 @@ class Comment < ActiveRecord::Base end def body_matches(query) - where("body_index @@ plainto_tsquery(?)", query.to_escaped_for_tsquery_split).order("comments.id DESC") + if query =~ /\*/ && CurrentUser.user.is_builder? + where("body ILIKE ? ESCAPE E'\\\\'", query.to_escaped_for_sql_like) + else + where("body_index @@ plainto_tsquery(?)", query.to_escaped_for_tsquery_split).order("comments.id DESC") + end end def hidden(user) diff --git a/app/models/dmail.rb b/app/models/dmail.rb index dc7c6a065..e7fe05d31 100644 --- a/app/models/dmail.rb +++ b/app/models/dmail.rb @@ -99,7 +99,12 @@ class Dmail < ActiveRecord::Base end def search_message(query) - where("message_index @@ plainto_tsquery(?)", query.to_escaped_for_tsquery_split) + if query =~ /\*/ && CurrentUser.user.is_builder? + escaped_query = query.to_escaped_for_sql_like + where("(title ILIKE ? ESCAPE E'\\\\' OR body ILIKE ? ESCAPE E'\\\\')", escaped_query, escaped_query) + else + where("message_index @@ plainto_tsquery(?)", query.to_escaped_for_tsquery_split) + end end def unread diff --git a/app/models/forum_post.rb b/app/models/forum_post.rb index 9e2c308d4..e27b81dbf 100644 --- a/app/models/forum_post.rb +++ b/app/models/forum_post.rb @@ -17,7 +17,11 @@ class ForumPost < ActiveRecord::Base module SearchMethods def body_matches(body) - where("forum_posts.text_index @@ plainto_tsquery(E?)", body.to_escaped_for_tsquery) + if body =~ /\*/ && CurrentUser.user.is_builder? + where("forum_posts.body ILIKE ? ESCAPE E'\\\\'", body.to_escaped_for_sql_like) + else + where("forum_posts.text_index @@ plainto_tsquery(E?)", body.to_escaped_for_tsquery) + end end def for_user(user_id) diff --git a/app/models/forum_topic.rb b/app/models/forum_topic.rb index b73a6a4a0..f639411b7 100644 --- a/app/models/forum_topic.rb +++ b/app/models/forum_topic.rb @@ -43,7 +43,11 @@ class ForumTopic < ActiveRecord::Base module SearchMethods def title_matches(title) - where("text_index @@ plainto_tsquery(E?)", title.to_escaped_for_tsquery_split) + if title =~ /\*/ && CurrentUser.user.is_builder? + where("title ILIKE ? ESCAPE E'\\\\'", title.to_escaped_for_sql_like) + else + where("text_index @@ plainto_tsquery(E?)", title.to_escaped_for_tsquery_split) + end end def active diff --git a/app/models/note.rb b/app/models/note.rb index 5a142f73f..27f006a92 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -21,7 +21,11 @@ class Note < ActiveRecord::Base end def body_matches(query) - where("body_index @@ plainto_tsquery(E?)", query.to_escaped_for_tsquery_split) + if query =~ /\*/ && CurrentUser.user.is_builder? + where("body ILIKE ? ESCAPE E'\\\\'", query.to_escaped_for_sql_like) + else + where("body_index @@ plainto_tsquery(E?)", query.to_escaped_for_tsquery_split) + end end def post_tags_match(query) diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 7dff24c64..8ff0a1e32 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -24,7 +24,11 @@ class WikiPage < ActiveRecord::Base end def body_matches(query) - where("body_index @@ plainto_tsquery(?)", query.to_escaped_for_tsquery_split) + if query =~ /\*/ && CurrentUser.user.is_builder? + where("body ILIKE ? ESCAPE E'\\\\'", query.to_escaped_for_sql_like) + else + where("body_index @@ plainto_tsquery(?)", query.to_escaped_for_tsquery_split) + end end def search(params = {})