diff options
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, "', '", |