aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMickaël Rémond <mremond@process-one.net>2020-02-20 16:28:24 +0100
committerGitHub <noreply@github.com>2020-02-20 16:28:24 +0100
commit3947e6452481983a6125c258e990962a9b991d3d (patch)
tree972b79e400359264c50c36dfb5218e159190e1a4
parentSupport ejabberd_auth_http's auth_opts (processone/ejabberd-contrib#284) (diff)
parentallow storage of emojis in archive on mssql (diff)
Merge pull request #3127 from area-42/allow_emojis_with_mssql
allow storage of emojis in archive on mssql
-rw-r--r--sql/mssql.sql4
-rw-r--r--src/mod_mam_sql.erl93
2 files changed, 66 insertions, 31 deletions
diff --git a/sql/mssql.sql b/sql/mssql.sql
index 7bf5d6de8..c54f1ab35 100644
--- a/sql/mssql.sql
+++ b/sql/mssql.sql
@@ -26,8 +26,8 @@ CREATE TABLE [dbo].[archive] (
[timestamp] [bigint] NOT NULL,
[peer] [varchar] (250) NOT NULL,
[bare_peer] [varchar] (250) NOT NULL,
- [xml] [text] NOT NULL,
- [txt] [text] NULL,
+ [xml] [ntext] NOT NULL,
+ [txt] [ntext] NULL,
[id] [bigint] IDENTITY(1,1) NOT NULL,
[kind] [varchar] (10) NULL,
[nick] [varchar] (250) NULL,
diff --git a/src/mod_mam_sql.erl b/src/mod_mam_sql.erl
index b169b6f64..eec682df9 100644
--- a/src/mod_mam_sql.erl
+++ b/src/mod_mam_sql.erl
@@ -105,6 +105,7 @@ store(Pkt, LServer, {LUser, LHost}, Type, Peer, Nick, _Dir, TS) ->
jid:tolower(Peer)),
Body = fxml:get_subtag_cdata(Pkt, <<"body">>),
SType = misc:atom_to_binary(Type),
+ SqlType = ejabberd_option:sql_type(LHost),
XML = case mod_mam_opt:compress_xml(LServer) of
true ->
J1 = case Type of
@@ -115,24 +116,44 @@ store(Pkt, LServer, {LUser, LHost}, Type, Peer, Nick, _Dir, TS) ->
_ ->
fxml:element_to_binary(Pkt)
end,
- case ejabberd_sql:sql_query(
- LServer,
- ?SQL_INSERT(
- "archive",
- ["username=%(SUser)s",
- "server_host=%(LServer)s",
- "timestamp=%(TS)d",
- "peer=%(LPeer)s",
- "bare_peer=%(BarePeer)s",
- "xml=%(XML)s",
- "txt=%(Body)s",
- "kind=%(SType)s",
- "nick=%(Nick)s"])) of
- {updated, _} ->
- ok;
- Err ->
- Err
- end.
+ case SqlType of
+ mssql -> case ejabberd_sql:sql_query(
+ LServer,
+ ?SQL_INSERT(
+ "archive",
+ ["username=%(SUser)s",
+ "server_host=%(LServer)s",
+ "timestamp=%(TS)d",
+ "peer=%(LPeer)s",
+ "bare_peer=%(BarePeer)s",
+ "xml=N%(XML)s",
+ "txt=N%(Body)s",
+ "kind=%(SType)s",
+ "nick=%(Nick)s"])) of
+ {updated, _} ->
+ ok;
+ Err ->
+ Err
+ end;
+ _ -> case ejabberd_sql:sql_query(
+ LServer,
+ ?SQL_INSERT(
+ "archive",
+ ["username=%(SUser)s",
+ "server_host=%(LServer)s",
+ "timestamp=%(TS)d",
+ "peer=%(LPeer)s",
+ "bare_peer=%(BarePeer)s",
+ "xml=%(XML)s",
+ "txt=%(Body)s",
+ "kind=%(SType)s",
+ "nick=%(Nick)s"])) of
+ {updated, _} ->
+ ok;
+ Err ->
+ Err
+ end
+ end.
write_prefs(LUser, _LServer, #archive_prefs{default = Default,
never = Never,
@@ -304,17 +325,31 @@ export(_Server) ->
XML = fxml:element_to_binary(Pkt),
Body = fxml:get_subtag_cdata(Pkt, <<"body">>),
SType = misc:atom_to_binary(Type),
- [?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"])];
+ SqlType = ejabberd_option:sql_type(Host),
+ case SqlType of
+ mssql -> [?SQL_INSERT(
+ "archive",
+ ["username=%(SUser)s",
+ "server_host=%(LServer)s",
+ "timestamp=%(TStmp)d",
+ "peer=%(LPeer)s",
+ "bare_peer=%(BarePeer)s",
+ "xml=N%(XML)s",
+ "txt=N%(Body)s",
+ "kind=%(SType)s",
+ "nick=%(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"])]
+ end;
(_Host, _R) ->
[]
end}].