summaryrefslogtreecommitdiff
path: root/src/ejabberd_mnesia.erl
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2017-01-17 14:53:41 +0100
committerChristophe Romain <christophe.romain@process-one.net>2017-01-17 14:53:41 +0100
commit0ea6c1dcf6fdc72e9a5c969cddd9938f7e62a7f1 (patch)
treedeb3afe7f98a5d2421e529016d53cb005c1359c1 /src/ejabberd_mnesia.erl
parentSpeedup table setup, no io if EJABBERD_SCHEMA_PATH not set (#1461) (diff)
Fix index processing (#1461)
Diffstat (limited to 'src/ejabberd_mnesia.erl')
-rw-r--r--src/ejabberd_mnesia.erl11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/ejabberd_mnesia.erl b/src/ejabberd_mnesia.erl
index 63f6b1de..0a234a9d 100644
--- a/src/ejabberd_mnesia.erl
+++ b/src/ejabberd_mnesia.erl
@@ -44,7 +44,7 @@ create(Module, Name, TabDef) ->
Attrs ->
case need_reset(TabDef, Schema) of
true -> reset(Name, Schema);
- false -> update(Name, Schema)
+ false -> update(Name, Attrs, Schema)
end;
OldAttrs ->
Fun = case lists:member({transform,1}, Module:module_info(exports)) of
@@ -59,6 +59,9 @@ reset(Name, TabDef) ->
ejabberd_mnesia:create(?MODULE, Name, TabDef).
update(Name, TabDef) ->
+ {attributes, Attrs} = lists:keyfind(attributes, 1, TabDef),
+ update(Name, Attrs, TabDef).
+update(Name, Attrs, TabDef) ->
Storage = mnesia:table_info(Name, storage_type),
NewStorage = lists:foldl(
fun({Key, _}, Acc) ->
@@ -72,12 +75,12 @@ update(Name, TabDef) ->
true ->
{atomic, ok}
end,
- Indexes = mnesia:table_info(Name, index),
+ CurIndexes = [lists:nth(N-1, Attrs) || N<-mnesia:table_info(Name, index)],
NewIndexes = proplists:get_value(index, TabDef, []),
[mnesia:del_table_index(Name, Attr)
- || Attr <- Indexes--NewIndexes],
+ || Attr <- CurIndexes--NewIndexes],
R2 = [mnesia:add_table_index(Name, Attr)
- || Attr <- NewIndexes--Indexes],
+ || Attr <- NewIndexes--CurIndexes],
lists:foldl(
fun({atomic, ok}, Acc) -> Acc;
(Error, _Acc) -> Error