true ->
SName = ejabberd_odbc:escape(Name),
SRoomHost = ejabberd_odbc:escape(RoomHost),
- SOpts = mod_muc_odbc:encode_opts(Opts),
+ SOpts = ejabberd_odbc:encode_term(Opts),
["delete from muc_room where name='", SName,
"' and host='", SRoomHost, "';",
"insert into muc_room(name, host, opts) values (",
jlib:jid_to_string(
jlib:make_jid(U, S, ""))),
SIRCHost = ejabberd_odbc:escape(IRCHost),
- SData = mod_irc_odbc:encode_data(Data),
+ SData = ejabberd_odbc:encode_term(Data),
["delete from irc_custom where jid='", SJID,
"' and host='", SIRCHost, "';"
"insert into irc_custom(jid, host, data) values ("
fun(Host, #sr_group{group_host = {Group, LServer}, opts = Opts})
when LServer == Host ->
SGroup = ejabberd_odbc:escape(Group),
- SOpts = mod_shared_roster_odbc:encode_opts(Opts),
+ SOpts = ejabberd_odbc:encode_term(Opts),
["delete from sr_group where name='", Group, "';"
"insert into sr_group(name, opts) values ('",
SGroup, "', '", SOpts, "');"];
lists:foreach(
fun({U, _S, _R}) ->
Username = ejabberd_odbc:escape(U),
- update_t("motd",
- ["username", "xml"],
- [Username, ""],
- ["username='", Username, "'"])
+ odbc_queries:update_t(
+ "motd",
+ ["username", "xml"],
+ [Username, ""],
+ ["username='", Username, "'"])
end, Sessions)
end,
LServer = jlib:nameprep(Host),
announce_motd_delete(LServer),
XML = ejabberd_odbc:escape(xml:element_to_binary(Packet)),
F = fun() ->
- update_t("motd",
- ["username", "xml"],
- ["", XML],
- ["username=''"])
+ odbc_queries:update_t(
+ "motd",
+ ["username", "xml"],
+ ["", XML],
+ ["username=''"])
end,
ejabberd_odbc:sql_transaction(LServer, F).
Local = jlib:make_jid("", LServer, ""),
ejabberd_router:route(Local, JID, Packet),
F = fun() ->
- update_t(
- ["motd"],
+ odbc_queries:update_t(
+ "motd",
["username", "xml"],
[Username, ""],
["username='", Username, "'"])
Dest = jlib:make_jid(U, S, R),
ejabberd_router:route(Local, Dest, Packet)
end, Sessions).
-
-%% 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]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
- UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" 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, "', '"), "');"])
- end.
-export([start_link/2,
start/2,
stop/1,
- encode_data/1,
closed_connection/3,
get_connection_params/3]).
["select data from irc_custom where "
"jid='", SJID, "' and host='", SHost, "';"]) of
{selected, ["data"], [{SData}]} ->
- Data = decode_data(SData),
+ Data = ejabberd_odbc:decode_term(SData),
{xml:get_attr_s(username, Data),
xml:get_attr_s(connections_params, Data)};
{'EXIT', _} ->
{ok, Tokens, _} ->
case erl_parse:parse_term(Tokens) of
{ok, ConnectionsParams} ->
- SData = encode_data(
+ SData = ejabberd_odbc:encode_term(
[{username,
Username},
{connections_params,
case ejabberd_odbc:sql_transaction(
LServer,
fun() ->
- update_t("irc_custom",
- ["jid", "host", "data"],
- [SJID, SHost, SData],
- ["jid='", SJID,
- "' and host='",
- SHost, "'"]),
+ odbc_queries:update_t(
+ "irc_custom",
+ ["jid", "host", "data"],
+ [SJID, SHost, SData],
+ ["jid='", SJID,
+ "' and host='",
+ SHost, "'"]),
ok
end) of
{atomic, _} ->
{selected, ["data"], []} ->
{User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""};
{selected, ["data"], [{SData}]} ->
- Data = decode_data(SData),
+ Data = ejabberd_odbc:decode_term(SData),
Username = xml:get_attr_s(username, Data),
{NewUsername, NewEncoding, NewPort, NewPassword} =
case lists:keysearch(
Username = User,
ConnectionsParams = [];
{selected, ["data"], [{Data1}]} ->
- Data = decode_data(Data1),
+ Data = ejabberd_odbc:decode_term(Data1),
Username = xml:get_attr_s(username, Data),
ConnectionsParams = xml:get_attr_s(connections_params, Data)
end,
if Error /= false ->
Error;
Action == "complete" ->
- SData = encode_data([{username, Username},
- {connections_params, ConnectionsParams}]),
+ SData = ejabberd_odbc:encode_term(
+ [{username, Username},
+ {connections_params, ConnectionsParams}]),
case catch ejabberd_odbc:sql_transaction(
LServer,
fun() ->
- update_t("irc_custom",
- ["jid", "host", "data"],
- [SJID, SHost, SData],
- ["jid='", SJID,
- "' and host='", SHost, "'"]),
+ odbc_queries:update_t(
+ "irc_custom",
+ ["jid", "host", "data"],
+ [SJID, SHost, SData],
+ ["jid='", SJID,
+ "' and host='", SHost, "'"]),
ok
end) of
{atomic, ok} ->
{NewPort, NewPorts} = retrieve_connections_params(Ports, ServerN),
{NewPassword, NewPasswords} = retrieve_connections_params(Passwords, ServerN),
[{Server, NewEncoding, NewPort, NewPassword} | parse_connections_params(Servers, NewEncodings, NewPorts, NewPasswords)].
-
-encode_data(Data) ->
- ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Data))).
-
-decode_data(Str) ->
- {ok, Tokens, _} = erl_scan:string(Str ++ "."),
- {ok, Data} = erl_parse:parse_term(Tokens),
- Data.
-
-%% 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]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
- UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" 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, "', '"), "');"])
- end.
create_room/5,
process_iq_disco_items/4,
broadcast_service_message/2,
- encode_opts/1,
- decode_opts/1,
can_use_nick/4]).
%% gen_server callbacks
SName = ejabberd_odbc:escape(Name),
SHost = ejabberd_odbc:escape(Host),
LServer = jlib:nameprep(ServerHost),
+ SOpts = ejabberd_odbc:encode_term(Opts),
F = fun() ->
- update_t(
+ odbc_queries:update_t(
"muc_room",
["name", "host", "opts"],
- [SName, SHost, encode_opts(Opts)],
+ [SName, SHost, SOpts],
["name='", SName, "' and host='", SHost, "'"])
end,
ejabberd_odbc:sql_transaction(LServer, F).
LServer, ["select opts from muc_room where name='",
SName, "' and host='", SHost, "';"]) of
{selected, ["opts"], [{Opts}]} ->
- decode_opts(Opts);
+ ejabberd_odbc:decode_term(Opts);
_ ->
error
end.
Room,
HistorySize,
RoomShaper,
- decode_opts(Opts),
+ ejabberd_odbc:decode_term(Opts),
?MODULE),
register_room(Host, Room, Pid);
_ ->
?DEBUG("MUC: restore room '~s'~n", [Room]),
mod_muc_room:start(Host, ServerHost, Access,
Room, HistorySize,
- RoomShaper, decode_opts(Opts), ?MODULE)
+ RoomShaper, ejabberd_odbc:decode_term(Opts),
+ ?MODULE)
end.
register_room(Host, Room, Pid) ->
true
end,
if Allow ->
- update_t(
+ odbc_queries:update_t(
"muc_registered",
["jid", "host", "nick"],
[SJID, SHost, SNick],
end, Es)
end,
mnesia:async_dirty(F).
-
-encode_opts(Opts) ->
- ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Opts))).
-
-decode_opts(Str) ->
- {ok, Tokens, _} = erl_scan:string(Str ++ "."),
- {ok, Opts} = erl_parse:parse_term(Tokens),
- Opts.
-
-%% 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]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
- UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" 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, "', '"), "');"])
- end.
get_group_explicit_users/2,
is_user_in_group/3,
add_user_to_group/3,
- encode_opts/1,
remove_user_from_group/3]).
-include("ejabberd.hrl").
case ejabberd_odbc:sql_query(
Host, ["select name, opts from sr_group;"]) of
{selected, ["name", "opts"], Rs} ->
- [{G, decode_opts(Opts)} || {G, Opts} <- Rs];
+ [{G, ejabberd_odbc:decode_term(Opts)} || {G, Opts} <- Rs];
_ ->
[]
end.
create_group(Host, Group, Opts) ->
SGroup = ejabberd_odbc:escape(Group),
- SOpts = encode_opts(Opts),
+ SOpts = ejabberd_odbc:encode_term(Opts),
F = fun() ->
- update_t("sr_group",
- ["name", "opts"],
- [SGroup, SOpts],
- ["name='", SGroup, "'"])
+ odbc_queries:update_t("sr_group",
+ ["name", "opts"],
+ [SGroup, SOpts],
+ ["name='", SGroup, "'"])
end,
ejabberd_odbc:sql_transaction(Host, F).
Host, ["select opts from sr_group "
"where name='", SGroup, "';"]) of
{selected, ["opts"], [{SOpts}]} ->
- decode_opts(SOpts);
+ ejabberd_odbc:decode_term(SOpts);
_ ->
error
end.
set_group_opts(Host, Group, Opts) ->
SGroup = ejabberd_odbc:escape(Group),
- SOpts = encode_opts(Opts),
+ SOpts = ejabberd_odbc:encode_term(Opts),
F = fun() ->
- update_t("sr_group",
- ["name", "opts"],
- [SGroup, SOpts],
- ["name='", SGroup, "'"])
+ odbc_queries:update_t("sr_group",
+ ["name", "opts"],
+ [SGroup, SOpts],
+ ["name='", SGroup, "'"])
end,
ejabberd_odbc:sql_transaction(Host, F).
Host, ["select opts from sr_group "
"where name='", SGroup, "';"]) of
{selected, ["opts"], [{SOpts}]} ->
- Opts = decode_opts(SOpts),
+ Opts = ejabberd_odbc:decode_term(SOpts),
not lists:member(disabled, Opts);
_ ->
false
Host, ["select opts from sr_group "
"where name='", SGroup, "';"]) of
{selected, ["opts"], [{SOpts}]} ->
- Opts = decode_opts(SOpts),
+ Opts = ejabberd_odbc:decode_term(SOpts),
case lists:keysearch(Opt, 1, Opts) of
{value, {_, Val}} ->
Val;
SJID = make_jid_s(US),
SGroup = ejabberd_odbc:escape(Group),
F = fun() ->
- update_t("sr_user",
- ["jid", "grp"],
- [SJID, SGroup],
- ["jid='", SJID, "' and grp='", SGroup, "'"])
+ odbc_queries:update_t(
+ "sr_user",
+ ["jid", "grp"],
+ [SJID, SGroup],
+ ["jid='", SJID, "' and grp='", SGroup, "'"])
end,
ejabberd_odbc:sql_transaction(Host, F)
end.
make_jid_s({U, S}) ->
make_jid_s(U, S).
-
-encode_opts(Opts) ->
- ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Opts))).
-
-decode_opts(Str) ->
- {ok, Tokens, _} = erl_scan:string(Str ++ "."),
- {ok, Opts} = erl_parse:parse_term(Tokens),
- Opts.
-
-%% 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]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
- UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" 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, "', '"), "');"])
- end.
Username = ejabberd_odbc:escape(LUser),
SHash = ejabberd_odbc:escape(Hash),
F = fun() ->
- update_t(
- ["vcard_xupdate"],
+ odbc_queries:update_t(
+ "vcard_xupdate",
["username", "hash"],
[Username, SHash],
["username='", Username, "'"])
end,
PhotoEl = [{xmlelement, "photo", [], PhotoSubEls}],
{xmlelement, "x", [{"xmlns", ?NS_VCARD_UPDATE}], PhotoEl}.
-
-%% 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]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
- UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" 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, "', '"), "');"])
- end.
escape/1,
escape_like/1,
to_bool/1,
+ encode_term/1,
+ decode_term/1,
keep_alive/1]).
%% gen_fsm callbacks
to_bool(1) -> true;
to_bool(_) -> false.
+encode_term(Term) ->
+ escape(erl_prettypr:format(erl_syntax:abstract(Term))).
+
+decode_term(Str) ->
+ {ok, Tokens, _} = erl_scan:string(Str ++ "."),
+ {ok, Term} = erl_parse:parse_term(Tokens),
+ Term.
+
%%%----------------------------------------------------------------------
%%% Callback functions from gen_fsm
%%%----------------------------------------------------------------------
-author("mremond@process-one.net").
-export([get_db_type/0,
+ update_t/4,
sql_transaction/2,
get_last/2,
set_last_t/4,