aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 7c3713b76..7aca5933b 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 654e1f42f..676d622e1 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}].