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
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
if String.contains?(clean_term, ["'", " ", "\"", "(", ")", "^", "-", ":"]) do
if String.contains?(term, ["'", " ", "\"", "(", ")", "^", "-", ":"]) do
# Escape internal double quotes and wrap in double quotes
escaped = String.replace(clean_term, "\"", "\"\"")
escaped = String.replace(term, "\"", "\"\"")
"\"#{escaped}\"*"
else
"#{clean_term}*"
"#{term}*"
end
end
+4 -25
View File
@@ -86,8 +86,6 @@ defmodule MusicLibrary.Records.SearchParser do
{:ok, %{query: ""}}
iex> MusicLibrary.Records.SearchParser.parse("type:album")
{:ok, %{type: :album}}
iex> MusicLibrary.Records.SearchParser.parse("Spock's Beard")
{:ok, %{query: "Spock''s Beard"}}
"""
def parse(""), do: {:ok, %{query: ""}}
@@ -110,26 +108,16 @@ defmodule MusicLibrary.Records.SearchParser do
defp normalize(result) do
Enum.reduce(result, %{}, fn
{:artist, [{:query, [value]}]}, acc ->
Map.update(
acc,
:artist,
escape_special_characters(value),
&(&1 <> " " <> escape_special_characters(value))
)
Map.update(acc, :artist, value, &(&1 <> " " <> value))
{:album, [{:query, [value]}]}, acc ->
Map.update(
acc,
:album,
escape_special_characters(value),
&(&1 <> " " <> escape_special_characters(value))
)
Map.update(acc, :album, value, &(&1 <> " " <> value))
{:mbid, [{:query, [value]}]}, acc ->
Map.put(acc, :mbid, value)
{:genre, [{:query, [value]}]}, acc ->
Map.put(acc, :genre, escape_special_characters(value))
Map.put(acc, :genre, value)
{:format, [value]}, acc ->
Map.put(acc, :format, value)
@@ -138,12 +126,7 @@ defmodule MusicLibrary.Records.SearchParser do
Map.put(acc, :type, value)
{:query, [value]}, acc ->
Map.update(
acc,
:query,
escape_special_characters(value),
&(&1 <> " " <> escape_special_characters(value))
)
Map.update(acc, :query, value, &(&1 <> " " <> value))
_, %{} ->
%{query: ""}
@@ -152,8 +135,4 @@ defmodule MusicLibrary.Records.SearchParser do
acc
end)
end
defp escape_special_characters(value) do
String.replace(value, "'", "''")
end
end