mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-26 16:26:24 +01:00
Initial SQL auto-update version
This commit is contained in:
parent
2539be1a04
commit
223f0c4ac8
@ -31,6 +31,7 @@
|
|||||||
{p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.3"}}},
|
{p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.3"}}},
|
||||||
{jose, ".*", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.8.4"}}},
|
{jose, ".*", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.8.4"}}},
|
||||||
{eimp, ".*", {git, "https://github.com/processone/eimp", {tag, "1.0.6"}}},
|
{eimp, ".*", {git, "https://github.com/processone/eimp", {tag, "1.0.6"}}},
|
||||||
|
{sql_codec, ".*", {git, "https://github.com/zinid/sql_codec.git"}},
|
||||||
{if_var_true, stun, {stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.0.23"}}}},
|
{if_var_true, stun, {stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.0.23"}}}},
|
||||||
{if_var_true, sip, {esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.24"}}}},
|
{if_var_true, sip, {esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.24"}}}},
|
||||||
{if_var_true, mysql, {p1_mysql, ".*", {git, "https://github.com/processone/p1_mysql",
|
{if_var_true, mysql, {p1_mysql, ".*", {git, "https://github.com/processone/p1_mysql",
|
||||||
|
423
sql/lite.new.sql
423
sql/lite.new.sql
@ -1,423 +0,0 @@
|
|||||||
--
|
|
||||||
-- ejabberd, Copyright (C) 2002-2017 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.,
|
|
||||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE TABLE users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
password text NOT NULL,
|
|
||||||
serverkey text NOT NULL DEFAULT '',
|
|
||||||
salt text NOT NULL DEFAULT '',
|
|
||||||
iterationcount integer NOT NULL DEFAULT 0,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE last (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
seconds text NOT NULL,
|
|
||||||
state text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE rosterusers (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host 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 NOT NULL,
|
|
||||||
type text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers (server_host, username, jid);
|
|
||||||
CREATE INDEX i_rosteru_sh_username ON rosterusers (server_host, username);
|
|
||||||
CREATE INDEX i_rosteru_sh_jid ON rosterusers (server_host, jid);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE rostergroups (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
grp text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_rosterg_sh_user_jid ON rostergroups (server_host, username, jid);
|
|
||||||
|
|
||||||
CREATE TABLE sr_group (
|
|
||||||
name text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
opts text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host, name)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE sr_user (
|
|
||||||
jid text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
grp text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host, jid, grp)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_sr_user_sh_jid ON sr_user (server_host, jid);
|
|
||||||
CREATE INDEX i_sr_user_sh_grp ON sr_user (server_host, grp);
|
|
||||||
|
|
||||||
CREATE TABLE spool (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_spool_sh_username ON spool (server_host, username);
|
|
||||||
|
|
||||||
CREATE TABLE archive (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
timestamp BIGINT UNSIGNED NOT NULL,
|
|
||||||
peer text NOT NULL,
|
|
||||||
bare_peer text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
txt text,
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
kind text,
|
|
||||||
nick text,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_archive_sh_username_timestamp ON archive (server_host, username, timestamp);
|
|
||||||
CREATE INDEX i_archive_sh_username_peer ON archive (server_host, username, peer);
|
|
||||||
CREATE INDEX i_archive_sh_username_bare_peer ON archive (server_host, username, bare_peer);
|
|
||||||
CREATE INDEX i_archive_sh_timestamp ON archive (server_host, timestamp);
|
|
||||||
|
|
||||||
CREATE TABLE archive_prefs (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
def text NOT NULL,
|
|
||||||
always text NOT NULL,
|
|
||||||
never text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE vcard (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
vcard text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE vcard_search (
|
|
||||||
username text NOT NULL,
|
|
||||||
lusername text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
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,
|
|
||||||
PRIMARY KEY (server_host, lusername)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_vcard_search_sh_lfn ON vcard_search(server_host, lfn);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lfamily ON vcard_search(server_host, lfamily);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lgiven ON vcard_search(server_host, lgiven);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lmiddle ON vcard_search(server_host, lmiddle);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lnickname ON vcard_search(server_host, lnickname);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lbday ON vcard_search(server_host, lbday);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lctry ON vcard_search(server_host, lctry);
|
|
||||||
CREATE INDEX i_vcard_search_sh_llocality ON vcard_search(server_host, llocality);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lemail ON vcard_search(server_host, lemail);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lorgname ON vcard_search(server_host, lorgname);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lorgunit ON vcard_search(server_host, lorgunit);
|
|
||||||
|
|
||||||
CREATE TABLE privacy_default_list (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE privacy_list (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_privacy_list_sh_username ON privacy_list (server_host, username);
|
|
||||||
CREATE UNIQUE INDEX i_privacy_list_sh_username_name ON privacy_list (server_host, 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,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
data text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host, username, namespace)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_private_storage_sh_username ON private_storage (server_host, username);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE roster_version (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
version text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_node (
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
parent text NOT NULL DEFAULT '',
|
|
||||||
plugin text NOT NULL,
|
|
||||||
nodeid INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_node_parent ON pubsub_node (parent);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_node_tuple ON pubsub_node (host, node);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_node_option (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
name text NOT NULL,
|
|
||||||
val text NOT NULL
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_node_option_nodeid ON pubsub_node_option (nodeid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_node_owner (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
owner text NOT NULL
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_node_owner_nodeid ON pubsub_node_owner (nodeid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_state (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
jid text NOT NULL,
|
|
||||||
affiliation character(1),
|
|
||||||
subscriptions text NOT NULL DEFAULT '',
|
|
||||||
stateid INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_state_jid ON pubsub_state (jid);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_state_tuple ON pubsub_state (nodeid, jid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_item (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
itemid text NOT NULL,
|
|
||||||
publisher text NOT NULL,
|
|
||||||
creation varchar(32) NOT NULL,
|
|
||||||
modification varchar(32) NOT NULL,
|
|
||||||
payload text NOT NULL DEFAULT ''
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_item_itemid ON pubsub_item (itemid);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_item_tuple ON pubsub_item (nodeid, itemid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_subscription_opt (
|
|
||||||
subid text NOT NULL,
|
|
||||||
opt_name varchar(32),
|
|
||||||
opt_value text NOT NULL
|
|
||||||
);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt (subid, opt_name);
|
|
||||||
|
|
||||||
CREATE TABLE muc_room (
|
|
||||||
name text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
opts text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_room_name_host ON muc_room (name, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_registered (
|
|
||||||
jid text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_registered_nick ON muc_registered (nick);
|
|
||||||
CREATE UNIQUE INDEX i_muc_registered_jid_host ON muc_registered (jid, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_room (
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_room_name_host ON muc_online_room (name, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users (username, server, resource, name, host);
|
|
||||||
CREATE INDEX i_muc_online_users_us ON muc_online_users (username, server);
|
|
||||||
|
|
||||||
CREATE TABLE muc_room_subscribers (
|
|
||||||
room text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
nodes text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_room_subscribers_host_jid ON muc_room_subscribers(host, jid);
|
|
||||||
CREATE UNIQUE INDEX i_muc_room_subscribers_host_room_jid ON muc_room_subscribers(host, room, jid);
|
|
||||||
|
|
||||||
CREATE TABLE motd (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
xml text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE caps_features (
|
|
||||||
node text NOT NULL,
|
|
||||||
subnode text NOT NULL,
|
|
||||||
feature text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_caps_features_node_subnode ON caps_features (node, subnode);
|
|
||||||
|
|
||||||
CREATE TABLE sm (
|
|
||||||
usec bigint NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
priority text NOT NULL,
|
|
||||||
info text NOT NULL,
|
|
||||||
PRIMARY KEY (usec, pid)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_sm_node ON sm(node);
|
|
||||||
CREATE INDEX i_sm_sh_username ON sm (server_host, username);
|
|
||||||
|
|
||||||
CREATE TABLE oauth_token (
|
|
||||||
token text NOT NULL PRIMARY KEY,
|
|
||||||
jid text NOT NULL,
|
|
||||||
scope text NOT NULL,
|
|
||||||
expire bigint NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE route (
|
|
||||||
domain text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
local_hint text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_route ON route(domain, server_host, node, pid);
|
|
||||||
CREATE INDEX i_route_domain ON route(domain);
|
|
||||||
|
|
||||||
CREATE TABLE bosh (
|
|
||||||
sid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_bosh_sid ON bosh(sid);
|
|
||||||
|
|
||||||
CREATE TABLE carboncopy (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username, resource)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_carboncopy_sh_user ON carboncopy (server_host, username);
|
|
||||||
|
|
||||||
CREATE TABLE proxy65 (
|
|
||||||
sid text NOT NULL,
|
|
||||||
pid_t text NOT NULL,
|
|
||||||
pid_i text NOT NULL,
|
|
||||||
node_t text NOT NULL,
|
|
||||||
node_i text NOT NULL,
|
|
||||||
jid_i text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_proxy65_sid ON proxy65 (sid);
|
|
||||||
CREATE INDEX i_proxy65_jid ON proxy65 (jid_i);
|
|
||||||
|
|
||||||
CREATE TABLE push_session (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
timestamp bigint NOT NULL,
|
|
||||||
service text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username, timestamp)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_push_session_susn ON push_session (server_host, username, service, node);
|
|
391
sql/lite.sql
391
sql/lite.sql
@ -1,391 +0,0 @@
|
|||||||
--
|
|
||||||
-- ejabberd, Copyright (C) 2002-2017 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.,
|
|
||||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE TABLE users (
|
|
||||||
username text PRIMARY KEY,
|
|
||||||
password text NOT NULL,
|
|
||||||
serverkey text NOT NULL DEFAULT '',
|
|
||||||
salt text NOT NULL DEFAULT '',
|
|
||||||
iterationcount integer NOT NULL DEFAULT 0,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
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 NOT NULL,
|
|
||||||
type text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_rosteru_user_jid ON rosterusers (username, jid);
|
|
||||||
CREATE INDEX i_rosteru_username ON rosterusers (username);
|
|
||||||
CREATE INDEX i_rosteru_jid ON rosterusers (jid);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE rostergroups (
|
|
||||||
username text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
grp text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX pk_rosterg_user_jid ON rostergroups (username, jid);
|
|
||||||
|
|
||||||
CREATE TABLE sr_group (
|
|
||||||
name text NOT NULL,
|
|
||||||
opts text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE sr_user (
|
|
||||||
jid text NOT NULL,
|
|
||||||
grp text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_sr_user_jid_grp ON sr_user (jid, grp);
|
|
||||||
CREATE INDEX i_sr_user_jid ON sr_user (jid);
|
|
||||||
CREATE INDEX i_sr_user_grp ON sr_user (grp);
|
|
||||||
|
|
||||||
CREATE TABLE spool (
|
|
||||||
username text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_despool ON spool (username);
|
|
||||||
|
|
||||||
CREATE TABLE archive (
|
|
||||||
username text NOT NULL,
|
|
||||||
timestamp BIGINT UNSIGNED NOT NULL,
|
|
||||||
peer text NOT NULL,
|
|
||||||
bare_peer text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
txt text,
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
kind text,
|
|
||||||
nick text,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_username_timestamp ON archive(username, timestamp);
|
|
||||||
CREATE INDEX i_archive_username_peer ON archive (username, peer);
|
|
||||||
CREATE INDEX i_archive_username_bare_peer ON archive (username, bare_peer);
|
|
||||||
CREATE INDEX i_timestamp ON archive(timestamp);
|
|
||||||
|
|
||||||
CREATE TABLE archive_prefs (
|
|
||||||
username text NOT NULL PRIMARY KEY,
|
|
||||||
def text NOT NULL,
|
|
||||||
always text NOT NULL,
|
|
||||||
never text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE vcard (
|
|
||||||
username text PRIMARY KEY,
|
|
||||||
vcard text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
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 INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_privacy_list_username ON privacy_list (username);
|
|
||||||
CREATE UNIQUE INDEX i_privacy_list_username_name ON privacy_list (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 CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_private_storage_username ON private_storage (username);
|
|
||||||
CREATE UNIQUE INDEX i_private_storage_username_namespace ON private_storage (username, namespace);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE roster_version (
|
|
||||||
username text PRIMARY KEY,
|
|
||||||
version text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_node (
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
parent text NOT NULL DEFAULT '',
|
|
||||||
plugin text NOT NULL,
|
|
||||||
nodeid INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_node_parent ON pubsub_node (parent);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_node_tuple ON pubsub_node (host, node);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_node_option (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
name text NOT NULL,
|
|
||||||
val text NOT NULL
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_node_option_nodeid ON pubsub_node_option (nodeid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_node_owner (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
owner text NOT NULL
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_node_owner_nodeid ON pubsub_node_owner (nodeid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_state (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
jid text NOT NULL,
|
|
||||||
affiliation character(1),
|
|
||||||
subscriptions text NOT NULL DEFAULT '',
|
|
||||||
stateid INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_state_jid ON pubsub_state (jid);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_state_tuple ON pubsub_state (nodeid, jid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_item (
|
|
||||||
nodeid bigint REFERENCES pubsub_node(nodeid) ON DELETE CASCADE,
|
|
||||||
itemid text NOT NULL,
|
|
||||||
publisher text NOT NULL,
|
|
||||||
creation varchar(32) NOT NULL,
|
|
||||||
modification varchar(32) NOT NULL,
|
|
||||||
payload text NOT NULL DEFAULT ''
|
|
||||||
);
|
|
||||||
CREATE INDEX i_pubsub_item_itemid ON pubsub_item (itemid);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_item_tuple ON pubsub_item (nodeid, itemid);
|
|
||||||
|
|
||||||
CREATE TABLE pubsub_subscription_opt (
|
|
||||||
subid text NOT NULL,
|
|
||||||
opt_name varchar(32),
|
|
||||||
opt_value text NOT NULL
|
|
||||||
);
|
|
||||||
CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt (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 CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_room_name_host ON muc_room (name, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_registered (
|
|
||||||
jid text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_registered_nick ON muc_registered (nick);
|
|
||||||
CREATE UNIQUE INDEX i_muc_registered_jid_host ON muc_registered (jid, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_room (
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_room_name_host ON muc_online_room (name, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users (username, server, resource, name, host);
|
|
||||||
CREATE INDEX i_muc_online_users_us ON muc_online_users (username, server);
|
|
||||||
|
|
||||||
CREATE TABLE muc_room_subscribers (
|
|
||||||
room text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
nodes text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_room_subscribers_host_jid ON muc_room_subscribers(host, jid);
|
|
||||||
CREATE UNIQUE INDEX i_muc_room_subscribers_host_room_jid ON muc_room_subscribers(host, room, jid);
|
|
||||||
|
|
||||||
CREATE TABLE motd (
|
|
||||||
username text PRIMARY KEY,
|
|
||||||
xml text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE caps_features (
|
|
||||||
node text NOT NULL,
|
|
||||||
subnode text NOT NULL,
|
|
||||||
feature text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_caps_features_node_subnode ON caps_features (node, subnode);
|
|
||||||
|
|
||||||
CREATE TABLE sm (
|
|
||||||
usec bigint NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
username text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
priority text NOT NULL,
|
|
||||||
info text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_sm_sid ON sm(usec, pid);
|
|
||||||
CREATE INDEX i_sm_node ON sm(node);
|
|
||||||
CREATE INDEX i_sm_username ON sm(username);
|
|
||||||
|
|
||||||
CREATE TABLE oauth_token (
|
|
||||||
token text NOT NULL PRIMARY KEY,
|
|
||||||
jid text NOT NULL,
|
|
||||||
scope text NOT NULL,
|
|
||||||
expire bigint NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE route (
|
|
||||||
domain text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
local_hint text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_route ON route(domain, server_host, node, pid);
|
|
||||||
CREATE INDEX i_route_domain ON route(domain);
|
|
||||||
|
|
||||||
CREATE TABLE bosh (
|
|
||||||
sid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_bosh_sid ON bosh(sid);
|
|
||||||
|
|
||||||
CREATE TABLE carboncopy (
|
|
||||||
username text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_carboncopy_ur ON carboncopy (username, resource);
|
|
||||||
CREATE INDEX i_carboncopy_user ON carboncopy (username);
|
|
||||||
|
|
||||||
CREATE TABLE proxy65 (
|
|
||||||
sid text NOT NULL,
|
|
||||||
pid_t text NOT NULL,
|
|
||||||
pid_i text NOT NULL,
|
|
||||||
node_t text NOT NULL,
|
|
||||||
node_i text NOT NULL,
|
|
||||||
jid_i text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_proxy65_sid ON proxy65 (sid);
|
|
||||||
CREATE INDEX i_proxy65_jid ON proxy65 (jid_i);
|
|
||||||
|
|
||||||
CREATE TABLE push_session (
|
|
||||||
username text NOT NULL,
|
|
||||||
timestamp bigint NOT NULL,
|
|
||||||
service text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
xml text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_push_usn ON push_session (username, service, node);
|
|
||||||
CREATE UNIQUE INDEX i_push_ut ON push_session (username, timestamp);
|
|
559
sql/mssql.sql
559
sql/mssql.sql
@ -1,559 +0,0 @@
|
|||||||
--
|
|
||||||
-- ejabberd, Copyright (C) 2002-2017 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.,
|
|
||||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
--
|
|
||||||
|
|
||||||
SET ANSI_PADDING OFF;
|
|
||||||
SET ANSI_NULLS ON;
|
|
||||||
SET QUOTED_IDENTIFIER ON;
|
|
||||||
SET ANSI_PADDING ON;
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[archive] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[timestamp] [bigint] NOT NULL,
|
|
||||||
[peer] [varchar] (250) NOT NULL,
|
|
||||||
[bare_peer] [varchar] (250) NOT NULL,
|
|
||||||
[xml] [text] NOT NULL,
|
|
||||||
[txt] [text] NULL,
|
|
||||||
[id] [bigint] IDENTITY(1,1) NOT NULL,
|
|
||||||
[kind] [varchar] (10) NULL,
|
|
||||||
[nick] [varchar] (250) NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [archive_PK] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[id] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE INDEX [archive_username_timestamp] ON [archive] (username, timestamp)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [archive_username_peer] ON [archive] (username, peer)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [archive_username_bare_peer] ON [archive] (username, bare_peer)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [archive_timestamp] ON [archive] (timestamp)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[archive_prefs] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[def] [text] NOT NULL,
|
|
||||||
[always] [text] NOT NULL,
|
|
||||||
[never] [text] NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [archive_prefs_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[username] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[caps_features] (
|
|
||||||
[node] [varchar] (250) NOT NULL,
|
|
||||||
[subnode] [varchar] (250) NOT NULL,
|
|
||||||
[feature] [text] NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE CLUSTERED INDEX [caps_features_node_subnode] ON [caps_features] (node, subnode)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[last] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[seconds] [text] NOT NULL,
|
|
||||||
[state] [text] NOT NULL,
|
|
||||||
CONSTRAINT [last_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[username] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[motd] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[xml] [text] NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [motd_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[username] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[muc_registered] (
|
|
||||||
[jid] [varchar] (255) NOT NULL,
|
|
||||||
[host] [varchar] (255) NOT NULL,
|
|
||||||
[nick] [varchar] (255) NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX [muc_registered_nick] ON [muc_registered] (nick)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [muc_registered_jid_host] ON [muc_registered] (jid, host)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[muc_room] (
|
|
||||||
[name] [varchar] (250) NOT NULL,
|
|
||||||
[host] [varchar] (250) NOT NULL,
|
|
||||||
[opts] [text] NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [muc_room_name_host] ON [muc_room] (name, host)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[muc_online_room] (
|
|
||||||
[name] [varchar] (250) NOT NULL,
|
|
||||||
[host] [varchar] (250) NOT NULL,
|
|
||||||
[node] [text] NOT NULL,
|
|
||||||
[pid] [text] NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [muc_online_room_name_host] ON [muc_online_room] (name, host)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[muc_online_users] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[server] [varchar] (250) NOT NULL,
|
|
||||||
[resource] [varchar] (250) NOT NULL,
|
|
||||||
[name] [varchar] (250) NOT NULL,
|
|
||||||
[host] [varchar] (250) NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [muc_online_users_i] ON [muc_online_users] (username, server, resource, name, host)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [muc_online_users_us] ON [muc_online_users] (username, server);
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[muc_room_subscribers] (
|
|
||||||
[room] [varchar] (191) NOT NULL,
|
|
||||||
[host] [varchar] (191) NOT NULL,
|
|
||||||
[jid] [varchar] (191) NOT NULL,
|
|
||||||
[nick] [text] NOT NULL,
|
|
||||||
[nodes] [text] NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [muc_room_subscribers_host_room_jid] ON [muc_room_subscribers] (host, room, jid);
|
|
||||||
CREATE INDEX [muc_room_subscribers_host_jid] ON [muc_room_subscribers] (host, jid);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[privacy_default_list] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[name] [varchar] (250) NOT NULL,
|
|
||||||
CONSTRAINT [privacy_default_list_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[username] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[privacy_list] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[name] [varchar] (250) NOT NULL,
|
|
||||||
[id] [bigint] IDENTITY(1,1) NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [privacy_list_PK] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[id] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX [privacy_list_username] ON [privacy_list] (username)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX [privacy_list_username_name] ON [privacy_list] (username, name)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[privacy_list_data] (
|
|
||||||
[id] [bigint] NULL,
|
|
||||||
[t] [char] (1) NOT NULL,
|
|
||||||
[value] [text] NOT NULL,
|
|
||||||
[action] [char] (1) NOT NULL,
|
|
||||||
[ord] [smallint] NOT NULL,
|
|
||||||
[match_all] [smallint] NOT NULL,
|
|
||||||
[match_iq] [smallint] NOT NULL,
|
|
||||||
[match_message] [smallint] NOT NULL,
|
|
||||||
[match_presence_in] [smallint] NOT NULL,
|
|
||||||
[match_presence_out] [smallint] NOT NULL
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE CLUSTERED INDEX [privacy_list_data_id] ON [privacy_list_data] (id)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[private_storage] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[namespace] [varchar] (250) NOT NULL,
|
|
||||||
[data] [text] NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE INDEX [private_storage_username] ON [private_storage] (username)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [private_storage_username_namespace] ON [private_storage] (username, namespace)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[pubsub_item] (
|
|
||||||
[nodeid] [bigint] NULL,
|
|
||||||
[itemid] [varchar] (255) NOT NULL,
|
|
||||||
[publisher] [text] NOT NULL,
|
|
||||||
[creation] [varchar] (32) NOT NULL,
|
|
||||||
[modification] [varchar] (32) NOT NULL,
|
|
||||||
[payload] [text] NOT NULL DEFAULT ''
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE INDEX [pubsub_item_itemid] ON [pubsub_item] (itemid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [pubsub_item_nodeid_itemid] ON [pubsub_item] (nodeid, itemid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[pubsub_node_option] (
|
|
||||||
[nodeid] [bigint] NULL,
|
|
||||||
[name] [text] NOT NULL,
|
|
||||||
[val] [text] NOT NULL
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE CLUSTERED INDEX [pubsub_node_option_nodeid] ON [pubsub_node_option] (nodeid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[pubsub_node_owner] (
|
|
||||||
[nodeid] [bigint] NULL,
|
|
||||||
[owner] [text] NOT NULL
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE CLUSTERED INDEX [pubsub_node_owner_nodeid] ON [pubsub_node_owner] (nodeid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[pubsub_state] (
|
|
||||||
[nodeid] [bigint] NULL,
|
|
||||||
[jid] [varchar] (255) NOT NULL,
|
|
||||||
[affiliation] [char] (1) NOT NULL,
|
|
||||||
[subscriptions] [text] NOT NULL DEFAULT '',
|
|
||||||
[stateid] [bigint] IDENTITY(1,1) NOT NULL,
|
|
||||||
CONSTRAINT [pubsub_state_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[stateid] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE INDEX [pubsub_state_jid] ON [pubsub_state] (jid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX [pubsub_state_nodeid_jid] ON [pubsub_state] (nodeid, jid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[pubsub_subscription_opt] (
|
|
||||||
[subid] [varchar] (255) NOT NULL,
|
|
||||||
[opt_name] [varchar] (32) NOT NULL,
|
|
||||||
[opt_value] [text] NOT NULL
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [pubsub_subscription_opt_subid_opt_name] ON [pubsub_subscription_opt] (subid, opt_name)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[pubsub_node] (
|
|
||||||
[host] [varchar] (255) NOT NULL,
|
|
||||||
[node] [varchar] (255) NOT NULL,
|
|
||||||
[parent] [varchar] (255) NOT NULL DEFAULT '',
|
|
||||||
[plugin] [text] NOT NULL,
|
|
||||||
[nodeid] [bigint] IDENTITY(1,1) NOT NULL,
|
|
||||||
CONSTRAINT [pubsub_node_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[nodeid] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE INDEX [pubsub_node_parent] ON [pubsub_node] (parent)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX [pubsub_node_host_node] ON [pubsub_node] (host, node)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[roster_version] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[version] [text] NOT NULL,
|
|
||||||
CONSTRAINT [roster_version_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[username] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[rostergroups] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[jid] [varchar] (250) NOT NULL,
|
|
||||||
[grp] [text] NOT NULL
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE CLUSTERED INDEX [rostergroups_username_jid] ON [rostergroups] ([username], [jid])
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[rosterusers] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[jid] [varchar] (250) NOT NULL,
|
|
||||||
[nick] [text] NOT NULL,
|
|
||||||
[subscription] [char] (1) NOT NULL,
|
|
||||||
[ask] [char] (1) NOT NULL,
|
|
||||||
[askmessage] [text] NOT NULL,
|
|
||||||
[server] [char] (1) NOT NULL,
|
|
||||||
[subscribe] [text] NOT NULL,
|
|
||||||
[type] [text] NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [rosterusers_username_jid] ON [rosterusers] ([username], [jid])
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [rosterusers_username] ON [rosterusers] ([username])
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [rosterusers_jid] ON [rosterusers] ([jid])
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[sm] (
|
|
||||||
[usec] [bigint] NOT NULL,
|
|
||||||
[pid] [varchar] (100) NOT NULL,
|
|
||||||
[node] [varchar] (255) NOT NULL,
|
|
||||||
[username] [varchar] (255) NOT NULL,
|
|
||||||
[resource] [varchar] (255) NOT NULL,
|
|
||||||
[priority] [text] NOT NULL,
|
|
||||||
[info] [text] NOT NULL
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [sm_sid] ON [sm] (usec, pid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [sm_node] ON [sm] (node)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [sm_username] ON [sm] (username)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[spool] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[xml] [text] NOT NULL,
|
|
||||||
[seq] [bigint] IDENTITY(1,1) NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [spool_PK] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[seq] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE INDEX [spool_username] ON [spool] (username)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [spool_created_at] ON [spool] (created_at)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
;
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[sr_group] (
|
|
||||||
[name] [varchar] (250) NOT NULL,
|
|
||||||
[opts] [text] NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [sr_group_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[name] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[sr_user] (
|
|
||||||
[jid] [varchar] (250) NOT NULL,
|
|
||||||
[grp] [varchar] (250) NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [sr_user_jid_group] ON [sr_user] ([jid], [grp])
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [sr_user_jid] ON [sr_user] ([jid])
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [sr_user_grp] ON [sr_user] ([grp])
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[users] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[password] [text] NOT NULL,
|
|
||||||
[serverkey] [text] NOT NULL DEFAULT '',
|
|
||||||
[salt] [text] NOT NULL DEFAULT '',
|
|
||||||
[iterationcount] [smallint] NOT NULL DEFAULT 0,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [users_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[username] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[vcard] (
|
|
||||||
[username] [varchar] (250) NOT NULL,
|
|
||||||
[vcard] [text] NOT NULL,
|
|
||||||
[created_at] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
||||||
CONSTRAINT [vcard_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[username] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
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,
|
|
||||||
CONSTRAINT [vcard_search_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[lusername] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lfn] ON [vcard_search] (lfn)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lfamily] ON [vcard_search] (lfamily)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lgiven] ON [vcard_search] (lgiven)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lmiddle] ON [vcard_search] (lmiddle)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lnickname] ON [vcard_search] (lnickname)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lbday] ON [vcard_search] (lbday)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lctry] ON [vcard_search] (lctry)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_llocality] ON [vcard_search] (llocality)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lemail] ON [vcard_search] (lemail)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lorgname] ON [vcard_search] (lorgname)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [vcard_search_lorgunit] ON [vcard_search] (lorgunit)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_item] WITH CHECK ADD CONSTRAINT [pubsub_item_ibfk_1] FOREIGN KEY([nodeid])
|
|
||||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
|
||||||
ON DELETE CASCADE;
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_item] CHECK CONSTRAINT [pubsub_item_ibfk_1];
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_node_option] WITH CHECK ADD CONSTRAINT [pubsub_node_option_ibfk_1] FOREIGN KEY([nodeid])
|
|
||||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
|
||||||
ON DELETE CASCADE;
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_node_option] CHECK CONSTRAINT [pubsub_node_option_ibfk_1];
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_node_owner] WITH CHECK ADD CONSTRAINT [pubsub_node_owner_ibfk_1] FOREIGN KEY([nodeid])
|
|
||||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
|
||||||
ON DELETE CASCADE;
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_node_owner] CHECK CONSTRAINT [pubsub_node_owner_ibfk_1];
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_state] WITH CHECK ADD CONSTRAINT [pubsub_state_ibfk_1] FOREIGN KEY([nodeid])
|
|
||||||
REFERENCES [dbo].[pubsub_node] ([nodeid])
|
|
||||||
ON DELETE CASCADE;
|
|
||||||
|
|
||||||
ALTER TABLE [dbo].[pubsub_state] CHECK CONSTRAINT [pubsub_state_ibfk_1];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[oauth_token] (
|
|
||||||
[token] [varchar] (250) NOT NULL,
|
|
||||||
[jid] [text] NOT NULL,
|
|
||||||
[scope] [text] NOT NULL,
|
|
||||||
[expire] [bigint] NOT NULL,
|
|
||||||
CONSTRAINT [oauth_token_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[token] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[route] (
|
|
||||||
[domain] [varchar] (255) NOT NULL,
|
|
||||||
[server_host] [varchar] (255) NOT NULL,
|
|
||||||
[node] [varchar] (255) NOT NULL,
|
|
||||||
[pid] [varchar](100) NOT NULL,
|
|
||||||
[local_hint] [text] NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [route_i] ON [route] (domain, server_host, node, pid)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [route_domain] ON [route] (domain)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[bosh] (
|
|
||||||
[sid] [varchar] (255) NOT NULL,
|
|
||||||
[node] [varchar] (255) NOT NULL,
|
|
||||||
[pid] [varchar](100) NOT NULL
|
|
||||||
CONSTRAINT [bosh_PRIMARY] PRIMARY KEY CLUSTERED
|
|
||||||
(
|
|
||||||
[sid] ASC
|
|
||||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
||||||
) TEXTIMAGE_ON [PRIMARY];
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[carboncopy] (
|
|
||||||
[username] [varchar] (255) NOT NULL,
|
|
||||||
[resource] [varchar] (255) NOT NULL,
|
|
||||||
[namespace] [varchar] (255) NOT NULL,
|
|
||||||
[node] [varchar] (255) NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [carboncopy_ur] ON [carboncopy] (username, resource)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE INDEX [carboncopy_user] ON [carboncopy] (username)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE TABLE [dbo].[push_session] (
|
|
||||||
[username] [varchar] (255) NOT NULL,
|
|
||||||
[timestamp] [bigint] NOT NULL,
|
|
||||||
[service] [varchar] (255) NOT NULL,
|
|
||||||
[node] [varchar] (255) NOT NULL,
|
|
||||||
[xml] [varchar] (255) NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [i_push_usn] ON [push_session] (username, service, node)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
||||||
|
|
||||||
CREATE UNIQUE CLUSTERED INDEX [i_push_ut] ON [push_session] (username, timestamp)
|
|
||||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON);
|
|
@ -1,439 +0,0 @@
|
|||||||
--
|
|
||||||
-- ejabberd, Copyright (C) 2002-2017 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.,
|
|
||||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE TABLE users (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
password text NOT NULL,
|
|
||||||
serverkey varchar(64) NOT NULL DEFAULT '',
|
|
||||||
salt varchar(64) NOT NULL DEFAULT '',
|
|
||||||
iterationcount integer NOT NULL DEFAULT 0,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host(191), username)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- Add support for SCRAM auth to a database created before ejabberd 16.03:
|
|
||||||
-- ALTER TABLE users ADD COLUMN serverkey varchar(64) NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN salt varchar(64) NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN iterationcount integer NOT NULL DEFAULT 0;
|
|
||||||
|
|
||||||
CREATE TABLE last (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
seconds text NOT NULL,
|
|
||||||
state text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host(191), username)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE rosterusers (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
jid varchar(191) 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
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers(server_host(191), username(75), jid(75));
|
|
||||||
CREATE INDEX i_rosteru_sh_username ON rosterusers(server_host(191), username);
|
|
||||||
CREATE INDEX i_rosteru_sh_jid ON rosterusers(server_host(191), jid);
|
|
||||||
|
|
||||||
CREATE TABLE rostergroups (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
jid varchar(191) NOT NULL,
|
|
||||||
grp text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_rosterg_sh_user_jid ON rostergroups(server_host(191), username(75), jid(75));
|
|
||||||
|
|
||||||
CREATE TABLE sr_group (
|
|
||||||
name varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
opts text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host(191), name)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE sr_user (
|
|
||||||
jid varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
grp varchar(191) NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host(191), jid, grp)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_sr_user_sh_jid ON sr_user(server_host(191), jid);
|
|
||||||
CREATE INDEX i_sr_user_sh_grp ON sr_user(server_host(191), grp);
|
|
||||||
|
|
||||||
CREATE TABLE spool (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
xml BLOB NOT NULL,
|
|
||||||
seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_spool_sh_username USING BTREE ON spool(server_host(191), username);
|
|
||||||
CREATE INDEX i_spool_created_at USING BTREE ON spool(created_at);
|
|
||||||
|
|
||||||
CREATE TABLE archive (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
timestamp BIGINT UNSIGNED NOT NULL,
|
|
||||||
peer varchar(191) NOT NULL,
|
|
||||||
bare_peer varchar(191) NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
txt text,
|
|
||||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
|
|
||||||
kind varchar(10),
|
|
||||||
nick varchar(191),
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE FULLTEXT INDEX i_text ON archive(txt);
|
|
||||||
CREATE INDEX i_archive_sh_username_timestamp USING BTREE ON archive(server_host(191), username(191), timestamp);
|
|
||||||
CREATE INDEX i_archive_sh_username_peer USING BTREE ON archive(server_host(191), username(191), peer(191));
|
|
||||||
CREATE INDEX i_archive_sh_username_bare_peer USING BTREE ON archive(server_host(191), username(191), bare_peer(191));
|
|
||||||
CREATE INDEX i_archive_sh_timestamp USING BTREE ON archive(server_host(191), timestamp);
|
|
||||||
|
|
||||||
CREATE TABLE archive_prefs (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
def text NOT NULL,
|
|
||||||
always text NOT NULL,
|
|
||||||
never text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host(191), username)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE vcard (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
vcard mediumtext NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host(191), username)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE vcard_search (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
lusername varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
fn text NOT NULL,
|
|
||||||
lfn varchar(191) NOT NULL,
|
|
||||||
family text NOT NULL,
|
|
||||||
lfamily varchar(191) NOT NULL,
|
|
||||||
given text NOT NULL,
|
|
||||||
lgiven varchar(191) NOT NULL,
|
|
||||||
middle text NOT NULL,
|
|
||||||
lmiddle varchar(191) NOT NULL,
|
|
||||||
nickname text NOT NULL,
|
|
||||||
lnickname varchar(191) NOT NULL,
|
|
||||||
bday text NOT NULL,
|
|
||||||
lbday varchar(191) NOT NULL,
|
|
||||||
ctry text NOT NULL,
|
|
||||||
lctry varchar(191) NOT NULL,
|
|
||||||
locality text NOT NULL,
|
|
||||||
llocality varchar(191) NOT NULL,
|
|
||||||
email text NOT NULL,
|
|
||||||
lemail varchar(191) NOT NULL,
|
|
||||||
orgname text NOT NULL,
|
|
||||||
lorgname varchar(191) NOT NULL,
|
|
||||||
orgunit text NOT NULL,
|
|
||||||
lorgunit varchar(191) NOT NULL,
|
|
||||||
PRIMARY KEY (server_host(191), lusername)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_vcard_search_sh_lfn ON vcard_search(server_host(191), lfn);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lfamily ON vcard_search(server_host(191), lfamily);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lgiven ON vcard_search(server_host(191), lgiven);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lmiddle ON vcard_search(server_host(191), lmiddle);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lnickname ON vcard_search(server_host(191), lnickname);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lbday ON vcard_search(server_host(191), lbday);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lctry ON vcard_search(server_host(191), lctry);
|
|
||||||
CREATE INDEX i_vcard_search_sh_llocality ON vcard_search(server_host(191), llocality);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lemail ON vcard_search(server_host(191), lemail);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lorgname ON vcard_search(server_host(191), lorgname);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lorgunit ON vcard_search(server_host(191), lorgunit);
|
|
||||||
|
|
||||||
CREATE TABLE privacy_default_list (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
name varchar(191) NOT NULL,
|
|
||||||
PRIMARY KEY (server_host(191), username)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE privacy_list (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
name varchar(191) NOT NULL,
|
|
||||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_privacy_list_sh_username USING BTREE ON privacy_list(server_host(191), username);
|
|
||||||
CREATE UNIQUE INDEX i_privacy_list_sh_username_name USING BTREE ON privacy_list (server_host(191), 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
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_privacy_list_data_id ON privacy_list_data(id);
|
|
||||||
|
|
||||||
CREATE TABLE private_storage (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
namespace varchar(191) NOT NULL,
|
|
||||||
data text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host(191), username, namespace)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_private_storage_sh_username USING BTREE ON private_storage(server_host(191), username);
|
|
||||||
|
|
||||||
-- Not tested in mysql
|
|
||||||
CREATE TABLE roster_version (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
version text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host(191), username)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- 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 NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
parent VARCHAR(191) NOT NULL DEFAULT '',
|
|
||||||
plugin text NOT NULL,
|
|
||||||
nodeid bigint auto_increment primary key
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
val text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
affiliation character(1),
|
|
||||||
subscriptions VARCHAR(191) NOT NULL DEFAULT '',
|
|
||||||
stateid bigint auto_increment primary key
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
publisher text NOT NULL,
|
|
||||||
creation varchar(32) NOT NULL,
|
|
||||||
modification varchar(32) NOT NULL,
|
|
||||||
payload text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
opt_name varchar(32),
|
|
||||||
opt_value text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
opts mediumtext NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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 muc_online_room (
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_room_name_host USING BTREE ON muc_online_room(name(75), host(75));
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_users USING BTREE ON muc_online_users(username(75), server(75), resource(75), name(75), host(75));
|
|
||||||
CREATE INDEX i_muc_online_users_us USING BTREE ON muc_online_users(username(75), server(75));
|
|
||||||
|
|
||||||
CREATE TABLE muc_room_subscribers (
|
|
||||||
room varchar(191) NOT NULL,
|
|
||||||
host varchar(191) NOT NULL,
|
|
||||||
jid varchar(191) NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
nodes text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
UNIQUE KEY i_muc_room_subscribers_host_room_jid (host, room, jid)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_room_subscribers_host_jid USING BTREE ON muc_room_subscribers(host, jid);
|
|
||||||
|
|
||||||
CREATE TABLE motd (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
xml text,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (server_host(191), username)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE caps_features (
|
|
||||||
node varchar(191) NOT NULL,
|
|
||||||
subnode varchar(191) NOT NULL,
|
|
||||||
feature text,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_caps_features_node_subnode ON caps_features(node(75), subnode(75));
|
|
||||||
|
|
||||||
CREATE TABLE sm (
|
|
||||||
usec bigint NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
resource varchar(191) NOT NULL,
|
|
||||||
priority text NOT NULL,
|
|
||||||
info text NOT NULL,
|
|
||||||
PRIMARY KEY (usec, pid(75))
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_sm_node ON sm(node(75));
|
|
||||||
CREATE INDEX i_sm_sh_username ON sm(server_host(191), username);
|
|
||||||
|
|
||||||
CREATE TABLE oauth_token (
|
|
||||||
token varchar(191) NOT NULL PRIMARY KEY,
|
|
||||||
jid text NOT NULL,
|
|
||||||
scope text NOT NULL,
|
|
||||||
expire bigint NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE route (
|
|
||||||
domain text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
local_hint text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_route ON route(domain(75), server_host(75), node(75), pid(75));
|
|
||||||
CREATE INDEX i_route_domain ON route(domain(75));
|
|
||||||
|
|
||||||
CREATE TABLE bosh (
|
|
||||||
sid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_bosh_sid ON bosh(sid(75));
|
|
||||||
|
|
||||||
CREATE TABLE carboncopy (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host(191), username(191), resource(191))
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_carboncopy_sh_user ON carboncopy (server_host(191), username(75));
|
|
||||||
|
|
||||||
CREATE TABLE proxy65 (
|
|
||||||
sid text NOT NULL,
|
|
||||||
pid_t text NOT NULL,
|
|
||||||
pid_i text NOT NULL,
|
|
||||||
node_t text NOT NULL,
|
|
||||||
node_i text NOT NULL,
|
|
||||||
jid_i text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_proxy65_sid ON proxy65 (sid(191));
|
|
||||||
CREATE INDEX i_proxy65_jid ON proxy65 (jid_i(191));
|
|
||||||
|
|
||||||
CREATE TABLE push_session (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
timestamp bigint NOT NULL,
|
|
||||||
service text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host(191), username(191), timestamp)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_push_session_susn ON push_session (server_host(191), username(191), service(191), node(191));
|
|
407
sql/mysql.sql
407
sql/mysql.sql
@ -1,407 +0,0 @@
|
|||||||
--
|
|
||||||
-- ejabberd, Copyright (C) 2002-2017 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.,
|
|
||||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE TABLE users (
|
|
||||||
username varchar(191) PRIMARY KEY,
|
|
||||||
password text NOT NULL,
|
|
||||||
serverkey varchar(64) NOT NULL DEFAULT '',
|
|
||||||
salt varchar(64) NOT NULL DEFAULT '',
|
|
||||||
iterationcount integer NOT NULL DEFAULT 0,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- Add support for SCRAM auth to a database created before ejabberd 16.03:
|
|
||||||
-- ALTER TABLE users ADD COLUMN serverkey varchar(64) NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN salt varchar(64) NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN iterationcount integer NOT NULL DEFAULT 0;
|
|
||||||
|
|
||||||
CREATE TABLE last (
|
|
||||||
username varchar(191) PRIMARY KEY,
|
|
||||||
seconds text NOT NULL,
|
|
||||||
state text NOT NULl
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE rosterusers (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
jid varchar(191) 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
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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(191) NOT NULL,
|
|
||||||
jid varchar(191) NOT NULL,
|
|
||||||
grp text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX pk_rosterg_user_jid ON rostergroups(username(75), jid(75));
|
|
||||||
|
|
||||||
CREATE TABLE sr_group (
|
|
||||||
name varchar(191) NOT NULL,
|
|
||||||
opts text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE sr_user (
|
|
||||||
jid varchar(191) NOT NULL,
|
|
||||||
grp varchar(191) NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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(191) NOT NULL,
|
|
||||||
xml BLOB NOT NULL,
|
|
||||||
seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_despool USING BTREE ON spool(username);
|
|
||||||
CREATE INDEX i_spool_created_at USING BTREE ON spool(created_at);
|
|
||||||
|
|
||||||
CREATE TABLE archive (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
timestamp BIGINT UNSIGNED NOT NULL,
|
|
||||||
peer varchar(191) NOT NULL,
|
|
||||||
bare_peer varchar(191) NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
txt text,
|
|
||||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
|
|
||||||
kind varchar(10),
|
|
||||||
nick varchar(191),
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE FULLTEXT INDEX i_text ON archive(txt);
|
|
||||||
CREATE INDEX i_username_timestamp USING BTREE ON archive(username(191), timestamp);
|
|
||||||
CREATE INDEX i_username_peer USING BTREE ON archive(username(191), peer(191));
|
|
||||||
CREATE INDEX i_username_bare_peer USING BTREE ON archive(username(191), bare_peer(191));
|
|
||||||
CREATE INDEX i_timestamp USING BTREE ON archive(timestamp);
|
|
||||||
|
|
||||||
CREATE TABLE archive_prefs (
|
|
||||||
username varchar(191) NOT NULL PRIMARY KEY,
|
|
||||||
def text NOT NULL,
|
|
||||||
always text NOT NULL,
|
|
||||||
never text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE vcard (
|
|
||||||
username varchar(191) PRIMARY KEY,
|
|
||||||
vcard mediumtext NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE vcard_search (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
lusername varchar(191) PRIMARY KEY,
|
|
||||||
fn text NOT NULL,
|
|
||||||
lfn varchar(191) NOT NULL,
|
|
||||||
family text NOT NULL,
|
|
||||||
lfamily varchar(191) NOT NULL,
|
|
||||||
given text NOT NULL,
|
|
||||||
lgiven varchar(191) NOT NULL,
|
|
||||||
middle text NOT NULL,
|
|
||||||
lmiddle varchar(191) NOT NULL,
|
|
||||||
nickname text NOT NULL,
|
|
||||||
lnickname varchar(191) NOT NULL,
|
|
||||||
bday text NOT NULL,
|
|
||||||
lbday varchar(191) NOT NULL,
|
|
||||||
ctry text NOT NULL,
|
|
||||||
lctry varchar(191) NOT NULL,
|
|
||||||
locality text NOT NULL,
|
|
||||||
llocality varchar(191) NOT NULL,
|
|
||||||
email text NOT NULL,
|
|
||||||
lemail varchar(191) NOT NULL,
|
|
||||||
orgname text NOT NULL,
|
|
||||||
lorgname varchar(191) NOT NULL,
|
|
||||||
orgunit text NOT NULL,
|
|
||||||
lorgunit varchar(191) NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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(191) PRIMARY KEY,
|
|
||||||
name varchar(191) NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE privacy_list (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
name varchar(191) NOT NULL,
|
|
||||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_privacy_list_data_id ON privacy_list_data(id);
|
|
||||||
|
|
||||||
CREATE TABLE private_storage (
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
namespace varchar(191) NOT NULL,
|
|
||||||
data text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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(191) PRIMARY KEY,
|
|
||||||
version text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- 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 NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
parent VARCHAR(191) NOT NULL DEFAULT '',
|
|
||||||
plugin text NOT NULL,
|
|
||||||
nodeid bigint auto_increment primary key
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
val text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
affiliation character(1),
|
|
||||||
subscriptions VARCHAR(191) NOT NULL DEFAULT '',
|
|
||||||
stateid bigint auto_increment primary key
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
publisher text NOT NULL,
|
|
||||||
creation varchar(32) NOT NULL,
|
|
||||||
modification varchar(32) NOT NULL,
|
|
||||||
payload text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 NOT NULL,
|
|
||||||
opt_name varchar(32),
|
|
||||||
opt_value text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
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 mediumtext NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
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 muc_online_room (
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_room_name_host USING BTREE ON muc_online_room(name(75), host(75));
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_users USING BTREE ON muc_online_users(username(75), server(75), resource(75), name(75), host(75));
|
|
||||||
CREATE INDEX i_muc_online_users_us USING BTREE ON muc_online_users(username(75), server(75));
|
|
||||||
|
|
||||||
CREATE TABLE muc_room_subscribers (
|
|
||||||
room varchar(191) NOT NULL,
|
|
||||||
host varchar(191) NOT NULL,
|
|
||||||
jid varchar(191) NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
nodes text NOT NULL,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
UNIQUE KEY i_muc_room_subscribers_host_room_jid (host, room, jid)
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_room_subscribers_host_jid USING BTREE ON muc_room_subscribers(host, jid);
|
|
||||||
|
|
||||||
CREATE TABLE motd (
|
|
||||||
username varchar(191) PRIMARY KEY,
|
|
||||||
xml text,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE caps_features (
|
|
||||||
node varchar(191) NOT NULL,
|
|
||||||
subnode varchar(191) NOT NULL,
|
|
||||||
feature text,
|
|
||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE INDEX i_caps_features_node_subnode ON caps_features(node(75), subnode(75));
|
|
||||||
|
|
||||||
CREATE TABLE sm (
|
|
||||||
usec bigint NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
username varchar(191) NOT NULL,
|
|
||||||
resource varchar(191) NOT NULL,
|
|
||||||
priority text NOT NULL,
|
|
||||||
info text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_sid ON sm(usec, pid(75));
|
|
||||||
CREATE INDEX i_node ON sm(node(75));
|
|
||||||
CREATE INDEX i_username ON sm(username);
|
|
||||||
|
|
||||||
CREATE TABLE oauth_token (
|
|
||||||
token varchar(191) NOT NULL PRIMARY KEY,
|
|
||||||
jid text NOT NULL,
|
|
||||||
scope text NOT NULL,
|
|
||||||
expire bigint NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE TABLE route (
|
|
||||||
domain text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
local_hint text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_route ON route(domain(75), server_host(75), node(75), pid(75));
|
|
||||||
CREATE INDEX i_route_domain ON route(domain(75));
|
|
||||||
|
|
||||||
CREATE TABLE bosh (
|
|
||||||
sid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_bosh_sid ON bosh(sid(75));
|
|
||||||
|
|
||||||
CREATE TABLE carboncopy (
|
|
||||||
username text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_carboncopy_ur ON carboncopy (username(75), resource(75));
|
|
||||||
CREATE INDEX i_carboncopy_user ON carboncopy (username(75));
|
|
||||||
|
|
||||||
CREATE TABLE proxy65 (
|
|
||||||
sid text NOT NULL,
|
|
||||||
pid_t text NOT NULL,
|
|
||||||
pid_i text NOT NULL,
|
|
||||||
node_t text NOT NULL,
|
|
||||||
node_i text NOT NULL,
|
|
||||||
jid_i text NOT NULL
|
|
||||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_proxy65_sid ON proxy65 (sid(191));
|
|
||||||
CREATE INDEX i_proxy65_jid ON proxy65 (jid_i(191));
|
|
||||||
|
|
||||||
CREATE TABLE push_session (
|
|
||||||
username text NOT NULL,
|
|
||||||
timestamp bigint NOT NULL,
|
|
||||||
service text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
xml text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_push_usn ON push_session (username(191), service(191), node(191));
|
|
||||||
CREATE UNIQUE INDEX i_push_ut ON push_session (username(191), timestamp);
|
|
591
sql/pg.new.sql
591
sql/pg.new.sql
@ -1,591 +0,0 @@
|
|||||||
--
|
|
||||||
-- ejabberd, Copyright (C) 2002-2017 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.,
|
|
||||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
--
|
|
||||||
|
|
||||||
-- To update from the old schema, replace <HOST> with the host's domain:
|
|
||||||
|
|
||||||
-- ALTER TABLE users ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE users DROP CONSTRAINT users_pkey;
|
|
||||||
-- ALTER TABLE users ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- ALTER TABLE users ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE last ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE last DROP CONSTRAINT last_pkey;
|
|
||||||
-- ALTER TABLE last ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- ALTER TABLE last ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE rosterusers ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_rosteru_user_jid;
|
|
||||||
-- DROP INDEX i_rosteru_username;
|
|
||||||
-- DROP INDEX i_rosteru_jid;
|
|
||||||
-- CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers USING btree (server_host, username, jid);
|
|
||||||
-- CREATE INDEX i_rosteru_sh_username ON rosterusers USING btree (server_host, username);
|
|
||||||
-- CREATE INDEX i_rosteru_sh_jid ON rosterusers USING btree (server_host, jid);
|
|
||||||
-- ALTER TABLE rosterusers ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE rostergroups ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX pk_rosterg_user_jid;
|
|
||||||
-- CREATE INDEX i_rosterg_sh_user_jid ON rostergroups USING btree (server_host, username, jid);
|
|
||||||
-- ALTER TABLE rostergroups ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE sr_group ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE sr_group ADD PRIMARY KEY (server_host, name);
|
|
||||||
-- ALTER TABLE sr_group ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE sr_user ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_sr_user_jid_grp;
|
|
||||||
-- DROP INDEX i_sr_user_jid;
|
|
||||||
-- DROP INDEX i_sr_user_grp;
|
|
||||||
-- ALTER TABLE sr_user ADD PRIMARY KEY (server_host, jid, grp);
|
|
||||||
-- CREATE INDEX i_sr_user_sh_jid ON sr_user USING btree (server_host, jid);
|
|
||||||
-- CREATE INDEX i_sr_user_sh_grp ON sr_user USING btree (server_host, grp);
|
|
||||||
-- ALTER TABLE sr_user ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE spool ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_despool;
|
|
||||||
-- CREATE INDEX i_spool_sh_username ON spool USING btree (server_host, username);
|
|
||||||
-- ALTER TABLE spool ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE archive ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_username_timestamp;
|
|
||||||
-- DROP INDEX i_username_peer;
|
|
||||||
-- DROP INDEX i_username_bare_peer;
|
|
||||||
-- DROP INDEX i_timestamp;
|
|
||||||
-- CREATE INDEX i_archive_sh_username_timestamp ON archive USING btree (server_host, username, timestamp);
|
|
||||||
-- CREATE INDEX i_archive_sh_username_peer ON archive USING btree (server_host, username, peer);
|
|
||||||
-- CREATE INDEX i_archive_sh_username_bare_peer ON archive USING btree (server_host, username, bare_peer);
|
|
||||||
-- CREATE INDEX i_archive_sh_timestamp ON archive USING btree (server_host, timestamp);
|
|
||||||
-- ALTER TABLE archive ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE archive_prefs ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE archive_prefs DROP CONSTRAINT archive_prefs_pkey;
|
|
||||||
-- ALTER TABLE archive_prefs ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- ALTER TABLE archive_prefs ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE vcard ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE vcard DROP CONSTRAINT vcard_pkey;
|
|
||||||
-- ALTER TABLE vcard ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- ALTER TABLE vcard ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE vcard_search ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE vcard_search DROP CONSTRAINT vcard_search_pkey;
|
|
||||||
-- DROP INDEX i_vcard_search_lfn;
|
|
||||||
-- DROP INDEX i_vcard_search_lfamily;
|
|
||||||
-- DROP INDEX i_vcard_search_lgiven;
|
|
||||||
-- DROP INDEX i_vcard_search_lmiddle;
|
|
||||||
-- DROP INDEX i_vcard_search_lnickname;
|
|
||||||
-- DROP INDEX i_vcard_search_lbday;
|
|
||||||
-- DROP INDEX i_vcard_search_lctry;
|
|
||||||
-- DROP INDEX i_vcard_search_llocality;
|
|
||||||
-- DROP INDEX i_vcard_search_lemail;
|
|
||||||
-- DROP INDEX i_vcard_search_lorgname;
|
|
||||||
-- DROP INDEX i_vcard_search_lorgunit;
|
|
||||||
-- ALTER TABLE vcard_search ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lfn ON vcard_search(server_host, lfn);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lfamily ON vcard_search(server_host, lfamily);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lgiven ON vcard_search(server_host, lgiven);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lmiddle ON vcard_search(server_host, lmiddle);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lnickname ON vcard_search(server_host, lnickname);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lbday ON vcard_search(server_host, lbday);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lctry ON vcard_search(server_host, lctry);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_llocality ON vcard_search(server_host, llocality);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lemail ON vcard_search(server_host, lemail);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lorgname ON vcard_search(server_host, lorgname);
|
|
||||||
-- CREATE INDEX i_vcard_search_sh_lorgunit ON vcard_search(server_host, lorgunit);
|
|
||||||
-- ALTER TABLE vcard_search ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE privacy_default_list ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE privacy_default_list DROP CONSTRAINT privacy_default_list_pkey;
|
|
||||||
-- ALTER TABLE privacy_default_list ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- ALTER TABLE privacy_default_list ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE privacy_list ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_privacy_list_username;
|
|
||||||
-- DROP INDEX i_privacy_list_username_name;
|
|
||||||
-- CREATE INDEX i_privacy_list_sh_username ON privacy_list USING btree (server_host, username);
|
|
||||||
-- CREATE UNIQUE INDEX i_privacy_list_sh_username_name ON privacy_list USING btree (server_host, username, name);
|
|
||||||
-- ALTER TABLE privacy_list ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE private_storage ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_private_storage_username;
|
|
||||||
-- DROP INDEX i_private_storage_username_namespace;
|
|
||||||
-- ALTER TABLE private_storage ADD PRIMARY KEY (server_host, username, namespace);
|
|
||||||
-- CREATE INDEX i_private_storage_sh_username ON private_storage USING btree (server_host, username);
|
|
||||||
-- ALTER TABLE private_storage ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE roster_version ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE roster_version DROP CONSTRAINT roster_version_pkey;
|
|
||||||
-- ALTER TABLE roster_version ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- ALTER TABLE roster_version ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE muc_room ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE muc_room ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE muc_registered ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE muc_registered ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE muc_online_room ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE muc_online_room ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE muc_online_users ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE muc_online_users ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE motd ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- ALTER TABLE motd DROP CONSTRAINT motd_pkey;
|
|
||||||
-- ALTER TABLE motd ADD PRIMARY KEY (server_host, username);
|
|
||||||
-- ALTER TABLE motd ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE sm ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_sm_sid;
|
|
||||||
-- DROP INDEX i_sm_username;
|
|
||||||
-- ALTER TABLE sm ADD PRIMARY KEY (usec, pid);
|
|
||||||
-- CREATE INDEX i_sm_sh_username ON sm USING btree (server_host, username);
|
|
||||||
-- ALTER TABLE sm ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
-- ALTER TABLE carboncopy ADD COLUMN server_host text NOT NULL DEFAULT '<HOST>';
|
|
||||||
-- DROP INDEX i_carboncopy_ur;
|
|
||||||
-- DROP INDEX i_carboncopy_user;
|
|
||||||
-- ALTER TABLE carboncopy ADD PRIMARY KEY (server_host, username, resource);
|
|
||||||
-- CREATE INDEX i_carboncopy_sh_user ON carboncopy USING btree (server_host, username);
|
|
||||||
-- ALTER TABLE carboncopy ALTER COLUMN server_host DROP DEFAULT;
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
"password" text NOT NULL,
|
|
||||||
serverkey text NOT NULL DEFAULT '',
|
|
||||||
salt text NOT NULL DEFAULT '',
|
|
||||||
iterationcount integer NOT NULL DEFAULT 0,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Add support for SCRAM auth to a database created before ejabberd 16.03:
|
|
||||||
-- ALTER TABLE users ADD COLUMN serverkey text NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN salt text NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN iterationcount integer NOT NULL DEFAULT 0;
|
|
||||||
|
|
||||||
CREATE TABLE last (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
seconds text NOT NULL,
|
|
||||||
state text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE rosterusers (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host 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 NOT NULL,
|
|
||||||
"type" text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_rosteru_sh_user_jid ON rosterusers USING btree (server_host, username, jid);
|
|
||||||
CREATE INDEX i_rosteru_sh_username ON rosterusers USING btree (server_host, username);
|
|
||||||
CREATE INDEX i_rosteru_sh_jid ON rosterusers USING btree (server_host, jid);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE rostergroups (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
grp text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_rosterg_sh_user_jid ON rostergroups USING btree (server_host, username, jid);
|
|
||||||
|
|
||||||
CREATE TABLE sr_group (
|
|
||||||
name text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
opts text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
||||||
PRIMARY KEY (server_host, name)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE sr_user (
|
|
||||||
jid text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
grp text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
||||||
PRIMARY KEY (server_host, jid, grp)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_sr_user_sh_jid ON sr_user USING btree (server_host, jid);
|
|
||||||
CREATE INDEX i_sr_user_sh_grp ON sr_user USING btree (server_host, grp);
|
|
||||||
|
|
||||||
CREATE TABLE spool (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
seq SERIAL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_spool_sh_username ON spool USING btree (server_host, username);
|
|
||||||
|
|
||||||
CREATE TABLE archive (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
timestamp BIGINT NOT NULL,
|
|
||||||
peer text NOT NULL,
|
|
||||||
bare_peer text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
txt text,
|
|
||||||
id SERIAL,
|
|
||||||
kind text,
|
|
||||||
nick text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_archive_sh_username_timestamp ON archive USING btree (server_host, username, timestamp);
|
|
||||||
CREATE INDEX i_archive_sh_username_peer ON archive USING btree (server_host, username, peer);
|
|
||||||
CREATE INDEX i_archive_sh_username_bare_peer ON archive USING btree (server_host, username, bare_peer);
|
|
||||||
CREATE INDEX i_archive_sh_timestamp ON archive USING btree (server_host, timestamp);
|
|
||||||
|
|
||||||
CREATE TABLE archive_prefs (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
def text NOT NULL,
|
|
||||||
always text NOT NULL,
|
|
||||||
never text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE vcard (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
vcard text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE vcard_search (
|
|
||||||
username text NOT NULL,
|
|
||||||
lusername text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
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,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_vcard_search_sh_lfn ON vcard_search(server_host, lfn);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lfamily ON vcard_search(server_host, lfamily);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lgiven ON vcard_search(server_host, lgiven);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lmiddle ON vcard_search(server_host, lmiddle);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lnickname ON vcard_search(server_host, lnickname);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lbday ON vcard_search(server_host, lbday);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lctry ON vcard_search(server_host, lctry);
|
|
||||||
CREATE INDEX i_vcard_search_sh_llocality ON vcard_search(server_host, llocality);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lemail ON vcard_search(server_host, lemail);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lorgname ON vcard_search(server_host, lorgname);
|
|
||||||
CREATE INDEX i_vcard_search_sh_lorgunit ON vcard_search(server_host, lorgunit);
|
|
||||||
|
|
||||||
CREATE TABLE privacy_default_list (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE privacy_list (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
id SERIAL UNIQUE,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_privacy_list_sh_username ON privacy_list USING btree (server_host, username);
|
|
||||||
CREATE UNIQUE INDEX i_privacy_list_sh_username_name ON privacy_list USING btree (server_host, 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 INDEX i_privacy_list_data_id ON privacy_list_data USING btree (id);
|
|
||||||
|
|
||||||
CREATE TABLE private_storage (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
data text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
||||||
PRIMARY KEY (server_host, username, namespace)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_private_storage_sh_username ON private_storage USING btree (server_host, username);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE roster_version (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
version text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- 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 NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
parent text NOT NULL DEFAULT '',
|
|
||||||
plugin text NOT NULL,
|
|
||||||
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 NOT NULL,
|
|
||||||
val text NOT NULL
|
|
||||||
);
|
|
||||||
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 NOT NULL
|
|
||||||
);
|
|
||||||
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 NOT NULL,
|
|
||||||
affiliation character(1),
|
|
||||||
subscriptions text NOT NULL DEFAULT '',
|
|
||||||
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 NOT NULL,
|
|
||||||
publisher text NOT NULL,
|
|
||||||
creation varchar(32) NOT NULL,
|
|
||||||
modification varchar(32) NOT NULL,
|
|
||||||
payload text NOT NULL DEFAULT ''
|
|
||||||
);
|
|
||||||
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 NOT NULL,
|
|
||||||
opt_name varchar(32),
|
|
||||||
opt_value text NOT NULL
|
|
||||||
);
|
|
||||||
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,
|
|
||||||
server_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,
|
|
||||||
server_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 muc_online_room (
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_room_name_host ON muc_online_room USING btree (name, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users USING btree (username, server, resource, name, host);
|
|
||||||
CREATE INDEX i_muc_online_users_us ON muc_online_users USING btree (username, server);
|
|
||||||
|
|
||||||
CREATE TABLE muc_room_subscribers (
|
|
||||||
room text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
nodes text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_room_subscribers_host_jid ON muc_room_subscribers USING btree (host, jid);
|
|
||||||
CREATE UNIQUE INDEX i_muc_room_subscribers_host_room_jid ON muc_room_subscribers USING btree (host, room, jid);
|
|
||||||
|
|
||||||
CREATE TABLE motd (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
xml text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
||||||
PRIMARY KEY (server_host, username)
|
|
||||||
);
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
CREATE TABLE sm (
|
|
||||||
usec bigint NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
priority text NOT NULL,
|
|
||||||
info text NOT NULL,
|
|
||||||
PRIMARY KEY (usec, pid)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_sm_node ON sm USING btree (node);
|
|
||||||
CREATE INDEX i_sm_sh_username ON sm USING btree (server_host, username);
|
|
||||||
|
|
||||||
CREATE TABLE oauth_token (
|
|
||||||
token text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
scope text NOT NULL,
|
|
||||||
expire bigint NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_oauth_token_token ON oauth_token USING btree (token);
|
|
||||||
|
|
||||||
CREATE TABLE route (
|
|
||||||
domain text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
local_hint text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_route ON route USING btree (domain, server_host, node, pid);
|
|
||||||
CREATE INDEX i_route_domain ON route USING btree (domain);
|
|
||||||
|
|
||||||
CREATE TABLE bosh (
|
|
||||||
sid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_bosh_sid ON bosh USING btree (sid);
|
|
||||||
|
|
||||||
CREATE TABLE carboncopy (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username, resource)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_carboncopy_sh_user ON carboncopy USING btree (server_host, username);
|
|
||||||
|
|
||||||
CREATE TABLE proxy65 (
|
|
||||||
sid text NOT NULL,
|
|
||||||
pid_t text NOT NULL,
|
|
||||||
pid_i text NOT NULL,
|
|
||||||
node_t text NOT NULL,
|
|
||||||
node_i text NOT NULL,
|
|
||||||
jid_i text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_proxy65_sid ON proxy65 USING btree (sid);
|
|
||||||
CREATE INDEX i_proxy65_jid ON proxy65 USING btree (jid_i);
|
|
||||||
|
|
||||||
CREATE TABLE push_session (
|
|
||||||
username text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
timestamp bigint NOT NULL,
|
|
||||||
service text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
PRIMARY KEY (server_host, username, timestamp)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_push_session_susn ON push_session USING btree (server_host, username, service, node);
|
|
411
sql/pg.sql
411
sql/pg.sql
@ -1,411 +0,0 @@
|
|||||||
--
|
|
||||||
-- ejabberd, Copyright (C) 2002-2017 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.,
|
|
||||||
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE TABLE users (
|
|
||||||
username text PRIMARY KEY,
|
|
||||||
"password" text NOT NULL,
|
|
||||||
serverkey text NOT NULL DEFAULT '',
|
|
||||||
salt text NOT NULL DEFAULT '',
|
|
||||||
iterationcount integer NOT NULL DEFAULT 0,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Add support for SCRAM auth to a database created before ejabberd 16.03:
|
|
||||||
-- ALTER TABLE users ADD COLUMN serverkey text NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN salt text NOT NULL DEFAULT '';
|
|
||||||
-- ALTER TABLE users ADD COLUMN iterationcount integer NOT NULL DEFAULT 0;
|
|
||||||
|
|
||||||
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 NOT NULL,
|
|
||||||
"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 archive (
|
|
||||||
username text NOT NULL,
|
|
||||||
timestamp BIGINT NOT NULL,
|
|
||||||
peer text NOT NULL,
|
|
||||||
bare_peer text NOT NULL,
|
|
||||||
xml text NOT NULL,
|
|
||||||
txt text,
|
|
||||||
id SERIAL,
|
|
||||||
kind text,
|
|
||||||
nick text,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_username_timestamp ON archive USING btree (username, timestamp);
|
|
||||||
CREATE INDEX i_username_peer ON archive USING btree (username, peer);
|
|
||||||
CREATE INDEX i_username_bare_peer ON archive USING btree (username, bare_peer);
|
|
||||||
CREATE INDEX i_timestamp ON archive USING btree (timestamp);
|
|
||||||
|
|
||||||
CREATE TABLE archive_prefs (
|
|
||||||
username text NOT NULL PRIMARY KEY,
|
|
||||||
def text NOT NULL,
|
|
||||||
always text NOT NULL,
|
|
||||||
never text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE vcard (
|
|
||||||
username text PRIMARY KEY,
|
|
||||||
vcard 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 INDEX i_privacy_list_data_id ON privacy_list_data USING btree (id);
|
|
||||||
|
|
||||||
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 NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
parent text NOT NULL DEFAULT '',
|
|
||||||
plugin text NOT NULL,
|
|
||||||
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 NOT NULL,
|
|
||||||
val text NOT NULL
|
|
||||||
);
|
|
||||||
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 NOT NULL
|
|
||||||
);
|
|
||||||
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 NOT NULL,
|
|
||||||
affiliation character(1),
|
|
||||||
subscriptions text NOT NULL DEFAULT '',
|
|
||||||
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 NOT NULL,
|
|
||||||
publisher text NOT NULL,
|
|
||||||
creation varchar(32) NOT NULL,
|
|
||||||
modification varchar(32) NOT NULL,
|
|
||||||
payload text NOT NULL DEFAULT ''
|
|
||||||
);
|
|
||||||
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 NOT NULL,
|
|
||||||
opt_name varchar(32),
|
|
||||||
opt_value text NOT NULL
|
|
||||||
);
|
|
||||||
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 muc_online_room (
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_room_name_host ON muc_online_room USING btree (name, host);
|
|
||||||
|
|
||||||
CREATE TABLE muc_online_users (
|
|
||||||
username text NOT NULL,
|
|
||||||
server text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
name text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_muc_online_users ON muc_online_users USING btree (username, server, resource, name, host);
|
|
||||||
CREATE INDEX i_muc_online_users_us ON muc_online_users USING btree (username, server);
|
|
||||||
|
|
||||||
CREATE TABLE muc_room_subscribers (
|
|
||||||
room text NOT NULL,
|
|
||||||
host text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
nick text NOT NULL,
|
|
||||||
nodes text NOT NULL,
|
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX i_muc_room_subscribers_host_jid ON muc_room_subscribers USING btree (host, jid);
|
|
||||||
CREATE UNIQUE INDEX i_muc_room_subscribers_host_room_jid ON muc_room_subscribers USING btree (host, room, jid);
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
CREATE TABLE sm (
|
|
||||||
usec bigint NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
username text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
priority text NOT NULL,
|
|
||||||
info text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_sm_sid ON sm USING btree (usec, pid);
|
|
||||||
CREATE INDEX i_sm_node ON sm USING btree (node);
|
|
||||||
CREATE INDEX i_sm_username ON sm USING btree (username);
|
|
||||||
|
|
||||||
CREATE TABLE oauth_token (
|
|
||||||
token text NOT NULL,
|
|
||||||
jid text NOT NULL,
|
|
||||||
scope text NOT NULL,
|
|
||||||
expire bigint NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_oauth_token_token ON oauth_token USING btree (token);
|
|
||||||
|
|
||||||
CREATE TABLE route (
|
|
||||||
domain text NOT NULL,
|
|
||||||
server_host text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL,
|
|
||||||
local_hint text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_route ON route USING btree (domain, server_host, node, pid);
|
|
||||||
CREATE INDEX i_route_domain ON route USING btree (domain);
|
|
||||||
|
|
||||||
CREATE TABLE bosh (
|
|
||||||
sid text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
pid text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_bosh_sid ON bosh USING btree (sid);
|
|
||||||
|
|
||||||
CREATE TABLE carboncopy (
|
|
||||||
username text NOT NULL,
|
|
||||||
resource text NOT NULL,
|
|
||||||
namespace text NOT NULL,
|
|
||||||
node text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_carboncopy_ur ON carboncopy USING btree (username, resource);
|
|
||||||
CREATE INDEX i_carboncopy_user ON carboncopy USING btree (username);
|
|
||||||
|
|
||||||
CREATE TABLE proxy65 (
|
|
||||||
sid text NOT NULL,
|
|
||||||
pid_t text NOT NULL,
|
|
||||||
pid_i text NOT NULL,
|
|
||||||
node_t text NOT NULL,
|
|
||||||
node_i text NOT NULL,
|
|
||||||
jid_i text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_proxy65_sid ON proxy65 USING btree (sid);
|
|
||||||
CREATE INDEX i_proxy65_jid ON proxy65 USING btree (jid_i);
|
|
||||||
|
|
||||||
CREATE TABLE push_session (
|
|
||||||
username text NOT NULL,
|
|
||||||
timestamp bigint NOT NULL,
|
|
||||||
service text NOT NULL,
|
|
||||||
node text NOT NULL,
|
|
||||||
xml text NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE UNIQUE INDEX i_push_usn ON push_session USING btree (username, service, node);
|
|
||||||
CREATE UNIQUE INDEX i_push_ut ON push_session USING btree (username, timestamp);
|
|
@ -47,7 +47,8 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%% API
|
%%% API
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
start(_Host) -> ok.
|
start(Host) ->
|
||||||
|
ejabberd_sql:load_schema(Host, ejabberd_auth).
|
||||||
|
|
||||||
stop(_Host) -> ok.
|
stop(_Host) -> ok.
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
-include("logger.hrl").
|
-include("logger.hrl").
|
||||||
|
|
||||||
init() ->
|
init() ->
|
||||||
ok.
|
ejabberd_sql:load_schema(ejabberd_config:get_myname(), ejabberd_oauth).
|
||||||
|
|
||||||
store(R) ->
|
store(R) ->
|
||||||
Token = R#oauth_token.token,
|
Token = R#oauth_token.token,
|
||||||
|
@ -37,15 +37,22 @@
|
|||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init() ->
|
init() ->
|
||||||
|
Host = ejabberd_config:get_myname(),
|
||||||
|
case ejabberd_sql:load_schema(Host, ejabberd_router) of
|
||||||
|
ok ->
|
||||||
Node = erlang:atom_to_binary(node(), latin1),
|
Node = erlang:atom_to_binary(node(), latin1),
|
||||||
?DEBUG("Cleaning SQL 'route' table...", []),
|
?DEBUG("Cleaning SQL 'route' table...", []),
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
ejabberd_config:get_myname(), ?SQL("delete from route where node=%(Node)s")) of
|
Host,
|
||||||
|
?SQL("delete from route where node=%(Node)s")) of
|
||||||
{updated, _} ->
|
{updated, _} ->
|
||||||
ok;
|
ok;
|
||||||
Err ->
|
Err ->
|
||||||
?ERROR_MSG("failed to clean 'route' table: ~p", [Err]),
|
?ERROR_MSG("failed to clean 'route' table: ~p", [Err]),
|
||||||
Err
|
Err
|
||||||
|
end;
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
end.
|
end.
|
||||||
|
|
||||||
register_route(Domain, ServerHost, LocalHint, _, Pid) ->
|
register_route(Domain, ServerHost, LocalHint, _, Pid) ->
|
||||||
|
@ -49,14 +49,20 @@ init() ->
|
|||||||
?DEBUG("Cleaning SQL SM table...", []),
|
?DEBUG("Cleaning SQL SM table...", []),
|
||||||
lists:foldl(
|
lists:foldl(
|
||||||
fun(Host, ok) ->
|
fun(Host, ok) ->
|
||||||
|
case ejabberd_sql:load_schema(Host, ejabberd_sm) of
|
||||||
|
ok ->
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
Host, ?SQL("delete from sm where node=%(Node)s")) of
|
Host,
|
||||||
|
?SQL("delete from sm where node=%(Node)s")) of
|
||||||
{updated, _} ->
|
{updated, _} ->
|
||||||
ok;
|
ok;
|
||||||
Err ->
|
Err ->
|
||||||
?ERROR_MSG("failed to clean 'sm' table: ~p", [Err]),
|
?ERROR_MSG("failed to clean 'sm' table: ~p", [Err]),
|
||||||
{error, db_failure}
|
{error, db_failure}
|
||||||
end;
|
end;
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
|
end;
|
||||||
(_, Err) ->
|
(_, Err) ->
|
||||||
Err
|
Err
|
||||||
end, ok, ejabberd_sm:get_vh_by_backend(?MODULE)).
|
end, ok, ejabberd_sm:get_vh_by_backend(?MODULE)).
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
freetds_config/0,
|
freetds_config/0,
|
||||||
odbcinst_config/0,
|
odbcinst_config/0,
|
||||||
init_mssql/1,
|
init_mssql/1,
|
||||||
|
load_schema/2,
|
||||||
keep_alive/2]).
|
keep_alive/2]).
|
||||||
|
|
||||||
%% gen_fsm callbacks
|
%% gen_fsm callbacks
|
||||||
@ -189,13 +190,19 @@ sync_send_event(Pid, Msg, Timeout) ->
|
|||||||
sql_query_t(Query) ->
|
sql_query_t(Query) ->
|
||||||
QRes = sql_query_internal(Query),
|
QRes = sql_query_internal(Query),
|
||||||
case QRes of
|
case QRes of
|
||||||
{error, Reason} -> throw({aborted, Reason});
|
{error, Reason} ->
|
||||||
|
put(failed_sql_query, Query),
|
||||||
|
restart(Reason);
|
||||||
Rs when is_list(Rs) ->
|
Rs when is_list(Rs) ->
|
||||||
case lists:keysearch(error, 1, Rs) of
|
case lists:keyfind(error, 1, Rs) of
|
||||||
{value, {error, Reason}} -> throw({aborted, Reason});
|
{error, Reason} ->
|
||||||
_ -> QRes
|
put(failed_sql_query, Query),
|
||||||
|
restart(Reason);
|
||||||
|
_ ->
|
||||||
|
QRes
|
||||||
end;
|
end;
|
||||||
_ -> QRes
|
_ ->
|
||||||
|
QRes
|
||||||
end.
|
end.
|
||||||
|
|
||||||
abort(Reason) ->
|
abort(Reason) ->
|
||||||
@ -281,6 +288,10 @@ sqlite_file(Host) ->
|
|||||||
use_new_schema() ->
|
use_new_schema() ->
|
||||||
ejabberd_config:get_option(new_sql_schema, ?USE_NEW_SCHEMA_DEFAULT).
|
ejabberd_config:get_option(new_sql_schema, ?USE_NEW_SCHEMA_DEFAULT).
|
||||||
|
|
||||||
|
load_schema(Host, Mod) ->
|
||||||
|
Type = ejabberd_config:get_option({sql_type, Host}, odbc),
|
||||||
|
ejabberd_sql_schema:load(Host, Mod, Type).
|
||||||
|
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%% Callback functions from gen_fsm
|
%%% Callback functions from gen_fsm
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
@ -510,11 +521,12 @@ outer_transaction(F, NRestarts, _Reason) ->
|
|||||||
sql_query_internal([<<"rollback;">>]),
|
sql_query_internal([<<"rollback;">>]),
|
||||||
outer_transaction(F, NRestarts - 1, Reason);
|
outer_transaction(F, NRestarts - 1, Reason);
|
||||||
{aborted, Reason} when NRestarts =:= 0 ->
|
{aborted, Reason} when NRestarts =:= 0 ->
|
||||||
|
FailedQuery = erase(failed_sql_query),
|
||||||
?ERROR_MSG("SQL transaction restarts exceeded~n** "
|
?ERROR_MSG("SQL transaction restarts exceeded~n** "
|
||||||
"Restarts: ~p~n** Last abort reason: "
|
"Restarts: ~p~n** Query: ~p~n** Last abort reason: "
|
||||||
"~p~n** Stacktrace: ~p~n** When State "
|
"~p~n** Stacktrace: ~p~n** When State "
|
||||||
"== ~p",
|
"== ~p",
|
||||||
[?MAX_TRANSACTION_RESTARTS, Reason,
|
[?MAX_TRANSACTION_RESTARTS, FailedQuery, Reason,
|
||||||
erlang:get_stacktrace(), get(?STATE_KEY)]),
|
erlang:get_stacktrace(), get(?STATE_KEY)]),
|
||||||
sql_query_internal([<<"rollback;">>]),
|
sql_query_internal([<<"rollback;">>]),
|
||||||
{aborted, Reason};
|
{aborted, Reason};
|
||||||
|
386
src/ejabberd_sql_schema.erl
Normal file
386
src/ejabberd_sql_schema.erl
Normal file
@ -0,0 +1,386 @@
|
|||||||
|
%%%-------------------------------------------------------------------
|
||||||
|
%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||||
|
%%% Created : 15 July 2018 by Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||||
|
%%%
|
||||||
|
%%%
|
||||||
|
%%% ejabberd, Copyright (C) 2002-2018 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.,
|
||||||
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
%%%
|
||||||
|
%%%-------------------------------------------------------------------
|
||||||
|
-module(ejabberd_sql_schema).
|
||||||
|
|
||||||
|
%% API
|
||||||
|
-export([load/3, list_tables/2]).
|
||||||
|
|
||||||
|
-include("logger.hrl").
|
||||||
|
|
||||||
|
%%%===================================================================
|
||||||
|
%%% API
|
||||||
|
%%%===================================================================
|
||||||
|
load(Host, Mod, Type) when Type == mysql; Type == pgsql; Type == sqlite ->
|
||||||
|
Dir = misc:sql_dir(),
|
||||||
|
File = filename:join([Dir, Type, atom_to_list(Mod) ++ ".sql"]),
|
||||||
|
case read_queries(File) of
|
||||||
|
{ok, Queries} ->
|
||||||
|
case exec_queries(Host, Mod, Type, Queries) of
|
||||||
|
ok -> ok;
|
||||||
|
{error, Why} ->
|
||||||
|
?CRITICAL_MSG("Failed to create tables for ~s: ~p",
|
||||||
|
[Mod, Why]),
|
||||||
|
{error, db_failure}
|
||||||
|
end;
|
||||||
|
{error, _} = Err ->
|
||||||
|
Err
|
||||||
|
end;
|
||||||
|
load(_, _, _) ->
|
||||||
|
ok.
|
||||||
|
|
||||||
|
list_tables(Host, Type) ->
|
||||||
|
Query = list_tables_query(Type),
|
||||||
|
case ejabberd_sql:sql_query(Host, Query) of
|
||||||
|
{selected, _, Res} ->
|
||||||
|
{ok, [T || [T|_] <- Res]};
|
||||||
|
{error, _} = Err ->
|
||||||
|
Err
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%%===================================================================
|
||||||
|
%%% Internal functions
|
||||||
|
%%%===================================================================
|
||||||
|
format_syntax_error({Line, Mod, Reason}) ->
|
||||||
|
io_lib:format("at line ~B: ~s", [Line, Mod:format_error(Reason)]).
|
||||||
|
|
||||||
|
read_queries(File) ->
|
||||||
|
case file:read_file(File) of
|
||||||
|
{ok, Data} ->
|
||||||
|
case parse_queries(binary_to_list(Data)) of
|
||||||
|
{error, Why} ->
|
||||||
|
?ERROR_MSG("Failed to parse SQL file ~s: ~s",
|
||||||
|
[File, format_syntax_error(Why)]),
|
||||||
|
{error, parse_error};
|
||||||
|
{ok, Queries} ->
|
||||||
|
RawQueries = re:split(Data, ";\\s*", [trim]),
|
||||||
|
{ok, group_queries(lists:zip(Queries, RawQueries))}
|
||||||
|
end;
|
||||||
|
{error, Why} = Err ->
|
||||||
|
?ERROR_MSG("Failed to read SQL queries from ~s: ~s",
|
||||||
|
[File, file:format_error(Why)]),
|
||||||
|
Err
|
||||||
|
end.
|
||||||
|
|
||||||
|
parse_queries(Queries) ->
|
||||||
|
case sql_lexer:string(Queries) of
|
||||||
|
{ok, Tokens, _} ->
|
||||||
|
sql_codec:parse(Tokens);
|
||||||
|
{error, Why, _} ->
|
||||||
|
{error, Why}
|
||||||
|
end.
|
||||||
|
|
||||||
|
group_queries(Queries) ->
|
||||||
|
lists:foldl(
|
||||||
|
fun({Query, Raw}, Acc) when element(1, Query) == create_table ->
|
||||||
|
Table = element(2, Query),
|
||||||
|
Columns = [element(1, Col) || Col <- element(3, Query)],
|
||||||
|
maps:put(Table, {Columns, [Raw]}, Acc);
|
||||||
|
({Query, Raw}, Acc) when element(1, Query) == create_index ->
|
||||||
|
Table = element(4, Query),
|
||||||
|
{Cols, Qs} = maps:get(Table, Acc),
|
||||||
|
maps:put(Table, {Cols, Qs++[Raw]}, Acc)
|
||||||
|
end, #{}, Queries).
|
||||||
|
|
||||||
|
exec_queries(Host, Mod, Type, Map) ->
|
||||||
|
?DEBUG("Creating/altering tables for ~s", [Mod]),
|
||||||
|
Escape = case Type of
|
||||||
|
mssql -> fun ejabberd_sql:standard_escape/1;
|
||||||
|
sqlite -> fun ejabberd_sql:standard_escape/1;
|
||||||
|
_ -> fun ejabberd_sql:escape/1
|
||||||
|
end,
|
||||||
|
F = fun() ->
|
||||||
|
lists:foreach(
|
||||||
|
fun({Tab, {NewCols, Queries}}) ->
|
||||||
|
case table_exists(Type, Tab) of
|
||||||
|
{true, OldCols} ->
|
||||||
|
alter_table(Host, Type, Tab, Escape,
|
||||||
|
NewCols, OldCols);
|
||||||
|
false ->
|
||||||
|
?INFO_MSG("Creating SQL table: ~s", [Tab]),
|
||||||
|
lists:foreach(
|
||||||
|
fun ejabberd_sql:sql_query_t/1,
|
||||||
|
Queries)
|
||||||
|
end
|
||||||
|
end, maps:to_list(Map))
|
||||||
|
end,
|
||||||
|
case ejabberd_sql:sql_transaction(Host, F) of
|
||||||
|
{atomic, _} -> ok;
|
||||||
|
{aborted, Reason} -> {error, Reason}
|
||||||
|
end.
|
||||||
|
|
||||||
|
table_exists(Type, Table) ->
|
||||||
|
Q1 = table_exists_query(Type, Table),
|
||||||
|
case sql_query(Q1) of
|
||||||
|
{selected, _, [_|_]} ->
|
||||||
|
Q2 = table_columns_query(Type, Table),
|
||||||
|
case sql_query(Q2) of
|
||||||
|
{selected, Columns, _} ->
|
||||||
|
{true, Columns};
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
|
end;
|
||||||
|
{selected, _, []} -> false;
|
||||||
|
Err -> Err
|
||||||
|
end.
|
||||||
|
|
||||||
|
list_tables_query(sqlite) ->
|
||||||
|
["SELECT name FROM sqlite_master WHERE type='table'"];
|
||||||
|
list_tables_query(mysql) ->
|
||||||
|
["SHOW TABLES"];
|
||||||
|
list_tables_query(pgsql) ->
|
||||||
|
["SELECT tablename FROM pg_catalog.pg_tables where schemaname NOT IN ",
|
||||||
|
"('pg_catalog', 'information_schema')"].
|
||||||
|
|
||||||
|
table_exists_query(pgsql, T) ->
|
||||||
|
["SELECT * FROM pg_catalog.pg_tables where tablename='", T, "'"];
|
||||||
|
table_exists_query(mysql, T) ->
|
||||||
|
["SHOW TABLES LIKE '", T, "'"];
|
||||||
|
table_exists_query(sqlite, T) ->
|
||||||
|
["SELECT * FROM sqlite_master WHERE type='table' and name='", T, "'"].
|
||||||
|
|
||||||
|
table_columns_query(_, T) ->
|
||||||
|
["SELECT * FROM ", T, " where 0=1"].
|
||||||
|
|
||||||
|
alter_table(Host, Type, Tab, Escape, NewCols, OldCols) ->
|
||||||
|
Add = NewCols -- OldCols,
|
||||||
|
alter_server_host(Host, Type, Tab, Escape, Add).
|
||||||
|
|
||||||
|
alter_server_host(Host, Type, Tab, Escape, Add) ->
|
||||||
|
case lists:member(<<"server_host">>, Add) of
|
||||||
|
true ->
|
||||||
|
?WARNING_MSG("Upgrading table ~s to multi-domain schema", [Tab]),
|
||||||
|
add_server_host(binary_to_list(Tab), Type, Host, Escape);
|
||||||
|
false ->
|
||||||
|
ok
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%%===================================================================
|
||||||
|
%%% SQL queries to upgrade to the New(R)(TM) Schema
|
||||||
|
%%%===================================================================
|
||||||
|
add_server_host("users", Type , Host, Escape) ->
|
||||||
|
add_sh_column(Type, "users", Host, Escape),
|
||||||
|
drop_pkey(Type, "users"),
|
||||||
|
add_pkey(Type, "users", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "users", Host, Escape);
|
||||||
|
add_server_host("last", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "last", Host, Escape),
|
||||||
|
drop_pkey(Type, "last"),
|
||||||
|
add_pkey(Type, "last", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "last", Host, Escape);
|
||||||
|
add_server_host("rosterusers", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "rosterusers", Host, Escape),
|
||||||
|
drop_index(Type, "i_rosteru_user_jid"),
|
||||||
|
drop_index(Type, "i_rosteru_username"),
|
||||||
|
drop_index(Type, "i_rosteru_jid"),
|
||||||
|
create_unique_index(Type, "rosterusers", "i_rosteru_sh_user_jid", ["server_host", "username", "jid"]),
|
||||||
|
create_index(Type, "rosterusers", "i_rosteru_sh_username", ["server_host", "username"]),
|
||||||
|
create_index(Type, "rosterusers", "i_rosteru_sh_jid", ["server_host", "jid"]),
|
||||||
|
set_sh(Type, "rosterusers", Host, Escape);
|
||||||
|
add_server_host("rostergroups", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "rostergroups", Host, Escape),
|
||||||
|
drop_index(Type, "pk_rosterg_user_jid"),
|
||||||
|
create_index(Type, "rostergroups", "i_rosterg_sh_user_jid", ["server_host", "username", "jid"]),
|
||||||
|
set_sh(Type, "rostergroups", Host, Escape);
|
||||||
|
add_server_host("roster_version", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "roster_version", Host, Escape),
|
||||||
|
drop_pkey(Type, "roster_version"),
|
||||||
|
add_pkey(Type, "roster_version", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "roster_version", Host, Escape);
|
||||||
|
add_server_host("sr_group", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "sr_group", Host, Escape),
|
||||||
|
add_pkey(Type, "sr_group", ["server_host", "name"]),
|
||||||
|
set_sh(Type, "sr_group", Host, Escape);
|
||||||
|
add_server_host("sr_user", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "sr_user", Host, Escape),
|
||||||
|
drop_index(Type, "i_sr_user_jid_grp"),
|
||||||
|
drop_index(Type, "i_sr_user_jid"),
|
||||||
|
drop_index(Type, "i_sr_user_grp"),
|
||||||
|
add_pkey(Type, "sr_user", ["server_host", "jid", "grp"]),
|
||||||
|
create_index(Type, "sr_user", "i_sr_user_sh_jid", ["server_host", "jid"]),
|
||||||
|
create_index(Type, "sr_user", "i_sr_user_sh_grp", ["server_host", "grp"]),
|
||||||
|
set_sh(Type, "sr_user", Host, Escape);
|
||||||
|
add_server_host("spool", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "spool", Host, Escape),
|
||||||
|
drop_index(Type, "i_despool"),
|
||||||
|
create_index(Type, "spool", "i_spool_sh_username", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "spool", Host, Escape);
|
||||||
|
add_server_host("archive", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "archive", Host, Escape),
|
||||||
|
drop_index(Type, "i_username"),
|
||||||
|
drop_index(Type, "i_username_timestamp"),
|
||||||
|
drop_index(Type, "i_timestamp"),
|
||||||
|
drop_index(Type, "i_peer"),
|
||||||
|
drop_index(Type, "i_bare_peer"),
|
||||||
|
create_index(Type, "archive", "i_archive_sh_username_timestamp", ["server_host", "username", "timestamp"]),
|
||||||
|
create_index(Type, "archive", "i_archive_sh_timestamp", ["server_host", "timestamp"]),
|
||||||
|
create_index(Type, "archive", "i_archive_sh_peer", ["server_host", "peer"]),
|
||||||
|
create_index(Type, "archive", "i_archive_sh_bare_peer", ["server_host", "bare_peer"]),
|
||||||
|
set_sh(Type, "archive", Host, Escape);
|
||||||
|
add_server_host("archive_prefs", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "archive_prefs", Host, Escape),
|
||||||
|
drop_pkey(Type, "archive_prefs"),
|
||||||
|
add_pkey(Type, "archive_prefs", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "archive_prefs", Host, Escape);
|
||||||
|
add_server_host("vcard", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "vcard", Host, Escape),
|
||||||
|
drop_pkey(Type, "vcard"),
|
||||||
|
add_pkey(Type, "vcard", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "vcard", Host, Escape);
|
||||||
|
add_server_host("vcard_search", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "vcard_search", Host, Escape),
|
||||||
|
drop_pkey(Type, "vcard_search"),
|
||||||
|
drop_index(Type, "i_vcard_search_lfn"),
|
||||||
|
drop_index(Type, "i_vcard_search_lfamily"),
|
||||||
|
drop_index(Type, "i_vcard_search_lgiven"),
|
||||||
|
drop_index(Type, "i_vcard_search_lmiddle"),
|
||||||
|
drop_index(Type, "i_vcard_search_lnickname"),
|
||||||
|
drop_index(Type, "i_vcard_search_lbday"),
|
||||||
|
drop_index(Type, "i_vcard_search_lctry"),
|
||||||
|
drop_index(Type, "i_vcard_search_llocality"),
|
||||||
|
drop_index(Type, "i_vcard_search_lemail"),
|
||||||
|
drop_index(Type, "i_vcard_search_lorgname"),
|
||||||
|
drop_index(Type, "i_vcard_search_lorgunit"),
|
||||||
|
add_pkey(Type, "vcard_search", ["server_host", "username"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lfn", ["server_host", "lfn"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lfamily", ["server_host", "lfamily"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lgiven", ["server_host", "lgiven"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lmiddle", ["server_host", "lmiddle"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lnickname", ["server_host", "lnickname"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lbday", ["server_host", "lbday"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lctry", ["server_host", "lctry"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_llocality", ["server_host", "llocality"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lemail", ["server_host", "lemail"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lorgname", ["server_host", "lorgname"]),
|
||||||
|
create_index(Type, "vcard_search", "i_vcard_search_sh_lorgunit", ["server_host", "lorgunit"]),
|
||||||
|
set_sh(Type, "vcard_search", Host, Escape);
|
||||||
|
add_server_host("privacy_default_list", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "privacy_default_list", Host, Escape),
|
||||||
|
drop_pkey(Type, "privacy_default_list"),
|
||||||
|
add_pkey(Type, "privacy_default_list", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "privacy_default_list", Host, Escape);
|
||||||
|
add_server_host("privacy_list", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "privacy_list", Host, Escape),
|
||||||
|
drop_index(Type, "i_privacy_list_username"),
|
||||||
|
drop_index(Type, "i_privacy_list_username_name"),
|
||||||
|
create_index(Type, "privacy_list", "i_privacy_list_sh_username", ["server_host", "username"]),
|
||||||
|
create_unique_index(Type, "privacy_list", "i_privacy_list_sh_username_name",
|
||||||
|
["server_host", "username", "name"]),
|
||||||
|
set_sh(Type, "privacy_list", Host, Escape);
|
||||||
|
add_server_host("private_storage", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "private_storage", Host, Escape),
|
||||||
|
drop_index(Type, "i_private_storage_username"),
|
||||||
|
drop_index(Type, "i_private_storage_username_namespace"),
|
||||||
|
add_pkey(Type, "private_storage", ["server_host", "username", "namespace"]),
|
||||||
|
create_index(Type, "private_storage", "i_private_storage_sh_username", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "private_storage", Host, Escape);
|
||||||
|
add_server_host(Tab, Type, Host, Escape) when Tab == "muc_room";
|
||||||
|
Tab == "muc_registered";
|
||||||
|
Tab == "muc_online_room";
|
||||||
|
Tab == "muc_online_users" ->
|
||||||
|
add_sh_column(Type, Tab, Host, Escape),
|
||||||
|
set_sh(Type, Tab, Host, Escape);
|
||||||
|
add_server_host("motd", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "motd", Host, Escape),
|
||||||
|
drop_pkey(Type, "motd"),
|
||||||
|
add_pkey(Type, "motd", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "motd", Host, Escape);
|
||||||
|
add_server_host("sm", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "sm", Host, Escape),
|
||||||
|
drop_index(Type, "i_sm_sid"),
|
||||||
|
drop_index(Type, "i_sm_username"),
|
||||||
|
add_pkey(Type, "sm", ["usec", "pid"]),
|
||||||
|
create_index(Type, "sm", "i_sm_sh_username", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "sm", Host, Escape);
|
||||||
|
add_server_host("carboncopy", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "carboncopy", Host, Escape),
|
||||||
|
drop_index(Type, "i_carboncopy_ur"),
|
||||||
|
drop_index(Type, "i_carboncopy_user"),
|
||||||
|
add_pkey(Type, "carboncopy", ["server_host", "username", "resource"]),
|
||||||
|
create_index(Type, "carboncopy", "i_carboncopy_sh_user", ["server_host", "username"]),
|
||||||
|
set_sh(Type, "carboncopy", Host, Escape);
|
||||||
|
add_server_host("push_session", Type, Host, Escape) ->
|
||||||
|
add_sh_column(Type, "push_session", Host, Escape),
|
||||||
|
drop_index(Type, "i_push_usn"),
|
||||||
|
drop_index(Type, "i_push_ut"),
|
||||||
|
add_pkey(Type, "push_session", ["server_host", "username", "timestamp"]),
|
||||||
|
create_index(Type, "push_session", "i_push_session_susn", ["server_host", "username", "service", "node"]),
|
||||||
|
set_sh(Type, "push_session", Host, Escape);
|
||||||
|
add_server_host(Tab, _, _, _) ->
|
||||||
|
?WARNING_MSG("Unknown table to convert: ~s", [Tab]).
|
||||||
|
|
||||||
|
add_sh_column(mysql, Table, Host, Escape) ->
|
||||||
|
sql_query(
|
||||||
|
["ALTER TABLE ", Table, " ADD COLUMN server_host varchar(191) NOT NULL DEFAULT '",
|
||||||
|
Escape(Host), "'"]);
|
||||||
|
add_sh_column(pgsql, Table, Host, Escape) ->
|
||||||
|
sql_query(
|
||||||
|
["ALTER TABLE ", Table, " ADD COLUMN server_host text NOT NULL DEFAULT '",
|
||||||
|
Escape(Host), "'"]);
|
||||||
|
add_sh_column(sqlite, Table, _Host, _Escape) ->
|
||||||
|
sql_query(
|
||||||
|
["ALTER TABLE ", Table, " ADD COLUMN server_host text NOT NULL DEFAULT ''"]).
|
||||||
|
|
||||||
|
drop_pkey(mysql, Table) ->
|
||||||
|
sql_query(["ALTER TABLE ", Table, " DROP PRIMARY KEY"]);
|
||||||
|
drop_pkey(pgsql, Table) ->
|
||||||
|
sql_query(["ALTER TABLE ", Table, " DROP CONSTRAINT ", Table, "_pkey"]);
|
||||||
|
drop_pkey(sqlite, Table) ->
|
||||||
|
sql_query(["ALTER TABLE ", Table, " DROP PRIMARY KEY"]).
|
||||||
|
|
||||||
|
add_pkey(mysql, Table, Cols) ->
|
||||||
|
SCols = string:join(Cols, ", "),
|
||||||
|
sql_query(["ALTER TABLE ", Table, " ADD PRIMARY KEY (", SCols, ")"]);
|
||||||
|
add_pkey(pgsql, Table, Cols) ->
|
||||||
|
SCols = string:join(Cols, ", "),
|
||||||
|
sql_query(["ALTER TABLE ", Table, " ADD PRIMARY KEY (", SCols, ")"]);
|
||||||
|
add_pkey(sqlite, Table, Cols) ->
|
||||||
|
create_unique_index(sqlite, Table, string:join(["i"|Cols], "_"), Cols).
|
||||||
|
|
||||||
|
set_sh(sqlite, Table, Host, Escape) ->
|
||||||
|
sql_query(["UPDATE ", Table, " SET server_host='", Escape(Host), "'"]);
|
||||||
|
set_sh(_, Table, _Host, _Escape) ->
|
||||||
|
sql_query(["ALTER TABLE ", Table, " ALTER COLUMN server_host DROP DEFAULT"]).
|
||||||
|
|
||||||
|
drop_index(mysql, Index) ->
|
||||||
|
sql_query(["DROP INDEX IF EXISTS ", Index]);
|
||||||
|
drop_index(_pgsql, Index) ->
|
||||||
|
sql_query(["DROP INDEX IF EXISTS ", Index]).
|
||||||
|
|
||||||
|
create_unique_index(mysql, Table, Index, Cols) ->
|
||||||
|
Cols2 = [C ++ "(75)" || C <- Cols],
|
||||||
|
SCols = string:join(Cols2, ", "),
|
||||||
|
sql_query(["CREATE UNIQUE INDEX ", Index, " ON ", Table, "(", SCols, ")"]);
|
||||||
|
create_unique_index(_pgsql, Table, Index, Cols) ->
|
||||||
|
SCols = string:join(Cols, ", "),
|
||||||
|
sql_query(["CREATE UNIQUE INDEX ", Index, " ON ", Table, " (", SCols, ")"]).
|
||||||
|
|
||||||
|
create_index(mysql, Table, Index, Cols) ->
|
||||||
|
Cols2 = [C ++ "(75)" || C <- Cols],
|
||||||
|
SCols = string:join(Cols2, ", "),
|
||||||
|
sql_query(["CREATE INDEX ", Index, " ON ", Table, "(", SCols, ")"]);
|
||||||
|
create_index(_pgsql, Table, Index, Cols) ->
|
||||||
|
SCols = string:join(Cols, ", "),
|
||||||
|
sql_query(["CREATE INDEX ", Index, " ON ", Table, " (", SCols, ")"]).
|
||||||
|
|
||||||
|
sql_query(Query) ->
|
||||||
|
ejabberd_sql:sql_query_t(iolist_to_binary(Query)).
|
@ -157,61 +157,11 @@ check_sqlite_db(Host) ->
|
|||||||
end,
|
end,
|
||||||
case Ret of
|
case Ret of
|
||||||
ok ->
|
ok ->
|
||||||
sqlite3:sql_exec(DB, "pragma foreign_keys = on"),
|
sqlite3:sql_exec(DB, "pragma foreign_keys = on");
|
||||||
case sqlite3:list_tables(DB) of
|
|
||||||
[] ->
|
|
||||||
create_sqlite_tables(DB),
|
|
||||||
sqlite3:close(DB),
|
|
||||||
ok;
|
|
||||||
[_H | _] ->
|
|
||||||
ok
|
|
||||||
end;
|
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
?INFO_MSG("Failed open sqlite database, reason ~p", [Reason])
|
?INFO_MSG("Failed open sqlite database, reason ~p", [Reason])
|
||||||
end.
|
end.
|
||||||
|
|
||||||
create_sqlite_tables(DB) ->
|
|
||||||
SqlDir = misc:sql_dir(),
|
|
||||||
File = filename:join(SqlDir, "lite.sql"),
|
|
||||||
case file:open(File, [read, binary]) of
|
|
||||||
{ok, Fd} ->
|
|
||||||
Qs = read_lines(Fd, File, []),
|
|
||||||
ok = sqlite3:sql_exec(DB, "begin"),
|
|
||||||
[ok = sqlite3:sql_exec(DB, Q) || Q <- Qs],
|
|
||||||
ok = sqlite3:sql_exec(DB, "commit");
|
|
||||||
{error, Reason} ->
|
|
||||||
?INFO_MSG("Failed to read SQLite schema file: ~s",
|
|
||||||
[file:format_error(Reason)])
|
|
||||||
end.
|
|
||||||
|
|
||||||
read_lines(Fd, File, Acc) ->
|
|
||||||
case file:read_line(Fd) of
|
|
||||||
{ok, Line} ->
|
|
||||||
NewAcc = case str:strip(str:strip(Line, both, $\r), both, $\n) of
|
|
||||||
<<"--", _/binary>> ->
|
|
||||||
Acc;
|
|
||||||
<<>> ->
|
|
||||||
Acc;
|
|
||||||
_ ->
|
|
||||||
[Line|Acc]
|
|
||||||
end,
|
|
||||||
read_lines(Fd, File, NewAcc);
|
|
||||||
eof ->
|
|
||||||
QueryList = str:tokens(list_to_binary(lists:reverse(Acc)), <<";">>),
|
|
||||||
lists:flatmap(
|
|
||||||
fun(Query) ->
|
|
||||||
case str:strip(str:strip(Query, both, $\r), both, $\n) of
|
|
||||||
<<>> ->
|
|
||||||
[];
|
|
||||||
Q ->
|
|
||||||
[<<Q/binary, $;>>]
|
|
||||||
end
|
|
||||||
end, QueryList);
|
|
||||||
{error, _} = Err ->
|
|
||||||
?ERROR_MSG("Failed read from lite.sql, reason: ~p", [Err]),
|
|
||||||
[]
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec opt_type(sql_pool_size) -> fun((pos_integer()) -> pos_integer());
|
-spec opt_type(sql_pool_size) -> fun((pos_integer()) -> pos_integer());
|
||||||
(sql_start_interval) -> fun((pos_integer()) -> pos_integer());
|
(sql_start_interval) -> fun((pos_integer()) -> pos_integer());
|
||||||
(atom()) -> [atom()].
|
(atom()) -> [atom()].
|
||||||
|
@ -878,7 +878,7 @@ get_hosts(Opts, Prefix) ->
|
|||||||
|
|
||||||
-spec get_module_proc(binary() | global, atom()) -> atom().
|
-spec get_module_proc(binary() | global, atom()) -> atom().
|
||||||
get_module_proc(global, Base) ->
|
get_module_proc(global, Base) ->
|
||||||
get_module_proc(<<"global">>, Base);
|
Base;
|
||||||
get_module_proc(Host, Base) ->
|
get_module_proc(Host, Base) ->
|
||||||
binary_to_atom(
|
binary_to_atom(
|
||||||
<<(erlang:atom_to_binary(Base, latin1))/binary, "_", Host/binary>>,
|
<<(erlang:atom_to_binary(Base, latin1))/binary, "_", Host/binary>>,
|
||||||
|
@ -1,361 +0,0 @@
|
|||||||
%%%-------------------------------------------------------------------
|
|
||||||
%%% File : mod_admin_update_sql.erl
|
|
||||||
%%% Author : Alexey Shchepin <alexey@process-one.net>
|
|
||||||
%%% Purpose : Convert SQL DB to the new format
|
|
||||||
%%% Created : 9 Aug 2017 by Alexey Shchepin <alexey@process-one.net>
|
|
||||||
%%%
|
|
||||||
%%%
|
|
||||||
%%% ejabberd, Copyright (C) 2002-2018 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.,
|
|
||||||
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
%%%
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
|
|
||||||
-module(mod_admin_update_sql).
|
|
||||||
-author('alexey@process-one.net').
|
|
||||||
|
|
||||||
-behaviour(gen_mod).
|
|
||||||
|
|
||||||
-export([start/2, stop/1, reload/3, mod_options/1,
|
|
||||||
get_commands_spec/0, depends/2]).
|
|
||||||
|
|
||||||
% Commands API
|
|
||||||
-export([update_sql/0]).
|
|
||||||
|
|
||||||
|
|
||||||
-include("logger.hrl").
|
|
||||||
-include("ejabberd_commands.hrl").
|
|
||||||
-include("xmpp.hrl").
|
|
||||||
-include("ejabberd_sql_pt.hrl").
|
|
||||||
|
|
||||||
%%%
|
|
||||||
%%% gen_mod
|
|
||||||
%%%
|
|
||||||
|
|
||||||
start(_Host, _Opts) ->
|
|
||||||
ejabberd_commands:register_commands(get_commands_spec()).
|
|
||||||
|
|
||||||
stop(_Host) ->
|
|
||||||
ejabberd_commands:unregister_commands(get_commands_spec()).
|
|
||||||
|
|
||||||
reload(_Host, _NewOpts, _OldOpts) ->
|
|
||||||
ok.
|
|
||||||
|
|
||||||
depends(_Host, _Opts) ->
|
|
||||||
[].
|
|
||||||
|
|
||||||
%%%
|
|
||||||
%%% Register commands
|
|
||||||
%%%
|
|
||||||
|
|
||||||
get_commands_spec() ->
|
|
||||||
[#ejabberd_commands{name = update_sql, tags = [sql],
|
|
||||||
desc = "Convert SQL DB to the new format",
|
|
||||||
module = ?MODULE, function = update_sql,
|
|
||||||
args = [],
|
|
||||||
args_example = [],
|
|
||||||
args_desc = [],
|
|
||||||
result = {res, rescode},
|
|
||||||
result_example = ok,
|
|
||||||
result_desc = "Status code: 0 on success, 1 otherwise"}
|
|
||||||
].
|
|
||||||
|
|
||||||
update_sql() ->
|
|
||||||
lists:foreach(
|
|
||||||
fun(Host) ->
|
|
||||||
case ejabberd_sql_sup:get_pids(Host) of
|
|
||||||
[] ->
|
|
||||||
ok;
|
|
||||||
_ ->
|
|
||||||
update_sql(Host)
|
|
||||||
end
|
|
||||||
end, ejabberd_config:get_myhosts()),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
-record(state, {host :: binary(),
|
|
||||||
dbtype :: mysql | pgsql | sqlite | mssql | odbc,
|
|
||||||
escape}).
|
|
||||||
|
|
||||||
update_sql(Host) ->
|
|
||||||
LHost = jid:nameprep(Host),
|
|
||||||
DBType = ejabberd_config:get_option({sql_type, LHost}, undefined),
|
|
||||||
IsSupported =
|
|
||||||
case DBType of
|
|
||||||
pgsql -> true;
|
|
||||||
_ -> false
|
|
||||||
end,
|
|
||||||
if
|
|
||||||
not IsSupported ->
|
|
||||||
io:format("Converting ~p DB is not supported~n", [DBType]),
|
|
||||||
error;
|
|
||||||
true ->
|
|
||||||
Escape =
|
|
||||||
case DBType of
|
|
||||||
mssql -> fun ejabberd_sql:standard_escape/1;
|
|
||||||
sqlite -> fun ejabberd_sql:standard_escape/1;
|
|
||||||
_ -> fun ejabberd_sql:escape/1
|
|
||||||
end,
|
|
||||||
State = #state{host = LHost,
|
|
||||||
dbtype = DBType,
|
|
||||||
escape = Escape},
|
|
||||||
update_tables(State)
|
|
||||||
end.
|
|
||||||
|
|
||||||
update_tables(State) ->
|
|
||||||
add_sh_column(State, "users"),
|
|
||||||
drop_pkey(State, "users"),
|
|
||||||
add_pkey(State, "users", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "users"),
|
|
||||||
|
|
||||||
add_sh_column(State, "last"),
|
|
||||||
drop_pkey(State, "last"),
|
|
||||||
add_pkey(State, "last", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "last"),
|
|
||||||
|
|
||||||
add_sh_column(State, "rosterusers"),
|
|
||||||
drop_index(State, "i_rosteru_user_jid"),
|
|
||||||
drop_index(State, "i_rosteru_username"),
|
|
||||||
drop_index(State, "i_rosteru_jid"),
|
|
||||||
create_unique_index(State, "rosterusers", "i_rosteru_sh_user_jid", ["server_host", "username", "jid"]),
|
|
||||||
create_index(State, "rosterusers", "i_rosteru_sh_username", ["server_host", "username"]),
|
|
||||||
create_index(State, "rosterusers", "i_rosteru_sh_jid", ["server_host", "jid"]),
|
|
||||||
drop_sh_default(State, "rosterusers"),
|
|
||||||
|
|
||||||
add_sh_column(State, "rostergroups"),
|
|
||||||
drop_index(State, "pk_rosterg_user_jid"),
|
|
||||||
create_index(State, "rostergroups", "i_rosterg_sh_user_jid", ["server_host", "username", "jid"]),
|
|
||||||
drop_sh_default(State, "rostergroups"),
|
|
||||||
|
|
||||||
add_sh_column(State, "sr_group"),
|
|
||||||
add_pkey(State, "sr_group", ["server_host", "name"]),
|
|
||||||
drop_sh_default(State, "sr_group"),
|
|
||||||
|
|
||||||
add_sh_column(State, "sr_user"),
|
|
||||||
drop_index(State, "i_sr_user_jid_grp"),
|
|
||||||
drop_index(State, "i_sr_user_jid"),
|
|
||||||
drop_index(State, "i_sr_user_grp"),
|
|
||||||
add_pkey(State, "sr_user", ["server_host", "jid", "grp"]),
|
|
||||||
create_index(State, "sr_user", "i_sr_user_sh_jid", ["server_host", "jid"]),
|
|
||||||
create_index(State, "sr_user", "i_sr_user_sh_grp", ["server_host", "grp"]),
|
|
||||||
drop_sh_default(State, "sr_user"),
|
|
||||||
|
|
||||||
add_sh_column(State, "spool"),
|
|
||||||
drop_index(State, "i_despool"),
|
|
||||||
create_index(State, "spool", "i_spool_sh_username", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "spool"),
|
|
||||||
|
|
||||||
add_sh_column(State, "archive"),
|
|
||||||
drop_index(State, "i_username"),
|
|
||||||
drop_index(State, "i_username_timestamp"),
|
|
||||||
drop_index(State, "i_timestamp"),
|
|
||||||
drop_index(State, "i_peer"),
|
|
||||||
drop_index(State, "i_bare_peer"),
|
|
||||||
create_index(State, "archive", "i_archive_sh_username_timestamp", ["server_host", "username", "timestamp"]),
|
|
||||||
create_index(State, "archive", "i_archive_sh_timestamp", ["server_host", "timestamp"]),
|
|
||||||
create_index(State, "archive", "i_archive_sh_peer", ["server_host", "peer"]),
|
|
||||||
create_index(State, "archive", "i_archive_sh_bare_peer", ["server_host", "bare_peer"]),
|
|
||||||
drop_sh_default(State, "archive"),
|
|
||||||
|
|
||||||
add_sh_column(State, "archive_prefs"),
|
|
||||||
drop_pkey(State, "archive_prefs"),
|
|
||||||
add_pkey(State, "archive_prefs", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "archive_prefs"),
|
|
||||||
|
|
||||||
add_sh_column(State, "vcard"),
|
|
||||||
drop_pkey(State, "vcard"),
|
|
||||||
add_pkey(State, "vcard", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "vcard"),
|
|
||||||
|
|
||||||
add_sh_column(State, "vcard_search"),
|
|
||||||
drop_pkey(State, "vcard_search"),
|
|
||||||
drop_index(State, "i_vcard_search_lfn"),
|
|
||||||
drop_index(State, "i_vcard_search_lfamily"),
|
|
||||||
drop_index(State, "i_vcard_search_lgiven"),
|
|
||||||
drop_index(State, "i_vcard_search_lmiddle"),
|
|
||||||
drop_index(State, "i_vcard_search_lnickname"),
|
|
||||||
drop_index(State, "i_vcard_search_lbday"),
|
|
||||||
drop_index(State, "i_vcard_search_lctry"),
|
|
||||||
drop_index(State, "i_vcard_search_llocality"),
|
|
||||||
drop_index(State, "i_vcard_search_lemail"),
|
|
||||||
drop_index(State, "i_vcard_search_lorgname"),
|
|
||||||
drop_index(State, "i_vcard_search_lorgunit"),
|
|
||||||
add_pkey(State, "vcard_search", ["server_host", "username"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lfn", ["server_host", "lfn"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lfamily", ["server_host", "lfamily"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lgiven", ["server_host", "lgiven"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lmiddle", ["server_host", "lmiddle"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lnickname", ["server_host", "lnickname"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lbday", ["server_host", "lbday"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lctry", ["server_host", "lctry"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_llocality", ["server_host", "llocality"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lemail", ["server_host", "lemail"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lorgname", ["server_host", "lorgname"]),
|
|
||||||
create_index(State, "vcard_search", "i_vcard_search_sh_lorgunit", ["server_host", "lorgunit"]),
|
|
||||||
drop_sh_default(State, "vcard_search"),
|
|
||||||
|
|
||||||
add_sh_column(State, "privacy_default_list"),
|
|
||||||
drop_pkey(State, "privacy_default_list"),
|
|
||||||
add_pkey(State, "privacy_default_list", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "privacy_default_list"),
|
|
||||||
|
|
||||||
add_sh_column(State, "privacy_list"),
|
|
||||||
drop_index(State, "i_privacy_list_username"),
|
|
||||||
drop_index(State, "i_privacy_list_username_name"),
|
|
||||||
create_index(State, "privacy_list", "i_privacy_list_sh_username", ["server_host", "username"]),
|
|
||||||
create_unique_index(State, "privacy_list", "i_privacy_list_sh_username_name", ["server_host", "username", "name"]),
|
|
||||||
drop_sh_default(State, "privacy_list"),
|
|
||||||
|
|
||||||
add_sh_column(State, "private_storage"),
|
|
||||||
drop_index(State, "i_private_storage_username"),
|
|
||||||
drop_index(State, "i_private_storage_username_namespace"),
|
|
||||||
add_pkey(State, "private_storage", ["server_host", "username", "namespace"]),
|
|
||||||
create_index(State, "private_storage", "i_private_storage_sh_username", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "private_storage"),
|
|
||||||
|
|
||||||
add_sh_column(State, "roster_version"),
|
|
||||||
drop_pkey(State, "roster_version"),
|
|
||||||
add_pkey(State, "roster_version", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "roster_version"),
|
|
||||||
|
|
||||||
add_sh_column(State, "muc_room"),
|
|
||||||
drop_sh_default(State, "muc_room"),
|
|
||||||
|
|
||||||
add_sh_column(State, "muc_registered"),
|
|
||||||
drop_sh_default(State, "muc_registered"),
|
|
||||||
|
|
||||||
add_sh_column(State, "muc_online_room"),
|
|
||||||
drop_sh_default(State, "muc_online_room"),
|
|
||||||
|
|
||||||
add_sh_column(State, "muc_online_users"),
|
|
||||||
drop_sh_default(State, "muc_online_users"),
|
|
||||||
|
|
||||||
add_sh_column(State, "motd"),
|
|
||||||
drop_pkey(State, "motd"),
|
|
||||||
add_pkey(State, "motd", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "motd"),
|
|
||||||
|
|
||||||
add_sh_column(State, "sm"),
|
|
||||||
drop_index(State, "i_sm_sid"),
|
|
||||||
drop_index(State, "i_sm_username"),
|
|
||||||
add_pkey(State, "sm", ["usec", "pid"]),
|
|
||||||
create_index(State, "sm", "i_sm_sh_username", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "sm"),
|
|
||||||
|
|
||||||
add_sh_column(State, "carboncopy"),
|
|
||||||
drop_index(State, "i_carboncopy_ur"),
|
|
||||||
drop_index(State, "i_carboncopy_user"),
|
|
||||||
add_pkey(State, "carboncopy", ["server_host", "username", "resource"]),
|
|
||||||
create_index(State, "carboncopy", "i_carboncopy_sh_user", ["server_host", "username"]),
|
|
||||||
drop_sh_default(State, "carboncopy"),
|
|
||||||
|
|
||||||
add_sh_column(State, "push_session"),
|
|
||||||
drop_index(State, "i_push_usn"),
|
|
||||||
drop_index(State, "i_push_ut"),
|
|
||||||
add_pkey(State, "push_session", ["server_host", "username", "timestamp"]),
|
|
||||||
create_index(State, "push_session", "i_push_session_susn", ["server_host", "username", "service", "node"]),
|
|
||||||
drop_sh_default(State, "push_session"),
|
|
||||||
|
|
||||||
ok.
|
|
||||||
|
|
||||||
add_sh_column(#state{dbtype = pgsql} = State, Table) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " ADD COLUMN server_host text NOT NULL DEFAULT '",
|
|
||||||
(State#state.escape)(State#state.host),
|
|
||||||
"';"]);
|
|
||||||
add_sh_column(#state{dbtype = mysql} = State, Table) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " ADD COLUMN server_host text NOT NULL DEFAULT '",
|
|
||||||
(State#state.escape)(State#state.host),
|
|
||||||
"';"]).
|
|
||||||
|
|
||||||
drop_pkey(#state{dbtype = pgsql} = State, Table) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " DROP CONSTRAINT ", Table, "_pkey;"]);
|
|
||||||
drop_pkey(#state{dbtype = mysql} = State, Table) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " DROP PRIMARY KEY;"]).
|
|
||||||
|
|
||||||
add_pkey(#state{dbtype = pgsql} = State, Table, Cols) ->
|
|
||||||
SCols = string:join(Cols, ", "),
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " ADD PRIMARY KEY (", SCols, ");"]);
|
|
||||||
add_pkey(#state{dbtype = mysql} = State, Table, Cols) ->
|
|
||||||
SCols = string:join(Cols, ", "),
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " ADD PRIMARY KEY (", SCols, ");"]).
|
|
||||||
|
|
||||||
drop_sh_default(#state{dbtype = pgsql} = State, Table) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " ALTER COLUMN server_host DROP DEFAULT;"]);
|
|
||||||
drop_sh_default(#state{dbtype = mysql} = State, Table) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["ALTER TABLE ", Table, " ALTER COLUMN server_host DROP DEFAULT;"]).
|
|
||||||
|
|
||||||
drop_index(#state{dbtype = pgsql} = State, Index) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["DROP INDEX ", Index, ";"]);
|
|
||||||
drop_index(#state{dbtype = mysql} = State, Index) ->
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["DROP INDEX ", Index, ";"]).
|
|
||||||
|
|
||||||
create_unique_index(#state{dbtype = pgsql} = State, Table, Index, Cols) ->
|
|
||||||
SCols = string:join(Cols, ", "),
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["CREATE UNIQUE INDEX ", Index, " ON ", Table, " USING btree (",
|
|
||||||
SCols, ");"]);
|
|
||||||
create_unique_index(#state{dbtype = mysql} = State, Table, Index, Cols) ->
|
|
||||||
Cols2 = [C ++ "(75)" || C <- Cols],
|
|
||||||
SCols = string:join(Cols2, ", "),
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["CREATE UNIQUE INDEX ", Index, " ON ", Table, "(",
|
|
||||||
SCols, ");"]).
|
|
||||||
|
|
||||||
create_index(#state{dbtype = pgsql} = State, Table, Index, Cols) ->
|
|
||||||
SCols = string:join(Cols, ", "),
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["CREATE INDEX ", Index, " ON ", Table, " USING btree (",
|
|
||||||
SCols, ");"]);
|
|
||||||
create_index(#state{dbtype = mysql} = State, Table, Index, Cols) ->
|
|
||||||
Cols2 = [C ++ "(75)" || C <- Cols],
|
|
||||||
SCols = string:join(Cols2, ", "),
|
|
||||||
sql_query(
|
|
||||||
State#state.host,
|
|
||||||
["CREATE INDEX ", Index, " ON ", Table, "(",
|
|
||||||
SCols, ");"]).
|
|
||||||
|
|
||||||
sql_query(Host, Query) ->
|
|
||||||
io:format("executing \"~s\" on ~s~n", [Query, Host]),
|
|
||||||
case ejabberd_sql:sql_query(Host, Query) of
|
|
||||||
{error, Error} ->
|
|
||||||
io:format("error: ~p~n", [Error]),
|
|
||||||
ok;
|
|
||||||
_ ->
|
|
||||||
ok
|
|
||||||
end.
|
|
||||||
|
|
||||||
mod_options(_) -> [].
|
|
@ -41,8 +41,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_announce).
|
||||||
|
|
||||||
set_motd_users(LServer, USRs) ->
|
set_motd_users(LServer, USRs) ->
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
|
@ -38,15 +38,22 @@
|
|||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init() ->
|
init() ->
|
||||||
|
Host = ejabberd_config:get_myname(),
|
||||||
|
case ejabberd_sql:load_schema(Host, mod_bosh) of
|
||||||
|
ok ->
|
||||||
Node = erlang:atom_to_binary(node(), latin1),
|
Node = erlang:atom_to_binary(node(), latin1),
|
||||||
?DEBUG("Cleaning SQL 'bosh' table...", []),
|
?DEBUG("Cleaning SQL 'bosh' table...", []),
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
ejabberd_config:get_myname(), ?SQL("delete from bosh where node=%(Node)s")) of
|
Host,
|
||||||
|
?SQL("delete from bosh where node=%(Node)s")) of
|
||||||
{updated, _} ->
|
{updated, _} ->
|
||||||
ok;
|
ok;
|
||||||
Err ->
|
Err ->
|
||||||
?ERROR_MSG("failed to clean 'route' table: ~p", [Err]),
|
?ERROR_MSG("failed to clean 'route' table: ~p", [Err]),
|
||||||
Err
|
Err
|
||||||
|
end;
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
end.
|
end.
|
||||||
|
|
||||||
open_session(SID, Pid) ->
|
open_session(SID, Pid) ->
|
||||||
|
@ -38,8 +38,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_caps).
|
||||||
|
|
||||||
caps_read(LServer, {Node, SubNode}) ->
|
caps_read(LServer, {Node, SubNode}) ->
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
|
@ -35,7 +35,12 @@
|
|||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
clean_table(Host).
|
case ejabberd_sql:load_schema(Host, mod_carboncopy) of
|
||||||
|
ok ->
|
||||||
|
clean_table(Host);
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
|
end.
|
||||||
|
|
||||||
enable(LUser, LServer, LResource, NS) ->
|
enable(LUser, LServer, LResource, NS) ->
|
||||||
NodeS = erlang:atom_to_binary(node(), latin1),
|
NodeS = erlang:atom_to_binary(node(), latin1),
|
||||||
|
@ -39,8 +39,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_last).
|
||||||
|
|
||||||
get_last(LUser, LServer) ->
|
get_last(LUser, LServer) ->
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
|
@ -41,8 +41,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_mam).
|
||||||
|
|
||||||
remove_user(LUser, LServer) ->
|
remove_user(LUser, LServer) ->
|
||||||
ejabberd_sql:sql_query(
|
ejabberd_sql:sql_query(
|
||||||
|
@ -52,7 +52,12 @@
|
|||||||
init(Host, Opts) ->
|
init(Host, Opts) ->
|
||||||
case gen_mod:ram_db_mod(Host, Opts, mod_muc) of
|
case gen_mod:ram_db_mod(Host, Opts, mod_muc) of
|
||||||
?MODULE ->
|
?MODULE ->
|
||||||
|
case ejabberd_sql:load_schema(Host, mod_muc) of
|
||||||
|
ok ->
|
||||||
clean_tables(Host);
|
clean_tables(Host);
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
|
end;
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
end.
|
end.
|
||||||
|
@ -41,8 +41,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_offline).
|
||||||
|
|
||||||
store_message(#offline_msg{us = {LUser, LServer}} = M) ->
|
store_message(#offline_msg{us = {LUser, LServer}} = M) ->
|
||||||
From = M#offline_msg.from,
|
From = M#offline_msg.from,
|
||||||
|
@ -43,8 +43,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_privacy).
|
||||||
|
|
||||||
unset_default(LUser, LServer) ->
|
unset_default(LUser, LServer) ->
|
||||||
case unset_default_privacy_list(LUser, LServer) of
|
case unset_default_privacy_list(LUser, LServer) of
|
||||||
|
@ -38,8 +38,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_private).
|
||||||
|
|
||||||
set_data(LUser, LServer, Data) ->
|
set_data(LUser, LServer, Data) ->
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
|
@ -35,10 +35,13 @@
|
|||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init() ->
|
init() ->
|
||||||
|
Host = ejabberd_config:get_myname(),
|
||||||
|
case ejabberd_sql:load_schema(Host, mod_proxy65) of
|
||||||
|
ok ->
|
||||||
NodeS = erlang:atom_to_binary(node(), latin1),
|
NodeS = erlang:atom_to_binary(node(), latin1),
|
||||||
?DEBUG("Cleaning SQL 'proxy65' table...", []),
|
?DEBUG("Cleaning SQL 'proxy65' table...", []),
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
ejabberd_config:get_myname(),
|
Host,
|
||||||
?SQL("delete from proxy65 where "
|
?SQL("delete from proxy65 where "
|
||||||
"node_i=%(NodeS)s or node_t=%(NodeS)s")) of
|
"node_i=%(NodeS)s or node_t=%(NodeS)s")) of
|
||||||
{updated, _} ->
|
{updated, _} ->
|
||||||
@ -46,6 +49,9 @@ init() ->
|
|||||||
Err ->
|
Err ->
|
||||||
?ERROR_MSG("failed to clean 'proxy65' table: ~p", [Err]),
|
?ERROR_MSG("failed to clean 'proxy65' table: ~p", [Err]),
|
||||||
Err
|
Err
|
||||||
|
end;
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
end.
|
end.
|
||||||
|
|
||||||
register_stream(SID, Pid) ->
|
register_stream(SID, Pid) ->
|
||||||
|
@ -249,6 +249,7 @@ init([ServerHost, Opts]) ->
|
|||||||
ejabberd_mnesia:create(?MODULE, pubsub_last_item,
|
ejabberd_mnesia:create(?MODULE, pubsub_last_item,
|
||||||
[{ram_copies, [node()]},
|
[{ram_copies, [node()]},
|
||||||
{attributes, record_info(fields, pubsub_last_item)}]),
|
{attributes, record_info(fields, pubsub_last_item)}]),
|
||||||
|
load_sql_schema(ServerHost, Opts),
|
||||||
AllPlugins =
|
AllPlugins =
|
||||||
lists:flatmap(
|
lists:flatmap(
|
||||||
fun(Host) ->
|
fun(Host) ->
|
||||||
@ -3643,6 +3644,16 @@ do_transaction(ServerHost, Fun, Trans, DBType) ->
|
|||||||
{error, xmpp:err_internal_server_error(<<"Database failure">>, ejabberd_config:get_mylang())}
|
{error, xmpp:err_internal_server_error(<<"Database failure">>, ejabberd_config:get_mylang())}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
-spec load_sql_schema(binary(), gen_mod:opts()) -> ok | {error, atom()}.
|
||||||
|
load_sql_schema(Host, Opts) ->
|
||||||
|
case gen_mod:get_opt(db_type, Opts) of
|
||||||
|
sql ->
|
||||||
|
%% TODO: check result and stop at error
|
||||||
|
ejabberd_sql:load_schema(Host, ?MODULE);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end.
|
||||||
|
|
||||||
%%%% helpers
|
%%%% helpers
|
||||||
|
|
||||||
%% Add pubsub-specific error element
|
%% Add pubsub-specific error element
|
||||||
|
@ -40,8 +40,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_push).
|
||||||
|
|
||||||
store_session(LUser, LServer, NowTS, PushJID, Node, XData) ->
|
store_session(LUser, LServer, NowTS, PushJID, Node, XData) ->
|
||||||
XML = encode_xdata(XData),
|
XML = encode_xdata(XData),
|
||||||
|
@ -42,8 +42,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_roster).
|
||||||
|
|
||||||
read_roster_version(LUser, LServer) ->
|
read_roster_version(LUser, LServer) ->
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
|
@ -44,8 +44,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_shared_roster).
|
||||||
|
|
||||||
list_groups(Host) ->
|
list_groups(Host) ->
|
||||||
case ejabberd_sql:sql_query(
|
case ejabberd_sql:sql_query(
|
||||||
|
@ -42,8 +42,8 @@
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
init(_Host, _Opts) ->
|
init(Host, _Opts) ->
|
||||||
ok.
|
ejabberd_sql:load_schema(Host, mod_vcard).
|
||||||
|
|
||||||
stop(_Host) ->
|
stop(_Host) ->
|
||||||
ok.
|
ok.
|
||||||
|
@ -113,7 +113,7 @@ do_init_per_group(mysql, Config) ->
|
|||||||
case catch ejabberd_sql:sql_query(?MYSQL_VHOST, [<<"select 1;">>]) of
|
case catch ejabberd_sql:sql_query(?MYSQL_VHOST, [<<"select 1;">>]) of
|
||||||
{selected, _, _} ->
|
{selected, _, _} ->
|
||||||
mod_muc:shutdown_rooms(?MYSQL_VHOST),
|
mod_muc:shutdown_rooms(?MYSQL_VHOST),
|
||||||
create_sql_tables(mysql, ?config(base_dir, Config)),
|
clear_sql_tables(mysql, ?MYSQL_VHOST),
|
||||||
set_opt(server, ?MYSQL_VHOST, Config);
|
set_opt(server, ?MYSQL_VHOST, Config);
|
||||||
Err ->
|
Err ->
|
||||||
{skip, {mysql_not_available, Err}}
|
{skip, {mysql_not_available, Err}}
|
||||||
@ -122,7 +122,7 @@ do_init_per_group(pgsql, Config) ->
|
|||||||
case catch ejabberd_sql:sql_query(?PGSQL_VHOST, [<<"select 1;">>]) of
|
case catch ejabberd_sql:sql_query(?PGSQL_VHOST, [<<"select 1;">>]) of
|
||||||
{selected, _, _} ->
|
{selected, _, _} ->
|
||||||
mod_muc:shutdown_rooms(?PGSQL_VHOST),
|
mod_muc:shutdown_rooms(?PGSQL_VHOST),
|
||||||
create_sql_tables(pgsql, ?config(base_dir, Config)),
|
clear_sql_tables(pgsql, ?PGSQL_VHOST),
|
||||||
set_opt(server, ?PGSQL_VHOST, Config);
|
set_opt(server, ?PGSQL_VHOST, Config);
|
||||||
Err ->
|
Err ->
|
||||||
{skip, {pgsql_not_available, Err}}
|
{skip, {pgsql_not_available, Err}}
|
||||||
@ -131,6 +131,7 @@ do_init_per_group(sqlite, Config) ->
|
|||||||
case catch ejabberd_sql:sql_query(?SQLITE_VHOST, [<<"select 1;">>]) of
|
case catch ejabberd_sql:sql_query(?SQLITE_VHOST, [<<"select 1;">>]) of
|
||||||
{selected, _, _} ->
|
{selected, _, _} ->
|
||||||
mod_muc:shutdown_rooms(?SQLITE_VHOST),
|
mod_muc:shutdown_rooms(?SQLITE_VHOST),
|
||||||
|
clear_sql_tables(sqlite, ?SQLITE_VHOST),
|
||||||
set_opt(server, ?SQLITE_VHOST, Config);
|
set_opt(server, ?SQLITE_VHOST, Config);
|
||||||
Err ->
|
Err ->
|
||||||
{skip, {sqlite_not_available, Err}}
|
{skip, {sqlite_not_available, Err}}
|
||||||
@ -1070,92 +1071,26 @@ bookmark_conference() ->
|
|||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% SQL stuff
|
%%% SQL stuff
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
create_sql_tables(sqlite, _BaseDir) ->
|
clear_sql_tables(Type, Host) ->
|
||||||
ok;
|
case ejabberd_sql_schema:list_tables(Host, Type) of
|
||||||
create_sql_tables(Type, BaseDir) ->
|
{ok, Tabs} ->
|
||||||
{VHost, File} = case Type of
|
F = fun() ->
|
||||||
mysql ->
|
lists:foreach(
|
||||||
Path = case ejabberd_sql:use_new_schema() of
|
fun(Tab) ->
|
||||||
true ->
|
ejabberd_sql:sql_query_t(
|
||||||
"mysql.new.sql";
|
<<"DELETE FROM ", Tab/binary>>)
|
||||||
false ->
|
end, Tabs)
|
||||||
"mysql.sql"
|
|
||||||
end,
|
end,
|
||||||
{?MYSQL_VHOST, Path};
|
case ejabberd_sql:sql_transaction(Host, F) of
|
||||||
pgsql ->
|
|
||||||
Path = case ejabberd_sql:use_new_schema() of
|
|
||||||
true ->
|
|
||||||
"pg.new.sql";
|
|
||||||
false ->
|
|
||||||
"pg.sql"
|
|
||||||
end,
|
|
||||||
{?PGSQL_VHOST, Path}
|
|
||||||
end,
|
|
||||||
SQLFile = filename:join([BaseDir, "sql", File]),
|
|
||||||
CreationQueries = read_sql_queries(SQLFile),
|
|
||||||
DropTableQueries = drop_table_queries(CreationQueries),
|
|
||||||
case ejabberd_sql:sql_transaction(
|
|
||||||
VHost, DropTableQueries ++ CreationQueries) of
|
|
||||||
{atomic, ok} ->
|
{atomic, ok} ->
|
||||||
ok;
|
ok;
|
||||||
Err ->
|
Err ->
|
||||||
ct:fail({failed_to_create_sql_tables, Type, Err})
|
ct:fail({failed_to_clear_sql_tables, Type, Err})
|
||||||
end.
|
end;
|
||||||
|
|
||||||
read_sql_queries(File) ->
|
|
||||||
case file:open(File, [read, binary]) of
|
|
||||||
{ok, Fd} ->
|
|
||||||
read_lines(Fd, File, []);
|
|
||||||
Err ->
|
|
||||||
ct:fail({open_file_failed, File, Err})
|
|
||||||
end.
|
|
||||||
|
|
||||||
drop_table_queries(Queries) ->
|
|
||||||
lists:foldl(
|
|
||||||
fun(Query, Acc) ->
|
|
||||||
case split(str:to_lower(Query)) of
|
|
||||||
[<<"create">>, <<"table">>, Table|_] ->
|
|
||||||
[<<"DROP TABLE IF EXISTS ", Table/binary, ";">>|Acc];
|
|
||||||
_ ->
|
|
||||||
Acc
|
|
||||||
end
|
|
||||||
end, [], Queries).
|
|
||||||
|
|
||||||
read_lines(Fd, File, Acc) ->
|
|
||||||
case file:read_line(Fd) of
|
|
||||||
{ok, Line} ->
|
|
||||||
NewAcc = case str:strip(str:strip(Line, both, $\r), both, $\n) of
|
|
||||||
<<"--", _/binary>> ->
|
|
||||||
Acc;
|
|
||||||
<<>> ->
|
|
||||||
Acc;
|
|
||||||
_ ->
|
|
||||||
[Line|Acc]
|
|
||||||
end,
|
|
||||||
read_lines(Fd, File, NewAcc);
|
|
||||||
eof ->
|
|
||||||
QueryList = str:tokens(list_to_binary(lists:reverse(Acc)), <<";">>),
|
|
||||||
lists:flatmap(
|
|
||||||
fun(Query) ->
|
|
||||||
case str:strip(str:strip(Query, both, $\r), both, $\n) of
|
|
||||||
<<>> ->
|
|
||||||
[];
|
|
||||||
Q ->
|
|
||||||
[<<Q/binary, $;>>]
|
|
||||||
end
|
|
||||||
end, QueryList);
|
|
||||||
{error, _} = Err ->
|
{error, _} = Err ->
|
||||||
ct:fail({read_file_failed, File, Err})
|
ct:fail({failed_to_list_sql_tables, Type, Err})
|
||||||
end.
|
end.
|
||||||
|
|
||||||
split(Data) ->
|
|
||||||
lists:filter(
|
|
||||||
fun(<<>>) ->
|
|
||||||
false;
|
|
||||||
(_) ->
|
|
||||||
true
|
|
||||||
end, re:split(Data, <<"\s">>)).
|
|
||||||
|
|
||||||
clear_riak_tables(Config) ->
|
clear_riak_tables(Config) ->
|
||||||
User = ?config(user, Config),
|
User = ?config(user, Config),
|
||||||
Server = ?config(server, Config),
|
Server = ?config(server, Config),
|
||||||
|
@ -489,6 +489,7 @@ listen:
|
|||||||
loglevel: @@loglevel@@
|
loglevel: @@loglevel@@
|
||||||
max_fsm_queue: 1000
|
max_fsm_queue: 1000
|
||||||
queue_type: file
|
queue_type: file
|
||||||
|
new_sql_schema: true
|
||||||
modules:
|
modules:
|
||||||
mod_adhoc: []
|
mod_adhoc: []
|
||||||
mod_configure: []
|
mod_configure: []
|
||||||
|
Loading…
Reference in New Issue
Block a user