mirror of
https://github.com/processone/ejabberd
synced 2025-10-05 19:42:11 +02:00
Add SQL_INSERT macro and update SQL queries to use server_host field
This commit is contained in:
parent
354a710e70
commit
78dfb832b8
25 changed files with 1638 additions and 297 deletions
|
@ -38,6 +38,12 @@
|
|||
-include("logger.hrl").
|
||||
-include("ejabberd_sql_pt.hrl").
|
||||
|
||||
-ifdef(NEW_SQL_SCHEMA).
|
||||
-define(USE_NEW_SCHEMA, true).
|
||||
-else.
|
||||
-define(USE_NEW_SCHEMA, false).
|
||||
-endif.
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
%%%===================================================================
|
||||
|
@ -47,23 +53,32 @@ init(_Host, _Opts) ->
|
|||
remove_user(LUser, LServer) ->
|
||||
ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("delete from archive where username=%(LUser)s")),
|
||||
?SQL("delete from archive where username=%(LUser)s and %(LServer)H")),
|
||||
ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("delete from archive_prefs where username=%(LUser)s")).
|
||||
?SQL("delete from archive_prefs where username=%(LUser)s and %(LServer)H")).
|
||||
|
||||
remove_room(LServer, LName, LHost) ->
|
||||
LUser = jid:encode({LName, LHost, <<>>}),
|
||||
remove_user(LUser, LServer).
|
||||
|
||||
delete_old_messages(ServerHost, TimeStamp, Type) ->
|
||||
TypeClause = if Type == all -> <<"">>;
|
||||
true -> [<<" and kind='">>, misc:atom_to_binary(Type), <<"'">>]
|
||||
end,
|
||||
TS = integer_to_binary(now_to_usec(TimeStamp)),
|
||||
ejabberd_sql:sql_query(
|
||||
ServerHost, [<<"delete from archive where timestamp<">>,
|
||||
TS, TypeClause, <<";">>]),
|
||||
TS = now_to_usec(TimeStamp),
|
||||
case Type of
|
||||
all ->
|
||||
ejabberd_sql:sql_query(
|
||||
ServerHost,
|
||||
?SQL("delete from archive"
|
||||
" where timestamp < %(TS)d and %(ServerHost)H"));
|
||||
_ ->
|
||||
SType = misc:atom_to_binary(Type),
|
||||
ejabberd_sql:sql_query(
|
||||
ServerHost,
|
||||
?SQL("delete from archive"
|
||||
" where timestamp < %(TS)d"
|
||||
" and kind=%(SType)s"
|
||||
" and %(ServerHost)H"))
|
||||
end,
|
||||
ok.
|
||||
|
||||
extended_fields() ->
|
||||
|
@ -86,16 +101,17 @@ store(Pkt, LServer, {LUser, LHost}, Type, Peer, Nick, _Dir) ->
|
|||
SType = misc:atom_to_binary(Type),
|
||||
case ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("insert into archive (username, timestamp,"
|
||||
" peer, bare_peer, xml, txt, kind, nick) values ("
|
||||
"%(SUser)s, "
|
||||
"%(TSinteger)d, "
|
||||
"%(LPeer)s, "
|
||||
"%(BarePeer)s, "
|
||||
"%(XML)s, "
|
||||
"%(Body)s, "
|
||||
"%(SType)s, "
|
||||
"%(Nick)s)")) of
|
||||
?SQL_INSERT(
|
||||
"archive",
|
||||
["username=%(SUser)s",
|
||||
"server_host=%(LServer)s",
|
||||
"timestamp=%(TSinteger)d",
|
||||
"peer=%(LPeer)s",
|
||||
"bare_peer=%(BarePeer)s",
|
||||
"xml=%(XML)s",
|
||||
"txt=%(Body)s",
|
||||
"kind=%(SType)s",
|
||||
"nick=%(Nick)s"])) of
|
||||
{updated, _} ->
|
||||
{ok, ID};
|
||||
Err ->
|
||||
|
@ -113,6 +129,7 @@ write_prefs(LUser, _LServer, #archive_prefs{default = Default,
|
|||
ServerHost,
|
||||
"archive_prefs",
|
||||
["!username=%(LUser)s",
|
||||
"!server_host=%(ServerHost)s",
|
||||
"def=%(SDefault)s",
|
||||
"always=%(SAlways)s",
|
||||
"never=%(SNever)s"]) of
|
||||
|
@ -126,7 +143,7 @@ get_prefs(LUser, LServer) ->
|
|||
case ejabberd_sql:sql_query(
|
||||
LServer,
|
||||
?SQL("select @(def)s, @(always)s, @(never)s from archive_prefs"
|
||||
" where username=%(LUser)s")) of
|
||||
" where username=%(LUser)s and %(LServer)H")) of
|
||||
{selected, [{SDefault, SAlways, SNever}]} ->
|
||||
Default = erlang:binary_to_existing_atom(SDefault, utf8),
|
||||
Always = ejabberd_sql:decode_term(SAlways),
|
||||
|
@ -192,8 +209,13 @@ export(_Server) ->
|
|||
SDefault = erlang:atom_to_binary(Default, utf8),
|
||||
SAlways = misc:term_to_expr(Always),
|
||||
SNever = misc:term_to_expr(Never),
|
||||
[?SQL("insert into archive_prefs (username, def, always, never) values"
|
||||
"(%(LUser)s, %(SDefault)s, %(SAlways)s, %(SNever)s);")];
|
||||
[?SQL_INSERT(
|
||||
"archive_prefs",
|
||||
["username=%(LUser)s",
|
||||
"server_host=%(LServer)s",
|
||||
"def=%(SDefault)s",
|
||||
"always=%(SAlways)s",
|
||||
"never=%(SNever)s"])];
|
||||
(_Host, _R) ->
|
||||
[]
|
||||
end},
|
||||
|
@ -212,11 +234,17 @@ export(_Server) ->
|
|||
XML = fxml:element_to_binary(Pkt),
|
||||
Body = fxml:get_subtag_cdata(Pkt, <<"body">>),
|
||||
SType = misc:atom_to_binary(Type),
|
||||
[?SQL("insert into archive (username, timestamp, "
|
||||
"peer, bare_peer, xml, txt, kind, nick) "
|
||||
"values (%(SUser)s, %(TStmp)d, %(LPeer)s, "
|
||||
"%(BarePeer)s, %(XML)s, %(Body)s, %(SType)s, "
|
||||
"%(Nick)s);")];
|
||||
[?SQL_INSERT(
|
||||
"archive",
|
||||
["username=%(SUser)s",
|
||||
"server_host=%(LServer)s",
|
||||
"timestamp=%(TStmp)d",
|
||||
"peer=%(LPeer)s",
|
||||
"bare_peer=%(BarePeer)s",
|
||||
"xml=%(XML)s",
|
||||
"txt=%(Body)s",
|
||||
"kind=%(SType)s",
|
||||
"nick=%(Nick)s"])];
|
||||
(_Host, _R) ->
|
||||
[]
|
||||
end}].
|
||||
|
@ -303,11 +331,24 @@ make_sql_query(User, LServer, MAMQuery, RSM) ->
|
|||
[]
|
||||
end,
|
||||
SUser = Escape(User),
|
||||
SServer = Escape(LServer),
|
||||
|
||||
Query = [<<"SELECT ">>, TopClause, <<" timestamp, xml, peer, kind, nick"
|
||||
" FROM archive WHERE username='">>,
|
||||
SUser, <<"'">>, WithClause, WithTextClause, StartClause, EndClause,
|
||||
PageClause],
|
||||
Query =
|
||||
case ?USE_NEW_SCHEMA of
|
||||
true ->
|
||||
[<<"SELECT ">>, TopClause,
|
||||
<<" timestamp, xml, peer, kind, nick"
|
||||
" FROM archive WHERE username='">>,
|
||||
SUser, <<"' and server_host='">>,
|
||||
SServer, <<"'">>, WithClause, WithTextClause,
|
||||
StartClause, EndClause, PageClause];
|
||||
false ->
|
||||
[<<"SELECT ">>, TopClause,
|
||||
<<" timestamp, xml, peer, kind, nick"
|
||||
" FROM archive WHERE username='">>,
|
||||
SUser, <<"'">>, WithClause, WithTextClause,
|
||||
StartClause, EndClause, PageClause]
|
||||
end,
|
||||
|
||||
QueryPage =
|
||||
case Direction of
|
||||
|
@ -322,9 +363,19 @@ make_sql_query(User, LServer, MAMQuery, RSM) ->
|
|||
[Query, <<" ORDER BY timestamp ASC ">>,
|
||||
LimitClause, <<";">>]
|
||||
end,
|
||||
{QueryPage,
|
||||
[<<"SELECT COUNT(*) FROM archive WHERE username='">>,
|
||||
SUser, <<"'">>, WithClause, WithTextClause, StartClause, EndClause, <<";">>]}.
|
||||
case ?USE_NEW_SCHEMA of
|
||||
true ->
|
||||
{QueryPage,
|
||||
[<<"SELECT COUNT(*) FROM archive WHERE username='">>,
|
||||
SUser, <<"' and server_host='">>,
|
||||
SServer, <<"'">>, WithClause, WithTextClause,
|
||||
StartClause, EndClause, <<";">>]};
|
||||
false ->
|
||||
{QueryPage,
|
||||
[<<"SELECT COUNT(*) FROM archive WHERE username='">>,
|
||||
SUser, <<"'">>, WithClause, WithTextClause,
|
||||
StartClause, EndClause, <<";">>]}
|
||||
end.
|
||||
|
||||
-spec get_max_direction_id(rsm_set() | undefined) ->
|
||||
{integer() | undefined,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue