diff --git a/lib/error_tracker/migration.ex b/lib/error_tracker/migration.ex index 4eb7455..e6fdc19 100644 --- a/lib/error_tracker/migration.ex +++ b/lib/error_tracker/migration.ex @@ -109,10 +109,10 @@ defmodule ErrorTracker.Migration do end defp migrator do - case ErrorTracker.Repo.__adapter__() do - Ecto.Adapters.Postgres -> ErrorTracker.Migration.Postgres - Ecto.Adapters.SQLite3 -> ErrorTracker.Migration.SQLite + ErrorTracker.Repo.with_adapter(fn + :postgres -> ErrorTracker.Migration.Postgres + :sqlite -> ErrorTracker.Migration.SQLite adapter -> raise "ErrorTracker does not support #{adapter}" - end + end) end end diff --git a/lib/error_tracker/migration/sql_migrator.ex b/lib/error_tracker/migration/sql_migrator.ex index 68b214e..a58747c 100644 --- a/lib/error_tracker/migration/sql_migrator.ex +++ b/lib/error_tracker/migration/sql_migrator.ex @@ -63,8 +63,8 @@ defmodule ErrorTracker.Migration.SQLMigrator do defp record_version(opts, version) do timestamp = DateTime.utc_now() |> DateTime.to_unix() - case repo().__adapter__() do - Ecto.Adapters.Postgres -> + ErrorTracker.Repo.with_adapter(fn + :postgres -> prefix = opts[:prefix] execute """ @@ -79,12 +79,12 @@ defmodule ErrorTracker.Migration.SQLMigrator do VALUES ('migration_version', '#{version}'), ('migration_timestamp', '#{timestamp}') ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value """ - end + end) end defp meta_table_exists?(repo, opts) do - case repo.__adapter__() do - Ecto.Adapters.Postgres -> + ErrorTracker.Repo.with_adapter(fn + :postgres -> Ecto.Adapters.SQL.query!( repo, "SELECT TRUE FROM information_schema.tables WHERE table_name = 'error_tracker_meta' AND table_schema = $1", @@ -96,6 +96,6 @@ defmodule ErrorTracker.Migration.SQLMigrator do _other -> Ecto.Adapters.SQL.table_exists?(repo, "error_tracker_meta", log: false) - end + end) end end diff --git a/lib/error_tracker/repo.ex b/lib/error_tracker/repo.ex index ab8c448..9c99e11 100644 --- a/lib/error_tracker/repo.ex +++ b/lib/error_tracker/repo.ex @@ -29,19 +29,24 @@ defmodule ErrorTracker.Repo do dispatch(:aggregate, [queryable, aggregate], opts) end - def __adapter__, do: repo().__adapter__() + def with_adapter(fun) do + adapter = + case repo().__adapter__() do + Ecto.Adapters.Postgres -> :postgres + Ecto.Adapters.SQLite3 -> :sqlite + end + + fun.(adapter) + end defp dispatch(action, args, opts) do repo = repo() defaults = - case repo.__adapter__() do - Ecto.Adapters.Postgres -> - [prefix: Application.get_env(:error_tracker, :prefix, "public")] - - _ -> - [] - end + with_adapter(fn + :postgres -> [prefix: Application.get_env(:error_tracker, :prefix, "public")] + _ -> [] + end) opts_w_defaults = Keyword.merge(defaults, opts)