diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index d748a41e0..8d7bd0b8b 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -1,8 +1,9 @@ class PostQueryBuilder - attr_accessor :query_string + attr_accessor :query_string, :read_only - def initialize(query_string) + def initialize(query_string, read_only: false) @query_string = query_string + @read_only = read_only end def add_range_relation(arr, field, relation) @@ -91,14 +92,12 @@ class PostQueryBuilder return CurrentUser.user.hide_deleted_posts? end - def build(relation = nil) + def build unless query_string.is_a?(Hash) q = Tag.parse_query(query_string) end - if relation.nil? - relation = Post.where("true") - end + relation = read_only ? PostReadOnly.all : Post.all if q[:tag_count].to_i > Danbooru.config.tag_query_limit raise ::Post::SearchError.new("You cannot search for more than #{Danbooru.config.tag_query_limit} tags at a time") diff --git a/app/models/artist_commentary.rb b/app/models/artist_commentary.rb index fba316ac3..74d3c29eb 100644 --- a/app/models/artist_commentary.rb +++ b/app/models/artist_commentary.rb @@ -19,7 +19,7 @@ class ArtistCommentary < ApplicationRecord end def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)).reorder("") + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def deleted diff --git a/app/models/comment.rb b/app/models/comment.rb index 5d35857ae..5a9f48786 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -52,7 +52,7 @@ class Comment < ApplicationRecord end def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)).reorder("") + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def for_creator(user_id) diff --git a/app/models/note.rb b/app/models/note.rb index 1c8fdcf81..4955c75c1 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -18,7 +18,7 @@ class Note < ApplicationRecord end def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)).reorder("") + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def for_creator(user_id) diff --git a/app/models/post.rb b/app/models/post.rb index 9aa696214..cd206825a 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1662,7 +1662,7 @@ class Post < ApplicationRecord if read_only begin - PostQueryBuilder.new(query).build(PostReadOnly.where("true")) + PostQueryBuilder.new(query, read_only: true).build rescue PG::ConnectionBad PostQueryBuilder.new(query).build end diff --git a/app/models/post_appeal.rb b/app/models/post_appeal.rb index c04b732e4..f32a8b348 100644 --- a/app/models/post_appeal.rb +++ b/app/models/post_appeal.rb @@ -11,7 +11,7 @@ class PostAppeal < ApplicationRecord module SearchMethods def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)) + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def resolved diff --git a/app/models/post_approval.rb b/app/models/post_approval.rb index 801d03cb3..3300c90e8 100644 --- a/app/models/post_approval.rb +++ b/app/models/post_approval.rb @@ -35,7 +35,7 @@ class PostApproval < ApplicationRecord concerning :SearchMethods do class_methods do def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)) + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def search(params) diff --git a/app/models/post_flag.rb b/app/models/post_flag.rb index 528cd57de..f02dcf9e6 100644 --- a/app/models/post_flag.rb +++ b/app/models/post_flag.rb @@ -33,7 +33,7 @@ class PostFlag < ApplicationRecord end def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)) + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def resolved diff --git a/app/models/post_replacement.rb b/app/models/post_replacement.rb index 79223d0c5..014f4bf87 100644 --- a/app/models/post_replacement.rb +++ b/app/models/post_replacement.rb @@ -21,7 +21,7 @@ class PostReplacement < ApplicationRecord concerning :Search do class_methods do def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)) + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def search(params = {}) diff --git a/app/models/upload.rb b/app/models/upload.rb index 481afc1be..62997c802 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -175,7 +175,7 @@ class Upload < ApplicationRecord end def post_tags_match(query) - PostQueryBuilder.new(query).build(self.joins(:post)).reorder("") + where(post_id: PostQueryBuilder.new(query).build.reorder("")) end def search(params)