Simplify by removing search parser escape

This commit is contained in:
Claudio Ortolina
2025-09-13 08:28:57 +03:00
parent 62578de950
commit 1e211ce32a
2 changed files with 7 additions and 33 deletions
+3 -8
View File
@@ -59,18 +59,13 @@ defmodule MusicLibrary.Records do
end end
defp fts_escape(term) do defp fts_escape(term) do
# The SearchParser may have already doubled single quotes
# For FTS5, we need to wrap special terms in double quotes instead
# First, undo the SearchParser's quote doubling
clean_term = String.replace(term, "''", "'")
# For FTS5, if the term contains special characters, we need to wrap it in double quotes # For FTS5, if the term contains special characters, we need to wrap it in double quotes
if String.contains?(clean_term, ["'", " ", "\"", "(", ")", "^", "-", ":"]) do if String.contains?(term, ["'", " ", "\"", "(", ")", "^", "-", ":"]) do
# Escape internal double quotes and wrap in double quotes # Escape internal double quotes and wrap in double quotes
escaped = String.replace(clean_term, "\"", "\"\"") escaped = String.replace(term, "\"", "\"\"")
"\"#{escaped}\"*" "\"#{escaped}\"*"
else else
"#{clean_term}*" "#{term}*"
end end
end end
+4 -25
View File
@@ -86,8 +86,6 @@ defmodule MusicLibrary.Records.SearchParser do
{:ok, %{query: ""}} {:ok, %{query: ""}}
iex> MusicLibrary.Records.SearchParser.parse("type:album") iex> MusicLibrary.Records.SearchParser.parse("type:album")
{:ok, %{type: :album}} {:ok, %{type: :album}}
iex> MusicLibrary.Records.SearchParser.parse("Spock's Beard")
{:ok, %{query: "Spock''s Beard"}}
""" """
def parse(""), do: {:ok, %{query: ""}} def parse(""), do: {:ok, %{query: ""}}
@@ -110,26 +108,16 @@ defmodule MusicLibrary.Records.SearchParser do
defp normalize(result) do defp normalize(result) do
Enum.reduce(result, %{}, fn Enum.reduce(result, %{}, fn
{:artist, [{:query, [value]}]}, acc -> {:artist, [{:query, [value]}]}, acc ->
Map.update( Map.update(acc, :artist, value, &(&1 <> " " <> value))
acc,
:artist,
escape_special_characters(value),
&(&1 <> " " <> escape_special_characters(value))
)
{:album, [{:query, [value]}]}, acc -> {:album, [{:query, [value]}]}, acc ->
Map.update( Map.update(acc, :album, value, &(&1 <> " " <> value))
acc,
:album,
escape_special_characters(value),
&(&1 <> " " <> escape_special_characters(value))
)
{:mbid, [{:query, [value]}]}, acc -> {:mbid, [{:query, [value]}]}, acc ->
Map.put(acc, :mbid, value) Map.put(acc, :mbid, value)
{:genre, [{:query, [value]}]}, acc -> {:genre, [{:query, [value]}]}, acc ->
Map.put(acc, :genre, escape_special_characters(value)) Map.put(acc, :genre, value)
{:format, [value]}, acc -> {:format, [value]}, acc ->
Map.put(acc, :format, value) Map.put(acc, :format, value)
@@ -138,12 +126,7 @@ defmodule MusicLibrary.Records.SearchParser do
Map.put(acc, :type, value) Map.put(acc, :type, value)
{:query, [value]}, acc -> {:query, [value]}, acc ->
Map.update( Map.update(acc, :query, value, &(&1 <> " " <> value))
acc,
:query,
escape_special_characters(value),
&(&1 <> " " <> escape_special_characters(value))
)
_, %{} -> _, %{} ->
%{query: ""} %{query: ""}
@@ -152,8 +135,4 @@ defmodule MusicLibrary.Records.SearchParser do
acc acc
end) end)
end end
defp escape_special_characters(value) do
String.replace(value, "'", "''")
end
end end