diff options
Diffstat (limited to 'src/odbc/odbc_queries.erl')
-rw-r--r-- | src/odbc/odbc_queries.erl | 1221 |
1 files changed, 626 insertions, 595 deletions
diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl index bd4812609..66da7906f 100644 --- a/src/odbc/odbc_queries.erl +++ b/src/odbc/odbc_queries.erl @@ -25,52 +25,28 @@ %%%---------------------------------------------------------------------- -module(odbc_queries). + -author("mremond@process-one.net"). --export([get_db_type/0, - update_t/4, - sql_transaction/2, - get_last/2, - set_last_t/4, - del_last/2, - get_password/2, - set_password_t/3, - add_user/3, - 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, - del_spool_msg/2, - get_roster/2, - get_roster_jid_groups/2, - get_roster_groups/3, - del_user_roster_t/2, - get_roster_by_jid/3, - get_rostergroup_by_jid/3, - del_roster/3, - del_roster_sql/2, - update_roster/5, - update_roster_sql/4, - roster_subscribe/4, - get_subscription/3, - set_private_data/4, - set_private_data_sql/3, - get_private_data/3, - del_user_private_storage/2, - get_default_privacy_list/2, - get_default_privacy_list_t/1, - get_privacy_list_names/2, - get_privacy_list_names_t/1, - get_privacy_list_id/3, - get_privacy_list_id_t/2, - get_privacy_list_data/3, +-export([get_db_type/0, update_t/4, sql_transaction/2, + get_last/2, set_last_t/4, del_last/2, get_password/2, + set_password_t/3, add_user/3, 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, del_spool_msg/2, + get_roster/2, get_roster_jid_groups/2, + get_roster_groups/3, del_user_roster_t/2, + get_roster_by_jid/3, get_rostergroup_by_jid/3, + del_roster/3, del_roster_sql/2, update_roster/5, + update_roster_sql/4, roster_subscribe/4, + get_subscription/3, set_private_data/4, + set_private_data_sql/3, get_private_data/3, get_private_data/2, + del_user_private_storage/2, get_default_privacy_list/2, + get_default_privacy_list_t/1, get_privacy_list_names/2, + get_privacy_list_names_t/1, get_privacy_list_id/3, + get_privacy_list_id_t/2, get_privacy_list_data/3, get_privacy_list_data_by_id/2, - get_privacy_list_data_by_id_t/1, + get_privacy_list_data_by_id_t/1, set_default_privacy_list/2, unset_default_privacy_list/2, remove_privacy_list/2, @@ -88,8 +64,11 @@ %-define(generic, true). %-define(mssql, true). -ifndef(mssql). + -undef(generic). + -define(generic, true). + -endif. -include("ejabberd.hrl"). @@ -97,49 +76,49 @@ %% Almost a copy of string:join/2. %% We use this version because string:join/2 is relatively %% new function (introduced in R12B-0). -join([], _Sep) -> - []; -join([H|T], Sep) -> - [H, [[Sep, X] || X <- T]]. +join([], _Sep) -> []; +join([H | T], Sep) -> [H, [[Sep, X] || X <- T]]. %% ----------------- %% Generic queries -ifdef(generic). -get_db_type() -> - generic. +get_db_type() -> generic. %% Safe atomic update. update_t(Table, Fields, Vals, Where) -> - UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end, + UPairs = lists:zipwith(fun (A, B) -> + <<A/binary, "='", B/binary, "'">> + end, Fields, Vals), - case ejabberd_odbc:sql_query_t( - ["update ", Table, " set ", - join(UPairs, ", "), - " where ", Where, ";"]) of - {updated, 1} -> - ok; - _ -> - ejabberd_odbc:sql_query_t( - ["insert into ", Table, "(", join(Fields, ", "), - ") values ('", join(Vals, "', '"), "');"]) + case ejabberd_odbc:sql_query_t([<<"update ">>, Table, + <<" set ">>, join(UPairs, <<", ">>), + <<" where ">>, Where, <<";">>]) + of + {updated, 1} -> ok; + _ -> + ejabberd_odbc:sql_query_t([<<"insert into ">>, Table, + <<"(">>, join(Fields, <<", ">>), + <<") values ('">>, join(Vals, <<"', '">>), + <<"');">>]) end. update(LServer, Table, Fields, Vals, Where) -> - UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end, + UPairs = lists:zipwith(fun (A, B) -> + <<A/binary, "='", B/binary, "'">> + end, Fields, Vals), - case ejabberd_odbc:sql_query( - LServer, - ["update ", Table, " set ", - join(UPairs, ", "), - " where ", Where, ";"]) of - {updated, 1} -> - ok; - _ -> - ejabberd_odbc:sql_query( - LServer, - ["insert into ", Table, "(", join(Fields, ", "), - ") values ('", join(Vals, "', '"), "');"]) + case ejabberd_odbc:sql_query(LServer, + [<<"update ">>, Table, <<" set ">>, + join(UPairs, <<", ">>), <<" where ">>, Where, + <<";">>]) + of + {updated, 1} -> ok; + _ -> + ejabberd_odbc:sql_query(LServer, + [<<"insert into ">>, Table, <<"(">>, + join(Fields, <<", ">>), <<") values ('">>, + join(Vals, <<"', '">>), <<"');">>]) end. %% F can be either a fun or a list of queries @@ -149,758 +128,810 @@ sql_transaction(LServer, F) -> ejabberd_odbc:sql_transaction(LServer, F). get_last(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["select seconds, state from last " - "where username='", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"select seconds, state from last where " + "username='">>, + Username, <<"'">>]). set_last_t(LServer, Username, Seconds, State) -> - update(LServer, "last", ["username", "seconds", "state"], + update(LServer, <<"last">>, + [<<"username">>, <<"seconds">>, <<"state">>], [Username, Seconds, State], - ["username='", Username, "'"]). + [<<"username='">>, Username, <<"'">>]). del_last(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["delete from last where username='", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"delete from last where username='">>, Username, + <<"'">>]). get_password(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["select password from users " - "where username='", Username, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"select password from users where username='">>, + Username, <<"';">>]). set_password_t(LServer, Username, Pass) -> - ejabberd_odbc:sql_transaction( - LServer, - fun() -> - update_t("users", ["username", "password"], - [Username, Pass], - ["username='", Username ,"'"]) - end). + ejabberd_odbc:sql_transaction(LServer, + fun () -> + update_t(<<"users">>, + [<<"username">>, + <<"password">>], + [Username, Pass], + [<<"username='">>, Username, + <<"'">>]) + end). add_user(LServer, Username, Pass) -> - ejabberd_odbc:sql_query( - LServer, - ["insert into users(username, password) " - "values ('", Username, "', '", Pass, "');"]). + ejabberd_odbc:sql_query(LServer, + [<<"insert into users(username, password) " + "values ('">>, + Username, <<"', '">>, Pass, <<"');">>]). del_user(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["delete from users where username='", Username ,"';"]). + ejabberd_odbc:sql_query(LServer, + [<<"delete from users where username='">>, Username, + <<"';">>]). del_user_return_password(_LServer, Username, Pass) -> - P = ejabberd_odbc:sql_query_t( - ["select password from users where username='", - Username, "';"]), - ejabberd_odbc:sql_query_t(["delete from users " - "where username='", Username, - "' and password='", Pass, "';"]), + P = + ejabberd_odbc:sql_query_t([<<"select password from users where username='">>, + Username, <<"';">>]), + ejabberd_odbc:sql_query_t([<<"delete from users where username='">>, + Username, <<"' and password='">>, Pass, + <<"';">>]), P. list_users(LServer) -> - ejabberd_odbc:sql_query( - 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+1}, {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+1}, {offset, Start-1}]); - -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])). + ejabberd_odbc:sql_query(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 + 1}, {offset, Start - 1}]); +list_users(LServer, + [{prefix, Prefix}, {from, Start}, {to, End}]) + when is_binary(Prefix) and is_integer(Start) and + is_integer(End) -> + list_users(LServer, + [{prefix, Prefix}, {limit, End - Start + 1}, + {offset, Start - 1}]); +list_users(LServer, [{limit, Limit}, {offset, Offset}]) + when is_integer(Limit) and is_integer(Offset) -> + ejabberd_odbc:sql_query(LServer, + [list_to_binary( + 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_binary(Prefix) and is_integer(Limit) and + is_integer(Offset) -> + ejabberd_odbc:sql_query(LServer, + [list_to_binary( + 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 element(1, ejabberd_config:get_local_option({odbc_server, LServer})) of - pgsql -> - case ejabberd_config:get_local_option({pgsql_users_number_estimate, LServer}) of - true -> - ejabberd_odbc:sql_query( - LServer, - "select reltuples from pg_class where oid = 'users'::regclass::oid"); - _ -> - ejabberd_odbc:sql_query( - LServer, - "select count(*) from users") - end; - _ -> - ejabberd_odbc:sql_query( - LServer, - "select count(*) from users") + case element(1, + ejabberd_config:get_local_option( + {odbc_server, LServer}, fun(V) -> V end)) + of + pgsql -> + case + ejabberd_config:get_local_option( + {pgsql_users_number_estimate, LServer}, + fun(V) when is_boolean(V) -> V end, + false) + of + true -> + ejabberd_odbc:sql_query(LServer, + [<<"select reltuples from pg_class where " + "oid = 'users'::regclass::oid">>]); + _ -> + ejabberd_odbc:sql_query(LServer, + [<<"select count(*) from users">>]) + end; + _ -> + ejabberd_odbc:sql_query(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, [{prefix, Prefix}]) + when is_binary(Prefix) -> + ejabberd_odbc:sql_query(LServer, + [list_to_binary( + 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, "', '", - XML, - "');"]. + [<<"insert into spool(username, xml) values ('">>, + Username, <<"', '">>, XML, <<"');">>]. add_spool(LServer, Queries) -> - ejabberd_odbc:sql_transaction( - LServer, Queries). + ejabberd_odbc:sql_transaction(LServer, Queries). get_and_del_spool_msg_t(LServer, Username) -> - F = fun() -> - Result = ejabberd_odbc:sql_query_t( - ["select username, xml from spool where username='", Username, "'" - " order by seq;"]), - ejabberd_odbc:sql_query_t( - ["delete from spool where username='", Username, "';"]), + F = fun () -> + Result = + ejabberd_odbc:sql_query_t([<<"select username, xml from spool where " + "username='">>, + Username, + <<"' order by seq;">>]), + ejabberd_odbc:sql_query_t([<<"delete from spool where username='">>, + Username, <<"';">>]), Result end, - ejabberd_odbc:sql_transaction(LServer,F). + ejabberd_odbc:sql_transaction(LServer, F). del_spool_msg(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["delete from spool where username='", Username, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"delete from spool where username='">>, Username, + <<"';">>]). get_roster(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["select username, jid, nick, subscription, ask, " - "askmessage, server, subscribe, type from rosterusers " - "where username='", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"select username, jid, nick, subscription, " + "ask, askmessage, server, subscribe, " + "type from rosterusers where username='">>, + Username, <<"'">>]). get_roster_jid_groups(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["select jid, grp from rostergroups " - "where username='", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"select jid, grp from rostergroups where " + "username='">>, + Username, <<"'">>]). get_roster_groups(_LServer, Username, SJID) -> - ejabberd_odbc:sql_query_t( - ["select grp from rostergroups " - "where username='", Username, "' " - "and jid='", SJID, "';"]). + ejabberd_odbc:sql_query_t([<<"select grp from rostergroups where username='">>, + Username, <<"' and jid='">>, SJID, <<"';">>]). del_user_roster_t(LServer, Username) -> - ejabberd_odbc:sql_transaction( - LServer, - fun() -> - ejabberd_odbc:sql_query_t( - ["delete from rosterusers " - " where username='", Username, "';"]), - ejabberd_odbc:sql_query_t( - ["delete from rostergroups " - " where username='", Username, "';"]) - end). + ejabberd_odbc:sql_transaction(LServer, + fun () -> + ejabberd_odbc:sql_query_t([<<"delete from rosterusers where " + "username='">>, + Username, + <<"';">>]), + ejabberd_odbc:sql_query_t([<<"delete from rostergroups where " + "username='">>, + Username, + <<"';">>]) + end). get_roster_by_jid(_LServer, Username, SJID) -> - ejabberd_odbc:sql_query_t( - ["select username, jid, nick, subscription, " - "ask, askmessage, server, subscribe, type from rosterusers " - "where username='", Username, "' " - "and jid='", SJID, "';"]). + ejabberd_odbc:sql_query_t([<<"select username, jid, nick, subscription, " + "ask, askmessage, server, subscribe, " + "type from rosterusers where username='">>, + Username, <<"' and jid='">>, SJID, <<"';">>]). get_rostergroup_by_jid(LServer, Username, SJID) -> - ejabberd_odbc:sql_query( - LServer, - ["select grp from rostergroups " - "where username='", Username, "' " - "and jid='", SJID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"select grp from rostergroups where username='">>, + Username, <<"' and jid='">>, SJID, <<"'">>]). del_roster(_LServer, Username, SJID) -> - ejabberd_odbc:sql_query_t( - ["delete from rosterusers " - " where username='", Username, "' " - " and jid='", SJID, "';"]), - ejabberd_odbc:sql_query_t( - ["delete from rostergroups " - " where username='", Username, "' " - " and jid='", SJID, "';"]). + ejabberd_odbc:sql_query_t([<<"delete from rosterusers where " + "username='">>, + Username, <<"' and jid='">>, SJID, + <<"';">>]), + ejabberd_odbc:sql_query_t([<<"delete from rostergroups where " + "username='">>, + Username, <<"' and jid='">>, SJID, + <<"';">>]). del_roster_sql(Username, SJID) -> - [["delete from rosterusers " - " where username='", Username, "' " - " and jid='", SJID, "';"], - ["delete from rostergroups " - " where username='", Username, "' " - " and jid='", SJID, "';"]]. - -update_roster(_LServer, Username, SJID, ItemVals, ItemGroups) -> - update_t("rosterusers", - ["username", "jid", "nick", "subscription", "ask", - "askmessage", "server", "subscribe", "type"], + [[<<"delete from rosterusers where " + "username='">>, + Username, <<"' and jid='">>, SJID, <<"';">>], + [<<"delete from rostergroups where " + "username='">>, + Username, <<"' and jid='">>, SJID, <<"';">>]]. + +update_roster(_LServer, Username, SJID, ItemVals, + ItemGroups) -> + update_t(<<"rosterusers">>, + [<<"username">>, <<"jid">>, <<"nick">>, + <<"subscription">>, <<"ask">>, <<"askmessage">>, + <<"server">>, <<"subscribe">>, <<"type">>], ItemVals, - ["username='", Username, "' and jid='", SJID, "'"]), - ejabberd_odbc:sql_query_t( - ["delete from rostergroups " - " where username='", Username, "' " - " and jid='", SJID, "';"]), - lists:foreach(fun(ItemGroup) -> - ejabberd_odbc:sql_query_t( - ["insert into rostergroups(" - " username, jid, grp) " - " values ('", join(ItemGroup, "', '"), "');"]) + [<<"username='">>, Username, <<"' and jid='">>, SJID, + <<"'">>]), + ejabberd_odbc:sql_query_t([<<"delete from rostergroups where " + "username='">>, + Username, <<"' and jid='">>, SJID, + <<"';">>]), + lists:foreach(fun (ItemGroup) -> + ejabberd_odbc:sql_query_t([<<"insert into rostergroups( " + " username, jid, grp) values ('">>, + join(ItemGroup, + <<"', '">>), + <<"');">>]) end, ItemGroups). -update_roster_sql(Username, SJID, ItemVals, ItemGroups) -> - [["delete from rosterusers " - " where username='", Username, "' " - " and jid='", SJID, "';"], - ["insert into rosterusers(" - " username, jid, nick, " - " subscription, ask, askmessage, " - " server, subscribe, type) " - " values ('", join(ItemVals, "', '"), "');"], - ["delete from rostergroups " - " where username='", Username, "' " - " and jid='", SJID, "';"]] ++ - [["insert into rostergroups(" - " username, jid, grp) " - " values ('", join(ItemGroup, "', '"), "');"] || - ItemGroup <- ItemGroups]. +update_roster_sql(Username, SJID, ItemVals, + ItemGroups) -> + [[<<"delete from rosterusers where " + "username='">>, + Username, <<"' and jid='">>, SJID, <<"';">>], + [<<"insert into rosterusers( " + " username, jid, nick, " + " subscription, ask, askmessage, " + " server, subscribe, type) " + "values ('">>, + join(ItemVals, <<"', '">>), <<"');">>], + [<<"delete from rostergroups where " + "username='">>, + Username, <<"' and jid='">>, SJID, <<"';">>]] + ++ + [[<<"insert into rostergroups( " + " username, jid, grp) values ('">>, + join(ItemGroup, <<"', '">>), <<"');">>] + || ItemGroup <- ItemGroups]. roster_subscribe(_LServer, Username, SJID, ItemVals) -> - update_t("rosterusers", - ["username", "jid", "nick", "subscription", "ask", - "askmessage", "server", "subscribe", "type"], + update_t(<<"rosterusers">>, + [<<"username">>, <<"jid">>, <<"nick">>, + <<"subscription">>, <<"ask">>, <<"askmessage">>, + <<"server">>, <<"subscribe">>, <<"type">>], ItemVals, - ["username='", Username, "' and jid='", SJID, "'"]). + [<<"username='">>, Username, <<"' and jid='">>, SJID, + <<"'">>]). get_subscription(LServer, Username, SJID) -> - ejabberd_odbc:sql_query( - LServer, - ["select subscription from rosterusers " - "where username='", Username, "' " - "and jid='", SJID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"select subscription from rosterusers " + "where username='">>, + Username, <<"' and jid='">>, SJID, <<"'">>]). set_private_data(_LServer, Username, LXMLNS, SData) -> - update_t("private_storage", - ["username", "namespace", "data"], - [Username, LXMLNS, SData], - ["username='", Username, "' and namespace='", LXMLNS, "'"]). + update_t(<<"private_storage">>, + [<<"username">>, <<"namespace">>, <<"data">>], + [Username, LXMLNS, SData], + [<<"username='">>, Username, <<"' and namespace='">>, + LXMLNS, <<"'">>]). set_private_data_sql(Username, LXMLNS, SData) -> - [["delete from private_storage " - "where username='", Username, "' and " - "namespace='", LXMLNS, "';"], - ["insert into private_storage(username, namespace, data) " - "values ('", Username, "', '", LXMLNS, "', " - "'", SData, "');"]]. + [[<<"delete from private_storage where username='">>, + Username, <<"' and namespace='">>, LXMLNS, <<"';">>], + [<<"insert into private_storage(username, " + "namespace, data) values ('">>, + Username, <<"', '">>, LXMLNS, <<"', '">>, SData, + <<"');">>]]. get_private_data(LServer, Username, LXMLNS) -> - ejabberd_odbc:sql_query( - LServer, - ["select data from private_storage " - "where username='", Username, "' and " - "namespace='", LXMLNS, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"select data from private_storage where " + "username='">>, + Username, <<"' and namespace='">>, LXMLNS, + <<"';">>]). + +get_private_data(LServer, Username) -> + ejabberd_odbc:sql_query(LServer, + [<<"select namespace, data from private_storage " + "where username='">>, Username, <<"';">>]). del_user_private_storage(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["delete from private_storage where username='", Username, "';"]). - -set_vcard(LServer, LUsername, SBDay, SCTRY, SEMail, SFN, SFamily, SGiven, - SLBDay, SLCTRY, SLEMail, SLFN, SLFamily, SLGiven, SLLocality, - SLMiddle, SLNickname, SLOrgName, SLOrgUnit, SLocality, SMiddle, - SNickname, SOrgName, SOrgUnit, SVCARD, Username) -> - ejabberd_odbc:sql_transaction( - LServer, - fun() -> - update_t("vcard", ["username", "vcard"], - [LUsername, SVCARD], - ["username='", LUsername, "'"]), - update_t("vcard_search", - ["username", "lusername", "fn", "lfn", "family", - "lfamily", "given", "lgiven", "middle", "lmiddle", - "nickname", "lnickname", "bday", "lbday", "ctry", - "lctry", "locality", "llocality", "email", "lemail", - "orgname", "lorgname", "orgunit", "lorgunit"], - [Username, LUsername, SFN, SLFN, SFamily, SLFamily, - SGiven, SLGiven, SMiddle, SLMiddle, SNickname, - SLNickname, SBDay, SLBDay, SCTRY, SLCTRY, - SLocality, SLLocality, SEMail, SLEMail, SOrgName, - SLOrgName, SOrgUnit, SLOrgUnit], - ["lusername='", LUsername, "'"]) - end). + ejabberd_odbc:sql_query(LServer, + [<<"delete from private_storage where username='">>, + Username, <<"';">>]). + +set_vcard(LServer, LUsername, SBDay, SCTRY, SEMail, SFN, + SFamily, SGiven, SLBDay, SLCTRY, SLEMail, SLFN, + SLFamily, SLGiven, SLLocality, SLMiddle, SLNickname, + SLOrgName, SLOrgUnit, SLocality, SMiddle, SNickname, + SOrgName, SOrgUnit, SVCARD, Username) -> + ejabberd_odbc:sql_transaction(LServer, + fun () -> + update_t(<<"vcard">>, + [<<"username">>, + <<"vcard">>], + [LUsername, SVCARD], + [<<"username='">>, LUsername, + <<"'">>]), + update_t(<<"vcard_search">>, + [<<"username">>, + <<"lusername">>, <<"fn">>, + <<"lfn">>, <<"family">>, + <<"lfamily">>, <<"given">>, + <<"lgiven">>, <<"middle">>, + <<"lmiddle">>, + <<"nickname">>, + <<"lnickname">>, <<"bday">>, + <<"lbday">>, <<"ctry">>, + <<"lctry">>, <<"locality">>, + <<"llocality">>, + <<"email">>, <<"lemail">>, + <<"orgname">>, + <<"lorgname">>, + <<"orgunit">>, + <<"lorgunit">>], + [Username, LUsername, SFN, + SLFN, SFamily, SLFamily, + SGiven, SLGiven, SMiddle, + SLMiddle, SNickname, + SLNickname, SBDay, SLBDay, + SCTRY, SLCTRY, SLocality, + SLLocality, SEMail, SLEMail, + SOrgName, SLOrgName, + SOrgUnit, SLOrgUnit], + [<<"lusername='">>, + LUsername, <<"'">>]) + end). get_vcard(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["select vcard from vcard " - "where username='", Username, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"select vcard from vcard where username='">>, + Username, <<"';">>]). get_default_privacy_list(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["select name from privacy_default_list " - "where username='", Username, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"select name from privacy_default_list " + "where username='">>, + Username, <<"';">>]). get_default_privacy_list_t(Username) -> - ejabberd_odbc:sql_query_t( - ["select name from privacy_default_list " - "where username='", Username, "';"]). + ejabberd_odbc:sql_query_t([<<"select name from privacy_default_list " + "where username='">>, + Username, <<"';">>]). get_privacy_list_names(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["select name from privacy_list " - "where username='", Username, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"select name from privacy_list where " + "username='">>, + Username, <<"';">>]). get_privacy_list_names_t(Username) -> - ejabberd_odbc:sql_query_t( - ["select name from privacy_list " - "where username='", Username, "';"]). + ejabberd_odbc:sql_query_t([<<"select name from privacy_list where " + "username='">>, + Username, <<"';">>]). get_privacy_list_id(LServer, Username, SName) -> - ejabberd_odbc:sql_query( - LServer, - ["select id from privacy_list " - "where username='", Username, "' and name='", SName, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"select id from privacy_list where username='">>, + Username, <<"' and name='">>, SName, <<"';">>]). get_privacy_list_id_t(Username, SName) -> - ejabberd_odbc:sql_query_t( - ["select id from privacy_list " - "where username='", Username, "' and name='", SName, "';"]). + ejabberd_odbc:sql_query_t([<<"select id from privacy_list where username='">>, + Username, <<"' and name='">>, SName, <<"';">>]). get_privacy_list_data(LServer, Username, SName) -> - ejabberd_odbc:sql_query( - LServer, - ["select t, value, action, ord, match_all, match_iq, " - "match_message, match_presence_in, match_presence_out " - "from privacy_list_data " - "where id = (select id from privacy_list where " - " username='", Username, "' and name='", SName, "') " - "order by ord;"]). + ejabberd_odbc:sql_query(LServer, + [<<"select t, value, action, ord, match_all, " + "match_iq, match_message, match_presence_in, " + "match_presence_out from privacy_list_data " + "where id = (select id from privacy_list " + "where username='">>, + Username, <<"' and name='">>, SName, + <<"') order by ord;">>]). get_privacy_list_data_by_id(LServer, ID) -> - ejabberd_odbc:sql_query( - LServer, - ["select t, value, action, ord, match_all, match_iq, " - "match_message, match_presence_in, match_presence_out " - "from privacy_list_data " - "where id='", ID, "' order by ord;"]). + ejabberd_odbc:sql_query(LServer, + [<<"select t, value, action, ord, match_all, " + "match_iq, match_message, match_presence_in, " + "match_presence_out from privacy_list_data " + "where id='">>, + ID, <<"' order by ord;">>]). get_privacy_list_data_by_id_t(ID) -> - ejabberd_odbc:sql_query_t( - ["select t, value, action, ord, match_all, match_iq, " - "match_message, match_presence_in, match_presence_out " - "from privacy_list_data " - "where id='", ID, "' order by ord;"]). + ejabberd_odbc:sql_query_t([<<"select t, value, action, ord, match_all, " + "match_iq, match_message, match_presence_in, " + "match_presence_out from privacy_list_data " + "where id='">>, + ID, <<"' order by ord;">>]). set_default_privacy_list(Username, SName) -> - update_t("privacy_default_list", ["username", "name"], - [Username, SName], ["username='", Username, "'"]). + update_t(<<"privacy_default_list">>, + [<<"username">>, <<"name">>], [Username, SName], + [<<"username='">>, Username, <<"'">>]). unset_default_privacy_list(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["delete from privacy_default_list " - " where username='", Username, "';"]). + ejabberd_odbc:sql_query(LServer, + [<<"delete from privacy_default_list " + " where username='">>, + Username, <<"';">>]). remove_privacy_list(Username, SName) -> - ejabberd_odbc:sql_query_t( - ["delete from privacy_list " - "where username='", Username, "' and name='", SName, "';"]). + ejabberd_odbc:sql_query_t([<<"delete from privacy_list where username='">>, + Username, <<"' and name='">>, SName, <<"';">>]). add_privacy_list(Username, SName) -> - ejabberd_odbc:sql_query_t( - ["insert into privacy_list(username, name) " - "values ('", Username, "', '", SName, "');"]). + ejabberd_odbc:sql_query_t([<<"insert into privacy_list(username, name) " + "values ('">>, + Username, <<"', '">>, SName, <<"');">>]). set_privacy_list(ID, RItems) -> - ejabberd_odbc:sql_query_t( - ["delete from privacy_list_data " - "where id='", ID, "';"]), - lists:foreach(fun(Items) -> - ejabberd_odbc:sql_query_t( - ["insert into privacy_list_data(" - "id, t, value, action, ord, match_all, match_iq, " - "match_message, match_presence_in, " - "match_presence_out " - ") " - "values ('", ID, "', '", - join(Items, "', '"), "');"]) - end, RItems). + ejabberd_odbc:sql_query_t([<<"delete from privacy_list_data where " + "id='">>, + ID, <<"';">>]), + lists:foreach(fun (Items) -> + ejabberd_odbc:sql_query_t([<<"insert into privacy_list_data(id, t, " + "value, action, ord, match_all, match_iq, " + "match_message, match_presence_in, match_prese" + "nce_out ) values ('">>, + ID, <<"', '">>, + join(Items, <<"', '">>), + <<"');">>]) + end, + RItems). del_privacy_lists(LServer, Server, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["delete from privacy_list where username='", Username, "';"]), - ejabberd_odbc:sql_query( - LServer, - ["delete from privacy_list_data where value='", Username++"@"++Server, "';"]), - ejabberd_odbc:sql_query( - LServer, - ["delete from privacy_default_list where username='", Username, "';"]). - %% Characters to escape -escape($\0) -> "\\0"; -escape($\n) -> "\\n"; -escape($\t) -> "\\t"; -escape($\b) -> "\\b"; -escape($\r) -> "\\r"; -escape($') -> "''"; -escape($") -> "\\\""; -escape($\\) -> "\\\\"; -escape(C) -> C. - %% Count number of records in a table given a where clause -count_records_where(LServer, Table, WhereClause) -> - ejabberd_odbc:sql_query( - LServer, - ["select count(*) from ", Table, " ", WhereClause, ";"]). + ejabberd_odbc:sql_query(LServer, + [<<"delete from privacy_list where username='">>, + Username, <<"';">>]), + ejabberd_odbc:sql_query(LServer, + [<<"delete from privacy_list_data where " + "value='">>, + <<Username/binary, "@", Server/binary>>, + <<"';">>]), + ejabberd_odbc:sql_query(LServer, + [<<"delete from privacy_default_list where " + "username='">>, + Username, <<"';">>]). + +escape($\000) -> <<"\\0">>; +escape($\n) -> <<"\\n">>; +escape($\t) -> <<"\\t">>; +escape($\b) -> <<"\\b">>; +escape($\r) -> <<"\\r">>; +escape($') -> <<"''">>; +escape($") -> <<"\\\"">>; +escape($\\) -> <<"\\\\">>; +escape(C) -> <<C>>. +count_records_where(LServer, Table, WhereClause) -> + ejabberd_odbc:sql_query(LServer, + [<<"select count(*) from ">>, Table, <<" ">>, + WhereClause, <<";">>]). get_roster_version(LServer, LUser) -> - ejabberd_odbc:sql_query(LServer, - ["select version from roster_version where username = '", LUser, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"select version from roster_version where " + "username = '">>, + LUser, <<"'">>]). + set_roster_version(LUser, Version) -> - update_t("roster_version", ["username", "version"], [LUser, Version], ["username = '", LUser, "'"]). + update_t(<<"roster_version">>, + [<<"username">>, <<"version">>], [LUser, Version], + [<<"username = '">>, LUser, <<"'">>]). + -endif. %% ----------------- %% MSSQL queries -ifdef(mssql). -get_db_type() -> - mssql. - %% Queries can be either a fun or a list of queries -sql_transaction(LServer, Queries) when is_list(Queries) -> - %% SQL transaction based on a list of queries - %% This function automatically - F = fun() -> - lists:foreach(fun(Query) -> - ejabberd_odbc:sql_query(LServer, Query) - end, Queries) - end, +get_db_type() -> mssql. + +sql_transaction(LServer, Queries) + when is_list(Queries) -> + F = fun () -> + lists:foreach(fun (Query) -> + ejabberd_odbc:sql_query(LServer, Query) + end, + Queries) + end, {atomic, catch F()}; sql_transaction(_LServer, FQueries) -> {atomic, catch FQueries()}. get_last(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_last '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_last '">>, Username, <<"'">>]). set_last_t(LServer, Username, Seconds, State) -> - Result = ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.set_last '", Username, "', '", Seconds, - "', '", State, "'"]), + Result = ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.set_last '">>, Username, + <<"', '">>, Seconds, <<"', '">>, State, + <<"'">>]), {atomic, Result}. del_last(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_last '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_last '">>, Username, <<"'">>]). get_password(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_password '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_password '">>, Username, + <<"'">>]). set_password_t(LServer, Username, Pass) -> - Result = ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.set_password '", Username, "', '", Pass, "'"]), + Result = ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.set_password '">>, + Username, <<"', '">>, Pass, <<"'">>]), {atomic, Result}. add_user(LServer, Username, Pass) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.add_user '", Username, "', '", Pass, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.add_user '">>, Username, <<"', '">>, + Pass, <<"'">>]). del_user(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_user '", Username ,"'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_user '">>, Username, <<"'">>]). del_user_return_password(LServer, Username, Pass) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_user_return_password '", Username, "'"]), + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_user_return_password '">>, + Username, <<"'">>]), Pass. list_users(LServer) -> - ejabberd_odbc:sql_query( - LServer, - "EXECUTE dbo.list_users"). + ejabberd_odbc:sql_query(LServer, + <<"EXECUTE dbo.list_users">>). -list_users(LServer, _) -> - % scope listing not supported - list_users(LServer). +list_users(LServer, _) -> list_users(LServer). users_number(LServer) -> - ejabberd_odbc:sql_query( - LServer, - "select count(*) from users with (nolock)"). + ejabberd_odbc:sql_query(LServer, + <<"select count(*) from users with (nolock)">>). -users_number(LServer, _) -> - % scope listing not supported - users_number(LServer). +users_number(LServer, _) -> users_number(LServer). add_spool_sql(Username, XML) -> - ["EXECUTE dbo.add_spool '", Username, "' , '",XML,"'"]. + [<<"EXECUTE dbo.add_spool '">>, Username, <<"' , '">>, + XML, <<"'">>]. add_spool(LServer, Queries) -> - lists:foreach(fun(Query) -> + lists:foreach(fun (Query) -> ejabberd_odbc:sql_query(LServer, Query) end, Queries). get_and_del_spool_msg_t(LServer, Username) -> - [Result] = case ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_and_del_spool_msg '", Username, "'"]) of - Rs when is_list(Rs) -> - lists:filter(fun({selected, _Header, _Row}) -> - true; - ({updated, _N}) -> - false + [Result] = case ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_and_del_spool_msg '">>, + Username, <<"'">>]) + of + Rs when is_list(Rs) -> + lists:filter(fun ({selected, _Header, _Row}) -> true; + ({updated, _N}) -> false end, Rs); - Rs -> [Rs] + Rs -> [Rs] end, {atomic, Result}. del_spool_msg(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_spool_msg '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_spool_msg '">>, Username, + <<"'">>]). get_roster(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_roster '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_roster '">>, Username, + <<"'">>]). get_roster_jid_groups(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_roster_jid_groups '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_roster_jid_groups '">>, + Username, <<"'">>]). get_roster_groups(LServer, Username, SJID) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_roster_groups '", Username, "' , '", SJID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_roster_groups '">>, Username, + <<"' , '">>, SJID, <<"'">>]). del_user_roster_t(LServer, Username) -> - Result = ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_user_roster '", Username, "'"]), + Result = ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_user_roster '">>, + Username, <<"'">>]), {atomic, Result}. get_roster_by_jid(LServer, Username, SJID) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_roster_by_jid '", Username, "' , '", SJID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_roster_by_jid '">>, Username, + <<"' , '">>, SJID, <<"'">>]). get_rostergroup_by_jid(LServer, Username, SJID) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_rostergroup_by_jid '", Username, "' , '", SJID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_rostergroup_by_jid '">>, + Username, <<"' , '">>, SJID, <<"'">>]). del_roster(LServer, Username, SJID) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_roster '", Username, "', '", SJID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_roster '">>, Username, + <<"', '">>, SJID, <<"'">>]). del_roster_sql(Username, SJID) -> - ["EXECUTE dbo.del_roster '", Username, "', '", SJID, "'"]. + [<<"EXECUTE dbo.del_roster '">>, Username, <<"', '">>, + SJID, <<"'">>]. -update_roster(LServer, Username, SJID, ItemVals, ItemGroups) -> - Query1 = ["EXECUTE dbo.del_roster '", Username, "', '", SJID, "' "], +update_roster(LServer, Username, SJID, ItemVals, + ItemGroups) -> + Query1 = [<<"EXECUTE dbo.del_roster '">>, Username, + <<"', '">>, SJID, <<"' ">>], ejabberd_odbc:sql_query(LServer, lists:flatten(Query1)), - Query2 = ["EXECUTE dbo.add_roster_user ", ItemVals], + Query2 = [<<"EXECUTE dbo.add_roster_user ">>, ItemVals], ejabberd_odbc:sql_query(LServer, lists:flatten(Query2)), - Query3 = ["EXECUTE dbo.del_roster_groups '", Username, "', '", SJID, "' "], + Query3 = [<<"EXECUTE dbo.del_roster_groups '">>, + Username, <<"', '">>, SJID, <<"' ">>], ejabberd_odbc:sql_query(LServer, lists:flatten(Query3)), - lists:foreach(fun(ItemGroup) -> - Query = ["EXECUTE dbo.add_roster_group ", + lists:foreach(fun (ItemGroup) -> + Query = [<<"EXECUTE dbo.add_roster_group ">>, ItemGroup], - ejabberd_odbc:sql_query(LServer, - lists:flatten(Query)) + ejabberd_odbc:sql_query(LServer, lists:flatten(Query)) end, ItemGroups). -update_roster_sql(Username, SJID, ItemVals, ItemGroups) -> - ["BEGIN TRANSACTION ", - "EXECUTE dbo.del_roster_groups '", Username, "','", SJID, "' ", - "EXECUTE dbo.add_roster_user ", ItemVals, " "] ++ - [lists:flatten("EXECUTE dbo.add_roster_group ", ItemGroup, " ") - || ItemGroup <- ItemGroups] ++ - ["COMMIT"]. +update_roster_sql(Username, SJID, ItemVals, + ItemGroups) -> + [<<"BEGIN TRANSACTION ">>, + <<"EXECUTE dbo.del_roster_groups '">>, Username, + <<"','">>, SJID, <<"' ">>, + <<"EXECUTE dbo.add_roster_user ">>, ItemVals, <<" ">>] + ++ + [lists:flatten(<<"EXECUTE dbo.add_roster_group ">>, + ItemGroup, <<" ">>) + || ItemGroup <- ItemGroups] + ++ [<<"COMMIT">>]. roster_subscribe(LServer, _Username, _SJID, ItemVals) -> - catch ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.add_roster_user ", ItemVals]). + catch ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.add_roster_user ">>, + ItemVals]). get_subscription(LServer, Username, SJID) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_subscription '", Username, "' , '", SJID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_subscription '">>, Username, + <<"' , '">>, SJID, <<"'">>]). set_private_data(LServer, Username, LXMLNS, SData) -> - ejabberd_odbc:sql_query( - LServer, - set_private_data_sql(Username, LXMLNS, SData)). + ejabberd_odbc:sql_query(LServer, + set_private_data_sql(Username, LXMLNS, SData)). set_private_data_sql(Username, LXMLNS, SData) -> - ["EXECUTE dbo.set_private_data '", Username, "' , '", LXMLNS, "' , '", SData, "'"]. + [<<"EXECUTE dbo.set_private_data '">>, Username, + <<"' , '">>, LXMLNS, <<"' , '">>, SData, <<"'">>]. get_private_data(LServer, Username, LXMLNS) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_private_data '", Username, "' , '", LXMLNS, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_private_data '">>, Username, + <<"' , '">>, LXMLNS, <<"'">>]). del_user_private_storage(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_user_storage '", Username, "'"]). - -set_vcard(LServer, LUsername, SBDay, SCTRY, SEMail, SFN, SFamily, SGiven, - SLBDay, SLCTRY, SLEMail, SLFN, SLFamily, SLGiven, SLLocality, - SLMiddle, SLNickname, SLOrgName, SLOrgUnit, SLocality, SMiddle, - SNickname, SOrgName, SOrgUnit, SVCARD, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.set_vcard '", SVCARD, "' , '", Username, "' , '", LUsername, "' , '", - SFN, "' , '", SLFN, "' , '", SFamily, "' , '", SLFamily, "' , '", - SGiven, "' , '", SLGiven, "' , '", SMiddle, "' , '", SLMiddle, "' , '", - SNickname, "' , '", SLNickname, "' , '", SBDay, "' , '", SLBDay, "' , '", - SCTRY, "' , '", SLCTRY, "' , '", SLocality, "' , '", SLLocality, "' , '", - SEMail, "' , '", SLEMail, "' , '", SOrgName, "' , '", SLOrgName, "' , '", - SOrgUnit, "' , '", SLOrgUnit, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_user_storage '">>, Username, + <<"'">>]). + +set_vcard(LServer, LUsername, SBDay, SCTRY, SEMail, SFN, + SFamily, SGiven, SLBDay, SLCTRY, SLEMail, SLFN, + SLFamily, SLGiven, SLLocality, SLMiddle, SLNickname, + SLOrgName, SLOrgUnit, SLocality, SMiddle, SNickname, + SOrgName, SOrgUnit, SVCARD, Username) -> + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.set_vcard '">>, SVCARD, <<"' , '">>, + Username, <<"' , '">>, LUsername, <<"' , '">>, SFN, + <<"' , '">>, SLFN, <<"' , '">>, SFamily, + <<"' , '">>, SLFamily, <<"' , '">>, SGiven, + <<"' , '">>, SLGiven, <<"' , '">>, SMiddle, + <<"' , '">>, SLMiddle, <<"' , '">>, SNickname, + <<"' , '">>, SLNickname, <<"' , '">>, SBDay, + <<"' , '">>, SLBDay, <<"' , '">>, SCTRY, + <<"' , '">>, SLCTRY, <<"' , '">>, SLocality, + <<"' , '">>, SLLocality, <<"' , '">>, SEMail, + <<"' , '">>, SLEMail, <<"' , '">>, SOrgName, + <<"' , '">>, SLOrgName, <<"' , '">>, SOrgUnit, + <<"' , '">>, SLOrgUnit, <<"'">>]). get_vcard(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_vcard '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_vcard '">>, Username, <<"'">>]). get_default_privacy_list(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_default_privacy_list '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_default_privacy_list '">>, + Username, <<"'">>]). get_default_privacy_list_t(Username) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.get_default_privacy_list '", Username, "'"]). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_default_privacy_list '">>, + Username, <<"'">>]). get_privacy_list_names(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_privacy_list_names '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_privacy_list_names '">>, + Username, <<"'">>]). get_privacy_list_names_t(Username) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.get_privacy_list_names '", Username, "'"]). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_privacy_list_names '">>, + Username, <<"'">>]). get_privacy_list_id(LServer, Username, SName) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_privacy_list_id '", Username, "' , '", SName, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_privacy_list_id '">>, Username, + <<"' , '">>, SName, <<"'">>]). get_privacy_list_id_t(Username, SName) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.get_privacy_list_id '", Username, "' , '", SName, "'"]). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_privacy_list_id '">>, + Username, <<"' , '">>, SName, <<"'">>]). get_privacy_list_data(LServer, Username, SName) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_privacy_list_data '", Username, "' , '", SName, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_privacy_list_data '">>, + Username, <<"' , '">>, SName, <<"'">>]). get_privacy_list_data_by_id(LServer, ID) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_privacy_list_data_by_id '", ID, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_privacy_list_data_by_id '">>, + ID, <<"'">>]). get_privacy_list_data_by_id_t(ID) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.get_privacy_list_data_by_id '", ID, "'"]). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_privacy_list_data_by_id '">>, + ID, <<"'">>]). set_default_privacy_list(Username, SName) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.set_default_privacy_list '", Username, "' , '", SName, "'"]). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.set_default_privacy_list '">>, + Username, <<"' , '">>, SName, <<"'">>]). unset_default_privacy_list(LServer, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.unset_default_privacy_list '", Username, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.unset_default_privacy_list '">>, + Username, <<"'">>]). remove_privacy_list(Username, SName) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.remove_privacy_list '", Username, "' , '", SName, "'"]). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.remove_privacy_list '">>, + Username, <<"' , '">>, SName, <<"'">>]). add_privacy_list(Username, SName) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.add_privacy_list '", Username, "' , '", SName, "'"]). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.add_privacy_list '">>, + Username, <<"' , '">>, SName, <<"'">>]). set_privacy_list(ID, RItems) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.del_privacy_list_by_id '", ID, "'"]), - - lists:foreach(fun(Items) -> - ejabberd_odbc:sql_query_t( - ["EXECUTE dbo.set_privacy_list '", ID, "', '", join(Items, "', '"), "'"]) - end, RItems). + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.del_privacy_list_by_id '">>, + ID, <<"'">>]), + lists:foreach(fun (Items) -> + ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.set_privacy_list '">>, + ID, <<"', '">>, + join(Items, <<"', '">>), + <<"'">>]) + end, + RItems). del_privacy_lists(LServer, Server, Username) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.del_privacy_lists @Server='", Server ,"' @username='", Username, "'"]). - %% Characters to escape -escape($\0) -> "\\0"; -escape($\t) -> "\\t"; -escape($\b) -> "\\b"; -escape($\r) -> "\\r"; -escape($') -> "\''"; -escape($") -> "\\\""; -escape(C) -> C. - %% Count number of records in a table given a where clause + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.del_privacy_lists @Server='">>, + Server, <<"' @username='">>, Username, <<"'">>]). + +escape($\000) -> <<"\\0">>; +escape($\t) -> <<"\\t">>; +escape($\b) -> <<"\\b">>; +escape($\r) -> <<"\\r">>; +escape($') -> <<"''">>; +escape($") -> <<"\\\"">>; +escape(C) -> C. + count_records_where(LServer, Table, WhereClause) -> - ejabberd_odbc:sql_query( - LServer, - ["select count(*) from ", Table, " with (nolock) ", WhereClause]). + ejabberd_odbc:sql_query(LServer, + [<<"select count(*) from ">>, Table, + <<" with (nolock) ">>, WhereClause]). get_roster_version(LServer, LUser) -> - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.get_roster_version '", LUser, "'"]). + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.get_roster_version '">>, LUser, + <<"'">>]). set_roster_version(Username, Version) -> - %% This function doesn't know the vhost, so we hope it's the first one defined: - LServer = ?MYNAME, - ejabberd_odbc:sql_query( - LServer, - ["EXECUTE dbo.set_roster_version '", Username, "', '", Version, "'"]). + LServer = (?MYNAME), + ejabberd_odbc:sql_query(LServer, + [<<"EXECUTE dbo.set_roster_version '">>, Username, + <<"', '">>, Version, <<"'">>]). + -endif. |