mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-20 17:27:00 +01:00
improve pubsub odbc use of i2l
This commit is contained in:
parent
02c59422cf
commit
60600c341e
24
src/jlib.erl
24
src/jlib.erl
@ -48,9 +48,10 @@
|
|||||||
now_to_local_string/1, datetime_string_to_timestamp/1,
|
now_to_local_string/1, datetime_string_to_timestamp/1,
|
||||||
decode_base64/1, encode_base64/1, ip_to_list/1,
|
decode_base64/1, encode_base64/1, ip_to_list/1,
|
||||||
rsm_encode/1, rsm_encode/2, rsm_decode/1,
|
rsm_encode/1, rsm_encode/2, rsm_decode/1,
|
||||||
binary_to_integer/1, binary_to_integer/2,
|
binary_to_integer/1, binary_to_integer/2,
|
||||||
integer_to_binary/1, integer_to_binary/2,
|
integer_to_binary/1, integer_to_binary/2,
|
||||||
atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1]).
|
atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1,
|
||||||
|
l2i/1, i2l/1, i2l/2]).
|
||||||
|
|
||||||
%% TODO: Remove once XEP-0091 is Obsolete
|
%% TODO: Remove once XEP-0091 is Obsolete
|
||||||
%% TODO: Remove once XEP-0091 is Obsolete
|
%% TODO: Remove once XEP-0091 is Obsolete
|
||||||
@ -599,8 +600,6 @@ rsm_encode_count(Count, Arr) ->
|
|||||||
children = [{xmlcdata, i2l(Count)}]}
|
children = [{xmlcdata, i2l(Count)}]}
|
||||||
| Arr].
|
| Arr].
|
||||||
|
|
||||||
i2l(I) when is_integer(I) -> integer_to_binary(I).
|
|
||||||
|
|
||||||
-type tz() :: {binary(), {integer(), integer()}} | {integer(), integer()} | utc.
|
-type tz() :: {binary(), {integer(), integer()}} | {integer(), integer()} | utc.
|
||||||
|
|
||||||
%% Timezone = utc | {Sign::string(), {Hours, Minutes}} | {Hours, Minutes}
|
%% Timezone = utc | {Sign::string(), {Hours, Minutes}} | {Hours, Minutes}
|
||||||
@ -880,3 +879,18 @@ tuple_to_binary(T) ->
|
|||||||
|
|
||||||
atom_to_binary(A) ->
|
atom_to_binary(A) ->
|
||||||
erlang:atom_to_binary(A, utf8).
|
erlang:atom_to_binary(A, utf8).
|
||||||
|
|
||||||
|
|
||||||
|
l2i(I) when is_integer(I) -> I;
|
||||||
|
l2i(L) when is_binary(L) -> binary_to_integer(L).
|
||||||
|
|
||||||
|
i2l(I) when is_integer(I) -> integer_to_binary(I);
|
||||||
|
i2l(L) when is_binary(L) -> L.
|
||||||
|
|
||||||
|
i2l(I, N) when is_integer(I) -> i2l(i2l(I), N);
|
||||||
|
i2l(L, N) when is_binary(L) ->
|
||||||
|
case str:len(L) of
|
||||||
|
N -> L;
|
||||||
|
C when C > N -> L;
|
||||||
|
_ -> i2l(<<$0, L/binary>>, N)
|
||||||
|
end.
|
||||||
|
@ -1253,7 +1253,7 @@ get_items(NodeId, From, none) ->
|
|||||||
get_items(NodeId, _From,
|
get_items(NodeId, _From,
|
||||||
#rsm_in{max = M, direction = Direction, id = I,
|
#rsm_in{max = M, direction = Direction, id = I,
|
||||||
index = IncIndex}) ->
|
index = IncIndex}) ->
|
||||||
Max = (?PUBSUB):escape(i2l(M)),
|
Max = (?PUBSUB):escape(jlib:i2l(M)),
|
||||||
{Way, Order} = case Direction of
|
{Way, Order} = case Direction of
|
||||||
aft -> {<<"<">>, <<"desc">>};
|
aft -> {<<"<">>, <<"desc">>};
|
||||||
before when I == <<>> -> {<<"is not">>, <<"asc">>};
|
before when I == <<>> -> {<<"is not">>, <<"asc">>};
|
||||||
@ -1271,7 +1271,7 @@ get_items(NodeId, _From,
|
|||||||
NodeId,
|
NodeId,
|
||||||
<<"' and modification > pi.modification "
|
<<"' and modification > pi.modification "
|
||||||
"having count1 = ">>,
|
"having count1 = ">>,
|
||||||
(?PUBSUB):escape(i2l(IncIndex)),
|
(?PUBSUB):escape(jlib:i2l(IncIndex)),
|
||||||
<<" );">>])
|
<<" );">>])
|
||||||
of
|
of
|
||||||
{selected, [_], [[O]]} ->
|
{selected, [_], [[O]]} ->
|
||||||
@ -1281,7 +1281,7 @@ get_items(NodeId, _From,
|
|||||||
undefined -> [<<"modification">>, <<"null">>];
|
undefined -> [<<"modification">>, <<"null">>];
|
||||||
<<>> -> [<<"modification">>, <<"null">>];
|
<<>> -> [<<"modification">>, <<"null">>];
|
||||||
I ->
|
I ->
|
||||||
[A, B] = str:tokens((?PUBSUB):escape(i2l(I)),
|
[A, B] = str:tokens((?PUBSUB):escape(jlib:i2l(I)),
|
||||||
<<"@">>),
|
<<"@">>),
|
||||||
[A, <<"'", B/binary, "'">>]
|
[A, <<"'", B/binary, "'">>]
|
||||||
end,
|
end,
|
||||||
@ -1300,7 +1300,7 @@ get_items(NodeId, _From,
|
|||||||
NodeId, <<"' and ">>, AttrName, <<" ">>,
|
NodeId, <<"' and ">>, AttrName, <<" ">>,
|
||||||
Way, <<" ">>, Id, <<" order by ">>,
|
Way, <<" ">>, Id, <<" order by ">>,
|
||||||
AttrName, <<" ">>, Order, <<" limit ">>,
|
AttrName, <<" ">>, Order, <<" limit ">>,
|
||||||
i2l(Max), <<" ;">>])
|
jlib:i2l(Max), <<" ;">>])
|
||||||
of
|
of
|
||||||
{selected,
|
{selected,
|
||||||
[<<"itemid">>, <<"publisher">>, <<"creation">>,
|
[<<"itemid">>, <<"publisher">>, <<"creation">>,
|
||||||
@ -1322,7 +1322,7 @@ get_items(NodeId, _From,
|
|||||||
[_, _, _, L, _] = lists:last(RItems),
|
[_, _, _, L, _] = lists:last(RItems),
|
||||||
RsmOut = #rsm_out{count = Count, index = Index,
|
RsmOut = #rsm_out{count = Count, index = Index,
|
||||||
first = <<"modification@", F/binary>>,
|
first = <<"modification@", F/binary>>,
|
||||||
last = <<"modification@", (i2l(L))/binary>>},
|
last = <<"modification@", (jlib:i2l(L))/binary>>},
|
||||||
{result, {[raw_to_item(NodeId, RItem) || RItem <- RItems], RsmOut}};
|
{result, {[raw_to_item(NodeId, RItem) || RItem <- RItems], RsmOut}};
|
||||||
0 -> {result, {[], #rsm_out{count = Count}}}
|
0 -> {result, {[], #rsm_out{count = Count}}}
|
||||||
end;
|
end;
|
||||||
@ -1377,7 +1377,7 @@ get_last_items(NodeId, _From, Count) ->
|
|||||||
"where nodeid='">>,
|
"where nodeid='">>,
|
||||||
NodeId,
|
NodeId,
|
||||||
<<"' order by modification desc limit ">>,
|
<<"' order by modification desc limit ">>,
|
||||||
i2l(Count), <<";">>])
|
jlib:i2l(Count), <<";">>])
|
||||||
of
|
of
|
||||||
{selected,
|
{selected,
|
||||||
[<<"itemid">>, <<"publisher">>, <<"creation">>,
|
[<<"itemid">>, <<"publisher">>, <<"creation">>,
|
||||||
@ -1459,7 +1459,7 @@ set_item(Item) ->
|
|||||||
Payload = Item#pubsub_item.payload,
|
Payload = Item#pubsub_item.payload,
|
||||||
XML = (?PUBSUB):escape(str:join([xml:element_to_binary(X) || X<-Payload], <<>>)),
|
XML = (?PUBSUB):escape(str:join([xml:element_to_binary(X) || X<-Payload], <<>>)),
|
||||||
S = fun ({T1, T2, T3}) ->
|
S = fun ({T1, T2, T3}) ->
|
||||||
str:join([i2l(T1, 6), i2l(T2, 6), i2l(T3, 6)], <<":">>)
|
str:join([jlib:i2l(T1, 6), jlib:i2l(T2, 6), jlib:i2l(T3, 6)], <<":">>)
|
||||||
end,
|
end,
|
||||||
case catch
|
case catch
|
||||||
ejabberd_odbc:sql_query_t([<<"update pubsub_item set publisher='">>,
|
ejabberd_odbc:sql_query_t([<<"update pubsub_item set publisher='">>,
|
||||||
@ -1666,7 +1666,7 @@ raw_to_item(NodeId,
|
|||||||
JID = decode_jid(SJID),
|
JID = decode_jid(SJID),
|
||||||
ToTime = fun (Str) ->
|
ToTime = fun (Str) ->
|
||||||
[T1, T2, T3] = str:tokens(Str, <<":">>),
|
[T1, T2, T3] = str:tokens(Str, <<":">>),
|
||||||
{l2i(T1), l2i(T2), l2i(T3)}
|
{jlib:l2i(T1), jlib:l2i(T2), jlib:l2i(T3)}
|
||||||
end,
|
end,
|
||||||
Payload = case xml_stream:parse_element(XML) of
|
Payload = case xml_stream:parse_element(XML) of
|
||||||
{error, _Reason} -> [];
|
{error, _Reason} -> [];
|
||||||
@ -1676,18 +1676,3 @@ raw_to_item(NodeId,
|
|||||||
creation = {ToTime(Creation), JID},
|
creation = {ToTime(Creation), JID},
|
||||||
modification = {ToTime(Modification), JID},
|
modification = {ToTime(Modification), JID},
|
||||||
payload = Payload}.
|
payload = Payload}.
|
||||||
|
|
||||||
l2i(I) when is_integer(I) -> I;
|
|
||||||
l2i(L) when is_binary(L) -> jlib:binary_to_integer(L).
|
|
||||||
|
|
||||||
i2l(I) when is_integer(I) ->
|
|
||||||
iolist_to_binary(integer_to_list(I));
|
|
||||||
i2l(L) when is_binary(L) -> L.
|
|
||||||
|
|
||||||
i2l(I, N) when is_integer(I) -> i2l(i2l(I), N);
|
|
||||||
i2l(L, N) when is_binary(L) ->
|
|
||||||
case str:len(L) of
|
|
||||||
N -> L;
|
|
||||||
C when C > N -> L;
|
|
||||||
_ -> i2l(<<$0, L/binary>>, N)
|
|
||||||
end.
|
|
||||||
|
Loading…
Reference in New Issue
Block a user