aboutsummaryrefslogtreecommitdiff
path: root/src/odbc/odbc_queries.erl
diff options
context:
space:
mode:
authorPablo Polvorin <pablo.polvorin@process-one.net>2009-08-06 15:45:13 +0000
committerPablo Polvorin <pablo.polvorin@process-one.net>2009-08-06 15:45:13 +0000
commit53626d16e31e72b8dab96711de07a730586b040b (patch)
tree7bdfcf719dc124f4ab3952c522172d189ffed88d /src/odbc/odbc_queries.erl
parent* src/odbc/ejabberd_odbc_sup.erl: make requests return a timeout if (diff)
Support for roster versioning (EJAB-964)
Introduces two options for mod_roster and mod_roster_odbc: - {versioning, true | false} Enable or disable roster versioning on ejabberd. - {store_current_id, true | false} If true, the current roster version is stored on DB (internal or odbc). Otherwise it is calculated on the fly each time. Performance: Setting store_current_id to true should help in reducing the load for both ejabberd and the DB. Details: If store_current_id is false, the roster version is a hash of the entire roster. If store_current_id is true, the roster version is a hash, but of the current time (this has to do with transactional semantics; we need to perform both the roster update and the version update on the same transaction, but we don't have the entire roster when we are changing a single item on DB. Loading it there requires significant changes to be introduced, so I opted for this simpler approach). In either case, there is no difference for the clients, the roster version ID is opaque. IMPORTANT: mod_shared_roster is not compatible with the option 'store_current_id'. Shared roster and roster versioning can be both enabled, but store_current_id MUST be set to false. SVN Revision: 2428
Diffstat (limited to 'src/odbc/odbc_queries.erl')
-rw-r--r--src/odbc/odbc_queries.erl17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl
index ef1f59218..f70b8fb35 100644
--- a/src/odbc/odbc_queries.erl
+++ b/src/odbc/odbc_queries.erl
@@ -78,7 +78,9 @@
set_vcard/26,
get_vcard/2,
escape/1,
- count_records_where/3]).
+ count_records_where/3,
+ get_roster_version/2,
+ set_roster_version/2]).
%% We have only two compile time options for db queries:
%-define(generic, true).
@@ -555,6 +557,13 @@ count_records_where(LServer, Table, WhereClause) ->
ejabberd_odbc:sql_query(
LServer,
["select count(*) from ", Table, " ", WhereClause, ";"]).
+
+
+get_roster_version(LServer, LUser) ->
+ ejabberd_odbc:sql_query(LServer,
+ ["select version from roster_version where username = '", LUser, "'"]).
+set_roster_version(LUser, Version) ->
+ update_t("roster_version", ["username", "version"], [LUser, Version], ["username = '", LUser, "'"]).
-endif.
%% -----------------
@@ -791,4 +800,10 @@ count_records_where(LServer, Table, WhereClause) ->
ejabberd_odbc:sql_query(
LServer,
["select count(*) from ", Table, " ", WhereClause, " with (nolock)"]).
+
+get_roster_version(LServer, LUser) ->
+ ejabberd_odbc:sql_query(LServer,
+ ["select version from dbo.roster_version where username = '", LUser, "'"]).
+set_roster_version(LUser, Version) ->
+ update_t("dbo.roster_version", ["username", "version"], [LUser, Version], ["username = '", LUser, "'"]).
-endif.