]> granicus.if.org Git - ejabberd/commitdiff
Try to improve support for roster_version in MSSQL (EJAB-1437)
authorBadlop <badlop@process-one.net>
Thu, 14 Apr 2011 21:11:37 +0000 (23:11 +0200)
committerBadlop <badlop@process-one.net>
Thu, 14 Apr 2011 21:11:37 +0000 (23:11 +0200)
src/odbc/mssql2000.sql
src/odbc/mssql2005.sql
src/odbc/odbc_queries.erl

index 151d474a5ed2e1e67edb6069aa603f31d9a025b6..d4a70989d0550419d2e17efe207916146f64c002 100644 (file)
@@ -597,6 +597,40 @@ BEGIN
 END\r
 GO\r
 \r
+/******************************************************************/\r
+/****** Object:  StoredProcedure [dbo].[set_roster_version]      **/\r
+/** Update users roster_version                                  **/\r
+/******************************************************************/\r
+CREATE PROCEDURE [dbo].[set_roster_version]\r
+  @Username varchar(200), \r
+  @Version varchar(50)\r
+AS\r
+BEGIN\r
+  IF EXISTS (SELECT username FROM roster_version WITH (NOLOCK) WHERE username=@Username)\r
+    BEGIN\r
+      UPDATE roster_version SET username=@Username, version=@Version WHERE username=@Username;\r
+    END\r
+  ELSE\r
+    BEGIN\r
+      INSERT INTO roster_version (username, version) VALUES (@Username, @Version);\r
+    END\r
+END\r
+GO\r
+\r
+/******************************************************************/\r
+/****** Object:  StoredProcedure [dbo].[get_roster_version]      **/\r
+/** Retrive the user roster_version                              **/\r
+/******************************************************************/\r
+CREATE PROCEDURE [dbo].[get_roster_version]\r
+  @Username varchar(200)\r
+AS\r
+BEGIN\r
+  SELECT roster_version.version as version \r
+  FROM roster_version WITH (NOLOCK)\r
+  WHERE username=@Username;\r
+END\r
+GO\r
+\r
 /***************************************************************/\r
 /****** Object:  StoredProcedure [dbo].[clean_spool_msg]  ******/\r
 /** Delete messages older that 3 days from spool              **/\r
index 8420b7690e309884a69c4c32d50e1fe697d06807..91120707856828d2cc44c32290d75bca0ffbe1d3 100644 (file)
@@ -918,6 +918,40 @@ BEGIN
 END
 GO
 
+/******************************************************************/
+/****** Object:  StoredProcedure [dbo].[set_roster_version]      **/
+/** Update users roster_version                                  **/
+/******************************************************************/
+CREATE PROCEDURE [dbo].[set_roster_version]
+  @Username varchar(200),
+  @Version varchar(8000)
+AS
+BEGIN
+  IF EXISTS (SELECT username FROM roster_version WITH (NOLOCK) WHERE username=@Username)
+    BEGIN
+      UPDATE roster_version SET username=@Username, version=@Version WHERE username=@Username;
+    END
+  ELSE
+    BEGIN
+      INSERT INTO roster_version (username, version) VALUES (@Username, @Version);
+    END
+END
+GO
+
+/******************************************************************/
+/****** Object:  StoredProcedure [dbo].[get_roster_version]      **/
+/** Retrive the user roster_version                              **/
+/******************************************************************/
+CREATE PROCEDURE [dbo].[get_roster_version]
+  @Username varchar(200)
+AS
+BEGIN
+  SELECT roster_version.version as version
+  FROM roster_version WITH (NOLOCK)
+  WHERE username=@Username;
+END
+GO
+
 /***************************************************************/
 /****** Object:  StoredProcedure [dbo].[clean_spool_msg]  ******/
 /** Delete messages older that 3 days from spool              **/
index 3e3a29422d49a372faaef597743eadd81d6c8d72..b614fd790c1301614377944528908efdd3395d03 100644 (file)
@@ -90,6 +90,8 @@
 -define(generic, true).
 -endif.
 
+-include("ejabberd.hrl").
+
 %% Almost a copy of string:join/2.
 %% We use this version because string:join/2 is relatively
 %% new function (introduced in R12B-0).
@@ -882,8 +884,14 @@ count_records_where(LServer, Table, WhereClause) ->
       ["select count(*) from ", Table, " with (nolock) ", WhereClause]).
 
 get_roster_version(LServer, LUser) ->
-       ejabberd_odbc:sql_query(LServer, 
-               ["select version from dbo.roster_version with (nolock) where username = '", LUser, "'"]).
-set_roster_version(LUser, Version) ->
-       update_t("dbo.roster_version", ["username", "version"], [LUser, Version], ["username = '", LUser, "'"]).
+    ejabberd_odbc:sql_query(
+      LServer,
+      ["EXECUTE dbo.get_roster_version '", LUser, "'"]).
+
+set_roster_version(Username, Version) ->
+    %% This function doesn't know the vhost, so we hope it's the first one defined:
+    LServer = ?MYNAME,
+    ejabberd_odbc:sql_query(
+      LServer,
+      ["EXECUTE dbo.set_roster_version '", Username, "', '", Version, "'"]).
 -endif.