defmodule EctoSparkles.NPlus1Detector do @moduledoc """ Checks a query against the previous one and increments counter of collisions or swaps previous query with the last one. """ # Increase counter or swaps query def check("SELECT" <> _rest = query) do do_check(query, get(query)) end def check(_query) do nil end defp get(query) do Process.get("one_plus_n_detector: #{query}") end defp put(query, counter) do Process.put("one_plus_n_detector: #{query}", counter) end def do_check(query, nil) do put(query, 1) :first end def do_check(query, counter) do counter = counter + 1 put(query, counter) {:match, counter} end end