aboutsummaryrefslogtreecommitdiff
path: root/src/odbc
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-04-08 11:12:54 +0200
committerChristophe Romain <christophe.romain@process-one.net>2013-06-13 11:11:02 +0200
commit4d8f7706240a1603468968f47fc7b150b788d62f (patch)
tree92d55d789cc7ac979b3c9e161ffb7f908eba043a /src/odbc
parentFix Guide: ejabberd_service expects a shaper_rule, not a shaper (diff)
Switch to rebar build tool
Use dynamic Rebar configuration Make iconv dependency optional Disable transient_supervisors compile option Add hipe compilation support Only compile ibrowse and lhttpc when needed Make it possible to generate an OTP application release Add --enable-debug compile option Add --enable-all compiler option Add --enable-tools configure option Add --with-erlang configure option. Add --enable-erlang-version-check configure option. Add lager support Improve the test suite
Diffstat (limited to 'src/odbc')
-rw-r--r--src/odbc/Makefile.in38
-rw-r--r--src/odbc/Makefile.win3222
-rw-r--r--src/odbc/ejabberd_odbc.erl612
-rw-r--r--src/odbc/ejabberd_odbc_sup.erl94
-rw-r--r--src/odbc/mssql2000.sql1096
-rw-r--r--src/odbc/mssql2005.sql1803
-rw-r--r--src/odbc/mysql.sql284
-rw-r--r--src/odbc/odbc_queries.erl937
-rw-r--r--src/odbc/pg.sql285
9 files changed, 0 insertions, 5171 deletions
diff --git a/src/odbc/Makefile.in b/src/odbc/Makefile.in
deleted file mode 100644
index 3f4898d3a..000000000
--- a/src/odbc/Makefile.in
+++ /dev/null
@@ -1,38 +0,0 @@
-# $Id$
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-
-ERLANG_CFLAGS = @ERLANG_CFLAGS@
-ERLANG_LIBS = @ERLANG_LIBS@
-
-EFLAGS += -I ..
-EFLAGS += -pz ..
-
-# make debug=true to compile Erlang module with debug informations.
-ifdef debug
- EFLAGS+=+debug_info
-endif
-
-OUTDIR = ..
-SOURCES = $(wildcard *.erl)
-BEAMS = $(addprefix $(OUTDIR)/,$(SOURCES:.erl=.beam))
-
-
-all: $(BEAMS)
-
-$(OUTDIR)/%.beam: %.erl
- @ERLC@ -W $(EFLAGS) -D@db_type@ -o $(OUTDIR) $<
-
-clean:
- rm -f $(BEAMS)
-
-distclean: clean
- rm -f Makefile
-
-TAGS:
- etags *.erl
-
diff --git a/src/odbc/Makefile.win32 b/src/odbc/Makefile.win32
deleted file mode 100644
index 2775468b7..000000000
--- a/src/odbc/Makefile.win32
+++ /dev/null
@@ -1,22 +0,0 @@
-
-include ..\Makefile.inc
-
-EFLAGS = -I .. -pz ..
-
-OUTDIR = ..
-BEAMS = ..\ejabberd_odbc.beam ..\ejabberd_odbc_sup.beam ..\odbc_queries.beam
-
-ALL : $(BEAMS)
-
-CLEAN :
- -@erase $(BEAMS)
-
-$(OUTDIR)\ejabberd_odbc.beam : ejabberd_odbc.erl
- erlc -W $(EFLAGS) -o $(OUTDIR) ejabberd_odbc.erl
-
-$(OUTDIR)\ejabberd_odbc_sup.beam : ejabberd_odbc_sup.erl
- erlc -W $(EFLAGS) -o $(OUTDIR) ejabberd_odbc_sup.erl
-
-$(OUTDIR)\odbc_queries.beam : odbc_queries.erl
- erlc -W $(EFLAGS) -o $(OUTDIR) -D$(DBTYPE) odbc_queries.erl
-
diff --git a/src/odbc/ejabberd_odbc.erl b/src/odbc/ejabberd_odbc.erl
deleted file mode 100644
index 1cb157c05..000000000
--- a/src/odbc/ejabberd_odbc.erl
+++ /dev/null
@@ -1,612 +0,0 @@
-%%%----------------------------------------------------------------------
-%%% File : ejabberd_odbc.erl
-%%% Author : Alexey Shchepin <alexey@process-one.net>
-%%% Purpose : Serve ODBC connection
-%%% Created : 8 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
-%%%
-%%%
-%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
-%%%
-%%% This program is free software; you can redistribute it and/or
-%%% modify it under the terms of the GNU General Public License as
-%%% published by the Free Software Foundation; either version 2 of the
-%%% License, or (at your option) any later version.
-%%%
-%%% This program is distributed in the hope that it will be useful,
-%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
-%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%%% General Public License for more details.
-%%%
-%%% You should have received a copy of the GNU General Public License
-%%% along with this program; if not, write to the Free Software
-%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-%%% 02111-1307 USA
-%%%
-%%%----------------------------------------------------------------------
-
--module(ejabberd_odbc).
-
--author('alexey@process-one.net').
-
--define(GEN_FSM, p1_fsm).
-
--behaviour(?GEN_FSM).
-
-%% External exports
--export([start/1, start_link/2,
- sql_query/2,
- sql_query_t/1,
- sql_transaction/2,
- sql_bloc/2,
- escape/1,
- escape_like/1,
- to_bool/1,
- encode_term/1,
- decode_term/1,
- keep_alive/1]).
-
-%% gen_fsm callbacks
--export([init/1, handle_event/3, handle_sync_event/4,
- handle_info/3, terminate/3, print_state/1,
- code_change/4]).
-
-%% gen_fsm states
--export([connecting/2, connecting/3,
- session_established/2, session_established/3]).
-
--include("ejabberd.hrl").
-
--record(state,
- {db_ref = self() :: pid(),
- db_type = odbc :: pgsql | mysql | odbc,
- start_interval = 0 :: non_neg_integer(),
- host = <<"">> :: binary(),
- max_pending_requests_len :: non_neg_integer(),
- pending_requests = {0, queue:new()} :: {non_neg_integer(), queue()}}).
-
--define(STATE_KEY, ejabberd_odbc_state).
-
--define(NESTING_KEY, ejabberd_odbc_nesting_level).
-
--define(TOP_LEVEL_TXN, 0).
-
--define(MAX_TRANSACTION_RESTARTS, 10).
-
--define(PGSQL_PORT, 5432).
-
--define(MYSQL_PORT, 3306).
-
--define(TRANSACTION_TIMEOUT, 60000).
-
--define(KEEPALIVE_TIMEOUT, 60000).
-
--define(KEEPALIVE_QUERY, <<"SELECT 1;">>).
-
-%%-define(DBGFSM, true).
-
--ifdef(DBGFSM).
-
--define(FSMOPTS, [{debug, [trace]}]).
-
--else.
-
--define(FSMOPTS, []).
-
--endif.
-
-%%%----------------------------------------------------------------------
-%%% API
-%%%----------------------------------------------------------------------
-start(Host) ->
- (?GEN_FSM):start(ejabberd_odbc, [Host],
- fsm_limit_opts() ++ (?FSMOPTS)).
-
-start_link(Host, StartInterval) ->
- (?GEN_FSM):start_link(ejabberd_odbc,
- [Host, StartInterval],
- fsm_limit_opts() ++ (?FSMOPTS)).
-
--type sql_query() :: [sql_query() | binary()].
--type sql_query_result() :: {updated, non_neg_integer()} |
- {error, binary()} |
- {selected, [binary()],
- [[binary()]]}.
-
--spec sql_query(binary(), sql_query()) -> sql_query_result().
-
-sql_query(Host, Query) ->
- sql_call(Host, {sql_query, Query}).
-
-%% SQL transaction based on a list of queries
-%% This function automatically
--spec sql_transaction(binary(), [sql_query()] | fun(() -> any())) ->
- {atomic, any()} |
- {aborted, any()}.
-
-sql_transaction(Host, Queries)
- when is_list(Queries) ->
- F = fun () ->
- lists:foreach(fun (Query) -> sql_query_t(Query) end,
- Queries)
- end,
- sql_transaction(Host, F);
-%% SQL transaction, based on a erlang anonymous function (F = fun)
-sql_transaction(Host, F) when is_function(F) ->
- sql_call(Host, {sql_transaction, F}).
-
-%% SQL bloc, based on a erlang anonymous function (F = fun)
-sql_bloc(Host, F) -> sql_call(Host, {sql_bloc, F}).
-
-sql_call(Host, Msg) ->
- case get(?STATE_KEY) of
- undefined ->
- (?GEN_FSM):sync_send_event(ejabberd_odbc_sup:get_random_pid(Host),
- {sql_cmd, Msg, now()},
- ?TRANSACTION_TIMEOUT);
- _State -> nested_op(Msg)
- end.
-
-keep_alive(PID) ->
- (?GEN_FSM):sync_send_event(PID,
- {sql_cmd, {sql_query, ?KEEPALIVE_QUERY}, now()},
- ?KEEPALIVE_TIMEOUT).
-
--spec sql_query_t(sql_query()) -> sql_query_result().
-
-%% This function is intended to be used from inside an sql_transaction:
-sql_query_t(Query) ->
- QRes = sql_query_internal(Query),
- case QRes of
- {error, Reason} -> throw({aborted, Reason});
- Rs when is_list(Rs) ->
- case lists:keysearch(error, 1, Rs) of
- {value, {error, Reason}} -> throw({aborted, Reason});
- _ -> QRes
- end;
- _ -> QRes
- end.
-
-%% Escape character that will confuse an SQL engine
-escape(S) ->
- << <<(odbc_queries:escape(Char))/binary>> || <<Char>> <= S >>.
-
-%% Escape character that will confuse an SQL engine
-%% Percent and underscore only need to be escaped for pattern matching like
-%% statement
-escape_like(S) when is_binary(S) ->
- << <<(escape_like(C))/binary>> || <<C>> <= S >>;
-escape_like($%) -> <<"\\%">>;
-escape_like($_) -> <<"\\_">>;
-escape_like(C) when is_integer(C), C >= 0, C =< 255 -> odbc_queries:escape(C).
-
-to_bool(<<"t">>) -> true;
-to_bool(<<"true">>) -> true;
-to_bool(<<"1">>) -> true;
-to_bool(true) -> true;
-to_bool(1) -> true;
-to_bool(_) -> false.
-
-encode_term(Term) ->
- escape(list_to_binary(
- erl_prettypr:format(erl_syntax:abstract(Term)))).
-
-decode_term(Bin) ->
- Str = binary_to_list(<<Bin/binary, ".">>),
- {ok, Tokens, _} = erl_scan:string(Str),
- {ok, Term} = erl_parse:parse_term(Tokens),
- Term.
-
-%%%----------------------------------------------------------------------
-%%% Callback functions from gen_fsm
-%%%----------------------------------------------------------------------
-init([Host, StartInterval]) ->
- case ejabberd_config:get_local_option(
- {odbc_keepalive_interval, Host},
- fun(I) when is_integer(I), I>0 -> I end) of
- undefined ->
- ok;
- KeepaliveInterval ->
- timer:apply_interval(KeepaliveInterval * 1000, ?MODULE,
- keep_alive, [self()])
- end,
- [DBType | _] = db_opts(Host),
- (?GEN_FSM):send_event(self(), connect),
- ejabberd_odbc_sup:add_pid(Host, self()),
- {ok, connecting,
- #state{db_type = DBType, host = Host,
- max_pending_requests_len = max_fsm_queue(),
- pending_requests = {0, queue:new()},
- start_interval = StartInterval}}.
-
-connecting(connect, #state{host = Host} = State) ->
- ConnectRes = case db_opts(Host) of
- [mysql | Args] -> apply(fun mysql_connect/5, Args);
- [pgsql | Args] -> apply(fun pgsql_connect/5, Args);
- [odbc | Args] -> apply(fun odbc_connect/1, Args)
- end,
- {_, PendingRequests} = State#state.pending_requests,
- case ConnectRes of
- {ok, Ref} ->
- erlang:monitor(process, Ref),
- lists:foreach(fun (Req) ->
- (?GEN_FSM):send_event(self(), Req)
- end,
- queue:to_list(PendingRequests)),
- {next_state, session_established,
- State#state{db_ref = Ref,
- pending_requests = {0, queue:new()}}};
- {error, Reason} ->
- ?INFO_MSG("~p connection failed:~n** Reason: ~p~n** "
- "Retry after: ~p seconds",
- [State#state.db_type, Reason,
- State#state.start_interval div 1000]),
- (?GEN_FSM):send_event_after(State#state.start_interval,
- connect),
- {next_state, connecting, State}
- end;
-connecting(Event, State) ->
- ?WARNING_MSG("unexpected event in 'connecting': ~p",
- [Event]),
- {next_state, connecting, State}.
-
-connecting({sql_cmd, {sql_query, ?KEEPALIVE_QUERY},
- _Timestamp},
- From, State) ->
- (?GEN_FSM):reply(From,
- {error, <<"SQL connection failed">>}),
- {next_state, connecting, State};
-connecting({sql_cmd, Command, Timestamp} = Req, From,
- State) ->
- ?DEBUG("queuing pending request while connecting:~n\t~p",
- [Req]),
- {Len, PendingRequests} = State#state.pending_requests,
- NewPendingRequests = if Len <
- State#state.max_pending_requests_len ->
- {Len + 1,
- queue:in({sql_cmd, Command, From, Timestamp},
- PendingRequests)};
- true ->
- lists:foreach(fun ({sql_cmd, _, To,
- _Timestamp}) ->
- (?GEN_FSM):reply(To,
- {error,
- <<"SQL connection failed">>})
- end,
- queue:to_list(PendingRequests)),
- {1,
- queue:from_list([{sql_cmd, Command, From,
- Timestamp}])}
- end,
- {next_state, connecting,
- State#state{pending_requests = NewPendingRequests}};
-connecting(Request, {Who, _Ref}, State) ->
- ?WARNING_MSG("unexpected call ~p from ~p in 'connecting'",
- [Request, Who]),
- {reply, {error, badarg}, connecting, State}.
-
-session_established({sql_cmd, Command, Timestamp}, From,
- State) ->
- run_sql_cmd(Command, From, State, Timestamp);
-session_established(Request, {Who, _Ref}, State) ->
- ?WARNING_MSG("unexpected call ~p from ~p in 'session_establ"
- "ished'",
- [Request, Who]),
- {reply, {error, badarg}, session_established, State}.
-
-session_established({sql_cmd, Command, From, Timestamp},
- State) ->
- run_sql_cmd(Command, From, State, Timestamp);
-session_established(Event, State) ->
- ?WARNING_MSG("unexpected event in 'session_established': ~p",
- [Event]),
- {next_state, session_established, State}.
-
-handle_event(_Event, StateName, State) ->
- {next_state, StateName, State}.
-
-handle_sync_event(_Event, _From, StateName, State) ->
- {reply, {error, badarg}, StateName, State}.
-
-code_change(_OldVsn, StateName, State, _Extra) ->
- {ok, StateName, State}.
-
-%% We receive the down signal when we loose the MySQL connection (we are
-%% monitoring the connection)
-handle_info({'DOWN', _MonitorRef, process, _Pid, _Info},
- _StateName, State) ->
- (?GEN_FSM):send_event(self(), connect),
- {next_state, connecting, State};
-handle_info(Info, StateName, State) ->
- ?WARNING_MSG("unexpected info in ~p: ~p",
- [StateName, Info]),
- {next_state, StateName, State}.
-
-terminate(_Reason, _StateName, State) ->
- ejabberd_odbc_sup:remove_pid(State#state.host, self()),
- case State#state.db_type of
- mysql -> catch mysql_conn:stop(State#state.db_ref);
- _ -> ok
- end,
- ok.
-
-%%----------------------------------------------------------------------
-%% Func: print_state/1
-%% Purpose: Prepare the state to be printed on error log
-%% Returns: State to print
-%%----------------------------------------------------------------------
-print_state(State) -> State.
-
-%%%----------------------------------------------------------------------
-%%% Internal functions
-%%%----------------------------------------------------------------------
-
-run_sql_cmd(Command, From, State, Timestamp) ->
- case timer:now_diff(now(), Timestamp) div 1000 of
- Age when Age < (?TRANSACTION_TIMEOUT) ->
- put(?NESTING_KEY, ?TOP_LEVEL_TXN),
- put(?STATE_KEY, State),
- abort_on_driver_error(outer_op(Command), From);
- Age ->
- ?ERROR_MSG("Database was not available or too slow, "
- "discarding ~p milliseconds old request~n~p~n",
- [Age, Command]),
- {next_state, session_established, State}
- end.
-
-%% Only called by handle_call, only handles top level operations.
-%% @spec outer_op(Op) -> {error, Reason} | {aborted, Reason} | {atomic, Result}
-outer_op({sql_query, Query}) ->
- sql_query_internal(Query);
-outer_op({sql_transaction, F}) ->
- outer_transaction(F, ?MAX_TRANSACTION_RESTARTS, <<"">>);
-outer_op({sql_bloc, F}) -> execute_bloc(F).
-
-%% Called via sql_query/transaction/bloc from client code when inside a
-%% nested operation
-nested_op({sql_query, Query}) ->
- sql_query_internal(Query);
-nested_op({sql_transaction, F}) ->
- NestingLevel = get(?NESTING_KEY),
- if NestingLevel =:= (?TOP_LEVEL_TXN) ->
- outer_transaction(F, ?MAX_TRANSACTION_RESTARTS, <<"">>);
- true -> inner_transaction(F)
- end;
-nested_op({sql_bloc, F}) -> execute_bloc(F).
-
-%% Never retry nested transactions - only outer transactions
-inner_transaction(F) ->
- PreviousNestingLevel = get(?NESTING_KEY),
- case get(?NESTING_KEY) of
- ?TOP_LEVEL_TXN ->
- {backtrace, T} = process_info(self(), backtrace),
- ?ERROR_MSG("inner transaction called at outer txn "
- "level. Trace: ~s",
- [T]),
- erlang:exit(implementation_faulty);
- _N -> ok
- end,
- put(?NESTING_KEY, PreviousNestingLevel + 1),
- Result = (catch F()),
- put(?NESTING_KEY, PreviousNestingLevel),
- case Result of
- {aborted, Reason} -> {aborted, Reason};
- {'EXIT', Reason} -> {'EXIT', Reason};
- {atomic, Res} -> {atomic, Res};
- Res -> {atomic, Res}
- end.
-
-outer_transaction(F, NRestarts, _Reason) ->
- PreviousNestingLevel = get(?NESTING_KEY),
- case get(?NESTING_KEY) of
- ?TOP_LEVEL_TXN -> ok;
- _N ->
- {backtrace, T} = process_info(self(), backtrace),
- ?ERROR_MSG("outer transaction called at inner txn "
- "level. Trace: ~s",
- [T]),
- erlang:exit(implementation_faulty)
- end,
- sql_query_internal(<<"begin;">>),
- put(?NESTING_KEY, PreviousNestingLevel + 1),
- Result = (catch F()),
- put(?NESTING_KEY, PreviousNestingLevel),
- case Result of
- {aborted, Reason} when NRestarts > 0 ->
- sql_query_internal(<<"rollback;">>),
- outer_transaction(F, NRestarts - 1, Reason);
- {aborted, Reason} when NRestarts =:= 0 ->
- ?ERROR_MSG("SQL transaction restarts exceeded~n** "
- "Restarts: ~p~n** Last abort reason: "
- "~p~n** Stacktrace: ~p~n** When State "
- "== ~p",
- [?MAX_TRANSACTION_RESTARTS, Reason,
- erlang:get_stacktrace(), get(?STATE_KEY)]),
- sql_query_internal(<<"rollback;">>),
- {aborted, Reason};
- {'EXIT', Reason} ->
- sql_query_internal(<<"rollback;">>), {aborted, Reason};
- Res -> sql_query_internal(<<"commit;">>), {atomic, Res}
- end.
-
-execute_bloc(F) ->
- case catch F() of
- {aborted, Reason} -> {aborted, Reason};
- {'EXIT', Reason} -> {aborted, Reason};
- Res -> {atomic, Res}
- end.
-
-sql_query_internal(Query) ->
- State = get(?STATE_KEY),
- Res = case State#state.db_type of
- odbc ->
- to_odbc(odbc:sql_query(State#state.db_ref, Query,
- (?TRANSACTION_TIMEOUT) - 1000));
- pgsql ->
- pgsql_to_odbc(pgsql:squery(State#state.db_ref, Query));
- mysql ->
- ?DEBUG("MySQL, Send query~n~p~n", [Query]),
- %%squery to be able to specify result_type = binary
- %%[Query] because mysql_conn expect query to be a list (elements can be binaries, or iolist)
- %% but doesn't accept just a binary
- R = mysql_to_odbc(mysql_conn:squery(State#state.db_ref,
- [Query], self(),
- [{timeout, (?TRANSACTION_TIMEOUT) - 1000},
- {result_type, binary}])),
- %% ?INFO_MSG("MySQL, Received result~n~p~n", [R]),
- R
- end,
- case Res of
- {error, <<"No SQL-driver information available.">>} ->
- {updated, 0};
- _Else -> Res
- end.
-
-%% Generate the OTP callback return tuple depending on the driver result.
-abort_on_driver_error({error, <<"query timed out">>} =
- Reply,
- From) ->
- (?GEN_FSM):reply(From, Reply),
- {stop, timeout, get(?STATE_KEY)};
-abort_on_driver_error({error,
- <<"Failed sending data on socket", _/binary>>} =
- Reply,
- From) ->
- (?GEN_FSM):reply(From, Reply),
- {stop, closed, get(?STATE_KEY)};
-abort_on_driver_error(Reply, From) ->
- (?GEN_FSM):reply(From, Reply),
- {next_state, session_established, get(?STATE_KEY)}.
-
-%% == pure ODBC code
-
-%% part of init/1
-%% Open an ODBC database connection
-odbc_connect(SQLServer) ->
- application:start(odbc),
- odbc:connect(SQLServer, [{scrollable_cursors, off}]).
-
-%% == Native PostgreSQL code
-
-%% part of init/1
-%% Open a database connection to PostgreSQL
-pgsql_connect(Server, Port, DB, Username, Password) ->
- case pgsql:connect([{host, Server},
- {database, DB},
- {user, Username},
- {password, Password},
- {port, Port},
- {as_binary, true}]) of
- {ok, Ref} ->
- pgsql:squery(Ref, [<<"alter database ">>, DB, <<" set ">>,
- <<"standard_conforming_strings='off';">>]),
- {ok, Ref};
- Err ->
- Err
- end.
-
-%% Convert PostgreSQL query result to Erlang ODBC result formalism
-pgsql_to_odbc({ok, PGSQLResult}) ->
- case PGSQLResult of
- [Item] -> pgsql_item_to_odbc(Item);
- Items -> [pgsql_item_to_odbc(Item) || Item <- Items]
- end.
-
-pgsql_item_to_odbc({<<"SELECT", _/binary>>, Rows,
- Recs}) ->
- {selected, [element(1, Row) || Row <- Rows], Recs};
-pgsql_item_to_odbc(<<"INSERT ", OIDN/binary>>) ->
- [_OID, N] = str:tokens(OIDN, <<" ">>),
- {updated, jlib:binary_to_integer(N)};
-pgsql_item_to_odbc(<<"DELETE ", N/binary>>) ->
- {updated, jlib:binary_to_integer(N)};
-pgsql_item_to_odbc(<<"UPDATE ", N/binary>>) ->
- {updated, jlib:binary_to_integer(N)};
-pgsql_item_to_odbc({error, Error}) -> {error, Error};
-pgsql_item_to_odbc(_) -> {updated, undefined}.
-
-%% == Native MySQL code
-
-%% part of init/1
-%% Open a database connection to MySQL
-mysql_connect(Server, Port, DB, Username, Password) ->
- case mysql_conn:start(binary_to_list(Server), Port,
- binary_to_list(Username), binary_to_list(Password),
- binary_to_list(DB), fun log/3)
- of
- {ok, Ref} ->
- mysql_conn:fetch(Ref, [<<"set names 'utf8';">>],
- self()),
- {ok, Ref};
- Err -> Err
- end.
-
-%% Convert MySQL query result to Erlang ODBC result formalism
-mysql_to_odbc({updated, MySQLRes}) ->
- {updated, mysql:get_result_affected_rows(MySQLRes)};
-mysql_to_odbc({data, MySQLRes}) ->
- mysql_item_to_odbc(mysql:get_result_field_info(MySQLRes),
- mysql:get_result_rows(MySQLRes));
-mysql_to_odbc({error, MySQLRes})
- when is_binary(MySQLRes) ->
- {error, MySQLRes};
-mysql_to_odbc({error, MySQLRes}) ->
- {error, mysql:get_result_reason(MySQLRes)}.
-
-%% When tabular data is returned, convert it to the ODBC formalism
-mysql_item_to_odbc(Columns, Recs) ->
- {selected, [element(2, Column) || Column <- Columns], Recs}.
-
-to_odbc({selected, Columns, Recs}) ->
- {selected, Columns, [tuple_to_list(Rec) || Rec <- Recs]};
-to_odbc(Res) ->
- Res.
-
-log(Level, Format, Args) ->
- case Level of
- debug -> ?DEBUG(Format, Args);
- normal -> ?INFO_MSG(Format, Args);
- error -> ?ERROR_MSG(Format, Args)
- end.
-
-db_opts(Host) ->
- case ejabberd_config:get_local_option(
- {odbc_server, Host},
- fun({Type, Server, DB, User, Pass}) ->
- {Type,
- iolist_to_binary(Server),
- case Type of
- mysql -> ?MYSQL_PORT;
- pgsql -> ?PGSQL_PORT
- end,
- iolist_to_binary(DB),
- iolist_to_binary(User),
- iolist_to_binary(Pass)};
- ({Type, Server, Port, DB, User, Pass})
- when ((Type == mysql) or (Type == pgsql))
- and (is_integer(Port) and ((Port > 0)
- and (Port < 65536))) ->
- {Type,
- iolist_to_binary(Server),
- Port,
- iolist_to_binary(DB),
- iolist_to_binary(User),
- iolist_to_binary(Pass)};
- (S) ->
- iolist_to_binary(S)
- end, <<"localhost">>) of
- {Type, Server, Port, DB, User, Pass} ->
- [Type, Server, Port, DB, User, Pass];
- SQLServer ->
- [odbc, SQLServer]
- end.
-
-max_fsm_queue() ->
- ejabberd_config:get_local_option(
- max_fsm_queue,
- fun(N) when is_integer(N), N > 0 -> N end).
-
-fsm_limit_opts() ->
- case max_fsm_queue() of
- N when is_integer(N) -> [{max_queue, N}];
- _ -> []
- end.
diff --git a/src/odbc/ejabberd_odbc_sup.erl b/src/odbc/ejabberd_odbc_sup.erl
deleted file mode 100644
index 0c748d147..000000000
--- a/src/odbc/ejabberd_odbc_sup.erl
+++ /dev/null
@@ -1,94 +0,0 @@
-%%%----------------------------------------------------------------------
-%%% File : ejabberd_odbc_sup.erl
-%%% Author : Alexey Shchepin <alexey@process-one.net>
-%%% Purpose : ODBC connections supervisor
-%%% Created : 22 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
-%%%
-%%%
-%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
-%%%
-%%% This program is free software; you can redistribute it and/or
-%%% modify it under the terms of the GNU General Public License as
-%%% published by the Free Software Foundation; either version 2 of the
-%%% License, or (at your option) any later version.
-%%%
-%%% This program is distributed in the hope that it will be useful,
-%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
-%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%%% General Public License for more details.
-%%%
-%%% You should have received a copy of the GNU General Public License
-%%% along with this program; if not, write to the Free Software
-%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-%%% 02111-1307 USA
-%%%
-%%%----------------------------------------------------------------------
-
--module(ejabberd_odbc_sup).
-
--author('alexey@process-one.net').
-
-%% API
--export([start_link/1, init/1, add_pid/2, remove_pid/2,
- get_pids/1, get_random_pid/1]).
-
--include("ejabberd.hrl").
-
--define(DEFAULT_POOL_SIZE, 10).
-
--define(DEFAULT_ODBC_START_INTERVAL, 30).
-
--define(CONNECT_TIMEOUT, 500).
-
--record(sql_pool, {host, pid}).
-
-start_link(Host) ->
- mnesia:create_table(sql_pool,
- [{ram_copies, [node()]}, {type, bag},
- {local_content, true},
- {attributes, record_info(fields, sql_pool)}]),
- mnesia:add_table_copy(sql_pool, node(), ram_copies),
- F = fun () -> mnesia:delete({sql_pool, Host}) end,
- mnesia:ets(F),
- supervisor:start_link({local,
- gen_mod:get_module_proc(Host, ?MODULE)},
- ?MODULE, [Host]).
-
-init([Host]) ->
- PoolSize = ejabberd_config:get_local_option(
- {odbc_pool_size, Host},
- fun(I) when is_integer(I), I>0 -> I end,
- ?DEFAULT_POOL_SIZE),
- StartInterval = ejabberd_config:get_local_option(
- {odbc_start_interval, Host},
- fun(I) when is_integer(I), I>0 -> I end,
- ?DEFAULT_ODBC_START_INTERVAL),
- {ok,
- {{one_for_one, PoolSize * 10, 1},
- lists:map(fun (I) ->
- {I,
- {ejabberd_odbc, start_link,
- [Host, StartInterval * 1000]},
- transient, 2000, worker, [?MODULE]}
- end,
- lists:seq(1, PoolSize))}}.
-
-get_pids(Host) ->
- Rs = mnesia:dirty_read(sql_pool, Host),
- [R#sql_pool.pid || R <- Rs].
-
-get_random_pid(Host) ->
- Pids = get_pids(Host),
- lists:nth(erlang:phash(now(), length(Pids)), Pids).
-
-add_pid(Host, Pid) ->
- F = fun () ->
- mnesia:write(#sql_pool{host = Host, pid = Pid})
- end,
- mnesia:ets(F).
-
-remove_pid(Host, Pid) ->
- F = fun () ->
- mnesia:delete_object(#sql_pool{host = Host, pid = Pid})
- end,
- mnesia:ets(F).
diff --git a/src/odbc/mssql2000.sql b/src/odbc/mssql2000.sql
deleted file mode 100644
index d5381bafa..000000000
--- a/src/odbc/mssql2000.sql
+++ /dev/null
@@ -1,1096 +0,0 @@
-/*
- * ejabberd, Copyright (C) 2002-2013 ProcessOne
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- * 02111-1307 USA
- *
- */
-
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-exec sp_dboption N'ejabberd', N'autoclose', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'bulkcopy', N'true'
-GO
-
-exec sp_dboption N'ejabberd', N'trunc. log', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'torn page detection', N'true'
-GO
-
-exec sp_dboption N'ejabberd', N'read only', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'dbo use', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'single', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'autoshrink', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'ANSI null default', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'recursive triggers', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'ANSI nulls', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'concat null yields null', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'cursor close on commit', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'default to local cursor', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'quoted identifier', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'ANSI warnings', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'auto create statistics', N'true'
-GO
-
-exec sp_dboption N'ejabberd', N'auto update statistics', N'true'
-GO
-
-use [ejabberd]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[last]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[last]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rostergroups]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[rostergroups]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rosterusers]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[rosterusers]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spool]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[spool]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[users]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vcard]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[vcard]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[private_storage]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[private_storage]
-GO
-
-CREATE TABLE [dbo].[last] (
- [username] [varchar] (250) NOT NULL ,
- [seconds] [varchar] (50) NOT NULL ,
- [state] [varchar] (100) NOT NULL ,
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[rostergroups] (
- [username] [varchar] (250) NOT NULL ,
- [jid] [varchar] (250) NOT NULL ,
- [grp] [varchar] (100) NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[rosterusers] (
- [username] [varchar] (250) NOT NULL ,
- [jid] [varchar] (250) NOT NULL ,
- [nick] [varchar] (50) NOT NULL ,
- [subscription] [char] (1) NOT NULL ,
- [ask] [char] (1) NOT NULL ,
- [askmessage] [varchar] (250) NOT NULL ,
- [server] [char] (1) NOT NULL ,
- [subscribe] [varchar] (200) NULL ,
- [type] [varchar] (50) NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[spool] (
- [id] [numeric](19, 0) IDENTITY (1, 1) NOT NULL ,
- [username] [varchar] (250) NOT NULL ,
- [xml] [text] NOT NULL ,
- [notifyprocessed] [bit] NULL ,
- [created] [datetime] NULL ,
-) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[users] (
- [username] [varchar] (250) NOT NULL ,
- [password] [varchar] (50) NOT NULL ,
- [created] [datetime] NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[vcard] (
- [username] [varchar] (250) NOT NULL ,
- [full_name] [varchar] (250) NULL ,
- [first_name] [varchar] (50) NULL ,
- [last_name] [varchar] (50) NULL ,
- [nick_name] [varchar] (50) NULL ,
- [url] [varchar] (1024) NULL ,
- [address1] [varchar] (50) NULL ,
- [address2] [varchar] (50) NULL ,
- [locality] [varchar] (50) NULL ,
- [region] [varchar] (50) NULL ,
- [pcode] [varchar] (50) NULL ,
- [country] [varchar] (50) NULL ,
- [telephone] [varchar] (50) NULL ,
- [email] [varchar] (250) NULL ,
- [orgname] [varchar] (50) NULL ,
- [orgunit] [varchar] (50) NULL ,
- [title] [varchar] (50) NULL ,
- [role] [varchar] (50) NULL ,
- [b_day] [datetime] NULL ,
- [descr] [varchar] (500) NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[private_storage] (
- [username] [varchar] (250) NOT NULL ,
- [namespace] [varchar] (250) NOT NULL ,
- [data] [text] NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[privacy_default_list] (
- [username] [varchar] (250) NOT NULL,
- [name] [varchar] (250) NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[privacy_list] (
- [username] [varchar] (250) NOT NULL,
- [name] [varchar] (250) NOT NULL,
- id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[privacy_list_data] (
- [id] [bigint] NOT NULL,
- [t] [character] (1) NOT NULL,
- [value] [text] NOT NULL,
- [action] [character] (1) NOT NULL,
- [ord] [NUMERIC] NOT NULL,
- [match_all] [boolean] NOT NULL,
- [match_iq] [boolean] NOT NULL,
- [match_message] [boolean] NOT NULL,
- [match_presence_in] [boolean] NOT NULL,
- [match_presence_out] [boolean] NOT NULL
-) ON [PRIMARY]
-GO
-
-/* Not tested on mssql */
-CREATE TABLE [dbo].[roster_version] (
- [username] [varchar] (250) NOT NULL ,
- [version] [varchar] (64) NOT NULL
-) ON [PRIMARY]
-GO
-
-
-/* Constraints to add:
-- id in privacy_list is a SERIAL autogenerated number
-- id in privacy_list_data must exist in the table privacy_list */
-
-ALTER TABLE [dbo].[last] WITH NOCHECK ADD
- CONSTRAINT [PK_last] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[rostergroups] WITH NOCHECK ADD
- CONSTRAINT [PK_rostergroups] PRIMARY KEY CLUSTERED
- (
- [username],
- [jid],
- [grp]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[spool] WITH NOCHECK ADD
- CONSTRAINT [PK_spool] PRIMARY KEY CLUSTERED
- (
- [username],
- [id]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[users] WITH NOCHECK ADD
- CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[roster_version] WITH NOCHECK ADD
- CONSTRAINT [PK_roster_version] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[vcard] WITH NOCHECK ADD
- CONSTRAINT [PK_vcard] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-CREATE CLUSTERED INDEX [IX_rosterusers_user] ON [dbo].[rosterusers]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[last] WITH NOCHECK ADD
- CONSTRAINT [DF_last_updated] DEFAULT (getdate()) FOR [Modify_Date]
-GO
-
-ALTER TABLE [dbo].[spool] WITH NOCHECK ADD
- CONSTRAINT [DF_spool_notifyprocessed] DEFAULT (0) FOR [notifyprocessed],
- CONSTRAINT [DF_spool_created] DEFAULT (getdate()) FOR [created],
- CONSTRAINT [DF_spool_MustDelete] DEFAULT (0) FOR [MustDelete]
-GO
-
-ALTER TABLE [dbo].[users] WITH NOCHECK ADD
- CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]
-GO
-
-ALTER TABLE [dbo].[privacy_default_list] WITH NOCHECK ADD
- CONSTRAINT [PK_privacy_defaut_list] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-
-
- CREATE INDEX [IX_rostergroups_jid] ON [dbo].[rostergroups]([jid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_rostergroups_user] ON [dbo].[rostergroups]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_rosterusers_jid] ON [dbo].[rosterusers]([username], [jid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_spool_user] ON [dbo].[spool]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_spool_process] ON [dbo].[spool]([created], [notifyprocessed]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IK_Spool_Del] ON [dbo].[spool]([MustDelete]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IK_Spool_Created] ON [dbo].[spool]([created]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_private_user] ON [dbo].[private_storage]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_private_user_ns] ON [dbo].[private_storage]([username], [namespace]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_privacy_list_username] ON [dbo].[privacy_list]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_privacy_list_username_name] ON [dbo].[privacy_list]([username], [name]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-/*********************************************************/
-/** These store procedures are for use with ejabberd **/
-/** 1.1 and Microsoft Sql Server 2000 **/
-/** **/
-/** The stored procedures reduce the need to sql **/
-/** compilation of the database and also allow for also **/
-/** provide each of database integration. The stored **/
-/** procedure have been optimized to increase database **/
-/** performance and a reduction of 80% in CPU was **/
-/** achieved over the use of standard sql. **/
-/*********************************************************/
-
-/****** Object: StoredProcedure [dbo].[add_roster] ******/
-/** Add or update user entries in the roster **/
-/*********************************************************/
-CREATE PROCEDURE [dbo].[add_roster]
- @Username varchar(250),
- @JID varchar(250),
- @Nick varchar(50),
- @Subscription char(1),
- @Ask char(1),
- @AskMessage varchar(250),
- @Server char(1),
- @Subscribe varchar(200),
- @Type varchar(50),
- @Grp varchar(100)
-AS
-BEGIN
- BEGIN TRANSACTION
- --- Update Roster if user exist else add roster item
- IF EXISTS (SELECT username FROM rosterusers WITH (NOLOCK) WHERE rosterusers.username=@Username AND rosterusers.jid=@JID)
- BEGIN
- UPDATE rosterusers
- SET rosterusers.username=@Username,
- rosterusers.jid=@JID,
- rosterusers.nick=@Nick,
- rosterusers.subscription=@Subscription,
- rosterusers.ask=@Ask,
- rosterusers.askmessage=@AskMessage,
- rosterusers.server=@Server,
- rosterusers.subscribe=@Subscribe,
- rosterusers.type=@Type
- WHERE (rosterusers.username=@Username) AND (rosterusers.jid=@JID);
- END
- ELSE
- BEGIN
- INSERT INTO rosterusers
- ( rosterusers.username,
- rosterusers.jid,
- rosterusers.nick,
- rosterusers.subscription,
- rosterusers.ask,
- rosterusers.askmessage,
- rosterusers.server,
- rosterusers.subscribe,
- rosterusers.type
- )
- VALUES
- ( @Username,
- @JID,
- @Nick,
- @Subscription,
- @Ask,
- @AskMessage,
- @Server,
- @Subscribe,
- @Type
- );
- END
-
- --- Update Roster Groups if exist else add group entry
- IF NOT EXISTS (SELECT username FROM rostergroups WITH (NOLOCK) WHERE rostergroups.username=@Username AND rostergroups.jid=@JID AND rostergroups.grp=@Grp)
- BEGIN
- INSERT INTO rostergroups
- ( rostergroups.username,
- rostergroups.jid,
- rostergroups.grp
- )
- VALUES
- ( @Username,
- @JID,
- @Grp
- );
- END
-
- COMMIT
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_roster_group] ******/
-/** Add or update user group entries in the roster groups **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_roster_group]
- @Username varchar(250),
- @JID varchar(250),
- @Grp varchar(100)
-AS
-BEGIN
- --- Update Roster Groups if exist else add group
- IF NOT EXISTS (SELECT username FROM rostergroups WHERE rostergroups.username=@Username AND rostergroups.jid=@JID AND rostergroups.grp=@Grp)
- BEGIN
- INSERT INTO rostergroups
- ( rostergroups.username,
- rostergroups.jid,
- rostergroups.grp
- )
- VALUES
- ( @Username,
- @JID,
- @Grp
- )
- END
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_roster_user] ******/
-/** Add or update user entries in the roster **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_roster_user]
- @Username varchar(250),
- @JID varchar(250),
- @Nick varchar(50),
- @Subscription char(1),
- @Ask char(1),
- @AskMessage varchar(250),
- @Server char(1),
- @Subscribe varchar(200),
- @Type varchar(50),
- @Grp varchar(100) = Null
-AS
-BEGIN
- BEGIN TRANSACTION
- --- Update Roster Users if exist of add new user
- IF EXISTS (SELECT username FROM rosterusers WHERE rosterusers.username=@Username AND rosterusers.jid=@JID)
- BEGIN
- UPDATE rosterusers
- SET rosterusers.username=@Username,
- rosterusers.jid=@JID,
- rosterusers.nick=@Nick,
- rosterusers.subscription=@Subscription,
- rosterusers.ask=@Ask,
- rosterusers.askmessage=@AskMessage,
- rosterusers.server=@Server,
- rosterusers.subscribe=@Subscribe,
- rosterusers.type=@Type
- WHERE (rosterusers.username=@Username) AND (rosterusers.jid=@JID);
- END
- ELSE
- BEGIN
- INSERT INTO rosterusers
- ( rosterusers.username,
- rosterusers.jid,
- rosterusers.nick,
- rosterusers.subscription,
- rosterusers.ask,
- rosterusers.askmessage,
- rosterusers.server,
- rosterusers.subscribe,
- rosterusers.type
- )
- VALUES
- ( @Username,
- @JID,
- @Nick,
- @Subscription,
- @Ask,
- @AskMessage,
- @Server,
- @Subscribe,
- @Type
- );
- END
-
- --- Update Roster Group if exist of add new group
- IF @Grp IS NOT NULL
- EXECUTE [dbo].[add_roster_group] @Username, @JID, @Grp
-
- COMMIT
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_roster_groups] ******/
-/** Remove user group entries from the roster groups table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_roster_groups]
- @Username varchar(250),
- @JID varchar(250)
-AS
-BEGIN
- DELETE FROM rostergroups
- WITH (ROWLOCK)
- WHERE (rostergroups.username = @Username) AND (rostergroups.jid = @JID);
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_spool] ******/
-/** Add a entry to the spool table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_spool]
- @Username varchar(250),
- @XML varchar(8000)
-AS
-BEGIN
- INSERT INTO spool
- ( spool.username,
- spool.xml
- )
- VALUES
- ( @Username,
- @XML
- )
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_user] ******/
-/** Add or update user entries to jabber **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_user]
- @Username varchar(200),
- @Password varchar(50)
-AS
-BEGIN
- INSERT INTO users
- ( [username],
- [password]
- )
- VALUES
- ( @Username,
- @Password
- );
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_password] **/
-/** Update users password **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_password]
- @Username varchar(200),
- @Password varchar(50)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM users WITH (NOLOCK) WHERE username=@Username)
- BEGIN
- UPDATE users SET username=@Username, password=@Password WHERE username=@Username;
- END
- ELSE
- BEGIN
- INSERT INTO users (username, password) VALUES (@Username, @Password);
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_password] **/
-/** Retrive the user password **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_password]
- @Username varchar(200)
-AS
-BEGIN
- SELECT users.password as password
- FROM users WITH (NOLOCK)
- WHERE username=@Username;
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_roster_version] **/
-/** Update users roster_version **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_roster_version]
- @Username varchar(200),
- @Version varchar(50)
-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 **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[clean_spool_msg]
-AS
-DECLARE
- @dt datetime,
- @myRowCount int
-BEGIN
- -- Delete small amounts because if locks the database table
- SET ROWCOUNT 500
- SET @myRowCount = 1
-
- WHILE (@myRowCount) > 0
- BEGIN
- BEGIN TRANSACTION
- SELECT @dt = DATEADD(d, -3, GETDATE())
- DELETE FROM spool
- WITH (ROWLOCK)
- WHERE (MustDelete=1) OR (Created < @dt);
-
- SET @myRowCount = @@RowCount
- COMMIT
- END
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_last] ******/
-/** Delete an entry from the last table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_last]
- @Username varchar(250)
-AS
-BEGIN
- DELETE FROM [last]
- WITH (ROWLOCK)
- WHERE [last].username=@Username;
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_roster] ******/
-/** Delete an entry from the roster **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_roster]
- @Username varchar(250),
- @JID varchar(250)
-AS
-BEGIN
- BEGIN TRANSACTION
- DELETE FROM rosterusers
- WITH (ROWLOCK)
- WHERE (rosterusers.username = @Username) AND (rosterusers.jid = @JID);
-
- DELETE FROM rostergroups
- WITH (ROWLOCK)
- WHERE (rostergroups.username = @Username) AND (rostergroups.jid = @JID);
- COMMIT
-END
-GO
-
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_spool_msg] ******/
-/** Delete an entry from the spool table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_spool_msg]
- @Username varchar(250)
-AS
-BEGIN
- DELETE FROM spool
- WITH (ROWLOCK)
- WHERE spool.username=@Username;
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user] ******/
-/** Delete an entry from the user table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_user]
- @Username varchar(200)
-AS
-BEGIN
- DELETE FROM users
- WITH (ROWLOCK)
- WHERE username=@Username;
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user_return_password]**/
-/** Delete an entry from the user table and return user password **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[del_user_return_password]
- @Username varchar(250)
-AS
-DECLARE
- @Pwd varchar(50)
-BEGIN
- EXECUTE @Pwd = dbo.get_password @Username
- DELETE FROM users
- WITH (ROWLOCK)
- WHERE username=@Username
-
- SELECT @Pwd;
-END
-GO
-
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user_roster] **/
-/** Delete the users roster **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[del_user_roster]
- @Username varchar(250)
-AS
-BEGIN
- BEGIN TRANSACTION
- DELETE FROM rosterusers
- WITH (ROWLOCK)
- WHERE rosterusers.username = @Username;
-
- DELETE FROM rostergroups
- WITH (ROWLOCK)
- WHERE rostergroups.username = @Username;
- COMMIT
-END
-GO
-
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_and_del_spool_msg] **/
-/** Fetch and delete the users offline messages **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_and_del_spool_msg]
- @Username varchar(250)
-AS
-DECLARE
- @vSpool table( username varchar(1),
- xml varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM spool with (nolock) WHERE spool.username=@Username)
- BEGIN
- SELECT spool.username AS username,
- spool.xml AS xml
- FROM spool WITH (NOLOCK)
- WHERE spool.username=@Username;
-
- DELETE spool
- WITH (ROWLOCK)
- WHERE spool.username=@Username
- END
- ELSE
- BEGIN
- SELECT * FROM @vSpool;
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_last] **/
-/** Retrive the last user login **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_last]
- @Username varchar(250)
-AS
-BEGIN
- SELECT last.seconds AS seconds,
- last.state AS state
- FROM last WITH (NOLOCK)
- WHERE last.username=@Username;
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster] **/
-/** Retrive the user roster **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster]
- @Username varchar(250)
-AS
-DECLARE
- @vRosterusers table( username varchar(1),
- jid varchar(1),
- nick varchar(1),
- subscription varchar(1),
- ask varchar(1),
- askmessage varchar(1),
- server varchar(1),
- subscribe varchar(1),
- type varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rosterusers with (nolock) WHERE rosterusers.username = @Username)
- BEGIN
- SELECT rosterusers.username AS username,
- rosterusers.jid AS jid,
- rosterusers.nick AS nick,
- rosterusers.subscription AS subscription,
- rosterusers.ask AS ask,
- rosterusers.askmessage AS askmessage,
- rosterusers.server AS server,
- rosterusers.subscribe AS subscribe,
- rosterusers.type AS type
- FROM rosterusers WITH (NOLOCK)
- WHERE rosterusers.username = @Username;
- END
- ELSE
- BEGIN
- SELECT * FROM @vRosterusers
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster_by_jid] **/
-/** Retrive the user roster via JID **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster_by_jid]
- @Username varchar(200),
- @JID varchar(250)
-AS
-DECLARE
- @vRosterusers table( username varchar(1),
- jid varchar(1),
- nick varchar(1),
- subscription varchar(1),
- ask varchar(1),
- askmessage varchar(1),
- server varchar(1),
- subscribe varchar(1),
- type varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rosterusers with (nolock) WHERE (rosterusers.username = @Username) AND (rosterusers.jid = @JID))
- BEGIN
- SELECT rosterusers.username AS username,
- rosterusers.jid AS jid,
- rosterusers.nick AS nick,
- rosterusers.subscription AS subscription,
- rosterusers.ask AS ask,
- rosterusers.askmessage AS askmessage,
- rosterusers.server AS server,
- rosterusers.subscribe AS subscribe,
- rosterusers.type AS type
- FROM rosterusers WITH (NOLOCK)
- WHERE (rosterusers.username = @Username) AND (rosterusers.jid = @JID);
- END
- ELSE
- BEGIN
- SELECT * FROM @vRosterusers
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster_jid_groups] **/
-/** Retrieve the user roster groups **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster_jid_groups]
- @Username varchar(200)
-AS
-DECLARE
- @vrostergroups table( jid varchar(1),
- grp varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rostergroups with (nolock) WHERE rostergroups.username = @Username)
- BEGIN
- SELECT rostergroups.jid AS jid,
- rostergroups.grp AS grp
- FROM rostergroups WITH (NOLOCK)
- WHERE rostergroups.username = @Username;
- END
- ELSE
- BEGIN
- SELECT * FROM @vrostergroups
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster_groups] **/
-/** Retrive the user roster groups **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster_groups]
- @Username varchar(200),
- @JID varchar(250)
-AS
-DECLARE
- @vrostergroups table( grp varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rostergroups with (nolock) WHERE rostergroups.username = @Username)
- BEGIN
- SELECT rostergroups.grp AS grp
- FROM rostergroups WITH (NOLOCK)
- WHERE (rostergroups.username = @Username) AND (rostergroups.jid = @JID);
- END
- ELSE
- BEGIN
- SELECT * FROM @vrostergroups
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_rostergroup_by_jid] **/
-/** Retrive the user roster groups via JID **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_rostergroup_by_jid]
- @Username varchar(250),
- @JID varchar(250)
-AS
-DECLARE
- @vrostergroups table(grp varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rostergroups with (nolock) WHERE rostergroups.username=@Username AND rostergroups.jid=@JID)
- BEGIN
- SELECT rostergroups.grp AS grp
- FROM rostergroups WITH (NOLOCK)
- WHERE rostergroups.username=@Username AND rostergroups.jid=@JID;
- END
- ELSE
- BEGIN
- SELECT * FROM @vrostergroups
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_subscription] **/
-/** Retrive the user subscription requests **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_subscription]
- @Username varchar(250),
- @JID varchar(250)
-AS
-DECLARE
- @vrosterusers table( subscription varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rosterusers with (nolock) WHERE rosterusers.username=@Username AND rosterusers.jid=@JID)
- BEGIN
- SELECT rosterusers.subscription AS subscription
- FROM rosterusers WITH (NOLOCK)
- WHERE rosterusers.username=@Username AND rosterusers.jid=@JID;
- END
- ELSE
- BEGIN
- SELECT * FROM @vrosterusers
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[list_users] **/
-/** Retrieve a list of all users **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[list_users]
-AS
-BEGIN
- SELECT users.username AS username FROM users WITH (NOLOCK);
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_last] **/
-/** Update users last login status **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_last]
- @Username varchar(250),
- @Seconds varchar(50),
- @State varchar(100)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM [last] WITH (NOLOCK) WHERE username=@Username)
- BEGIN
- UPDATE [last]
- SET [last].username = @Username,
- [last].seconds = @Seconds,
- [last].state = @State
- WHERE last.username=@Username;
- END
- ELSE
- BEGIN
- INSERT INTO [last]
- ( [last].username,
- [last].seconds,
- [last].state
- )
- VALUES
- ( @Username,
- @Seconds,
- @State
- )
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_private_data] **/
-/** store user private data by namespace **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_private_data]
- @Username varchar(250),
- @Namespace varchar(250),
- @Data varchar(8000)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM private_storage with (nolock) WHERE private_storage.username = @Username AND private_storage.namespace = @Namespace)
- BEGIN
- UPDATE [private_storage]
- SET [private_storage].username = @Username,
- [private_storage].namespace = @Namespace,
- [private_storage].data = @Data
- WHERE private_storage.username = @Username AND private_storage.namespace = @Namespace;
- END
- ELSE
- BEGIN
- INSERT INTO [private_storage]
- ( [private_storage].username,
- [private_storage].namespace,
- [private_storage].data
- )
- VALUES
- ( @Username,
- @Namespace,
- @Data
- )
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_private_data] **/
-/** Retrieve user private data by namespace **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_private_data]
- @Username varchar(250),
- @Namespace varchar(250)
-AS
-BEGIN
- SELECT private_storage.data AS data
- FROM private_storage WITH (NOLOCK)
- WHERE username=@Username and namespace=@Namespace;
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user_storage] ******/
-/** Delete private storage area for a given user **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_user_storage]
- @Username varchar(250)
-AS
-BEGIN
- DELETE FROM [private_storage]
- WITH (ROWLOCK)
- WHERE [private_storage].username=@Username;
-END
-GO
-
-
-
diff --git a/src/odbc/mssql2005.sql b/src/odbc/mssql2005.sql
deleted file mode 100644
index 2cfb078e2..000000000
--- a/src/odbc/mssql2005.sql
+++ /dev/null
@@ -1,1803 +0,0 @@
-/*
- * ejabberd, Copyright (C) 2002-2013 ProcessOne
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- * 02111-1307 USA
- *
- */
-
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-exec sp_dboption N'ejabberd', N'autoclose', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'bulkcopy', N'true'
-GO
-
-exec sp_dboption N'ejabberd', N'trunc. log', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'torn page detection', N'true'
-GO
-
-exec sp_dboption N'ejabberd', N'read only', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'dbo use', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'single', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'autoshrink', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'ANSI null default', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'recursive triggers', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'ANSI nulls', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'concat null yields null', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'cursor close on commit', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'default to local cursor', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'quoted identifier', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'ANSI warnings', N'false'
-GO
-
-exec sp_dboption N'ejabberd', N'auto create statistics', N'true'
-GO
-
-exec sp_dboption N'ejabberd', N'auto update statistics', N'true'
-GO
-
-use [ejabberd]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[last]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[last]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rostergroups]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[rostergroups]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rosterusers]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[rosterusers]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spool]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[spool]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[users]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vcard]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[vcard]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vcard_search]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[vcard_search]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[private_storage]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[private_storage]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[privacy_default_list]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[privacy_default_list]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[privacy_list]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[privacy_list]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[privacy_list_data]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[privacy_list_data]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[roster_version]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[roster_version]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pubsub_node_option]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[pubsub_node_option]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pubsub_node_owner]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[pubsub_node_owner]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pubsub_state]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[pubsub_state]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pubsub_item]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[pubsub_item]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pubsub_subscription_opt]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[pubsub_subscription_opt]
-GO
-
-if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pubsub_node]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-drop table [dbo].[pubsub_node]
-GO
-
-CREATE TABLE [dbo].[last] (
- [username] [varchar] (250) NOT NULL ,
- [seconds] [varchar] (50) NOT NULL ,
- [state] [varchar] (100) NOT NULL ,
- [Modify_Date] [datetime] NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[rostergroups] (
- [username] [varchar] (250) NOT NULL ,
- [jid] [varchar] (250) NOT NULL ,
- [grp] [varchar] (100) NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[rosterusers] (
- [username] [varchar] (250) NOT NULL ,
- [jid] [varchar] (250) NOT NULL ,
- [nick] [varchar] (50) NOT NULL ,
- [subscription] [char] (1) NOT NULL ,
- [ask] [char] (1) NOT NULL ,
- [askmessage] [varchar] (250) NOT NULL ,
- [server] [char] (1) NOT NULL ,
- [subscribe] [varchar] (200) NULL ,
- [type] [varchar] (50) NULL ,
-CONSTRAINT [PK_rosterusers] PRIMARY KEY NONCLUSTERED
-(
- [username] ASC,
- [jid] ASC
-)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[spool] (
- [id] [numeric](19, 0) IDENTITY (1, 1) NOT NULL ,
- [username] [varchar] (250) NOT NULL ,
- [xml] [text] NOT NULL ,
- [notifyprocessed] [bit] NULL ,
- [created] [datetime] NULL ,
- [MustDelete] [bit] NOT NULL
-) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[users] (
- [username] [varchar] (250) NOT NULL ,
- [password] [varchar] (50) NOT NULL ,
- [created] [datetime] NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[vcard] (
- [username] [varchar] (250) NOT NULL ,
- [vcard] [text] NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[vcard_search] (
- [username] [varchar] (250) NOT NULL ,
- [lusername] [varchar] (250) NOT NULL ,
- [fn] [text] NOT NULL ,
- [lfn] [varchar] (250) NOT NULL ,
- [family] [text] NOT NULL ,
- [lfamily] [varchar] (250) NOT NULL ,
- [given] [text] NOT NULL ,
- [lgiven] [varchar] (250) NOT NULL ,
- [middle] [text] NOT NULL ,
- [lmiddle] [varchar] (250) NOT NULL ,
- [nickname] [text] NOT NULL ,
- [lnickname] [varchar] (250) NOT NULL ,
- [bday] [text] NOT NULL ,
- [lbday] [varchar] (250) NOT NULL ,
- [ctry] [text] NOT NULL ,
- [lctry] [varchar] (250) NOT NULL ,
- [locality] [text] NOT NULL ,
- [llocality] [varchar] (250) NOT NULL ,
- [email] [text] NOT NULL ,
- [lemail] [varchar] (250) NOT NULL ,
- [orgname] [text] NOT NULL ,
- [lorgname] [varchar] (250) NOT NULL ,
- [orgunit] [text] NOT NULL ,
- [lorgunit] [varchar] (250) NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[private_storage] (
- [username] [varchar] (250) NOT NULL ,
- [namespace] [varchar] (250) NOT NULL ,
- [data] [text] NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[privacy_default_list] (
- [username] [varchar] (250) NOT NULL,
- [name] [varchar] (250) NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[privacy_list](
- [username] [varchar](250) NOT NULL,
- [name] [varchar](250) NOT NULL,
- [id] [bigint] IDENTITY(1,1) NOT NULL,
- CONSTRAINT [PK_privacy_list] PRIMARY KEY CLUSTERED
-(
- [id] ASC
-)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[privacy_list_data] (
- [id] [bigint] NOT NULL,
- [t] [character] (1) NOT NULL,
- [value] [text] NOT NULL,
- [action] [character] (1) NOT NULL,
- [ord] [NUMERIC] NOT NULL,
- [match_all] [bit] NOT NULL,
- [match_iq] [bit] NOT NULL,
- [match_message] [bit] NOT NULL,
- [match_presence_in] [bit] NOT NULL,
- [match_presence_out] [bit] NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[roster_version] (
- [username] [varchar](250) PRIMARY KEY,
- [version] [text] NOT NULL
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[pubsub_node] (
- [host] [varchar](250),
- [node] [varchar](250),
- [parent] [varchar](250),
- [type] [varchar](250),
- [nodeid] [bigint] IDENTITY(1,1) PRIMARY KEY
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[pubsub_node_option] (
- [nodeid] [bigint],
- [name] [varchar](250),
- [val] [varchar](250)
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[pubsub_node_owner] (
- [nodeid] [bigint],
- [owner] [varchar](250)
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[pubsub_state] (
- [nodeid] [bigint],
- [jid] [varchar](250),
- [affiliation] [CHAR](1),
- [subscriptions] [text],
- [stateid] [bigint] IDENTITY(1,1) PRIMARY KEY
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[pubsub_item] (
- [nodeid] [bigint],
- [itemid] [varchar](250),
- [publisher] [text],
- [creation] [text],
- [modification] [text],
- [payload] [text]
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[pubsub_subscription_opt] (
- [subid] [varchar](250),
- [opt_name] [varchar](32),
- [opt_value] [text]
-) ON [PRIMARY]
-GO
-
-/* Constraints to add:
-- id in privacy_list is a SERIAL autogenerated number
-- id in privacy_list_data must exist in the table privacy_list */
-
-ALTER TABLE [dbo].[last] WITH NOCHECK ADD
- CONSTRAINT [PK_last] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[rostergroups] WITH NOCHECK ADD
- CONSTRAINT [PK_rostergroups] PRIMARY KEY CLUSTERED
- (
- [username],
- [jid],
- [grp]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[spool] WITH NOCHECK ADD
- CONSTRAINT [PK_spool] PRIMARY KEY CLUSTERED
- (
- [username],
- [id]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[users] WITH NOCHECK ADD
- CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[vcard] WITH NOCHECK ADD
- CONSTRAINT [PK_vcard] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[pubsub_node_option] WITH NOCHECK ADD
- CONSTRAINT [FK_pubsub_node_option] FOREIGN KEY
- (
- [nodeid]
- ) REFERENCES [dbo].[pubsub_node]
- (
- [nodeid]
- )
-ON DELETE CASCADE
-GO
-
-ALTER TABLE [dbo].[pubsub_node_owner] WITH NOCHECK ADD
- CONSTRAINT [FK_pubsub_node_owner] FOREIGN KEY
- (
- [nodeid]
- ) REFERENCES [pubsub_node]
- (
- [nodeid]
- )
-ON DELETE CASCADE
-GO
-
-ALTER TABLE [dbo].[pubsub_state] WITH NOCHECK ADD
- CONSTRAINT [FK_pubsub_state] FOREIGN KEY
- (
- [nodeid]
- ) REFERENCES [pubsub_node]
- (
- [nodeid]
- )
-ON DELETE CASCADE
-GO
-
-ALTER TABLE [dbo].[pubsub_item] WITH NOCHECK ADD
- CONSTRAINT [FK_pubsub_item] FOREIGN KEY
- (
- [nodeid]
- ) REFERENCES [pubsub_node]
- (
- [nodeid]
- )
-ON DELETE CASCADE
-GO
-
-CREATE INDEX [IX_vcard_search_lfn] ON [dbo].[vcard_search]([lfn]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lfamily] ON [dbo].[vcard_search]([lfamily]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lgiven] ON [dbo].[vcard_search]([lgiven]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lmiddle] ON [dbo].[vcard_search]([lmiddle]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lnickname] ON [dbo].[vcard_search]([lnickname]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lbday] ON [dbo].[vcard_search]([lbday]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lctry] ON [dbo].[vcard_search]([lctry]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_llocality] ON [dbo].[vcard_search]([llocality]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lemail] ON [dbo].[vcard_search]([lemail]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lorgname] ON [dbo].[vcard_search]([lorgname]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-CREATE INDEX [IX_vcard_search_lorgunit] ON [dbo].[vcard_search]([lorgunit]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-
-CREATE CLUSTERED INDEX [IX_rosterusers_user] ON [dbo].[rosterusers]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[last] WITH NOCHECK ADD
- CONSTRAINT [DF_last_updated] DEFAULT (getdate()) FOR [Modify_Date]
-GO
-
-ALTER TABLE [dbo].[spool] WITH NOCHECK ADD
- CONSTRAINT [DF_spool_notifyprocessed] DEFAULT (0) FOR [notifyprocessed],
- CONSTRAINT [DF_spool_created] DEFAULT (getdate()) FOR [created],
- CONSTRAINT [DF_spool_MustDelete] DEFAULT (0) FOR [MustDelete]
-GO
-
-ALTER TABLE [dbo].[users] WITH NOCHECK ADD
- CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]
-GO
-
-ALTER TABLE [dbo].[privacy_default_list] WITH NOCHECK ADD
- CONSTRAINT [PK_privacy_defaut_list] PRIMARY KEY CLUSTERED
- (
- [username]
- ) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_rostergroups_jid] ON [dbo].[rostergroups]([jid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_rostergroups_user] ON [dbo].[rostergroups]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_spool_user] ON [dbo].[spool]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_spool_process] ON [dbo].[spool]([created], [notifyprocessed]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IK_Spool_Del] ON [dbo].[spool]([MustDelete]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IK_Spool_Created] ON [dbo].[spool]([created]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_private_user] ON [dbo].[private_storage]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_private_user_ns] ON [dbo].[private_storage]([username], [namespace]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_privacy_list_username] ON [dbo].[privacy_list]([username]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_privacy_list_username_name] ON [dbo].[privacy_list]([username], [name]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_node_parent] ON [dbo].[pubsub_node]([parent]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_node_tuple] ON [dbo].[pubsub_node]([host], [node]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_node_option_nodeid] ON [dbo].[pubsub_node_option]([nodeid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_node_owner_nodeid] ON [dbo].[pubsub_node_owner]([nodeid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_state_jid] ON [dbo].[pubsub_state]([jid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_state_tuple] ON [dbo].[pubsub_state]([nodeid], [jid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_item_itemid] ON [dbo].[pubsub_item]([itemid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_item_tuple] ON [dbo].[pubsub_item]([nodeid], [itemid]) WITH FILLFACTOR = 90 ON [PRIMARY]
-GO
-
- CREATE INDEX [IX_pubsub_subscription_opt] ON [dbo].[pubsub_subscription_opt]([subid], [opt_name]) WITH FILLFACTOR = 90 ON [PRIMARY]
-Go
-
-/*********************************************************/
-/** These store procedures are for use with ejabberd **/
-/** 1.1 and Microsoft Sql Server 2000 **/
-/** **/
-/** The stored procedures reduce the need to sql **/
-/** compilation of the database and also allow for also **/
-/** provide each of database integration. The stored **/
-/** procedure have been optimized to increase database **/
-/** performance and a reduction of 80% in CPU was **/
-/** achieved over the use of standard sql. **/
-/*********************************************************/
-
-/****** Object: StoredProcedure [dbo].[add_roster] ******/
-/** Add or update user entries in the roster **/
-/*********************************************************/
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[add_roster]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[add_roster]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[add_roster_group]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[add_roster_group]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[add_roster_user]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[add_roster_user]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_roster_groups]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_roster_groups]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[add_spool]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[add_spool]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[add_user]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[add_user]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[set_password]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[set_password]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[clean_spool_msg]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[clean_spool_msg]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_password]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_password]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_last]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_last]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_roster]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_roster]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_spool_msg]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_spool_msg]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_user]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_user]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_user_return_password]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_user_return_password]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_user_roster]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_user_roster]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_and_del_spool_msg]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_and_del_spool_msg]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_last]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_last]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_roster]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_roster]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_roster_by_jid]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_roster_by_jid]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_roster_jid_groups]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_roster_jid_groups]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_roster_groups]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_roster_groups]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_rostergroup_by_jid]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_rostergroup_by_jid]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_subscription]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_subscription]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[list_users]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[list_users]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[set_last]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[set_last]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[set_private_data]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[set_private_data]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_private_data]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_private_data]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_user_storage]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_user_storage]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[set_vcard]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[set_vcard]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_vcard]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_vcard]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_default_privacy_list]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_default_privacy_list]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_privacy_list_names]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_privacy_list_names]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_privacy_list_id]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_privacy_list_id]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_privacy_list_data]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_privacy_list_data]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[get_privacy_list_data_by_id]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[get_privacy_list_data_by_id]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[set_default_privacy_list]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[set_default_privacy_list]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[unset_default_privacy_list]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[unset_default_privacy_list]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[remove_privacy_list]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[remove_privacy_list]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[add_privacy_list]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[add_privacy_list]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[set_privacy_list]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[set_privacy_list]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_privacy_list_by_id]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_privacy_list_by_id]
-GO
-IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[del_privacy_lists]') AND type in (N'P', N'PC'))
-DROP PROCEDURE [dbo].[del_privacy_lists]
-GO
-
-CREATE PROCEDURE [dbo].[add_roster]
- @Username varchar(250),
- @JID varchar(250),
- @Nick varchar(50),
- @Subscription char(1),
- @Ask char(1),
- @AskMessage varchar(250),
- @Server char(1),
- @Subscribe varchar(200),
- @Type varchar(50),
- @Grp varchar(100)
-AS
-BEGIN
- BEGIN TRANSACTION
- --- Update Roster if user exist else add roster item
- IF EXISTS (SELECT username FROM rosterusers WITH (NOLOCK) WHERE rosterusers.username=@Username AND rosterusers.jid=@JID)
- BEGIN
- UPDATE rosterusers
- SET rosterusers.username=@Username,
- rosterusers.jid=@JID,
- rosterusers.nick=@Nick,
- rosterusers.subscription=@Subscription,
- rosterusers.ask=@Ask,
- rosterusers.askmessage=@AskMessage,
- rosterusers.server=@Server,
- rosterusers.subscribe=@Subscribe,
- rosterusers.type=@Type
- WHERE (rosterusers.username=@Username) AND (rosterusers.jid=@JID);
- END
- ELSE
- BEGIN
- INSERT INTO rosterusers
- ( rosterusers.username,
- rosterusers.jid,
- rosterusers.nick,
- rosterusers.subscription,
- rosterusers.ask,
- rosterusers.askmessage,
- rosterusers.server,
- rosterusers.subscribe,
- rosterusers.type
- )
- VALUES
- ( @Username,
- @JID,
- @Nick,
- @Subscription,
- @Ask,
- @AskMessage,
- @Server,
- @Subscribe,
- @Type
- );
- END
-
- --- Update Roster Groups if exist else add group entry
- IF NOT EXISTS (SELECT username FROM rostergroups WITH (NOLOCK) WHERE rostergroups.username=@Username AND rostergroups.jid=@JID AND rostergroups.grp=@Grp)
- BEGIN
- INSERT INTO rostergroups
- ( rostergroups.username,
- rostergroups.jid,
- rostergroups.grp
- )
- VALUES
- ( @Username,
- @JID,
- @Grp
- );
- END
-
- COMMIT
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_roster_group] ******/
-/** Add or update user group entries in the roster groups **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_roster_group]
- @Username varchar(250),
- @JID varchar(250),
- @Grp varchar(100)
-AS
-BEGIN
- --- Update Roster Groups if exist else add group
- IF NOT EXISTS (SELECT username FROM rostergroups WHERE rostergroups.username=@Username AND rostergroups.jid=@JID AND rostergroups.grp=@Grp)
- BEGIN
- INSERT INTO rostergroups
- ( rostergroups.username,
- rostergroups.jid,
- rostergroups.grp
- )
- VALUES
- ( @Username,
- @JID,
- @Grp
- )
- END
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_roster_user] ******/
-/** Add or update user entries in the roster **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_roster_user]
- @Username varchar(250),
- @JID varchar(250),
- @Nick varchar(50),
- @Subscription char(1),
- @Ask char(1),
- @AskMessage varchar(250),
- @Server char(1),
- @Subscribe varchar(200),
- @Type varchar(50),
- @Grp varchar(100) = Null
-AS
-BEGIN
- BEGIN TRANSACTION
- --- Update Roster Users if exist of add new user
- IF EXISTS (SELECT username FROM rosterusers WHERE rosterusers.username=@Username AND rosterusers.jid=@JID)
- BEGIN
- UPDATE rosterusers
- SET rosterusers.username=@Username,
- rosterusers.jid=@JID,
- rosterusers.nick=@Nick,
- rosterusers.subscription=@Subscription,
- rosterusers.ask=@Ask,
- rosterusers.askmessage=@AskMessage,
- rosterusers.server=@Server,
- rosterusers.subscribe=@Subscribe,
- rosterusers.type=@Type
- WHERE (rosterusers.username=@Username) AND (rosterusers.jid=@JID);
- END
- ELSE
- BEGIN
- INSERT INTO rosterusers
- ( rosterusers.username,
- rosterusers.jid,
- rosterusers.nick,
- rosterusers.subscription,
- rosterusers.ask,
- rosterusers.askmessage,
- rosterusers.server,
- rosterusers.subscribe,
- rosterusers.type
- )
- VALUES
- ( @Username,
- @JID,
- @Nick,
- @Subscription,
- @Ask,
- @AskMessage,
- @Server,
- @Subscribe,
- @Type
- );
- END
-
- --- Update Roster Group if exist of add new group
- IF @Grp IS NOT NULL
- EXECUTE [dbo].[add_roster_group] @Username, @JID, @Grp
-
- COMMIT
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_roster_groups] ******/
-/** Remove user group entries from the roster groups table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_roster_groups]
- @Username varchar(250),
- @JID varchar(250)
-AS
-BEGIN
- DELETE FROM rostergroups
- WITH (ROWLOCK)
- WHERE (rostergroups.username = @Username) AND (rostergroups.jid = @JID);
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_spool] ******/
-/** Add a entry to the spool table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_spool]
- @Username varchar(250),
- @XML varchar(8000)
-AS
-BEGIN
- INSERT INTO spool
- ( spool.username,
- spool.xml
- )
- VALUES
- ( @Username,
- @XML
- )
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[add_user] ******/
-/** Add or update user entries to jabber **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[add_user]
- @Username varchar(200),
- @Password varchar(50)
-AS
-BEGIN
- INSERT INTO users
- ( [username],
- [password]
- )
- VALUES
- ( @Username,
- @Password
- );
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_password] **/
-/** Update users password **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_password]
- @Username varchar(200),
- @Password varchar(50)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM users WITH (NOLOCK) WHERE username=@Username)
- BEGIN
- UPDATE users SET username=@Username, password=@Password WHERE username=@Username;
- END
- ELSE
- BEGIN
- INSERT INTO users (username, password) VALUES (@Username, @Password);
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_password] **/
-/** Retrive the user password **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_password]
- @Username varchar(200)
-AS
-BEGIN
- SELECT users.password as password
- FROM users WITH (NOLOCK)
- WHERE username=@Username;
-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 **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[clean_spool_msg]
-AS
-DECLARE
- @dt datetime,
- @myRowCount int
-BEGIN
- -- Delete small amounts because if locks the database table
- SET ROWCOUNT 500
- SET @myRowCount = 1
-
- WHILE (@myRowCount) > 0
- BEGIN
- BEGIN TRANSACTION
- SELECT @dt = DATEADD(d, -3, GETDATE())
- DELETE FROM spool
- WITH (ROWLOCK)
- WHERE (MustDelete=1) OR (Created < @dt);
-
- SET @myRowCount = @@RowCount
- COMMIT
- END
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_last] ******/
-/** Delete an entry from the last table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_last]
- @Username varchar(250)
-AS
-BEGIN
- DELETE FROM [last]
- WITH (ROWLOCK)
- WHERE [last].username=@Username;
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_roster] ******/
-/** Delete an entry from the roster **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_roster]
- @Username varchar(250),
- @JID varchar(250)
-AS
-BEGIN
- BEGIN TRANSACTION
- DELETE FROM rosterusers
- WITH (ROWLOCK)
- WHERE (rosterusers.username = @Username) AND (rosterusers.jid = @JID);
-
- DELETE FROM rostergroups
- WITH (ROWLOCK)
- WHERE (rostergroups.username = @Username) AND (rostergroups.jid = @JID);
- COMMIT
-END
-GO
-
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_spool_msg] ******/
-/** Delete an entry from the spool table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_spool_msg]
- @Username varchar(250)
-AS
-BEGIN
- DELETE FROM spool
- WITH (ROWLOCK)
- WHERE spool.username=@Username;
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user] ******/
-/** Delete an entry from the user table **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_user]
- @Username varchar(200)
-AS
-BEGIN
- DELETE FROM users
- WITH (ROWLOCK)
- WHERE username=@Username;
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user_return_password]**/
-/** Delete an entry from the user table and return user password **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[del_user_return_password]
- @Username varchar(250)
-AS
-DECLARE
- @Pwd varchar(50)
-BEGIN
- EXECUTE @Pwd = dbo.get_password @Username
- DELETE FROM users
- WITH (ROWLOCK)
- WHERE username=@Username
-
- SELECT @Pwd;
-END
-GO
-
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user_roster] **/
-/** Delete the users roster **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[del_user_roster]
- @Username varchar(250)
-AS
-BEGIN
- BEGIN TRANSACTION
- DELETE FROM rosterusers
- WITH (ROWLOCK)
- WHERE rosterusers.username = @Username;
-
- DELETE FROM rostergroups
- WITH (ROWLOCK)
- WHERE rostergroups.username = @Username;
- COMMIT
-END
-GO
-
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_and_del_spool_msg] **/
-/** Fetch and delete the users offline messages **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_and_del_spool_msg]
- @Username varchar(250)
-AS
-DECLARE
- @vSpool table( username varchar(1),
- xml varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM spool with (nolock) WHERE spool.username=@Username)
- BEGIN
- SELECT spool.username AS username,
- spool.xml AS xml
- FROM spool WITH (NOLOCK)
- WHERE spool.username=@Username;
-
- DELETE spool
- WITH (ROWLOCK)
- WHERE spool.username=@Username
- END
- ELSE
- BEGIN
- SELECT * FROM @vSpool;
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_last] **/
-/** Retrive the last user login **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_last]
- @Username varchar(250)
-AS
-BEGIN
- SELECT last.seconds AS seconds,
- last.state AS state
- FROM last WITH (NOLOCK)
- WHERE last.username=@Username;
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster] **/
-/** Retrive the user roster **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster]
- @Username varchar(250)
-AS
-DECLARE
- @vRosterusers table( username varchar(1),
- jid varchar(1),
- nick varchar(1),
- subscription varchar(1),
- ask varchar(1),
- askmessage varchar(1),
- server varchar(1),
- subscribe varchar(1),
- type varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rosterusers with (nolock) WHERE rosterusers.username = @Username)
- BEGIN
- SELECT rosterusers.username AS username,
- rosterusers.jid AS jid,
- rosterusers.nick AS nick,
- rosterusers.subscription AS subscription,
- rosterusers.ask AS ask,
- rosterusers.askmessage AS askmessage,
- rosterusers.server AS server,
- rosterusers.subscribe AS subscribe,
- rosterusers.type AS type
- FROM rosterusers WITH (NOLOCK)
- WHERE rosterusers.username = @Username;
- END
- ELSE
- BEGIN
- SELECT * FROM @vRosterusers
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster_by_jid] **/
-/** Retrive the user roster via JID **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster_by_jid]
- @Username varchar(200),
- @JID varchar(250)
-AS
-DECLARE
- @vRosterusers table( username varchar(1),
- jid varchar(1),
- nick varchar(1),
- subscription varchar(1),
- ask varchar(1),
- askmessage varchar(1),
- server varchar(1),
- subscribe varchar(1),
- type varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rosterusers with (nolock) WHERE (rosterusers.username = @Username) AND (rosterusers.jid = @JID))
- BEGIN
- SELECT rosterusers.username AS username,
- rosterusers.jid AS jid,
- rosterusers.nick AS nick,
- rosterusers.subscription AS subscription,
- rosterusers.ask AS ask,
- rosterusers.askmessage AS askmessage,
- rosterusers.server AS server,
- rosterusers.subscribe AS subscribe,
- rosterusers.type AS type
- FROM rosterusers WITH (NOLOCK)
- WHERE (rosterusers.username = @Username) AND (rosterusers.jid = @JID);
- END
- ELSE
- BEGIN
- SELECT * FROM @vRosterusers
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster_jid_groups] **/
-/** Retrieve the user roster groups **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster_jid_groups]
- @Username varchar(200)
-AS
-DECLARE
- @vrostergroups table( jid varchar(1),
- grp varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rostergroups with (nolock) WHERE rostergroups.username = @Username)
- BEGIN
- SELECT rostergroups.jid AS jid,
- rostergroups.grp AS grp
- FROM rostergroups WITH (NOLOCK)
- WHERE rostergroups.username = @Username;
- END
- ELSE
- BEGIN
- SELECT * FROM @vrostergroups
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_roster_groups] **/
-/** Retrive the user roster groups **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_roster_groups]
- @Username varchar(200),
- @JID varchar(250)
-AS
-DECLARE
- @vrostergroups table( grp varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rostergroups with (nolock) WHERE rostergroups.username = @Username)
- BEGIN
- SELECT rostergroups.grp AS grp
- FROM rostergroups WITH (NOLOCK)
- WHERE (rostergroups.username = @Username) AND (rostergroups.jid = @JID);
- END
- ELSE
- BEGIN
- SELECT * FROM @vrostergroups
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_rostergroup_by_jid] **/
-/** Retrive the user roster groups via JID **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_rostergroup_by_jid]
- @Username varchar(250),
- @JID varchar(250)
-AS
-DECLARE
- @vrostergroups table(grp varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rostergroups with (nolock) WHERE rostergroups.username=@Username AND rostergroups.jid=@JID)
- BEGIN
- SELECT rostergroups.grp AS grp
- FROM rostergroups WITH (NOLOCK)
- WHERE rostergroups.username=@Username AND rostergroups.jid=@JID;
- END
- ELSE
- BEGIN
- SELECT * FROM @vrostergroups
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_subscription] **/
-/** Retrive the user subscription requests **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_subscription]
- @Username varchar(250),
- @JID varchar(250)
-AS
-DECLARE
- @vrosterusers table( subscription varchar(1))
-BEGIN
- IF EXISTS (SELECT username FROM rosterusers with (nolock) WHERE rosterusers.username=@Username AND rosterusers.jid=@JID)
- BEGIN
- SELECT rosterusers.subscription AS subscription
- FROM rosterusers WITH (NOLOCK)
- WHERE rosterusers.username=@Username AND rosterusers.jid=@JID;
- END
- ELSE
- BEGIN
- SELECT * FROM @vrosterusers
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[list_users] **/
-/** Retrieve a list of all users **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[list_users]
-AS
-BEGIN
- SELECT users.username AS username FROM users WITH (NOLOCK);
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_last] **/
-/** Update users last login status **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_last]
- @Username varchar(250),
- @Seconds varchar(50),
- @State varchar(100)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM [last] WITH (NOLOCK) WHERE username=@Username)
- BEGIN
- UPDATE [last]
- SET [last].username = @Username,
- [last].seconds = @Seconds,
- [last].state = @State
- WHERE last.username=@Username;
- END
- ELSE
- BEGIN
- INSERT INTO [last]
- ( [last].username,
- [last].seconds,
- [last].state
- )
- VALUES
- ( @Username,
- @Seconds,
- @State
- )
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_private_data] **/
-/** store user private data by namespace **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_private_data]
- @Username varchar(250),
- @Namespace varchar(250),
- @Data varchar(8000)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM private_storage with (nolock) WHERE private_storage.username = @Username AND private_storage.namespace = @Namespace)
- BEGIN
- UPDATE [private_storage]
- SET [private_storage].username = @Username,
- [private_storage].namespace = @Namespace,
- [private_storage].data = @Data
- WHERE private_storage.username = @Username AND private_storage.namespace = @Namespace;
- END
- ELSE
- BEGIN
- INSERT INTO [private_storage]
- ( [private_storage].username,
- [private_storage].namespace,
- [private_storage].data
- )
- VALUES
- ( @Username,
- @Namespace,
- @Data
- )
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_private_data] **/
-/** Retrieve user private data by namespace **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_private_data]
- @Username varchar(250),
- @Namespace varchar(250)
-AS
-BEGIN
- SELECT private_storage.data AS data
- FROM private_storage WITH (NOLOCK)
- WHERE username=@Username and namespace=@Namespace;
-END
-GO
-
-/***************************************************************/
-/****** Object: StoredProcedure [dbo].[del_user_storage] ******/
-/** Delete private storage area for a given user **/
-/***************************************************************/
-CREATE PROCEDURE [dbo].[del_user_storage]
- @Username varchar(250)
-AS
-BEGIN
- DELETE FROM [private_storage]
- WITH (ROWLOCK)
- WHERE [private_storage].username=@Username;
-END
-GO
-
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_vcard] **/
-/** Set the user's vCard **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_vcard]
- @VCard varchar(8000),
- @Username varchar(250),
- @Lusername varchar(250),
- @Fn varchar(8000),
- @Lfn varchar(250),
- @Family varchar(8000),
- @Lfamily varchar(250),
- @Given varchar(8000),
- @Lgiven varchar(250),
- @Middle varchar(8000),
- @Lmiddle varchar(250),
- @Nickname varchar(8000),
- @Lnickname varchar(250),
- @Bday varchar(8000),
- @Lbday varchar(250),
- @Ctry varchar(8000),
- @Lctry varchar(250),
- @Locality varchar(8000),
- @Llocality varchar(250),
- @Email varchar(8000),
- @Lemail varchar(250),
- @Orgname varchar(8000),
- @Lorgname varchar(250),
- @Orgunit varchar(8000),
- @Lorgunit varchar(250)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM vcard with (nolock) WHERE vcard.username = @Username)
- BEGIN
- UPDATE [vcard]
- SET [vcard].username = @LUsername,
- [vcard].vcard = @Vcard
- WHERE vcard.username = @LUsername;
-
- UPDATE [vcard_search]
- SET [vcard_search].username = @Username,
- [vcard_search].lusername = @Lusername,
- [vcard_search].fn = @Fn,
- [vcard_search].lfn = @Lfn,
- [vcard_search].family = @Family,
- [vcard_search].lfamily = @Lfamily,
- [vcard_search].given = @Given,
- [vcard_search].lgiven = @Lgiven,
- [vcard_search].middle = @Middle,
- [vcard_search].lmiddle = @Lmiddle,
- [vcard_search].nickname = @Nickname,
- [vcard_search].lnickname = @Lnickname,
- [vcard_search].bday = @Bday,
- [vcard_search].lbday = @Lbday,
- [vcard_search].ctry = @Ctry,
- [vcard_search].lctry = @Lctry,
- [vcard_search].locality = @Locality,
- [vcard_search].llocality = @Llocality,
- [vcard_search].email = @Email,
- [vcard_search].lemail = @Lemail,
- [vcard_search].orgname = @Orgname,
- [vcard_search].lorgname = @Lorgname,
- [vcard_search].orgunit = @Orgunit,
- [vcard_search].lorgunit = @Lorgunit
- WHERE vcard_search.lusername = @LUsername;
- END
- ELSE
- BEGIN
- INSERT INTO [vcard]
- ( [vcard].username,
- [vcard].vcard
- )
- VALUES
- ( @lUsername,
- @Vcard
- );
-
- INSERT INTO [vcard_search]
- (
- [vcard_search].username ,
- [vcard_search].lusername ,
- [vcard_search].fn ,
- [vcard_search].lfn ,
- [vcard_search].family ,
- [vcard_search].lfamily ,
- [vcard_search].given ,
- [vcard_search].lgiven ,
- [vcard_search].middle ,
- [vcard_search].lmiddle ,
- [vcard_search].nickname,
- [vcard_search].lnickname,
- [vcard_search].bday,
- [vcard_search].lbday,
- [vcard_search].ctry,
- [vcard_search].lctry,
- [vcard_search].locality,
- [vcard_search].llocality,
- [vcard_search].email,
- [vcard_search].lemail,
- [vcard_search].orgname,
- [vcard_search].lorgname,
- [vcard_search].orgunit,
- [vcard_search].lorgunit
- )
- VALUES
- (
- @Username,
- @Lusername,
- @Fn,
- @Lfn,
- @Family,
- @Lfamily,
- @Given,
- @Lgiven,
- @Middle,
- @Lmiddle,
- @Nickname,
- @Lnickname,
- @Bday,
- @Lbday,
- @Ctry,
- @Lctry,
- @Locality,
- @Llocality,
- @Email,
- @Lemail,
- @Orgname,
- @Lorgname,
- @Orgunit,
- @Lorgunit
- )
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_vcard] **/
-/** Retrive the user's vCard **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_vcard]
- @Username varchar(250)
-AS
-BEGIN
- SELECT vcard.vcard as vcard
- FROM vcard WITH (NOLOCK)
- WHERE username=@Username;
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_default_privacy_list]**/
-/** Retrive the user's default privacy list **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_default_privacy_list]
- @Username varchar(250)
-AS
-BEGIN
- SELECT list.name
- FROM privacy_default_list list WITH (NOLOCK)
- WHERE list.username=@Username
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_privacy_list_names] **/
-/** Retrive the user's default privacy list names **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_privacy_list_names]
- @username varchar(250)
-AS
-BEGIN
- SELECT list.name
- FROM privacy_list list WITH (NOLOCK)
- WHERE list.username=@Username
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_privacy_list_id] **/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_privacy_list_id]
- @username varchar(250),
- @SName varchar(250)
-AS
-BEGIN
- SELECT id FROM privacy_list
- WHERE username=@Username
- AND name=@SName
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_privacy_list_data] **/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_privacy_list_data]
- @username varchar(250),
- @SName varchar(250)
-AS
-BEGIN
- SELECT l_data.t,
- l_data.value,
- l_data.action,
- l_data.ord,
- l_data.match_all,
- l_data.match_iq,
- l_data.match_message,
- l_data.match_presence_in,
- l_data.match_presence_out
- FROM privacy_list_data l_data (NOLOCK)
- WHERE l_data.id = (SELECT list.id
- FROM privacy_list list
- WHERE list.username=@username
- AND list.name=@SName)
- ORDER BY l_data.ord
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[get_privacy_list_data_by_id]**/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[get_privacy_list_data_by_id]
- @Id bigint
-AS
-BEGIN
- SELECT l_data.t,
- l_data.value,
- l_data.action,
- l_data.ord,
- l_data.match_all,
- l_data.match_iq,
- l_data.match_message,
- l_data.match_presence_in,
- l_data.match_presence_out
- FROM privacy_list_data l_data (NOLOCK)
- WHERE l_data.id=@ID
- ORDER BY l_data.ord
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_default_privacy_list]**/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_default_privacy_list]
- @username varchar(250),
- @Sname varchar(250)
-AS
-BEGIN
- IF EXISTS (SELECT username FROM privacy_default_list with (nolock) WHERE privacy_default_list.username = @Username AND privacy_default_list.name = @Sname)
- BEGIN
- UPDATE [privacy_default_list]
- SET [privacy_default_list].username = @Username,
- [privacy_default_list].name = @Sname
- WHERE privacy_default_list.username = @Username
- END
- ELSE
- BEGIN
- INSERT INTO [privacy_default_list]
- ( [privacy_default_list].username,
- [privacy_default_list].name
- )
- VALUES
- ( @Username,
- @SName
- )
- END
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[unset_default_privacy_list]**/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[unset_default_privacy_list]
- @username varchar(250)
-AS
-BEGIN
- DELETE
- FROM privacy_default_list
- WHERE privacy_default_list.username=@username
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[remove_privacy_list] **/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[remove_privacy_list]
- @username varchar(250),
- @SName varchar(250)
-AS
-BEGIN
- DELETE
- FROM privacy_list
- WHERE privacy_list.username=@username
- AND privacy_list.name=@SName
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[add_privacy_list] **/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[add_privacy_list]
- @username varchar(250),
- @SName varchar(250)
-AS
-BEGIN
- INSERT INTO privacy_list(username, name)
- VALUES (@username, @SName)
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[set_privacy_list] **/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[set_privacy_list]
- @Id bigint,
- @t char(1),
- @value text,
- @action char(1),
- @ord numeric,
- @match_all bit,
- @match_iq bit,
- @match_message bit,
- @match_presence_in bit,
- @match_presence_out bit
-AS
-BEGIN
- insert into privacy_list_data (
- id,
- t,
- value,
- action,
- ord,
- match_all,
- match_iq,
- match_message,
- match_presence_in,
- match_presence_out
- )
- values (@Id,
- @t,
- @value,
- @action,
- @ord,
- @match_all,
- @match_iq,
- @match_message,
- @match_presence_in,
- @match_presence_out
- )
-
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[del_privacy_list_by_id] **/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[del_privacy_list_by_id]
- @Id bigint
-AS
-BEGIN
- DELETE FROM privacy_list_data
- WHERE privacy_list_data.id=@Id
-END
-GO
-
-/******************************************************************/
-/****** Object: StoredProcedure [dbo].[del_privacy_lists] **/
-/** **/
-/******************************************************************/
-CREATE PROCEDURE [dbo].[del_privacy_lists]
- @Server varchar(250),
- @username varchar(250)
-AS
-BEGIN
- DELETE FROM privacy_list WHERE username=@username
- DELETE FROM privacy_list_data WHERE convert(varchar,value)=@username+'@'+@Server
- DELETE FROM privacy_default_list WHERE username=@username
-END
-GO
diff --git a/src/odbc/mysql.sql b/src/odbc/mysql.sql
deleted file mode 100644
index 976230117..000000000
--- a/src/odbc/mysql.sql
+++ /dev/null
@@ -1,284 +0,0 @@
---
--- ejabberd, Copyright (C) 2002-2013 ProcessOne
---
--- This program is free software; you can redistribute it and/or
--- modify it under the terms of the GNU General Public License as
--- published by the Free Software Foundation; either version 2 of the
--- License, or (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--- General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--- 02111-1307 USA
---
-
--- Needs MySQL (at least 4.0.x) with innodb back-end
-SET table_type=InnoDB;
-
-CREATE TABLE users (
- username varchar(250) PRIMARY KEY,
- password text NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-
-CREATE TABLE last (
- username varchar(250) PRIMARY KEY,
- seconds text NOT NULL,
- state text NOT NULl
-) CHARACTER SET utf8;
-
-
-CREATE TABLE rosterusers (
- username varchar(250) NOT NULL,
- jid varchar(250) NOT NULL,
- nick text NOT NULL,
- subscription character(1) NOT NULL,
- ask character(1) NOT NULL,
- askmessage text NOT NULL,
- server character(1) NOT NULL,
- subscribe text NOT NULL,
- type text,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE UNIQUE INDEX i_rosteru_user_jid ON rosterusers(username(75), jid(75));
-CREATE INDEX i_rosteru_username ON rosterusers(username);
-CREATE INDEX i_rosteru_jid ON rosterusers(jid);
-
-CREATE TABLE rostergroups (
- username varchar(250) NOT NULL,
- jid varchar(250) NOT NULL,
- grp text NOT NULL
-) CHARACTER SET utf8;
-
-CREATE INDEX pk_rosterg_user_jid ON rostergroups(username(75), jid(75));
-
-CREATE TABLE sr_group (
- name varchar(250) NOT NULL,
- opts text NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE TABLE sr_user (
- jid varchar(250) NOT NULL,
- grp varchar(250) NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE UNIQUE INDEX i_sr_user_jid_group ON sr_user(jid(75), grp(75));
-CREATE INDEX i_sr_user_jid ON sr_user(jid);
-CREATE INDEX i_sr_user_grp ON sr_user(grp);
-
-CREATE TABLE spool (
- username varchar(250) NOT NULL,
- xml text NOT NULL,
- seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE INDEX i_despool USING BTREE ON spool(username);
-
-
-CREATE TABLE vcard (
- username varchar(250) PRIMARY KEY,
- vcard mediumtext NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE TABLE vcard_xupdate (
- username varchar(250) PRIMARY KEY,
- hash text NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE TABLE vcard_search (
- username varchar(250) NOT NULL,
- lusername varchar(250) PRIMARY KEY,
- fn text NOT NULL,
- lfn varchar(250) NOT NULL,
- family text NOT NULL,
- lfamily varchar(250) NOT NULL,
- given text NOT NULL,
- lgiven varchar(250) NOT NULL,
- middle text NOT NULL,
- lmiddle varchar(250) NOT NULL,
- nickname text NOT NULL,
- lnickname varchar(250) NOT NULL,
- bday text NOT NULL,
- lbday varchar(250) NOT NULL,
- ctry text NOT NULL,
- lctry varchar(250) NOT NULL,
- locality text NOT NULL,
- llocality varchar(250) NOT NULL,
- email text NOT NULL,
- lemail varchar(250) NOT NULL,
- orgname text NOT NULL,
- lorgname varchar(250) NOT NULL,
- orgunit text NOT NULL,
- lorgunit varchar(250) NOT NULL
-) CHARACTER SET utf8;
-
-CREATE INDEX i_vcard_search_lfn ON vcard_search(lfn);
-CREATE INDEX i_vcard_search_lfamily ON vcard_search(lfamily);
-CREATE INDEX i_vcard_search_lgiven ON vcard_search(lgiven);
-CREATE INDEX i_vcard_search_lmiddle ON vcard_search(lmiddle);
-CREATE INDEX i_vcard_search_lnickname ON vcard_search(lnickname);
-CREATE INDEX i_vcard_search_lbday ON vcard_search(lbday);
-CREATE INDEX i_vcard_search_lctry ON vcard_search(lctry);
-CREATE INDEX i_vcard_search_llocality ON vcard_search(llocality);
-CREATE INDEX i_vcard_search_lemail ON vcard_search(lemail);
-CREATE INDEX i_vcard_search_lorgname ON vcard_search(lorgname);
-CREATE INDEX i_vcard_search_lorgunit ON vcard_search(lorgunit);
-
-CREATE TABLE privacy_default_list (
- username varchar(250) PRIMARY KEY,
- name varchar(250) NOT NULL
-) CHARACTER SET utf8;
-
-CREATE TABLE privacy_list (
- username varchar(250) NOT NULL,
- name varchar(250) NOT NULL,
- id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE INDEX i_privacy_list_username USING BTREE ON privacy_list(username);
-CREATE UNIQUE INDEX i_privacy_list_username_name USING BTREE ON privacy_list (username(75), name(75));
-
-CREATE TABLE privacy_list_data (
- id bigint,
- t character(1) NOT NULL,
- value text NOT NULL,
- action character(1) NOT NULL,
- ord NUMERIC NOT NULL,
- match_all boolean NOT NULL,
- match_iq boolean NOT NULL,
- match_message boolean NOT NULL,
- match_presence_in boolean NOT NULL,
- match_presence_out boolean NOT NULL
-) CHARACTER SET utf8;
-
-CREATE TABLE private_storage (
- username varchar(250) NOT NULL,
- namespace varchar(250) NOT NULL,
- data text NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE INDEX i_private_storage_username USING BTREE ON private_storage(username);
-CREATE UNIQUE INDEX i_private_storage_username_namespace USING BTREE ON private_storage(username(75), namespace(75));
-
--- Not tested in mysql
-CREATE TABLE roster_version (
- username varchar(250) PRIMARY KEY,
- version text NOT NULL
-) CHARACTER SET utf8;
-
--- To update from 1.x:
--- ALTER TABLE rosterusers ADD COLUMN askmessage text AFTER ask;
--- UPDATE rosterusers SET askmessage = '';
--- ALTER TABLE rosterusers ALTER COLUMN askmessage SET NOT NULL;
-
-CREATE TABLE pubsub_node (
- host text,
- node text,
- parent text,
- type text,
- nodeid bigint auto_increment primary key
-) CHARACTER SET utf8;
-CREATE INDEX i_pubsub_node_parent ON pubsub_node(parent(120));
-CREATE UNIQUE INDEX i_pubsub_node_tuple ON pubsub_node(host(20), node(120));
-
-CREATE TABLE pubsub_node_option (
- nodeid bigint,
- name text,
- val text
-) CHARACTER SET utf8;
-CREATE INDEX i_pubsub_node_option_nodeid ON pubsub_node_option(nodeid);
-ALTER TABLE `pubsub_node_option` ADD FOREIGN KEY (`nodeid`) REFERENCES `pubsub_node` (`nodeid`) ON DELETE CASCADE;
-
-CREATE TABLE pubsub_node_owner (
- nodeid bigint,
- owner text
-) CHARACTER SET utf8;
-CREATE INDEX i_pubsub_node_owner_nodeid ON pubsub_node_owner(nodeid);
-ALTER TABLE `pubsub_node_owner` ADD FOREIGN KEY (`nodeid`) REFERENCES `pubsub_node` (`nodeid`) ON DELETE CASCADE;
-
-CREATE TABLE pubsub_state (
- nodeid bigint,
- jid text,
- affiliation character(1),
- subscriptions text,
- stateid bigint auto_increment primary key
-) CHARACTER SET utf8;
-CREATE INDEX i_pubsub_state_jid ON pubsub_state(jid(60));
-CREATE UNIQUE INDEX i_pubsub_state_tuple ON pubsub_state(nodeid, jid(60));
-ALTER TABLE `pubsub_state` ADD FOREIGN KEY (`nodeid`) REFERENCES `pubsub_node` (`nodeid`) ON DELETE CASCADE;
-
-CREATE TABLE pubsub_item (
- nodeid bigint,
- itemid text,
- publisher text,
- creation text,
- modification text,
- payload text
-) CHARACTER SET utf8;
-CREATE INDEX i_pubsub_item_itemid ON pubsub_item(itemid(36));
-CREATE UNIQUE INDEX i_pubsub_item_tuple ON pubsub_item(nodeid, itemid(36));
-ALTER TABLE `pubsub_item` ADD FOREIGN KEY (`nodeid`) REFERENCES `pubsub_node` (`nodeid`) ON DELETE CASCADE;
-
-CREATE TABLE pubsub_subscription_opt (
- subid text,
- opt_name varchar(32),
- opt_value text
-);
-CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt(subid(32), opt_name(32));
-
-CREATE TABLE muc_room (
- name text NOT NULL,
- host text NOT NULL,
- opts text NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE UNIQUE INDEX i_muc_room_name_host USING BTREE ON muc_room(name(75), host(75));
-
-CREATE TABLE muc_registered (
- jid text NOT NULL,
- host text NOT NULL,
- nick text NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE INDEX i_muc_registered_nick USING BTREE ON muc_registered(nick(75));
-CREATE UNIQUE INDEX i_muc_registered_jid_host USING BTREE ON muc_registered(jid(75), host(75));
-
-CREATE TABLE irc_custom (
- jid text NOT NULL,
- host text NOT NULL,
- data text NOT NULL,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE UNIQUE INDEX i_irc_custom_jid_host USING BTREE ON irc_custom(jid(75), host(75));
-
-CREATE TABLE motd (
- username varchar(250) PRIMARY KEY,
- xml text,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE TABLE caps_features (
- node varchar(250) NOT NULL,
- subnode varchar(250) NOT NULL,
- feature text,
- created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) CHARACTER SET utf8;
-
-CREATE INDEX i_caps_features_node_subnode ON caps_features(node(75), subnode(75));
diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl
deleted file mode 100644
index 66da7906f..000000000
--- a/src/odbc/odbc_queries.erl
+++ /dev/null
@@ -1,937 +0,0 @@
-%%%----------------------------------------------------------------------
-%%% File : odbc_queries.erl
-%%% Author : Mickael Remond <mremond@process-one.net>
-%%% Purpose : ODBC queries dependind on back-end
-%%% Created : by Mickael Remond <mremond@process-one.net>
-%%%
-%%%
-%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
-%%%
-%%% This program is free software; you can redistribute it and/or
-%%% modify it under the terms of the GNU General Public License as
-%%% published by the Free Software Foundation; either version 2 of the
-%%% License, or (at your option) any later version.
-%%%
-%%% This program is distributed in the hope that it will be useful,
-%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
-%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%%% General Public License for more details.
-%%%
-%%% You should have received a copy of the GNU General Public License
-%%% along with this program; if not, write to the Free Software
-%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-%%% 02111-1307 USA
-%%%
-%%%----------------------------------------------------------------------
-
--module(odbc_queries).
-
--author("mremond@process-one.net").
-
--export([get_db_type/0, update_t/4, sql_transaction/2,
- get_last/2, set_last_t/4, del_last/2, get_password/2,
- set_password_t/3, add_user/3, del_user/2,
- del_user_return_password/3, list_users/1, list_users/2,
- users_number/1, users_number/2, add_spool_sql/2,
- add_spool/2, get_and_del_spool_msg_t/2, del_spool_msg/2,
- get_roster/2, get_roster_jid_groups/2,
- get_roster_groups/3, del_user_roster_t/2,
- get_roster_by_jid/3, get_rostergroup_by_jid/3,
- del_roster/3, del_roster_sql/2, update_roster/5,
- update_roster_sql/4, roster_subscribe/4,
- get_subscription/3, set_private_data/4,
- set_private_data_sql/3, get_private_data/3, get_private_data/2,
- del_user_private_storage/2, get_default_privacy_list/2,
- get_default_privacy_list_t/1, get_privacy_list_names/2,
- get_privacy_list_names_t/1, get_privacy_list_id/3,
- get_privacy_list_id_t/2, get_privacy_list_data/3,
- get_privacy_list_data_by_id/2,
- get_privacy_list_data_by_id_t/1,
- set_default_privacy_list/2,
- unset_default_privacy_list/2,
- remove_privacy_list/2,
- add_privacy_list/2,
- set_privacy_list/2,
- del_privacy_lists/3,
- set_vcard/26,
- get_vcard/2,
- escape/1,
- 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).
-%-define(mssql, true).
--ifndef(mssql).
-
--undef(generic).
-
--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).
-join([], _Sep) -> [];
-join([H | T], Sep) -> [H, [[Sep, X] || X <- T]].
-
-%% -----------------
-%% Generic queries
--ifdef(generic).
-
-get_db_type() -> generic.
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
- UPairs = lists:zipwith(fun (A, B) ->
- <<A/binary, "='", B/binary, "'">>
- end,
- Fields, Vals),
- case ejabberd_odbc:sql_query_t([<<"update ">>, Table,
- <<" set ">>, join(UPairs, <<", ">>),
- <<" where ">>, Where, <<";">>])
- of
- {updated, 1} -> ok;
- _ ->
- ejabberd_odbc:sql_query_t([<<"insert into ">>, Table,
- <<"(">>, join(Fields, <<", ">>),
- <<") values ('">>, join(Vals, <<"', '">>),
- <<"');">>])
- end.
-
-update(LServer, Table, Fields, Vals, Where) ->
- UPairs = lists:zipwith(fun (A, B) ->
- <<A/binary, "='", B/binary, "'">>
- end,
- Fields, Vals),
- case ejabberd_odbc:sql_query(LServer,
- [<<"update ">>, Table, <<" set ">>,
- join(UPairs, <<", ">>), <<" where ">>, Where,
- <<";">>])
- of
- {updated, 1} -> ok;
- _ ->
- ejabberd_odbc:sql_query(LServer,
- [<<"insert into ">>, Table, <<"(">>,
- join(Fields, <<", ">>), <<") values ('">>,
- join(Vals, <<"', '">>), <<"');">>])
- end.
-
-%% F can be either a fun or a list of queries
-%% TODO: We should probably move the list of queries transaction
-%% wrapper from the ejabberd_odbc module to this one (odbc_queries)
-sql_transaction(LServer, F) ->
- ejabberd_odbc:sql_transaction(LServer, F).
-
-get_last(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select seconds, state from last where "
- "username='">>,
- Username, <<"'">>]).
-
-set_last_t(LServer, Username, Seconds, State) ->
- update(LServer, <<"last">>,
- [<<"username">>, <<"seconds">>, <<"state">>],
- [Username, Seconds, State],
- [<<"username='">>, Username, <<"'">>]).
-
-del_last(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from last where username='">>, Username,
- <<"'">>]).
-
-get_password(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select password from users where username='">>,
- Username, <<"';">>]).
-
-set_password_t(LServer, Username, Pass) ->
- ejabberd_odbc:sql_transaction(LServer,
- fun () ->
- update_t(<<"users">>,
- [<<"username">>,
- <<"password">>],
- [Username, Pass],
- [<<"username='">>, Username,
- <<"'">>])
- end).
-
-add_user(LServer, Username, Pass) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"insert into users(username, password) "
- "values ('">>,
- Username, <<"', '">>, Pass, <<"');">>]).
-
-del_user(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from users where username='">>, Username,
- <<"';">>]).
-
-del_user_return_password(_LServer, Username, Pass) ->
- P =
- ejabberd_odbc:sql_query_t([<<"select password from users where username='">>,
- Username, <<"';">>]),
- ejabberd_odbc:sql_query_t([<<"delete from users where username='">>,
- Username, <<"' and password='">>, Pass,
- <<"';">>]),
- P.
-
-list_users(LServer) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select username from users">>]).
-
-list_users(LServer, [{from, Start}, {to, End}])
- when is_integer(Start) and is_integer(End) ->
- list_users(LServer,
- [{limit, End - Start + 1}, {offset, Start - 1}]);
-list_users(LServer,
- [{prefix, Prefix}, {from, Start}, {to, End}])
- when is_binary(Prefix) and is_integer(Start) and
- is_integer(End) ->
- list_users(LServer,
- [{prefix, Prefix}, {limit, End - Start + 1},
- {offset, Start - 1}]);
-list_users(LServer, [{limit, Limit}, {offset, Offset}])
- when is_integer(Limit) and is_integer(Offset) ->
- ejabberd_odbc:sql_query(LServer,
- [list_to_binary(
- io_lib:format(
- "select username from users " ++
- "order by username " ++
- "limit ~w offset ~w",
- [Limit, Offset]))]);
-list_users(LServer,
- [{prefix, Prefix}, {limit, Limit}, {offset, Offset}])
- when is_binary(Prefix) and is_integer(Limit) and
- is_integer(Offset) ->
- ejabberd_odbc:sql_query(LServer,
- [list_to_binary(
- io_lib:format(
- "select username from users " ++
- "where username like '~s%' " ++
- "order by username " ++
- "limit ~w offset ~w ",
- [Prefix, Limit, Offset]))]).
-
-users_number(LServer) ->
- case element(1,
- ejabberd_config:get_local_option(
- {odbc_server, LServer}, fun(V) -> V end))
- of
- pgsql ->
- case
- ejabberd_config:get_local_option(
- {pgsql_users_number_estimate, LServer},
- fun(V) when is_boolean(V) -> V end,
- false)
- of
- true ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select reltuples from pg_class where "
- "oid = 'users'::regclass::oid">>]);
- _ ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select count(*) from users">>])
- end;
- _ ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select count(*) from users">>])
- end.
-
-users_number(LServer, [{prefix, Prefix}])
- when is_binary(Prefix) ->
- ejabberd_odbc:sql_query(LServer,
- [list_to_binary(
- io_lib:fwrite(
- "select count(*) from users " ++
- %% Warning: Escape prefix at higher level to prevent SQL
- %% injection.
- "where username like '~s%'",
- [Prefix]))]);
-users_number(LServer, []) ->
- users_number(LServer).
-
-
-add_spool_sql(Username, XML) ->
- [<<"insert into spool(username, xml) values ('">>,
- Username, <<"', '">>, XML, <<"');">>].
-
-add_spool(LServer, Queries) ->
- ejabberd_odbc:sql_transaction(LServer, Queries).
-
-get_and_del_spool_msg_t(LServer, Username) ->
- F = fun () ->
- Result =
- ejabberd_odbc:sql_query_t([<<"select username, xml from spool where "
- "username='">>,
- Username,
- <<"' order by seq;">>]),
- ejabberd_odbc:sql_query_t([<<"delete from spool where username='">>,
- Username, <<"';">>]),
- Result
- end,
- ejabberd_odbc:sql_transaction(LServer, F).
-
-del_spool_msg(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from spool where username='">>, Username,
- <<"';">>]).
-
-get_roster(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select username, jid, nick, subscription, "
- "ask, askmessage, server, subscribe, "
- "type from rosterusers where username='">>,
- Username, <<"'">>]).
-
-get_roster_jid_groups(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select jid, grp from rostergroups where "
- "username='">>,
- Username, <<"'">>]).
-
-get_roster_groups(_LServer, Username, SJID) ->
- ejabberd_odbc:sql_query_t([<<"select grp from rostergroups where username='">>,
- Username, <<"' and jid='">>, SJID, <<"';">>]).
-
-del_user_roster_t(LServer, Username) ->
- ejabberd_odbc:sql_transaction(LServer,
- fun () ->
- ejabberd_odbc:sql_query_t([<<"delete from rosterusers where "
- "username='">>,
- Username,
- <<"';">>]),
- ejabberd_odbc:sql_query_t([<<"delete from rostergroups where "
- "username='">>,
- Username,
- <<"';">>])
- end).
-
-get_roster_by_jid(_LServer, Username, SJID) ->
- ejabberd_odbc:sql_query_t([<<"select username, jid, nick, subscription, "
- "ask, askmessage, server, subscribe, "
- "type from rosterusers where username='">>,
- Username, <<"' and jid='">>, SJID, <<"';">>]).
-
-get_rostergroup_by_jid(LServer, Username, SJID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select grp from rostergroups where username='">>,
- Username, <<"' and jid='">>, SJID, <<"'">>]).
-
-del_roster(_LServer, Username, SJID) ->
- ejabberd_odbc:sql_query_t([<<"delete from rosterusers where "
- "username='">>,
- Username, <<"' and jid='">>, SJID,
- <<"';">>]),
- ejabberd_odbc:sql_query_t([<<"delete from rostergroups where "
- "username='">>,
- Username, <<"' and jid='">>, SJID,
- <<"';">>]).
-
-del_roster_sql(Username, SJID) ->
- [[<<"delete from rosterusers where "
- "username='">>,
- Username, <<"' and jid='">>, SJID, <<"';">>],
- [<<"delete from rostergroups where "
- "username='">>,
- Username, <<"' and jid='">>, SJID, <<"';">>]].
-
-update_roster(_LServer, Username, SJID, ItemVals,
- ItemGroups) ->
- update_t(<<"rosterusers">>,
- [<<"username">>, <<"jid">>, <<"nick">>,
- <<"subscription">>, <<"ask">>, <<"askmessage">>,
- <<"server">>, <<"subscribe">>, <<"type">>],
- ItemVals,
- [<<"username='">>, Username, <<"' and jid='">>, SJID,
- <<"'">>]),
- ejabberd_odbc:sql_query_t([<<"delete from rostergroups where "
- "username='">>,
- Username, <<"' and jid='">>, SJID,
- <<"';">>]),
- lists:foreach(fun (ItemGroup) ->
- ejabberd_odbc:sql_query_t([<<"insert into rostergroups( "
- " username, jid, grp) values ('">>,
- join(ItemGroup,
- <<"', '">>),
- <<"');">>])
- end,
- ItemGroups).
-
-update_roster_sql(Username, SJID, ItemVals,
- ItemGroups) ->
- [[<<"delete from rosterusers where "
- "username='">>,
- Username, <<"' and jid='">>, SJID, <<"';">>],
- [<<"insert into rosterusers( "
- " username, jid, nick, "
- " subscription, ask, askmessage, "
- " server, subscribe, type) "
- "values ('">>,
- join(ItemVals, <<"', '">>), <<"');">>],
- [<<"delete from rostergroups where "
- "username='">>,
- Username, <<"' and jid='">>, SJID, <<"';">>]]
- ++
- [[<<"insert into rostergroups( "
- " username, jid, grp) values ('">>,
- join(ItemGroup, <<"', '">>), <<"');">>]
- || ItemGroup <- ItemGroups].
-
-roster_subscribe(_LServer, Username, SJID, ItemVals) ->
- update_t(<<"rosterusers">>,
- [<<"username">>, <<"jid">>, <<"nick">>,
- <<"subscription">>, <<"ask">>, <<"askmessage">>,
- <<"server">>, <<"subscribe">>, <<"type">>],
- ItemVals,
- [<<"username='">>, Username, <<"' and jid='">>, SJID,
- <<"'">>]).
-
-get_subscription(LServer, Username, SJID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select subscription from rosterusers "
- "where username='">>,
- Username, <<"' and jid='">>, SJID, <<"'">>]).
-
-set_private_data(_LServer, Username, LXMLNS, SData) ->
- update_t(<<"private_storage">>,
- [<<"username">>, <<"namespace">>, <<"data">>],
- [Username, LXMLNS, SData],
- [<<"username='">>, Username, <<"' and namespace='">>,
- LXMLNS, <<"'">>]).
-
-set_private_data_sql(Username, LXMLNS, SData) ->
- [[<<"delete from private_storage where username='">>,
- Username, <<"' and namespace='">>, LXMLNS, <<"';">>],
- [<<"insert into private_storage(username, "
- "namespace, data) values ('">>,
- Username, <<"', '">>, LXMLNS, <<"', '">>, SData,
- <<"');">>]].
-
-get_private_data(LServer, Username, LXMLNS) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select data from private_storage where "
- "username='">>,
- Username, <<"' and namespace='">>, LXMLNS,
- <<"';">>]).
-
-get_private_data(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select namespace, data from private_storage "
- "where username='">>, Username, <<"';">>]).
-
-del_user_private_storage(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from private_storage where username='">>,
- Username, <<"';">>]).
-
-set_vcard(LServer, LUsername, SBDay, SCTRY, SEMail, SFN,
- SFamily, SGiven, SLBDay, SLCTRY, SLEMail, SLFN,
- SLFamily, SLGiven, SLLocality, SLMiddle, SLNickname,
- SLOrgName, SLOrgUnit, SLocality, SMiddle, SNickname,
- SOrgName, SOrgUnit, SVCARD, Username) ->
- ejabberd_odbc:sql_transaction(LServer,
- fun () ->
- update_t(<<"vcard">>,
- [<<"username">>,
- <<"vcard">>],
- [LUsername, SVCARD],
- [<<"username='">>, LUsername,
- <<"'">>]),
- update_t(<<"vcard_search">>,
- [<<"username">>,
- <<"lusername">>, <<"fn">>,
- <<"lfn">>, <<"family">>,
- <<"lfamily">>, <<"given">>,
- <<"lgiven">>, <<"middle">>,
- <<"lmiddle">>,
- <<"nickname">>,
- <<"lnickname">>, <<"bday">>,
- <<"lbday">>, <<"ctry">>,
- <<"lctry">>, <<"locality">>,
- <<"llocality">>,
- <<"email">>, <<"lemail">>,
- <<"orgname">>,
- <<"lorgname">>,
- <<"orgunit">>,
- <<"lorgunit">>],
- [Username, LUsername, SFN,
- SLFN, SFamily, SLFamily,
- SGiven, SLGiven, SMiddle,
- SLMiddle, SNickname,
- SLNickname, SBDay, SLBDay,
- SCTRY, SLCTRY, SLocality,
- SLLocality, SEMail, SLEMail,
- SOrgName, SLOrgName,
- SOrgUnit, SLOrgUnit],
- [<<"lusername='">>,
- LUsername, <<"'">>])
- end).
-
-get_vcard(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select vcard from vcard where username='">>,
- Username, <<"';">>]).
-
-get_default_privacy_list(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select name from privacy_default_list "
- "where username='">>,
- Username, <<"';">>]).
-
-get_default_privacy_list_t(Username) ->
- ejabberd_odbc:sql_query_t([<<"select name from privacy_default_list "
- "where username='">>,
- Username, <<"';">>]).
-
-get_privacy_list_names(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select name from privacy_list where "
- "username='">>,
- Username, <<"';">>]).
-
-get_privacy_list_names_t(Username) ->
- ejabberd_odbc:sql_query_t([<<"select name from privacy_list where "
- "username='">>,
- Username, <<"';">>]).
-
-get_privacy_list_id(LServer, Username, SName) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select id from privacy_list where username='">>,
- Username, <<"' and name='">>, SName, <<"';">>]).
-
-get_privacy_list_id_t(Username, SName) ->
- ejabberd_odbc:sql_query_t([<<"select id from privacy_list where username='">>,
- Username, <<"' and name='">>, SName, <<"';">>]).
-
-get_privacy_list_data(LServer, Username, SName) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select t, value, action, ord, match_all, "
- "match_iq, match_message, match_presence_in, "
- "match_presence_out from privacy_list_data "
- "where id = (select id from privacy_list "
- "where username='">>,
- Username, <<"' and name='">>, SName,
- <<"') order by ord;">>]).
-
-get_privacy_list_data_by_id(LServer, ID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select t, value, action, ord, match_all, "
- "match_iq, match_message, match_presence_in, "
- "match_presence_out from privacy_list_data "
- "where id='">>,
- ID, <<"' order by ord;">>]).
-
-get_privacy_list_data_by_id_t(ID) ->
- ejabberd_odbc:sql_query_t([<<"select t, value, action, ord, match_all, "
- "match_iq, match_message, match_presence_in, "
- "match_presence_out from privacy_list_data "
- "where id='">>,
- ID, <<"' order by ord;">>]).
-
-set_default_privacy_list(Username, SName) ->
- update_t(<<"privacy_default_list">>,
- [<<"username">>, <<"name">>], [Username, SName],
- [<<"username='">>, Username, <<"'">>]).
-
-unset_default_privacy_list(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from privacy_default_list "
- " where username='">>,
- Username, <<"';">>]).
-
-remove_privacy_list(Username, SName) ->
- ejabberd_odbc:sql_query_t([<<"delete from privacy_list where username='">>,
- Username, <<"' and name='">>, SName, <<"';">>]).
-
-add_privacy_list(Username, SName) ->
- ejabberd_odbc:sql_query_t([<<"insert into privacy_list(username, name) "
- "values ('">>,
- Username, <<"', '">>, SName, <<"');">>]).
-
-set_privacy_list(ID, RItems) ->
- ejabberd_odbc:sql_query_t([<<"delete from privacy_list_data where "
- "id='">>,
- ID, <<"';">>]),
- lists:foreach(fun (Items) ->
- ejabberd_odbc:sql_query_t([<<"insert into privacy_list_data(id, t, "
- "value, action, ord, match_all, match_iq, "
- "match_message, match_presence_in, match_prese"
- "nce_out ) values ('">>,
- ID, <<"', '">>,
- join(Items, <<"', '">>),
- <<"');">>])
- end,
- RItems).
-
-del_privacy_lists(LServer, Server, Username) ->
-%% Characters to escape
-%% Count number of records in a table given a where clause
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from privacy_list where username='">>,
- Username, <<"';">>]),
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from privacy_list_data where "
- "value='">>,
- <<Username/binary, "@", Server/binary>>,
- <<"';">>]),
- ejabberd_odbc:sql_query(LServer,
- [<<"delete from privacy_default_list where "
- "username='">>,
- Username, <<"';">>]).
-
-escape($\000) -> <<"\\0">>;
-escape($\n) -> <<"\\n">>;
-escape($\t) -> <<"\\t">>;
-escape($\b) -> <<"\\b">>;
-escape($\r) -> <<"\\r">>;
-escape($') -> <<"''">>;
-escape($") -> <<"\\\"">>;
-escape($\\) -> <<"\\\\">>;
-escape(C) -> <<C>>.
-
-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.
-
-%% -----------------
-%% MSSQL queries
--ifdef(mssql).
-
-%% Queries can be either a fun or a list of queries
-get_db_type() -> mssql.
-
-sql_transaction(LServer, Queries)
- when is_list(Queries) ->
- F = fun () ->
- lists:foreach(fun (Query) ->
- ejabberd_odbc:sql_query(LServer, Query)
- end,
- Queries)
- end,
- {atomic, catch F()};
-sql_transaction(_LServer, FQueries) ->
- {atomic, catch FQueries()}.
-
-get_last(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_last '">>, Username, <<"'">>]).
-
-set_last_t(LServer, Username, Seconds, State) ->
- Result = ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.set_last '">>, Username,
- <<"', '">>, Seconds, <<"', '">>, State,
- <<"'">>]),
- {atomic, Result}.
-
-del_last(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_last '">>, Username, <<"'">>]).
-
-get_password(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_password '">>, Username,
- <<"'">>]).
-
-set_password_t(LServer, Username, Pass) ->
- Result = ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.set_password '">>,
- Username, <<"', '">>, Pass, <<"'">>]),
- {atomic, Result}.
-
-add_user(LServer, Username, Pass) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.add_user '">>, Username, <<"', '">>,
- Pass, <<"'">>]).
-
-del_user(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_user '">>, Username, <<"'">>]).
-
-del_user_return_password(LServer, Username, Pass) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_user_return_password '">>,
- Username, <<"'">>]),
- Pass.
-
-list_users(LServer) ->
- ejabberd_odbc:sql_query(LServer,
- <<"EXECUTE dbo.list_users">>).
-
-list_users(LServer, _) -> list_users(LServer).
-
-users_number(LServer) ->
- ejabberd_odbc:sql_query(LServer,
- <<"select count(*) from users with (nolock)">>).
-
-users_number(LServer, _) -> users_number(LServer).
-
-add_spool_sql(Username, XML) ->
- [<<"EXECUTE dbo.add_spool '">>, Username, <<"' , '">>,
- XML, <<"'">>].
-
-add_spool(LServer, Queries) ->
- lists:foreach(fun (Query) ->
- ejabberd_odbc:sql_query(LServer, Query)
- end,
- Queries).
-
-get_and_del_spool_msg_t(LServer, Username) ->
- [Result] = case ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_and_del_spool_msg '">>,
- Username, <<"'">>])
- of
- Rs when is_list(Rs) ->
- lists:filter(fun ({selected, _Header, _Row}) -> true;
- ({updated, _N}) -> false
- end,
- Rs);
- Rs -> [Rs]
- end,
- {atomic, Result}.
-
-del_spool_msg(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_spool_msg '">>, Username,
- <<"'">>]).
-
-get_roster(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_roster '">>, Username,
- <<"'">>]).
-
-get_roster_jid_groups(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_roster_jid_groups '">>,
- Username, <<"'">>]).
-
-get_roster_groups(LServer, Username, SJID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_roster_groups '">>, Username,
- <<"' , '">>, SJID, <<"'">>]).
-
-del_user_roster_t(LServer, Username) ->
- Result = ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_user_roster '">>,
- Username, <<"'">>]),
- {atomic, Result}.
-
-get_roster_by_jid(LServer, Username, SJID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_roster_by_jid '">>, Username,
- <<"' , '">>, SJID, <<"'">>]).
-
-get_rostergroup_by_jid(LServer, Username, SJID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_rostergroup_by_jid '">>,
- Username, <<"' , '">>, SJID, <<"'">>]).
-
-del_roster(LServer, Username, SJID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_roster '">>, Username,
- <<"', '">>, SJID, <<"'">>]).
-
-del_roster_sql(Username, SJID) ->
- [<<"EXECUTE dbo.del_roster '">>, Username, <<"', '">>,
- SJID, <<"'">>].
-
-update_roster(LServer, Username, SJID, ItemVals,
- ItemGroups) ->
- Query1 = [<<"EXECUTE dbo.del_roster '">>, Username,
- <<"', '">>, SJID, <<"' ">>],
- ejabberd_odbc:sql_query(LServer, lists:flatten(Query1)),
- Query2 = [<<"EXECUTE dbo.add_roster_user ">>, ItemVals],
- ejabberd_odbc:sql_query(LServer, lists:flatten(Query2)),
- Query3 = [<<"EXECUTE dbo.del_roster_groups '">>,
- Username, <<"', '">>, SJID, <<"' ">>],
- ejabberd_odbc:sql_query(LServer, lists:flatten(Query3)),
- lists:foreach(fun (ItemGroup) ->
- Query = [<<"EXECUTE dbo.add_roster_group ">>,
- ItemGroup],
- ejabberd_odbc:sql_query(LServer, lists:flatten(Query))
- end,
- ItemGroups).
-
-update_roster_sql(Username, SJID, ItemVals,
- ItemGroups) ->
- [<<"BEGIN TRANSACTION ">>,
- <<"EXECUTE dbo.del_roster_groups '">>, Username,
- <<"','">>, SJID, <<"' ">>,
- <<"EXECUTE dbo.add_roster_user ">>, ItemVals, <<" ">>]
- ++
- [lists:flatten(<<"EXECUTE dbo.add_roster_group ">>,
- ItemGroup, <<" ">>)
- || ItemGroup <- ItemGroups]
- ++ [<<"COMMIT">>].
-
-roster_subscribe(LServer, _Username, _SJID, ItemVals) ->
- catch ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.add_roster_user ">>,
- ItemVals]).
-
-get_subscription(LServer, Username, SJID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_subscription '">>, Username,
- <<"' , '">>, SJID, <<"'">>]).
-
-set_private_data(LServer, Username, LXMLNS, SData) ->
- ejabberd_odbc:sql_query(LServer,
- set_private_data_sql(Username, LXMLNS, SData)).
-
-set_private_data_sql(Username, LXMLNS, SData) ->
- [<<"EXECUTE dbo.set_private_data '">>, Username,
- <<"' , '">>, LXMLNS, <<"' , '">>, SData, <<"'">>].
-
-get_private_data(LServer, Username, LXMLNS) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_private_data '">>, Username,
- <<"' , '">>, LXMLNS, <<"'">>]).
-
-del_user_private_storage(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_user_storage '">>, Username,
- <<"'">>]).
-
-set_vcard(LServer, LUsername, SBDay, SCTRY, SEMail, SFN,
- SFamily, SGiven, SLBDay, SLCTRY, SLEMail, SLFN,
- SLFamily, SLGiven, SLLocality, SLMiddle, SLNickname,
- SLOrgName, SLOrgUnit, SLocality, SMiddle, SNickname,
- SOrgName, SOrgUnit, SVCARD, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.set_vcard '">>, SVCARD, <<"' , '">>,
- Username, <<"' , '">>, LUsername, <<"' , '">>, SFN,
- <<"' , '">>, SLFN, <<"' , '">>, SFamily,
- <<"' , '">>, SLFamily, <<"' , '">>, SGiven,
- <<"' , '">>, SLGiven, <<"' , '">>, SMiddle,
- <<"' , '">>, SLMiddle, <<"' , '">>, SNickname,
- <<"' , '">>, SLNickname, <<"' , '">>, SBDay,
- <<"' , '">>, SLBDay, <<"' , '">>, SCTRY,
- <<"' , '">>, SLCTRY, <<"' , '">>, SLocality,
- <<"' , '">>, SLLocality, <<"' , '">>, SEMail,
- <<"' , '">>, SLEMail, <<"' , '">>, SOrgName,
- <<"' , '">>, SLOrgName, <<"' , '">>, SOrgUnit,
- <<"' , '">>, SLOrgUnit, <<"'">>]).
-
-get_vcard(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_vcard '">>, Username, <<"'">>]).
-
-get_default_privacy_list(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_default_privacy_list '">>,
- Username, <<"'">>]).
-
-get_default_privacy_list_t(Username) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_default_privacy_list '">>,
- Username, <<"'">>]).
-
-get_privacy_list_names(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_privacy_list_names '">>,
- Username, <<"'">>]).
-
-get_privacy_list_names_t(Username) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_privacy_list_names '">>,
- Username, <<"'">>]).
-
-get_privacy_list_id(LServer, Username, SName) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_privacy_list_id '">>, Username,
- <<"' , '">>, SName, <<"'">>]).
-
-get_privacy_list_id_t(Username, SName) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_privacy_list_id '">>,
- Username, <<"' , '">>, SName, <<"'">>]).
-
-get_privacy_list_data(LServer, Username, SName) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_privacy_list_data '">>,
- Username, <<"' , '">>, SName, <<"'">>]).
-
-get_privacy_list_data_by_id(LServer, ID) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_privacy_list_data_by_id '">>,
- ID, <<"'">>]).
-
-get_privacy_list_data_by_id_t(ID) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.get_privacy_list_data_by_id '">>,
- ID, <<"'">>]).
-
-set_default_privacy_list(Username, SName) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.set_default_privacy_list '">>,
- Username, <<"' , '">>, SName, <<"'">>]).
-
-unset_default_privacy_list(LServer, Username) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.unset_default_privacy_list '">>,
- Username, <<"'">>]).
-
-remove_privacy_list(Username, SName) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.remove_privacy_list '">>,
- Username, <<"' , '">>, SName, <<"'">>]).
-
-add_privacy_list(Username, SName) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.add_privacy_list '">>,
- Username, <<"' , '">>, SName, <<"'">>]).
-
-set_privacy_list(ID, RItems) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.del_privacy_list_by_id '">>,
- ID, <<"'">>]),
- lists:foreach(fun (Items) ->
- ejabberd_odbc:sql_query_t([<<"EXECUTE dbo.set_privacy_list '">>,
- ID, <<"', '">>,
- join(Items, <<"', '">>),
- <<"'">>])
- end,
- RItems).
-
-del_privacy_lists(LServer, Server, Username) ->
-%% Characters to escape
-%% Count number of records in a table given a where clause
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.del_privacy_lists @Server='">>,
- Server, <<"' @username='">>, Username, <<"'">>]).
-
-escape($\000) -> <<"\\0">>;
-escape($\t) -> <<"\\t">>;
-escape($\b) -> <<"\\b">>;
-escape($\r) -> <<"\\r">>;
-escape($') -> <<"''">>;
-escape($") -> <<"\\\"">>;
-escape(C) -> C.
-
-count_records_where(LServer, Table, WhereClause) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"select count(*) from ">>, Table,
- <<" with (nolock) ">>, WhereClause]).
-
-get_roster_version(LServer, LUser) ->
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.get_roster_version '">>, LUser,
- <<"'">>]).
-
-set_roster_version(Username, Version) ->
- LServer = (?MYNAME),
- ejabberd_odbc:sql_query(LServer,
- [<<"EXECUTE dbo.set_roster_version '">>, Username,
- <<"', '">>, Version, <<"'">>]).
-
--endif.
diff --git a/src/odbc/pg.sql b/src/odbc/pg.sql
deleted file mode 100644
index 0b641d575..000000000
--- a/src/odbc/pg.sql
+++ /dev/null
@@ -1,285 +0,0 @@
---
--- ejabberd, Copyright (C) 2002-2013 ProcessOne
---
--- This program is free software; you can redistribute it and/or
--- modify it under the terms of the GNU General Public License as
--- published by the Free Software Foundation; either version 2 of the
--- License, or (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--- General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--- 02111-1307 USA
---
-
-CREATE TABLE users (
- username text PRIMARY KEY,
- "password" text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-
-CREATE TABLE last (
- username text PRIMARY KEY,
- seconds text NOT NULL,
- state text NOT NULL
-);
-
-
-CREATE TABLE rosterusers (
- username text NOT NULL,
- jid text NOT NULL,
- nick text NOT NULL,
- subscription character(1) NOT NULL,
- ask character(1) NOT NULL,
- askmessage text NOT NULL,
- server character(1) NOT NULL,
- subscribe text,
- "type" text,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE UNIQUE INDEX i_rosteru_user_jid ON rosterusers USING btree (username, jid);
-CREATE INDEX i_rosteru_username ON rosterusers USING btree (username);
-CREATE INDEX i_rosteru_jid ON rosterusers USING btree (jid);
-
-
-CREATE TABLE rostergroups (
- username text NOT NULL,
- jid text NOT NULL,
- grp text NOT NULL
-);
-
-CREATE INDEX pk_rosterg_user_jid ON rostergroups USING btree (username, jid);
-
-CREATE TABLE sr_group (
- name text NOT NULL,
- opts text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE TABLE sr_user (
- jid text NOT NULL,
- grp text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE UNIQUE INDEX i_sr_user_jid_grp ON sr_user USING btree (jid, grp);
-CREATE INDEX i_sr_user_jid ON sr_user USING btree (jid);
-CREATE INDEX i_sr_user_grp ON sr_user USING btree (grp);
-
-CREATE TABLE spool (
- username text NOT NULL,
- xml text NOT NULL,
- seq SERIAL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE INDEX i_despool ON spool USING btree (username);
-
-
-CREATE TABLE vcard (
- username text PRIMARY KEY,
- vcard text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE TABLE vcard_xupdate (
- username text PRIMARY KEY,
- hash text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE TABLE vcard_search (
- username text NOT NULL,
- lusername text PRIMARY KEY,
- fn text NOT NULL,
- lfn text NOT NULL,
- family text NOT NULL,
- lfamily text NOT NULL,
- given text NOT NULL,
- lgiven text NOT NULL,
- middle text NOT NULL,
- lmiddle text NOT NULL,
- nickname text NOT NULL,
- lnickname text NOT NULL,
- bday text NOT NULL,
- lbday text NOT NULL,
- ctry text NOT NULL,
- lctry text NOT NULL,
- locality text NOT NULL,
- llocality text NOT NULL,
- email text NOT NULL,
- lemail text NOT NULL,
- orgname text NOT NULL,
- lorgname text NOT NULL,
- orgunit text NOT NULL,
- lorgunit text NOT NULL
-);
-
-CREATE INDEX i_vcard_search_lfn ON vcard_search(lfn);
-CREATE INDEX i_vcard_search_lfamily ON vcard_search(lfamily);
-CREATE INDEX i_vcard_search_lgiven ON vcard_search(lgiven);
-CREATE INDEX i_vcard_search_lmiddle ON vcard_search(lmiddle);
-CREATE INDEX i_vcard_search_lnickname ON vcard_search(lnickname);
-CREATE INDEX i_vcard_search_lbday ON vcard_search(lbday);
-CREATE INDEX i_vcard_search_lctry ON vcard_search(lctry);
-CREATE INDEX i_vcard_search_llocality ON vcard_search(llocality);
-CREATE INDEX i_vcard_search_lemail ON vcard_search(lemail);
-CREATE INDEX i_vcard_search_lorgname ON vcard_search(lorgname);
-CREATE INDEX i_vcard_search_lorgunit ON vcard_search(lorgunit);
-
-CREATE TABLE privacy_default_list (
- username text PRIMARY KEY,
- name text NOT NULL
-);
-
-CREATE TABLE privacy_list (
- username text NOT NULL,
- name text NOT NULL,
- id SERIAL UNIQUE,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE INDEX i_privacy_list_username ON privacy_list USING btree (username);
-CREATE UNIQUE INDEX i_privacy_list_username_name ON privacy_list USING btree (username, name);
-
-CREATE TABLE privacy_list_data (
- id bigint REFERENCES privacy_list(id) ON DELETE CASCADE,
- t character(1) NOT NULL,
- value text NOT NULL,
- action character(1) NOT NULL,
- ord NUMERIC NOT NULL,
- match_all boolean NOT NULL,
- match_iq boolean NOT NULL,
- match_message boolean NOT NULL,
- match_presence_in boolean NOT NULL,
- match_presence_out boolean NOT NULL
-);
-
-CREATE TABLE private_storage (
- username text NOT NULL,
- namespace text NOT NULL,
- data text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE INDEX i_private_storage_username ON private_storage USING btree (username);
-CREATE UNIQUE INDEX i_private_storage_username_namespace ON private_storage USING btree (username, namespace);
-
-
-CREATE TABLE roster_version (
- username text PRIMARY KEY,
- version text NOT NULL
-);
-
--- To update from 0.9.8:
--- CREATE SEQUENCE spool_seq_seq;
--- ALTER TABLE spool ADD COLUMN seq integer;
--- ALTER TABLE spool ALTER COLUMN seq SET DEFAULT nextval('spool_seq_seq');
--- UPDATE spool SET seq = DEFAULT;
--- ALTER TABLE spool ALTER COLUMN seq SET NOT NULL;
-
--- To update from 1.x:
--- ALTER TABLE rosterusers ADD COLUMN askmessage text;
--- UPDATE rosterusers SET askmessage = '';
--- ALTER TABLE rosterusers ALTER COLUMN askmessage SET NOT NULL;
-
-CREATE TABLE pubsub_node (
- host text,
- node text,
- parent text,
- "type" text,
- nodeid SERIAL UNIQUE
-);
-CREATE INDEX i_pubsub_node_parent ON pubsub_node USING btree (parent);
-CREATE UNIQUE INDEX i_pubsub_node_tuple ON pubsub_node USING btree (host, node);
-
-CREATE TABLE pubsub_node_option (
- nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
- name text,
- val text
-);
-CREATE INDEX i_pubsub_node_option_nodeid ON pubsub_node_option USING btree (nodeid);
-
-CREATE TABLE pubsub_node_owner (
- nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
- owner text
-);
-CREATE INDEX i_pubsub_node_owner_nodeid ON pubsub_node_owner USING btree (nodeid);
-
-CREATE TABLE pubsub_state (
- nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
- jid text,
- affiliation character(1),
- subscriptions text,
- stateid SERIAL UNIQUE
-);
-CREATE INDEX i_pubsub_state_jid ON pubsub_state USING btree (jid);
-CREATE UNIQUE INDEX i_pubsub_state_tuple ON pubsub_state USING btree (nodeid, jid);
-
-CREATE TABLE pubsub_item (
- nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
- itemid text,
- publisher text,
- creation text,
- modification text,
- payload text
-);
-CREATE INDEX i_pubsub_item_itemid ON pubsub_item USING btree (itemid);
-CREATE UNIQUE INDEX i_pubsub_item_tuple ON pubsub_item USING btree (nodeid, itemid);
-
-CREATE TABLE pubsub_subscription_opt (
- subid text,
- opt_name varchar(32),
- opt_value text
-);
-CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt USING btree (subid, opt_name);
-
-CREATE TABLE muc_room (
- name text NOT NULL,
- host text NOT NULL,
- opts text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE UNIQUE INDEX i_muc_room_name_host ON muc_room USING btree (name, host);
-
-CREATE TABLE muc_registered (
- jid text NOT NULL,
- host text NOT NULL,
- nick text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE INDEX i_muc_registered_nick ON muc_registered USING btree (nick);
-CREATE UNIQUE INDEX i_muc_registered_jid_host ON muc_registered USING btree (jid, host);
-
-CREATE TABLE irc_custom (
- jid text NOT NULL,
- host text NOT NULL,
- data text NOT NULL,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE UNIQUE INDEX i_irc_custom_jid_host ON irc_custom USING btree (jid, host);
-
-CREATE TABLE motd (
- username text PRIMARY KEY,
- xml text,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE TABLE caps_features (
- node text NOT NULL,
- subnode text NOT NULL,
- feature text,
- created_at TIMESTAMP NOT NULL DEFAULT now()
-);
-
-CREATE INDEX i_caps_features_node_subnode ON caps_features USING btree (node, subnode);