diff options
author | Pablo Polvorin <pablo.polvorin@process-one.net> | 2011-08-05 12:21:24 -0300 |
---|---|---|
committer | Pablo Polvorin <pablo.polvorin@process-one.net> | 2011-08-05 12:21:24 -0300 |
commit | 573a84b2ec765c88972b4e147dc0bad44a035361 (patch) | |
tree | 9ef1b983e2bb4efdbbba7665956bcee5a90803a7 | |
parent | Add comment about ping requests sent even to non-supporting clients (diff) |
handle case when roster version on DB is enabled but version is not found.
Thanks Evgeniy.
-rw-r--r-- | src/mod_roster_odbc.erl | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mod_roster_odbc.erl b/src/mod_roster_odbc.erl index b713a0aab..3fccc2848 100644 --- a/src/mod_roster_odbc.erl +++ b/src/mod_roster_odbc.erl @@ -163,7 +163,15 @@ roster_version(LServer ,LUser) -> true -> case odbc_queries:get_roster_version(ejabberd_odbc:escape(LServer), ejabberd_odbc:escape(LUser)) of {selected, ["version"], [{Version}]} -> Version; - {selected, ["version"], []} -> not_found + {selected, ["version"], []} -> + %% If for some reason we don't had it on DB. Create a version Id and store it. + %% (we did the same on process_iq_get, that is called when client get roster, + %% not sure why it can still not be on DB at this point) + RosterVersion = sha:sha(term_to_binary(now())), + {atomic, {updated,1}} = odbc_queries:sql_transaction(LServer, fun() -> + odbc_queries:set_roster_version(ejabberd_odbc:escape(LUser), RosterVersion) + end), + RosterVersion end; false -> roster_hash(ejabberd_hooks:run_fold(roster_get, LServer, [], [US])) |