Simplify by removing search parser escape
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user