54 lines
1.4 KiB
Erlang
54 lines
1.4 KiB
Erlang
%% @doc Indexes for per-admin stats: report.resolved_by, ticket.assigned_to.
|
|
-module('20260717190000_admin_stats_indexes').
|
|
|
|
-export([up/0, down/0]).
|
|
|
|
-include("records.hrl").
|
|
|
|
up() ->
|
|
ensure_index(report, resolved_by, #report.resolved_by),
|
|
ensure_index(ticket, assigned_to, #ticket.assigned_to),
|
|
ok.
|
|
|
|
down() ->
|
|
del_index(report, resolved_by),
|
|
del_index(ticket, assigned_to),
|
|
ok.
|
|
|
|
ensure_index(Table, Attr, Pos) ->
|
|
case lists:member(Table, mnesia:system_info(tables)) of
|
|
false ->
|
|
ok;
|
|
true ->
|
|
Indexes = mnesia:table_info(Table, index),
|
|
HasIndex = lists:any(fun
|
|
(A) when A =:= Attr -> true;
|
|
(N) when is_integer(N) -> N =:= Pos;
|
|
(_) -> false
|
|
end, Indexes),
|
|
case HasIndex of
|
|
true ->
|
|
ok;
|
|
false ->
|
|
case mnesia:add_table_index(Table, Attr) of
|
|
{atomic, ok} -> ok;
|
|
{aborted, {already_exists, _}} -> ok;
|
|
{aborted, {already_exists, _, _}} -> ok;
|
|
{aborted, Reason} -> error({add_index_failed, Table, Attr, Reason})
|
|
end
|
|
end
|
|
end.
|
|
|
|
del_index(Table, Attr) ->
|
|
case lists:member(Table, mnesia:system_info(tables)) of
|
|
false ->
|
|
ok;
|
|
true ->
|
|
case catch mnesia:del_table_index(Table, Attr) of
|
|
{atomic, ok} -> ok;
|
|
{aborted, {no_exists, _}} -> ok;
|
|
{aborted, {no_exists, _, _}} -> ok;
|
|
_ -> ok
|
|
end
|
|
end.
|