]> granicus.if.org Git - ejabberd/commitdiff
Better count management and batch users retrieval internal database
authorChristophe Romain <christophe.romain@process-one.net>
Fri, 16 Nov 2007 13:58:00 +0000 (13:58 +0000)
committerChristophe Romain <christophe.romain@process-one.net>
Fri, 16 Nov 2007 13:58:00 +0000 (13:58 +0000)
SVN Revision: 972

ChangeLog
src/ejabberd_auth.erl
src/ejabberd_auth_internal.erl
src/ejabberd_auth_odbc.erl

index d74c079bd632c75f8a1754e196a2cbc6ce6b1227..30f88d3f62085309008fcfdb972bea5cc9ae7462 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-16  Christophe Romain <christophe.romain@process-one.net>
+
+       * src/ejabberd_auth_internal.erl: Better count management and batch users
+       retrieval internal database
+
 2007-11-05  Mickael Remond  <mremond@process-one.net>
 
        * src/ejabberd_config.erl: Refactoring: Move internal
index d62cf333f48723ec0864c3776c9573db998c66f9..826b262002c2ac11f9d9976286b90142ca117c7a 100644 (file)
         try_register/3,
         dirty_get_registered_users/0,
         get_vh_registered_users/1,
-         get_vh_registered_users/2,
+        get_vh_registered_users/2,
         get_vh_registered_users_number/1,
-         get_vh_registered_users_number/2,
+        get_vh_registered_users_number/2,
         get_password/2,
         get_password_s/2,
         is_user_exists/2,
-         is_user_exists_in_other_modules/3,
+        is_user_exists_in_other_modules/3,
         remove_user/2,
         remove_user/3,
         plain_password_required/1,
index 62e7654215e8ed344ee1d33de8adefa3e2069eb5..891a5aa175dbe589f560abb932d04837ac873458 100644 (file)
@@ -18,6 +18,9 @@
         try_register/3,
         dirty_get_registered_users/0,
         get_vh_registered_users/1,
+        get_vh_registered_users/2,
+        get_vh_registered_users_number/1,
+        get_vh_registered_users_number/2,
         get_password/2,
         get_password_s/2,
         is_user_exists/2,
@@ -122,10 +125,67 @@ get_vh_registered_users(Server) ->
     LServer = jlib:nameprep(Server),
     mnesia:dirty_select(
       passwd,
-      [{#passwd{us = '$1', _ = '_'},
-       [{'==', {element, 2, '$1'}, LServer}],
+      [{#passwd{us = '$1', _ = '_'}, 
+       [{'==', {element, 2, '$1'}, LServer}], 
        ['$1']}]).
 
+get_vh_registered_users(Server, [{from, Start}, {to, End}]) 
+       when is_integer(Start) and is_integer(End) ->
+    get_vh_registered_users(Server, [{limit, End-Start+1}, {offset, Start}]);
+
+get_vh_registered_users(Server, [{limit, Limit}, {offset, Offset}]) 
+       when is_integer(Limit) and is_integer(Offset) ->
+    case get_vh_registered_users(Server) of
+    [] ->
+       [];
+    Users ->
+       Set = lists:keysort(1, Users),
+       L = length(Set),
+       Start = if Offset < 1 -> 1;
+                  Offset > L -> L;
+                  true -> Offset
+               end,
+       lists:sublist(Set, Start, Limit)
+    end;
+
+get_vh_registered_users(Server, [{prefix, Prefix}]) 
+       when is_list(Prefix) ->
+    Set = [{U,S} || {U, S} <- get_vh_registered_users(Server), lists:prefix(Prefix, U)],
+    lists:keysort(1, Set);
+
+get_vh_registered_users(Server, [{prefix, Prefix}, {from, Start}, {to, End}]) 
+       when is_list(Prefix) and is_integer(Start) and is_integer(End) ->
+    get_vh_registered_users(Server, [{prefix, Prefix}, {limit, End-Start+1}, {offset, Start}]);
+
+get_vh_registered_users(Server, [{prefix, Prefix}, {limit, Limit}, {offset, Offset}]) 
+       when is_list(Prefix) and is_integer(Limit) and is_integer(Offset) ->
+    case [{U,S} || {U, S} <- get_vh_registered_users(Server), lists:prefix(Prefix, U)] of
+    [] ->
+       [];
+    Users ->
+       Set = lists:keysort(1, Users),
+       L = length(Set),
+       Start = if Offset < 1 -> 1;
+                  Offset > L -> L;
+                  true -> Offset
+               end,
+       lists:sublist(Set, Start, Limit)
+    end;
+
+get_vh_registered_users(Server, _) ->
+    get_vh_registered_users(Server).
+
+get_vh_registered_users_number(Server) ->
+    Set = get_vh_registered_users(Server),
+    length(Set).
+
+get_vh_registered_users_number(Server, [{prefix, Prefix}]) when is_list(Prefix) ->
+    Set = [{U, S} || {U, S} <- get_vh_registered_users(Server), lists:prefix(Prefix, U)],
+    length(Set);
+    
+get_vh_registered_users_number(Server, _) ->
+    get_vh_registered_users_number(Server).
+
 get_password(User, Server) ->
     LUser = jlib:nodeprep(User),
     LServer = jlib:nameprep(Server),
index cc65aa0532cddc430f16f8888f08846e6c756bd1..1f2228ea197250ee6cfcff2c1ad0edcc852e745c 100644 (file)
@@ -18,9 +18,9 @@
         try_register/3,
         dirty_get_registered_users/0,
         get_vh_registered_users/1,
-         get_vh_registered_users/2,
+        get_vh_registered_users/2,
         get_vh_registered_users_number/1,
-         get_vh_registered_users_number/2,
+        get_vh_registered_users_number/2,
         get_password/2,
         get_password_s/2,
         is_user_exists/2,