diff options
author | Mickaël Rémond <mickael.remond@process-one.net> | 2007-11-03 17:35:23 +0000 |
---|---|---|
committer | Mickaël Rémond <mickael.remond@process-one.net> | 2007-11-03 17:35:23 +0000 |
commit | d6967f2745d22af13bd677ff8593e2f24bd51a3b (patch) | |
tree | 3802a40379dfd044354c7ac36c61763ab2b4ccd8 /src/odbc/odbc_queries.erl | |
parent | * ChangeLog: Fixed typo. (diff) |
* src/ejabberd_auth.erl: Better count management and batch users retrieval for relational database (Thanks to Massimiliano Mirra).
* src/ejabberd_auth_odbc.erl: Likewise.
* src/odbc/odbc_queries.erl: Likewise.
SVN Revision: 968
Diffstat (limited to 'src/odbc/odbc_queries.erl')
-rw-r--r-- | src/odbc/odbc_queries.erl | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl index 9b0ec61a3..c2ba81f9b 100644 --- a/src/odbc/odbc_queries.erl +++ b/src/odbc/odbc_queries.erl @@ -15,7 +15,9 @@ del_user/2, del_user_return_password/3, list_users/1, + list_users/2, users_number/1, + users_number/2, add_spool_sql/2, add_spool/2, get_and_del_spool_msg_t/2, @@ -111,6 +113,34 @@ list_users(LServer) -> LServer, "select username from users"). +list_users(LServer, [{from, Start}, {to, End}]) when is_integer(Start) and + is_integer(End) -> + list_users(LServer, [{limit, End-Start}, {offset, Start-1}]); +list_users(LServer, [{prefix, Prefix}, {from, Start}, {to, End}]) when is_list(Prefix) and + is_integer(Start) and + is_integer(End) -> + list_users(LServer, [{prefix, Prefix}, {limit, End-Start}, {offset, Start}]); + +list_users(LServer, [{limit, Limit}, {offset, Offset}]) when is_integer(Limit) and + is_integer(Offset) -> + ejabberd_odbc:sql_query( + LServer, + io_lib:format( + "select username from users " ++ + "order by username " ++ + "limit ~w offset ~w", [Limit, Offset])); +list_users(LServer, [{prefix, Prefix}, + {limit, Limit}, + {offset, Offset}]) when is_list(Prefix) and + is_integer(Limit) and + is_integer(Offset) -> + ejabberd_odbc:sql_query( + LServer, + io_lib:format("select username from users " ++ + "where username like '~s%' " ++ + "order by username " ++ + "limit ~w offset ~w ", [Prefix, Limit, Offset])). + users_number(LServer) -> case ejabberd_config:get_local_option( {pgsql_users_number_estimate, LServer}) of @@ -125,6 +155,17 @@ users_number(LServer) -> "select count(*) from users") end. +users_number(LServer, [{prefix, Prefix}]) when is_list(Prefix) -> + ejabberd_odbc:sql_query( + LServer, + io_lib:fwrite("select count(*) from users " ++ + %% Warning: Escape prefix at higher level to prevent SQL + %% injection. + "where username like '~s%'", [Prefix])); +users_number(LServer, []) -> + users_number(LServer). + + add_spool_sql(Username, XML) -> ["insert into spool(username, xml) " "values ('", Username, "', '", |