aboutsummaryrefslogtreecommitdiff
path: root/src/mod_pubsub/pubsub_db_odbc.erl
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2013-03-14 10:33:02 +0100
committerBadlop <badlop@process-one.net>2013-03-14 10:33:02 +0100
commit9deb294328bb3f9eb6bd2c0e7cd500732e9b5830 (patch)
tree7e1066c130250627ee0abab44a135f583a28d07f /src/mod_pubsub/pubsub_db_odbc.erl
parentlist_to_integer/2 only works in OTP R14 and newer (diff)
Accumulated patch to binarize and indent code
Diffstat (limited to 'src/mod_pubsub/pubsub_db_odbc.erl')
-rw-r--r--src/mod_pubsub/pubsub_db_odbc.erl181
1 files changed, 97 insertions, 84 deletions
diff --git a/src/mod_pubsub/pubsub_db_odbc.erl b/src/mod_pubsub/pubsub_db_odbc.erl
index 2cafc97c7..ca1318865 100644
--- a/src/mod_pubsub/pubsub_db_odbc.erl
+++ b/src/mod_pubsub/pubsub_db_odbc.erl
@@ -20,119 +20,132 @@
%%% @end
%%% ====================================================================
-module(pubsub_db_odbc).
+
-author("pablo.polvorin@process-one.net").
-include("pubsub.hrl").
--export([add_subscription/1,
- read_subscription/1,
- delete_subscription/1,
- update_subscription/1]).
-
+-export([add_subscription/1, read_subscription/1,
+ delete_subscription/1, update_subscription/1]).
%% TODO: Those -spec lines produce errors in old Erlang versions.
%% They can be enabled again in ejabberd 3.0 because it uses R12B or higher.
%% -spec read_subscription(SubID :: string()) -> {ok, #pubsub_subscription{}} | notfound.
read_subscription(SubID) ->
- case ejabberd_odbc:sql_query_t(
- ["select opt_name, opt_value "
- "from pubsub_subscription_opt "
- "where subid = '", ejabberd_odbc:escape(SubID), "'"]) of
- {selected, ["opt_name", "opt_value"], []} ->
- notfound;
-
- {selected, ["opt_name", "opt_value"], Options} ->
-
- {ok, #pubsub_subscription{subid = SubID,
- options = lists:map(fun subscription_opt_from_odbc/1, Options)}}
- end.
-
-
+ case
+ ejabberd_odbc:sql_query_t([<<"select opt_name, opt_value from pubsub_subscr"
+ "iption_opt where subid = '">>,
+ ejabberd_odbc:escape(SubID), <<"'">>])
+ of
+ {selected, [<<"opt_name">>, <<"opt_value">>], []} ->
+ notfound;
+ {selected, [<<"opt_name">>, <<"opt_value">>],
+ Options} ->
+ {ok,
+ #pubsub_subscription{subid = SubID,
+ options =
+ lists:map(fun subscription_opt_from_odbc/1,
+ Options)}}
+ end.
%% -spec delete_subscription(SubID :: string()) -> ok.
delete_subscription(SubID) ->
- ejabberd_odbc:sql_query_t(["delete from pubsub_subscription_opt "
- "where subid = '", ejabberd_odbc:escape(SubID), "'"]),
- ok.
-
-
%% -spec update_subscription(#pubsub_subscription{}) -> ok .
-update_subscription(#pubsub_subscription{subid = SubId} = Sub) ->
- delete_subscription(SubId),
- add_subscription(Sub).
-
%% -spec add_subscription(#pubsub_subscription{}) -> ok.
-add_subscription(#pubsub_subscription{subid = SubId, options = Opts}) ->
- EscapedSubId = ejabberd_odbc:escape(SubId),
- lists:foreach(fun(Opt) ->
- {OdbcOptName, OdbcOptValue} = subscription_opt_to_odbc(Opt),
- ejabberd_odbc:sql_query_t(
- ["insert into pubsub_subscription_opt(subid, opt_name, opt_value)"
- "values ('", EscapedSubId, "','", OdbcOptName, "','", OdbcOptValue, "')"])
- end, Opts),
- ok.
-
-
-
%% -------------- Internal utilities -----------------------
-subscription_opt_from_odbc({"DELIVER", Value}) ->
- {deliver, odbc_to_boolean(Value)};
-subscription_opt_from_odbc({"DIGEST", Value}) ->
- {digest, odbc_to_boolean(Value)};
-subscription_opt_from_odbc({"DIGEST_FREQUENCY", Value}) ->
- {digest_frequency, odbc_to_integer(Value)};
-subscription_opt_from_odbc({"EXPIRE", Value}) ->
- {expire, odbc_to_timestamp(Value)};
-subscription_opt_from_odbc({"INCLUDE_BODY", Value}) ->
- {include_body, odbc_to_boolean(Value)};
-
+ ejabberd_odbc:sql_query_t([<<"delete from pubsub_subscription_opt "
+ "where subid = '">>,
+ ejabberd_odbc:escape(SubID), <<"'">>]),
+ ok.
+
+update_subscription(#pubsub_subscription{subid =
+ SubId} =
+ Sub) ->
+ delete_subscription(SubId), add_subscription(Sub).
+
+add_subscription(#pubsub_subscription{subid = SubId,
+ options = Opts}) ->
+ EscapedSubId = ejabberd_odbc:escape(SubId),
+ lists:foreach(fun (Opt) ->
+ {OdbcOptName, OdbcOptValue} =
+ subscription_opt_to_odbc(Opt),
+ ejabberd_odbc:sql_query_t([<<"insert into pubsub_subscription_opt(subid, "
+ "opt_name, opt_value)values ('">>,
+ EscapedSubId, <<"','">>,
+ OdbcOptName, <<"','">>,
+ OdbcOptValue, <<"')">>])
+ end,
+ Opts),
+ ok.
+
+subscription_opt_from_odbc({<<"DELIVER">>, Value}) ->
+ {deliver, odbc_to_boolean(Value)};
+subscription_opt_from_odbc({<<"DIGEST">>, Value}) ->
+ {digest, odbc_to_boolean(Value)};
+subscription_opt_from_odbc({<<"DIGEST_FREQUENCY">>,
+ Value}) ->
+ {digest_frequency, odbc_to_integer(Value)};
+subscription_opt_from_odbc({<<"EXPIRE">>, Value}) ->
+ {expire, odbc_to_timestamp(Value)};
+subscription_opt_from_odbc({<<"INCLUDE_BODY">>,
+ Value}) ->
+ {include_body, odbc_to_boolean(Value)};
%%TODO: might be > than 1 show_values value??.
%% need to use compact all in only 1 opt.
-subscription_opt_from_odbc({"SHOW_VALUES", Value}) ->
- {show_values, Value};
-subscription_opt_from_odbc({"SUBSCRIPTION_TYPE", Value}) ->
- {subscription_type, case Value of
- "items" -> items;
- "nodes" -> nodes
- end};
-
-subscription_opt_from_odbc({"SUBSCRIPTION_DEPTH", Value}) ->
- {subscription_depth, case Value of
- "all" -> all;
- N -> odbc_to_integer(N)
- end}.
+subscription_opt_from_odbc({<<"SHOW_VALUES">>,
+ Value}) ->
+ {show_values, Value};
+subscription_opt_from_odbc({<<"SUBSCRIPTION_TYPE">>,
+ Value}) ->
+ {subscription_type,
+ case Value of
+ <<"items">> -> items;
+ <<"nodes">> -> nodes
+ end};
+subscription_opt_from_odbc({<<"SUBSCRIPTION_DEPTH">>,
+ Value}) ->
+ {subscription_depth,
+ case Value of
+ <<"all">> -> all;
+ N -> odbc_to_integer(N)
+ end}.
subscription_opt_to_odbc({deliver, Bool}) ->
- {"DELIVER", boolean_to_odbc(Bool)};
+ {<<"DELIVER">>, boolean_to_odbc(Bool)};
subscription_opt_to_odbc({digest, Bool}) ->
- {"DIGEST", boolean_to_odbc(Bool)};
+ {<<"DIGEST">>, boolean_to_odbc(Bool)};
subscription_opt_to_odbc({digest_frequency, Int}) ->
- {"DIGEST_FREQUENCY", integer_to_odbc(Int)};
+ {<<"DIGEST_FREQUENCY">>, integer_to_odbc(Int)};
subscription_opt_to_odbc({expire, Timestamp}) ->
- {"EXPIRE", timestamp_to_odbc(Timestamp)};
+ {<<"EXPIRE">>, timestamp_to_odbc(Timestamp)};
subscription_opt_to_odbc({include_body, Bool}) ->
- {"INCLUDE_BODY", boolean_to_odbc(Bool)};
+ {<<"INCLUDE_BODY">>, boolean_to_odbc(Bool)};
subscription_opt_to_odbc({show_values, Values}) ->
- {"SHOW_VALUES", Values};
+ {<<"SHOW_VALUES">>, Values};
subscription_opt_to_odbc({subscription_type, Type}) ->
- {"SUBSCRIPTION_TYPE", case Type of
- items -> "items";
- nodes -> "nodes"
- end};
+ {<<"SUBSCRIPTION_TYPE">>,
+ case Type of
+ items -> <<"items">>;
+ nodes -> <<"nodes">>
+ end};
subscription_opt_to_odbc({subscription_depth, Depth}) ->
- {"SUBSCRIPTION_DEPTH", case Depth of
- all -> "all";
- N -> integer_to_odbc(N)
- end}.
+ {<<"SUBSCRIPTION_DEPTH">>,
+ case Depth of
+ all -> <<"all">>;
+ N -> integer_to_odbc(N)
+ end}.
integer_to_odbc(N) ->
- integer_to_list(N).
+ iolist_to_binary(integer_to_list(N)).
+
+boolean_to_odbc(true) -> <<"1">>;
+boolean_to_odbc(false) -> <<"0">>.
-boolean_to_odbc(true) -> "1";
-boolean_to_odbc(false) -> "0".
timestamp_to_odbc(T) -> jlib:now_to_utc_string(T).
+odbc_to_integer(N) -> jlib:binary_to_integer(N).
+
+odbc_to_boolean(B) -> B == <<"1">>.
-odbc_to_integer(N) -> list_to_integer(N).
-odbc_to_boolean(B) -> B == "1".
-odbc_to_timestamp(T) -> jlib:datetime_string_to_timestamp(T).
+odbc_to_timestamp(T) ->
+ jlib:datetime_string_to_timestamp(T).