Deduplicate query_with

This commit is contained in:
itepechi 2023-08-07 03:53:53 +09:00
parent aba4e6ea60
commit af349b073a
2 changed files with 21 additions and 24 deletions

View File

@ -8,6 +8,7 @@ defmodule Mix.Tasks.Pleroma.Activity do
alias Pleroma.User
alias Pleroma.Web.CommonAPI
alias Pleroma.Pagination
alias Pleroma.Search.DatabaseSearch
require Logger
import Mix.Pleroma
import Ecto.Query
@ -24,11 +25,25 @@ defmodule Mix.Tasks.Pleroma.Activity do
start_pleroma()
u = User.get_by_nickname(user)
index_type =
cond do
Pleroma.Config.get([:database, :rum_enabled]) -> :rum
Pleroma.Config.get([:database, :pgroonga_enabled]) -> :pgroonga
true -> :gin
end
search_function =
if :persistent_term.get({Pleroma.Repo, :postgres_version}) >= 11 do
:websearch
else
:plain
end
Activity
|> Activity.with_preloaded_object()
|> Activity.restrict_deactivated_users()
|> Activity.Queries.by_author(u)
|> query_with(keyword)
|> DatabaseSearch.query_with(index_type, keyword, search_function)
|> Pagination.fetch_paginated(
%{"offset" => 0, "limit" => 20, "skip_order" => false},
:offset
@ -37,22 +52,4 @@ defmodule Mix.Tasks.Pleroma.Activity do
|> Enum.count()
|> IO.puts()
end
defp query_with(q, search_query) do
%{rows: [[tsc]]} =
Ecto.Adapters.SQL.query!(
Pleroma.Repo,
"select current_setting('default_text_search_config')::regconfig::oid;"
)
from([a, o] in q,
where:
fragment(
"to_tsvector(?::oid::regconfig, ?->>'content') @@ websearch_to_tsquery(?)",
^tsc,
o.data,
^search_query
)
)
end
end

View File

@ -78,7 +78,7 @@ defmodule Pleroma.Search.DatabaseSearch do
)
end
defp query_with(q, :gin, search_query, :plain) do
def query_with(q, :gin, search_query, :plain) do
%{rows: [[tsc]]} =
Ecto.Adapters.SQL.query!(
Pleroma.Repo,
@ -96,7 +96,7 @@ defmodule Pleroma.Search.DatabaseSearch do
)
end
defp query_with(q, :gin, search_query, :websearch) do
def query_with(q, :gin, search_query, :websearch) do
%{rows: [[tsc]]} =
Ecto.Adapters.SQL.query!(
Pleroma.Repo,
@ -114,7 +114,7 @@ defmodule Pleroma.Search.DatabaseSearch do
)
end
defp query_with(q, :rum, search_query, :plain) do
def query_with(q, :rum, search_query, :plain) do
from([a, o] in q,
where:
fragment(
@ -126,7 +126,7 @@ defmodule Pleroma.Search.DatabaseSearch do
)
end
defp query_with(q, :rum, search_query, :websearch) do
def query_with(q, :rum, search_query, :websearch) do
from([a, o] in q,
where:
fragment(
@ -138,7 +138,7 @@ defmodule Pleroma.Search.DatabaseSearch do
)
end
defp query_with(q, :pgroonga, search_query, _) do
def query_with(q, :pgroonga, search_query, _) do
# PGroonga only supports PostgreSQL version 11 or newer
from([a, o] in q,
where: