From 3691404a8d799e86d5479c68ded104a32e6bd9bd Mon Sep 17 00:00:00 2001 From: evazion Date: Wed, 15 Apr 2020 00:39:56 -0500 Subject: [PATCH] search: fix invalid rating searches returning wrong results. Partial fix for #4389. * Fix "rating:asdf" returning all posts. * Fix "rating:s rating:q" returning results for rating:q. --- app/logical/post_query_builder.rb | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index 5b1bf7f65..280440ba7 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -445,20 +445,12 @@ class PostQueryBuilder end end - if q[:rating] =~ /^q/ - relation = relation.where("posts.rating = 'q'") - elsif q[:rating] =~ /^s/ - relation = relation.where("posts.rating = 's'") - elsif q[:rating] =~ /^e/ - relation = relation.where("posts.rating = 'e'") + q[:rating].to_a.each do |rating| + relation = relation.where(rating: rating.first.downcase) end - if q[:rating_negated] =~ /^q/ - relation = relation.where("posts.rating <> 'q'") - elsif q[:rating_negated] =~ /^s/ - relation = relation.where("posts.rating <> 's'") - elsif q[:rating_negated] =~ /^e/ - relation = relation.where("posts.rating <> 'e'") + q[:rating_neg].to_a.each do |rating| + relation = relation.where.not(rating: rating.first.downcase) end if q[:locked] == "rating" @@ -839,10 +831,12 @@ class PostQueryBuilder q[:md5] = g2.downcase.split(/,/) when "-rating" - q[:rating_negated] = g2.downcase + q[:rating_neg] ||= [] + q[:rating_neg] << g2 when "rating" - q[:rating] = g2.downcase + q[:rating] ||= [] + q[:rating] << g2 when "-locked" q[:locked_negated] = g2.downcase