search: replace calls to PostQueryBuilder#fast_count with PostQuery#fast_count.

Prepare a few more places for the new tag search parser.
This commit is contained in:
evazion
2022-03-30 01:35:48 -05:00
parent 8c9e045a9c
commit 6edff247f2
5 changed files with 12 additions and 8 deletions

View File

@@ -6,7 +6,7 @@ class CountsController < ApplicationController
def posts
estimate_count = params.fetch(:estimate_count, "true").truthy?
skip_cache = params.fetch(:skip_cache, "false").truthy?
@count = PostQueryBuilder.new(params[:tags], CurrentUser.user, tag_limit: CurrentUser.user.tag_query_limit).normalized_query.fast_count(timeout: CurrentUser.statement_timeout, estimate_count: estimate_count, skip_cache: skip_cache)
@count = PostQuery.new(params[:tags], current_user: CurrentUser.user, tag_limit: CurrentUser.user.tag_query_limit).fast_count(timeout: CurrentUser.statement_timeout, estimate_count: estimate_count, skip_cache: skip_cache)
if request.format.xml?
respond_with({ posts: @count }, root: "counts")

View File

@@ -13,8 +13,7 @@ class DiscordSlashCommand
def call
tags = params[:tags]
query = PostQueryBuilder.new(tags, User.anonymous, tag_limit: nil).normalized_query
count = query.fast_count(timeout: 9_000, estimate_count: false, skip_cache: true)
count = PostQuery.new(tags).fast_count(timeout: 9_000, estimate_count: false, skip_cache: true)
respond_with("`#{tags}`: #{count} posts")
end

View File

@@ -3,15 +3,20 @@
class PostQuery
extend Memoist
attr_reader :search, :parser, :ast
attr_reader :search, :parser, :builder, :ast
delegate :tag_names, :metatags, to: :ast
def initialize(search)
def initialize(search, current_user: User.anonymous, tag_limit: nil, safe_mode: false, hide_deleted_posts: false)
@search = search
@parser = Parser.new(search)
@builder = PostQueryBuilder.new(search, current_user, tag_limit: tag_limit, safe_mode: safe_mode, hide_deleted_posts: hide_deleted_posts)
@ast = parser.parse.simplify
end
def fast_count(...)
builder.normalized_query.fast_count(...)
end
def tags
Tag.where(name: tag_names)
end

View File

@@ -126,7 +126,7 @@ class TagImplication < TagRelationship
errors.add(:base, "'#{antecedent_name}' must have at least #{(MINIMUM_TAG_PERCENTAGE * consequent_tag.post_count).to_i} posts")
end
max_count = MAXIMUM_TAG_PERCENTAGE * PostQueryBuilder.new("~#{antecedent_name} ~#{consequent_name}").fast_count(timeout: 0).to_i
max_count = MAXIMUM_TAG_PERCENTAGE * PostQuery.new("~#{antecedent_name} ~#{consequent_name}").fast_count(timeout: 0).to_i
if antecedent_tag.post_count > max_count && max_count > 0
errors.add(:base, "'#{antecedent_name}' can't make up more than #{(MAXIMUM_TAG_PERCENTAGE * 100).to_i}% of '#{consequent_name}'")
end

View File

@@ -70,7 +70,7 @@ class UserPresenter
end
def commented_posts_count(template)
count = PostQueryBuilder.new("commenter:#{user.name}").fast_count
count = PostQuery.new("commenter:#{user.name}").fast_count
count = "?" if count.nil?
template.link_to(count, template.posts_path(tags: "commenter:#{user.name} order:comment_bumped"), rel: "nofollow")
end
@@ -84,7 +84,7 @@ class UserPresenter
end
def noted_posts_count(template)
count = PostQueryBuilder.new("noteupdater:#{user.name}").fast_count
count = PostQuery.new("noteupdater:#{user.name}").fast_count
count = "?" if count.nil?
template.link_to(count, template.posts_path(tags: "noteupdater:#{user.name} order:note"), rel: "nofollow")
end