From 38f240b3eb7718e583bff912331220c0950859ae Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 10 Jul 2025 14:43:00 -0500 Subject: [PATCH] fix info/neighbor page loading --- .gitignore | 1 + config/dev.exs | 2 +- lib/aprsme/packets/query_builder.ex | 3 ++- lib/aprsme_web/live/packets_live/callsign_view.ex | 4 +++- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 8d77945..2fa4d8f 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ k8s/secrets.yaml /vendor /temp +server.log diff --git a/config/dev.exs b/config/dev.exs index ef1c51b..1574c54 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -17,7 +17,7 @@ config :aprsme, Aprsme.Repo, pool_size: 10, pool_timeout: 5000, timeout: 15_000, - log: false, + log: :debug, types: Aprsme.PostgresTypes config :aprsme, AprsmeWeb.Endpoint, diff --git a/lib/aprsme/packets/query_builder.ex b/lib/aprsme/packets/query_builder.ex index 2579794..5776b61 100644 --- a/lib/aprsme/packets/query_builder.ex +++ b/lib/aprsme/packets/query_builder.ex @@ -38,11 +38,12 @@ defmodule Aprsme.Packets.QueryBuilder do @doc """ Filters query by exact callsign match (case-insensitive). + Uses the functional index on upper(sender) for performance. """ @spec for_callsign(Ecto.Query.t(), String.t()) :: Ecto.Query.t() def for_callsign(query, callsign) when is_binary(callsign) do normalized = String.upcase(String.trim(callsign)) - from p in query, where: ilike(p.sender, ^normalized) + from p in query, where: fragment("upper(?)", p.sender) == ^normalized end @doc """ diff --git a/lib/aprsme_web/live/packets_live/callsign_view.ex b/lib/aprsme_web/live/packets_live/callsign_view.ex index 6e723d1..8dfb6e1 100644 --- a/lib/aprsme_web/live/packets_live/callsign_view.ex +++ b/lib/aprsme_web/live/packets_live/callsign_view.ex @@ -117,7 +117,9 @@ defmodule AprsmeWeb.PacketsLive.CallsignView do limit: ^limit # Apply callsign filter using sender field for exact matching - filtered_query = from p in query, where: ilike(p.sender, ^callsign) + # Use functional index on upper(sender) for performance + normalized_callsign = String.upcase(String.trim(callsign)) + filtered_query = from p in query, where: fragment("upper(?)", p.sender) == ^normalized_callsign filtered_query |> Repo.all()