Add support for postgres instead of mysql. Change sql accourdingly. blob + varbinary -> bytea. No support for UNSIGNED or CREATE INDEX IF NOT EXISTS.

This commit is contained in:
Erik Johnston 2015-04-14 13:53:20 +01:00
parent 3c741682e5
commit 58d8339966
21 changed files with 153 additions and 140 deletions

View File

@ -373,6 +373,8 @@ def setup(config_options):
"use_unicode": True, "use_unicode": True,
"collation": "utf8mb4_bin", "collation": "utf8mb4_bin",
}) })
elif name == "psycopg2":
pass
elif name == "sqlite3": elif name == "sqlite3":
db_config.setdefault("args", {}).update({ db_config.setdefault("args", {}).update({
"cp_min": 1, "cp_min": 1,

View File

@ -236,7 +236,7 @@ def _setup_new_database(cur, database_engine):
cur.execute( cur.execute(
database_engine.convert_param_style( database_engine.convert_param_style(
"REPLACE INTO schema_version (version, upgraded)" "INSERT INTO schema_version (version, upgraded)"
" VALUES (?,?)" " VALUES (?,?)"
), ),
(max_current_ver, False,) (max_current_ver, False,)
@ -432,14 +432,11 @@ def executescript(txn, schema_path):
def _get_or_create_schema_state(txn, database_engine): def _get_or_create_schema_state(txn, database_engine):
try: # Bluntly try creating the schema_version tables.
# Bluntly try creating the schema_version tables. schema_path = os.path.join(
schema_path = os.path.join( dir_path, "schema", "schema_version.sql",
dir_path, "schema", "schema_version.sql", )
) executescript(txn, schema_path)
executescript(txn, schema_path)
except:
pass
txn.execute("SELECT version, upgraded FROM schema_version") txn.execute("SELECT version, upgraded FROM schema_version")
row = txn.fetchone() row = txn.fetchone()

View File

@ -330,7 +330,7 @@ class SQLBaseStore(object):
continue continue
raise raise
except Exception as e: except Exception as e:
logger.debug("[TXN FAIL] {%s}", name, e) logger.debug("[TXN FAIL] {%s} %s", name, e)
raise raise
finally: finally:
end = time.time() * 1000 end = time.time() * 1000

View File

@ -14,6 +14,7 @@
# limitations under the License. # limitations under the License.
from .maria import MariaEngine from .maria import MariaEngine
from .postgres import PostgresEngine
from .sqlite3 import Sqlite3Engine from .sqlite3 import Sqlite3Engine
import importlib import importlib
@ -22,6 +23,7 @@ import importlib
SUPPORTED_MODULE = { SUPPORTED_MODULE = {
"sqlite3": Sqlite3Engine, "sqlite3": Sqlite3Engine,
"mysql.connector": MariaEngine, "mysql.connector": MariaEngine,
"psycopg2": PostgresEngine,
} }

View File

@ -153,7 +153,7 @@ class EventFederationStore(SQLBaseStore):
results = self._get_prev_events_and_state( results = self._get_prev_events_and_state(
txn, txn,
event_id, event_id,
is_state=1, is_state=True,
) )
return [(e_id, h, ) for e_id, h, _ in results] return [(e_id, h, ) for e_id, h, _ in results]
@ -164,7 +164,7 @@ class EventFederationStore(SQLBaseStore):
} }
if is_state is not None: if is_state is not None:
keyvalues["is_state"] = is_state keyvalues["is_state"] = bool(is_state)
res = self._simple_select_list_txn( res = self._simple_select_list_txn(
txn, txn,
@ -259,7 +259,7 @@ class EventFederationStore(SQLBaseStore):
"event_id": event_id, "event_id": event_id,
"prev_event_id": e_id, "prev_event_id": e_id,
"room_id": room_id, "room_id": room_id,
"is_state": 0, "is_state": False,
}, },
) )
@ -397,7 +397,7 @@ class EventFederationStore(SQLBaseStore):
query = ( query = (
"SELECT prev_event_id FROM event_edges " "SELECT prev_event_id FROM event_edges "
"WHERE room_id = ? AND event_id = ? AND is_state = 0 " "WHERE room_id = ? AND event_id = ? AND is_state = ? "
"LIMIT ?" "LIMIT ?"
) )
@ -406,7 +406,7 @@ class EventFederationStore(SQLBaseStore):
for event_id in front: for event_id in front:
txn.execute( txn.execute(
query, query,
(room_id, event_id, limit - len(event_results)) (room_id, event_id, False, limit - len(event_results))
) )
for e_id, in txn.fetchall(): for e_id, in txn.fetchall():

View File

@ -188,12 +188,12 @@ class EventsStore(SQLBaseStore):
) )
sql = ( sql = (
"UPDATE events SET outlier = 0" "UPDATE events SET outlier = ?"
" WHERE event_id = ?" " WHERE event_id = ?"
) )
txn.execute( txn.execute(
sql, sql,
(event.event_id,) (False, event.event_id,)
) )
return return

View File

@ -105,14 +105,12 @@ class RoomStore(SQLBaseStore):
# We use non printing ascii character US (\x1F) as a separator # We use non printing ascii character US (\x1F) as a separator
sql = ( sql = (
"SELECT r.room_id, n.name, t.topic, " "SELECT r.room_id, max(n.name), max(t.topic)"
"group_concat(a.room_alias, '\x1F') " " FROM rooms AS r"
"FROM rooms AS r " " LEFT JOIN (%(topic)s) AS t ON t.room_id = r.room_id"
"LEFT JOIN (%(topic)s) AS t ON t.room_id = r.room_id " " LEFT JOIN (%(name)s) AS n ON n.room_id = r.room_id"
"LEFT JOIN (%(name)s) AS n ON n.room_id = r.room_id " " WHERE r.is_public = ?"
"INNER JOIN room_aliases AS a ON a.room_id = r.room_id " " GROUP BY r.room_id"
"WHERE r.is_public = ? "
"GROUP BY r.room_id "
) % { ) % {
"topic": topic_subquery, "topic": topic_subquery,
"name": name_subquery, "name": name_subquery,
@ -120,7 +118,22 @@ class RoomStore(SQLBaseStore):
txn.execute(sql, (is_public,)) txn.execute(sql, (is_public,))
return txn.fetchall() rows = txn.fetchall()
for i, row in enumerate(rows):
room_id = row[0]
aliases = self._simple_select_onecol_txn(
txn,
table="room_aliases",
keyvalues={
"room_id": room_id
},
retcol="room_alias",
)
rows[i] = list(row) + [aliases]
return rows
rows = yield self.runInteraction( rows = yield self.runInteraction(
"get_rooms", f "get_rooms", f
@ -131,9 +144,10 @@ class RoomStore(SQLBaseStore):
"room_id": r[0], "room_id": r[0],
"name": r[1], "name": r[1],
"topic": r[2], "topic": r[2],
"aliases": r[3].split("\x1F"), "aliases": r[3],
} }
for r in rows for r in rows
if r[3] # We only return rooms that have at least one alias.
] ]
defer.returnValue(ret) defer.returnValue(ret)

View File

@ -14,7 +14,7 @@
*/ */
CREATE TABLE IF NOT EXISTS application_services( CREATE TABLE IF NOT EXISTS application_services(
id BIGINT UNSIGNED PRIMARY KEY, id BIGINT PRIMARY KEY,
url VARCHAR(150), url VARCHAR(150),
token VARCHAR(150), token VARCHAR(150),
hs_token VARCHAR(150), hs_token VARCHAR(150),
@ -23,8 +23,8 @@ CREATE TABLE IF NOT EXISTS application_services(
); );
CREATE TABLE IF NOT EXISTS application_services_regex( CREATE TABLE IF NOT EXISTS application_services_regex(
id BIGINT UNSIGNED PRIMARY KEY, id BIGINT PRIMARY KEY,
as_id BIGINT UNSIGNED NOT NULL, as_id BIGINT NOT NULL,
namespace INTEGER, /* enum[room_id|room_alias|user_id] */ namespace INTEGER, /* enum[room_id|room_alias|user_id] */
regex VARCHAR(150), regex VARCHAR(150),
FOREIGN KEY(as_id) REFERENCES application_services(id) FOREIGN KEY(as_id) REFERENCES application_services(id)
@ -39,10 +39,10 @@ CREATE TABLE IF NOT EXISTS application_services_state(
CREATE TABLE IF NOT EXISTS application_services_txns( CREATE TABLE IF NOT EXISTS application_services_txns(
as_id VARCHAR(150) NOT NULL, as_id VARCHAR(150) NOT NULL,
txn_id INTEGER NOT NULL, txn_id INTEGER NOT NULL,
event_ids LONGBLOB NOT NULL, event_ids bytea NOT NULL,
UNIQUE(as_id, txn_id) UNIQUE(as_id, txn_id)
); );
CREATE INDEX IF NOT EXISTS application_services_txns_id ON application_services_txns ( CREATE INDEX application_services_txns_id ON application_services_txns (
as_id as_id
); );

View File

@ -19,8 +19,8 @@ CREATE TABLE IF NOT EXISTS event_forward_extremities(
UNIQUE (event_id, room_id) UNIQUE (event_id, room_id)
); );
CREATE INDEX IF NOT EXISTS ev_extrem_room ON event_forward_extremities(room_id); CREATE INDEX ev_extrem_room ON event_forward_extremities(room_id);
CREATE INDEX IF NOT EXISTS ev_extrem_id ON event_forward_extremities(event_id); CREATE INDEX ev_extrem_id ON event_forward_extremities(event_id);
CREATE TABLE IF NOT EXISTS event_backward_extremities( CREATE TABLE IF NOT EXISTS event_backward_extremities(
@ -29,8 +29,8 @@ CREATE TABLE IF NOT EXISTS event_backward_extremities(
UNIQUE (event_id, room_id) UNIQUE (event_id, room_id)
); );
CREATE INDEX IF NOT EXISTS ev_b_extrem_room ON event_backward_extremities(room_id); CREATE INDEX ev_b_extrem_room ON event_backward_extremities(room_id);
CREATE INDEX IF NOT EXISTS ev_b_extrem_id ON event_backward_extremities(event_id); CREATE INDEX ev_b_extrem_id ON event_backward_extremities(event_id);
CREATE TABLE IF NOT EXISTS event_edges( CREATE TABLE IF NOT EXISTS event_edges(
@ -41,8 +41,8 @@ CREATE TABLE IF NOT EXISTS event_edges(
UNIQUE (event_id, prev_event_id, room_id, is_state) UNIQUE (event_id, prev_event_id, room_id, is_state)
); );
CREATE INDEX IF NOT EXISTS ev_edges_id ON event_edges(event_id); CREATE INDEX ev_edges_id ON event_edges(event_id);
CREATE INDEX IF NOT EXISTS ev_edges_prev_id ON event_edges(prev_event_id); CREATE INDEX ev_edges_prev_id ON event_edges(prev_event_id);
CREATE TABLE IF NOT EXISTS room_depth( CREATE TABLE IF NOT EXISTS room_depth(
@ -51,17 +51,17 @@ CREATE TABLE IF NOT EXISTS room_depth(
UNIQUE (room_id) UNIQUE (room_id)
); );
CREATE INDEX IF NOT EXISTS room_depth_room ON room_depth(room_id); CREATE INDEX room_depth_room ON room_depth(room_id);
create TABLE IF NOT EXISTS event_destinations( create TABLE IF NOT EXISTS event_destinations(
event_id VARCHAR(150) NOT NULL, event_id VARCHAR(150) NOT NULL,
destination VARCHAR(150) NOT NULL, destination VARCHAR(150) NOT NULL,
delivered_ts BIGINT UNSIGNED DEFAULT 0, -- or 0 if not delivered delivered_ts BIGINT DEFAULT 0, -- or 0 if not delivered
UNIQUE (event_id, destination) UNIQUE (event_id, destination)
); );
CREATE INDEX IF NOT EXISTS event_destinations_id ON event_destinations(event_id); CREATE INDEX event_destinations_id ON event_destinations(event_id);
CREATE TABLE IF NOT EXISTS state_forward_extremities( CREATE TABLE IF NOT EXISTS state_forward_extremities(
@ -72,10 +72,10 @@ CREATE TABLE IF NOT EXISTS state_forward_extremities(
UNIQUE (event_id, room_id) UNIQUE (event_id, room_id)
); );
CREATE INDEX IF NOT EXISTS st_extrem_keys ON state_forward_extremities( CREATE INDEX st_extrem_keys ON state_forward_extremities(
room_id, type, state_key room_id, type, state_key
); );
CREATE INDEX IF NOT EXISTS st_extrem_id ON state_forward_extremities(event_id); CREATE INDEX st_extrem_id ON state_forward_extremities(event_id);
CREATE TABLE IF NOT EXISTS event_auth( CREATE TABLE IF NOT EXISTS event_auth(
@ -85,5 +85,5 @@ CREATE TABLE IF NOT EXISTS event_auth(
UNIQUE (event_id, auth_id, room_id) UNIQUE (event_id, auth_id, room_id)
); );
CREATE INDEX IF NOT EXISTS evauth_edges_id ON event_auth(event_id); CREATE INDEX evauth_edges_id ON event_auth(event_id);
CREATE INDEX IF NOT EXISTS evauth_edges_auth_id ON event_auth(auth_id); CREATE INDEX evauth_edges_auth_id ON event_auth(auth_id);

View File

@ -16,40 +16,40 @@
CREATE TABLE IF NOT EXISTS event_content_hashes ( CREATE TABLE IF NOT EXISTS event_content_hashes (
event_id VARCHAR(150), event_id VARCHAR(150),
algorithm VARCHAR(150), algorithm VARCHAR(150),
hash LONGBLOB, hash bytea,
UNIQUE (event_id, algorithm) UNIQUE (event_id, algorithm)
); );
CREATE INDEX IF NOT EXISTS event_content_hashes_id ON event_content_hashes(event_id); CREATE INDEX event_content_hashes_id ON event_content_hashes(event_id);
CREATE TABLE IF NOT EXISTS event_reference_hashes ( CREATE TABLE IF NOT EXISTS event_reference_hashes (
event_id VARCHAR(150), event_id VARCHAR(150),
algorithm VARCHAR(150), algorithm VARCHAR(150),
hash LONGBLOB, hash bytea,
UNIQUE (event_id, algorithm) UNIQUE (event_id, algorithm)
); );
CREATE INDEX IF NOT EXISTS event_reference_hashes_id ON event_reference_hashes(event_id); CREATE INDEX event_reference_hashes_id ON event_reference_hashes(event_id);
CREATE TABLE IF NOT EXISTS event_signatures ( CREATE TABLE IF NOT EXISTS event_signatures (
event_id VARCHAR(150), event_id VARCHAR(150),
signature_name VARCHAR(150), signature_name VARCHAR(150),
key_id VARCHAR(150), key_id VARCHAR(150),
signature LONGBLOB, signature bytea,
UNIQUE (event_id, signature_name, key_id) UNIQUE (event_id, signature_name, key_id)
); );
CREATE INDEX IF NOT EXISTS event_signatures_id ON event_signatures(event_id); CREATE INDEX event_signatures_id ON event_signatures(event_id);
CREATE TABLE IF NOT EXISTS event_edge_hashes( CREATE TABLE IF NOT EXISTS event_edge_hashes(
event_id VARCHAR(150), event_id VARCHAR(150),
prev_event_id VARCHAR(150), prev_event_id VARCHAR(150),
algorithm VARCHAR(150), algorithm VARCHAR(150),
hash LONGBLOB, hash bytea,
UNIQUE (event_id, prev_event_id, algorithm) UNIQUE (event_id, prev_event_id, algorithm)
); );
CREATE INDEX IF NOT EXISTS event_edge_hashes_id ON event_edge_hashes(event_id); CREATE INDEX event_edge_hashes_id ON event_edge_hashes(event_id);

View File

@ -14,33 +14,33 @@
*/ */
CREATE TABLE IF NOT EXISTS events( CREATE TABLE IF NOT EXISTS events(
stream_ordering BIGINT UNSIGNED PRIMARY KEY, stream_ordering BIGINT PRIMARY KEY,
topological_ordering BIGINT UNSIGNED NOT NULL, topological_ordering BIGINT NOT NULL,
event_id VARCHAR(150) NOT NULL, event_id VARCHAR(150) NOT NULL,
type VARCHAR(150) NOT NULL, type VARCHAR(150) NOT NULL,
room_id VARCHAR(150) NOT NULL, room_id VARCHAR(150) NOT NULL,
content LONGBLOB NOT NULL, content bytea NOT NULL,
unrecognized_keys LONGBLOB, unrecognized_keys bytea,
processed BOOL NOT NULL, processed BOOL NOT NULL,
outlier BOOL NOT NULL, outlier BOOL NOT NULL,
depth BIGINT UNSIGNED DEFAULT 0 NOT NULL, depth BIGINT DEFAULT 0 NOT NULL,
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS events_stream_ordering ON events (stream_ordering); CREATE INDEX events_stream_ordering ON events (stream_ordering);
CREATE INDEX IF NOT EXISTS events_topological_ordering ON events (topological_ordering); CREATE INDEX events_topological_ordering ON events (topological_ordering);
CREATE INDEX IF NOT EXISTS events_room_id ON events (room_id); CREATE INDEX events_room_id ON events (room_id);
CREATE TABLE IF NOT EXISTS event_json( CREATE TABLE IF NOT EXISTS event_json(
event_id VARCHAR(150) NOT NULL, event_id VARCHAR(150) NOT NULL,
room_id VARCHAR(150) NOT NULL, room_id VARCHAR(150) NOT NULL,
internal_metadata LONGBLOB NOT NULL, internal_metadata bytea NOT NULL,
json LONGBLOB NOT NULL, json bytea NOT NULL,
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS event_json_room_id ON event_json(room_id); CREATE INDEX event_json_room_id ON event_json(room_id);
CREATE TABLE IF NOT EXISTS state_events( CREATE TABLE IF NOT EXISTS state_events(
@ -52,9 +52,9 @@ CREATE TABLE IF NOT EXISTS state_events(
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS state_events_room_id ON state_events (room_id); CREATE INDEX state_events_room_id ON state_events (room_id);
CREATE INDEX IF NOT EXISTS state_events_type ON state_events (type); CREATE INDEX state_events_type ON state_events (type);
CREATE INDEX IF NOT EXISTS state_events_state_key ON state_events (state_key); CREATE INDEX state_events_state_key ON state_events (state_key);
CREATE TABLE IF NOT EXISTS current_state_events( CREATE TABLE IF NOT EXISTS current_state_events(
@ -66,9 +66,9 @@ CREATE TABLE IF NOT EXISTS current_state_events(
UNIQUE (room_id, type, state_key) UNIQUE (room_id, type, state_key)
); );
CREATE INDEX IF NOT EXISTS current_state_events_room_id ON current_state_events (room_id); CREATE INDEX current_state_events_room_id ON current_state_events (room_id);
CREATE INDEX IF NOT EXISTS current_state_events_type ON current_state_events (type); CREATE INDEX current_state_events_type ON current_state_events (type);
CREATE INDEX IF NOT EXISTS current_state_events_state_key ON current_state_events (state_key); CREATE INDEX current_state_events_state_key ON current_state_events (state_key);
CREATE TABLE IF NOT EXISTS room_memberships( CREATE TABLE IF NOT EXISTS room_memberships(
event_id VARCHAR(150) NOT NULL, event_id VARCHAR(150) NOT NULL,
@ -79,8 +79,8 @@ CREATE TABLE IF NOT EXISTS room_memberships(
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS room_memberships_room_id ON room_memberships (room_id); CREATE INDEX room_memberships_room_id ON room_memberships (room_id);
CREATE INDEX IF NOT EXISTS room_memberships_user_id ON room_memberships (user_id); CREATE INDEX room_memberships_user_id ON room_memberships (user_id);
CREATE TABLE IF NOT EXISTS feedback( CREATE TABLE IF NOT EXISTS feedback(
event_id VARCHAR(150) NOT NULL, event_id VARCHAR(150) NOT NULL,
@ -98,7 +98,7 @@ CREATE TABLE IF NOT EXISTS topics(
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS topics_room_id ON topics(room_id); CREATE INDEX topics_room_id ON topics(room_id);
CREATE TABLE IF NOT EXISTS room_names( CREATE TABLE IF NOT EXISTS room_names(
event_id VARCHAR(150) NOT NULL, event_id VARCHAR(150) NOT NULL,
@ -107,7 +107,7 @@ CREATE TABLE IF NOT EXISTS room_names(
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS room_names_room_id ON room_names(room_id); CREATE INDEX room_names_room_id ON room_names(room_id);
CREATE TABLE IF NOT EXISTS rooms( CREATE TABLE IF NOT EXISTS rooms(
room_id VARCHAR(150) PRIMARY KEY NOT NULL, room_id VARCHAR(150) PRIMARY KEY NOT NULL,
@ -121,4 +121,4 @@ CREATE TABLE IF NOT EXISTS room_hosts(
UNIQUE (room_id, host) UNIQUE (room_id, host)
); );
CREATE INDEX IF NOT EXISTS room_hosts_room_id ON room_hosts (room_id); CREATE INDEX room_hosts_room_id ON room_hosts (room_id);

View File

@ -16,8 +16,8 @@ CREATE TABLE IF NOT EXISTS server_tls_certificates(
server_name VARCHAR(150), -- Server name. server_name VARCHAR(150), -- Server name.
fingerprint VARCHAR(150), -- Certificate fingerprint. fingerprint VARCHAR(150), -- Certificate fingerprint.
from_server VARCHAR(150), -- Which key server the certificate was fetched from. from_server VARCHAR(150), -- Which key server the certificate was fetched from.
ts_added_ms BIGINT UNSIGNED, -- When the certifcate was added. ts_added_ms BIGINT, -- When the certifcate was added.
tls_certificate LONGBLOB, -- DER encoded x509 certificate. tls_certificate bytea, -- DER encoded x509 certificate.
UNIQUE (server_name, fingerprint) UNIQUE (server_name, fingerprint)
); );
@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS server_signature_keys(
server_name VARCHAR(150), -- Server name. server_name VARCHAR(150), -- Server name.
key_id VARCHAR(150), -- Key version. key_id VARCHAR(150), -- Key version.
from_server VARCHAR(150), -- Which key server the key was fetched form. from_server VARCHAR(150), -- Which key server the key was fetched form.
ts_added_ms BIGINT UNSIGNED, -- When the key was added. ts_added_ms BIGINT, -- When the key was added.
verify_key LONGBLOB, -- NACL verification key. verify_key bytea, -- NACL verification key.
UNIQUE (server_name, key_id) UNIQUE (server_name, key_id)
); );

View File

@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS local_media_repository (
media_id VARCHAR(150), -- The id used to refer to the media. media_id VARCHAR(150), -- The id used to refer to the media.
media_type VARCHAR(150), -- The MIME-type of the media. media_type VARCHAR(150), -- The MIME-type of the media.
media_length INTEGER, -- Length of the media in bytes. media_length INTEGER, -- Length of the media in bytes.
created_ts BIGINT UNSIGNED, -- When the content was uploaded in ms. created_ts BIGINT, -- When the content was uploaded in ms.
upload_name VARCHAR(150), -- The name the media was uploaded with. upload_name VARCHAR(150), -- The name the media was uploaded with.
user_id VARCHAR(150), -- The user who uploaded the file. user_id VARCHAR(150), -- The user who uploaded the file.
UNIQUE (media_id) UNIQUE (media_id)
@ -35,14 +35,14 @@ CREATE TABLE IF NOT EXISTS local_media_repository_thumbnails (
) )
); );
CREATE INDEX IF NOT EXISTS local_media_repository_thumbnails_media_id CREATE INDEX local_media_repository_thumbnails_media_id
ON local_media_repository_thumbnails (media_id); ON local_media_repository_thumbnails (media_id);
CREATE TABLE IF NOT EXISTS remote_media_cache ( CREATE TABLE IF NOT EXISTS remote_media_cache (
media_origin VARCHAR(150), -- The remote HS the media came from. media_origin VARCHAR(150), -- The remote HS the media came from.
media_id VARCHAR(150), -- The id used to refer to the media on that server. media_id VARCHAR(150), -- The id used to refer to the media on that server.
media_type VARCHAR(150), -- The MIME-type of the media. media_type VARCHAR(150), -- The MIME-type of the media.
created_ts BIGINT UNSIGNED, -- When the content was uploaded in ms. created_ts BIGINT, -- When the content was uploaded in ms.
upload_name VARCHAR(150), -- The name the media was uploaded with. upload_name VARCHAR(150), -- The name the media was uploaded with.
media_length INTEGER, -- Length of the media in bytes. media_length INTEGER, -- Length of the media in bytes.
filesystem_id VARCHAR(150), -- The name used to store the media on disk. filesystem_id VARCHAR(150), -- The name used to store the media on disk.
@ -64,5 +64,5 @@ CREATE TABLE IF NOT EXISTS remote_media_cache_thumbnails (
) )
); );
CREATE INDEX IF NOT EXISTS remote_media_cache_thumbnails_media_id CREATE INDEX remote_media_cache_thumbnails_media_id
ON remote_media_cache_thumbnails (media_id); ON remote_media_cache_thumbnails (media_id);

View File

@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS presence(
user_id VARCHAR(150) NOT NULL, user_id VARCHAR(150) NOT NULL,
state VARCHAR(20), state VARCHAR(20),
status_msg VARCHAR(150), status_msg VARCHAR(150),
mtime BIGINT UNSIGNED, -- miliseconds since last state change mtime BIGINT, -- miliseconds since last state change
UNIQUE (user_id) UNIQUE (user_id)
); );
@ -37,4 +37,4 @@ CREATE TABLE IF NOT EXISTS presence_list(
UNIQUE (user_id, observed_user_id) UNIQUE (user_id, observed_user_id)
); );
CREATE INDEX IF NOT EXISTS presence_list_user_id ON presence_list (user_id); CREATE INDEX presence_list_user_id ON presence_list (user_id);

View File

@ -22,52 +22,52 @@ CREATE TABLE IF NOT EXISTS rejections(
-- Push notification endpoints that users have configured -- Push notification endpoints that users have configured
CREATE TABLE IF NOT EXISTS pushers ( CREATE TABLE IF NOT EXISTS pushers (
id BIGINT UNSIGNED PRIMARY KEY, id BIGINT PRIMARY KEY,
user_name VARCHAR(150) NOT NULL, user_name VARCHAR(150) NOT NULL,
profile_tag VARCHAR(32) NOT NULL, profile_tag VARCHAR(32) NOT NULL,
kind VARCHAR(8) NOT NULL, kind VARCHAR(8) NOT NULL,
app_id VARCHAR(64) NOT NULL, app_id VARCHAR(64) NOT NULL,
app_display_name VARCHAR(64) NOT NULL, app_display_name VARCHAR(64) NOT NULL,
device_display_name VARCHAR(128) NOT NULL, device_display_name VARCHAR(128) NOT NULL,
pushkey VARBINARY(512) NOT NULL, pushkey bytea NOT NULL,
ts BIGINT UNSIGNED NOT NULL, ts BIGINT NOT NULL,
lang VARCHAR(8), lang VARCHAR(8),
data LONGBLOB, data bytea,
last_token TEXT, last_token TEXT,
last_success BIGINT UNSIGNED, last_success BIGINT,
failing_since BIGINT UNSIGNED, failing_since BIGINT,
UNIQUE (app_id, pushkey) UNIQUE (app_id, pushkey)
); );
CREATE TABLE IF NOT EXISTS push_rules ( CREATE TABLE IF NOT EXISTS push_rules (
id BIGINT UNSIGNED PRIMARY KEY, id BIGINT PRIMARY KEY,
user_name VARCHAR(150) NOT NULL, user_name VARCHAR(150) NOT NULL,
rule_id VARCHAR(150) NOT NULL, rule_id VARCHAR(150) NOT NULL,
priority_class TINYINT NOT NULL, priority_class SMALLINT NOT NULL,
priority INTEGER NOT NULL DEFAULT 0, priority INTEGER NOT NULL DEFAULT 0,
conditions VARCHAR(150) NOT NULL, conditions VARCHAR(150) NOT NULL,
actions VARCHAR(150) NOT NULL, actions VARCHAR(150) NOT NULL,
UNIQUE(user_name, rule_id) UNIQUE(user_name, rule_id)
); );
CREATE INDEX IF NOT EXISTS push_rules_user_name on push_rules (user_name); CREATE INDEX push_rules_user_name on push_rules (user_name);
CREATE TABLE IF NOT EXISTS user_filters( CREATE TABLE IF NOT EXISTS user_filters(
user_id VARCHAR(150), user_id VARCHAR(150),
filter_id BIGINT UNSIGNED, filter_id BIGINT,
filter_json LONGBLOB filter_json bytea
); );
CREATE INDEX IF NOT EXISTS user_filters_by_user_id_filter_id ON user_filters( CREATE INDEX user_filters_by_user_id_filter_id ON user_filters(
user_id, filter_id user_id, filter_id
); );
CREATE TABLE IF NOT EXISTS push_rules_enable ( CREATE TABLE IF NOT EXISTS push_rules_enable (
id BIGINT UNSIGNED PRIMARY KEY, id BIGINT PRIMARY KEY,
user_name VARCHAR(150) NOT NULL, user_name VARCHAR(150) NOT NULL,
rule_id VARCHAR(150) NOT NULL, rule_id VARCHAR(150) NOT NULL,
enabled TINYINT, enabled SMALLINT,
UNIQUE(user_name, rule_id) UNIQUE(user_name, rule_id)
); );
CREATE INDEX IF NOT EXISTS push_rules_enable_user_name on push_rules_enable (user_name); CREATE INDEX push_rules_enable_user_name on push_rules_enable (user_name);

View File

@ -18,5 +18,5 @@ CREATE TABLE IF NOT EXISTS redactions (
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS redactions_event_id ON redactions (event_id); CREATE INDEX redactions_event_id ON redactions (event_id);
CREATE INDEX IF NOT EXISTS redactions_redacts ON redactions (redacts); CREATE INDEX redactions_redacts ON redactions (redacts);

View File

@ -14,7 +14,7 @@
*/ */
CREATE TABLE IF NOT EXISTS state_groups( CREATE TABLE IF NOT EXISTS state_groups(
id BIGINT UNSIGNED PRIMARY KEY, id BIGINT PRIMARY KEY,
room_id VARCHAR(150) NOT NULL, room_id VARCHAR(150) NOT NULL,
event_id VARCHAR(150) NOT NULL event_id VARCHAR(150) NOT NULL
); );
@ -33,8 +33,8 @@ CREATE TABLE IF NOT EXISTS event_to_state_groups(
UNIQUE (event_id) UNIQUE (event_id)
); );
CREATE INDEX IF NOT EXISTS state_groups_id ON state_groups(id); CREATE INDEX state_groups_id ON state_groups(id);
CREATE INDEX IF NOT EXISTS state_groups_state_id ON state_groups_state(state_group); CREATE INDEX state_groups_state_id ON state_groups_state(state_group);
CREATE INDEX IF NOT EXISTS state_groups_state_tuple ON state_groups_state(room_id, type, state_key); CREATE INDEX state_groups_state_tuple ON state_groups_state(room_id, type, state_key);
CREATE INDEX IF NOT EXISTS event_to_state_groups_id ON event_to_state_groups(event_id); CREATE INDEX event_to_state_groups_id ON event_to_state_groups(event_id);

View File

@ -16,32 +16,32 @@
CREATE TABLE IF NOT EXISTS received_transactions( CREATE TABLE IF NOT EXISTS received_transactions(
transaction_id VARCHAR(150), transaction_id VARCHAR(150),
origin VARCHAR(150), origin VARCHAR(150),
ts BIGINT UNSIGNED, ts BIGINT,
response_code INTEGER, response_code INTEGER,
response_json LONGBLOB, response_json bytea,
has_been_referenced BOOL default 0, -- Whether thishas been referenced by a prev_tx has_been_referenced smallint default 0, -- Whether thishas been referenced by a prev_tx
UNIQUE (transaction_id, origin) UNIQUE (transaction_id, origin)
); );
CREATE INDEX IF NOT EXISTS transactions_have_ref ON received_transactions(origin, has_been_referenced);-- WHERE has_been_referenced = 0; CREATE INDEX transactions_have_ref ON received_transactions(origin, has_been_referenced);-- WHERE has_been_referenced = 0;
-- Stores what transactions we've sent, what their response was (if we got one) and whether we have -- Stores what transactions we've sent, what their response was (if we got one) and whether we have
-- since referenced the transaction in another outgoing transaction -- since referenced the transaction in another outgoing transaction
CREATE TABLE IF NOT EXISTS sent_transactions( CREATE TABLE IF NOT EXISTS sent_transactions(
id BIGINT UNSIGNED PRIMARY KEY, -- This is used to apply insertion ordering id BIGINT PRIMARY KEY, -- This is used to apply insertion ordering
transaction_id VARCHAR(150), transaction_id VARCHAR(150),
destination VARCHAR(150), destination VARCHAR(150),
response_code INTEGER DEFAULT 0, response_code INTEGER DEFAULT 0,
response_json LONGBLOB, response_json bytea,
ts BIGINT UNSIGNED ts BIGINT
); );
CREATE INDEX IF NOT EXISTS sent_transaction_dest ON sent_transactions(destination); CREATE INDEX sent_transaction_dest ON sent_transactions(destination);
CREATE INDEX IF NOT EXISTS sent_transaction_txn_id ON sent_transactions(transaction_id); CREATE INDEX sent_transaction_txn_id ON sent_transactions(transaction_id);
-- So that we can do an efficient look up of all transactions that have yet to be successfully -- So that we can do an efficient look up of all transactions that have yet to be successfully
-- sent. -- sent.
CREATE INDEX IF NOT EXISTS sent_transaction_sent ON sent_transactions(response_code); CREATE INDEX sent_transaction_sent ON sent_transactions(response_code);
-- For sent transactions only. -- For sent transactions only.
@ -53,11 +53,11 @@ CREATE TABLE IF NOT EXISTS transaction_id_to_pdu(
UNIQUE (transaction_id, destination) UNIQUE (transaction_id, destination)
); );
CREATE INDEX IF NOT EXISTS transaction_id_to_pdu_dest ON transaction_id_to_pdu(destination); CREATE INDEX transaction_id_to_pdu_dest ON transaction_id_to_pdu(destination);
-- To track destination health -- To track destination health
CREATE TABLE IF NOT EXISTS destinations( CREATE TABLE IF NOT EXISTS destinations(
destination VARCHAR(150) PRIMARY KEY, destination VARCHAR(150) PRIMARY KEY,
retry_last_ts BIGINT UNSIGNED, retry_last_ts BIGINT,
retry_interval INTEGER retry_interval INTEGER
); );

View File

@ -15,17 +15,17 @@
CREATE TABLE IF NOT EXISTS users( CREATE TABLE IF NOT EXISTS users(
name VARCHAR(150), name VARCHAR(150),
password_hash VARCHAR(150), password_hash VARCHAR(150),
creation_ts BIGINT UNSIGNED, creation_ts BIGINT,
admin BOOL DEFAULT 0 NOT NULL, admin SMALLINT DEFAULT 0 NOT NULL,
UNIQUE(name) UNIQUE(name)
); );
CREATE TABLE IF NOT EXISTS access_tokens( CREATE TABLE IF NOT EXISTS access_tokens(
id BIGINT UNSIGNED PRIMARY KEY, id BIGINT PRIMARY KEY,
user_id VARCHAR(150) NOT NULL, user_id VARCHAR(150) NOT NULL,
device_id VARCHAR(150), device_id VARCHAR(150),
token VARCHAR(150) NOT NULL, token VARCHAR(150) NOT NULL,
last_used BIGINT UNSIGNED, last_used BIGINT,
UNIQUE(token) UNIQUE(token)
); );
@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS user_ips (
device_id VARCHAR(150), device_id VARCHAR(150),
ip VARCHAR(150) NOT NULL, ip VARCHAR(150) NOT NULL,
user_agent VARCHAR(150) NOT NULL, user_agent VARCHAR(150) NOT NULL,
last_seen BIGINT UNSIGNED NOT NULL last_seen BIGINT NOT NULL
); );
CREATE INDEX IF NOT EXISTS user_ips_user ON user_ips(user); CREATE INDEX IF NOT EXISTS user_ips_user ON user_ips(user);

View File

@ -14,16 +14,14 @@
*/ */
CREATE TABLE IF NOT EXISTS schema_version( CREATE TABLE IF NOT EXISTS schema_version(
`Lock` CHAR(1) NOT NULL DEFAULT 'X' UNIQUE, -- Makes sure this table only has one row. Lock CHAR(1) NOT NULL DEFAULT 'X' UNIQUE, -- Makes sure this table only has one row.
`version` INTEGER NOT NULL, version INTEGER NOT NULL,
`upgraded` BOOL NOT NULL, -- Whether we reached this version from an upgrade or an initial schema. upgraded BOOL NOT NULL, -- Whether we reached this version from an upgrade or an initial schema.
CHECK (`Lock`='X') CHECK (Lock='X')
); );
CREATE TABLE IF NOT EXISTS applied_schema_deltas( CREATE TABLE IF NOT EXISTS applied_schema_deltas(
`version` INTEGER NOT NULL, version INTEGER NOT NULL,
`file` VARCHAR(150) NOT NULL, file VARCHAR(150) NOT NULL,
UNIQUE(version, file) UNIQUE(version, file)
); );
CREATE INDEX IF NOT EXISTS schema_deltas_ver ON applied_schema_deltas(version);

View File

@ -240,7 +240,7 @@ class StreamStore(SQLBaseStore):
sql = ( sql = (
"SELECT e.event_id, e.stream_ordering FROM events AS e WHERE " "SELECT e.event_id, e.stream_ordering FROM events AS e WHERE "
"(e.outlier = 0 AND (room_id IN (%(current)s)) OR " "(e.outlier = ? AND (room_id IN (%(current)s)) OR "
"(event_id IN (%(invites)s))) " "(event_id IN (%(invites)s))) "
"AND e.stream_ordering > ? AND e.stream_ordering <= ? " "AND e.stream_ordering > ? AND e.stream_ordering <= ? "
"ORDER BY stream_ordering ASC LIMIT %(limit)d " "ORDER BY stream_ordering ASC LIMIT %(limit)d "
@ -251,7 +251,7 @@ class StreamStore(SQLBaseStore):
} }
def f(txn): def f(txn):
txn.execute(sql, (user_id, user_id, from_id.stream, to_id.stream,)) txn.execute(sql, (False, user_id, user_id, from_id.stream, to_id.stream,))
rows = self.cursor_to_dict(txn) rows = self.cursor_to_dict(txn)
@ -283,7 +283,7 @@ class StreamStore(SQLBaseStore):
# Tokens really represent positions between elements, but we use # Tokens really represent positions between elements, but we use
# the convention of pointing to the event before the gap. Hence # the convention of pointing to the event before the gap. Hence
# we have a bit of asymmetry when it comes to equalities. # we have a bit of asymmetry when it comes to equalities.
args = [room_id] args = [False, room_id]
if direction == 'b': if direction == 'b':
order = "DESC" order = "DESC"
bounds = _StreamToken.parse(from_key).upper_bound() bounds = _StreamToken.parse(from_key).upper_bound()
@ -307,7 +307,7 @@ class StreamStore(SQLBaseStore):
sql = ( sql = (
"SELECT * FROM events" "SELECT * FROM events"
" WHERE outlier = 0 AND room_id = ? AND %(bounds)s" " WHERE outlier = ? AND room_id = ? AND %(bounds)s"
" ORDER BY topological_ordering %(order)s," " ORDER BY topological_ordering %(order)s,"
" stream_ordering %(order)s %(limit)s" " stream_ordering %(order)s %(limit)s"
) % { ) % {
@ -358,7 +358,7 @@ class StreamStore(SQLBaseStore):
sql = ( sql = (
"SELECT stream_ordering, topological_ordering, event_id" "SELECT stream_ordering, topological_ordering, event_id"
" FROM events" " FROM events"
" WHERE room_id = ? AND stream_ordering <= ? AND outlier = 0" " WHERE room_id = ? AND stream_ordering <= ? AND outlier = ?"
" ORDER BY topological_ordering DESC, stream_ordering DESC" " ORDER BY topological_ordering DESC, stream_ordering DESC"
" LIMIT ?" " LIMIT ?"
) )
@ -368,17 +368,17 @@ class StreamStore(SQLBaseStore):
"SELECT stream_ordering, topological_ordering, event_id" "SELECT stream_ordering, topological_ordering, event_id"
" FROM events" " FROM events"
" WHERE room_id = ? AND stream_ordering > ?" " WHERE room_id = ? AND stream_ordering > ?"
" AND stream_ordering <= ? AND outlier = 0" " AND stream_ordering <= ? AND outlier = ?"
" ORDER BY topological_ordering DESC, stream_ordering DESC" " ORDER BY topological_ordering DESC, stream_ordering DESC"
" LIMIT ?" " LIMIT ?"
) )
def get_recent_events_for_room_txn(txn): def get_recent_events_for_room_txn(txn):
if from_token is None: if from_token is None:
txn.execute(sql, (room_id, end_token.stream, limit,)) txn.execute(sql, (room_id, end_token.stream, False, limit,))
else: else:
txn.execute(sql, ( txn.execute(sql, (
room_id, from_token.stream, end_token.stream, limit room_id, from_token.stream, end_token.stream, False, limit
)) ))
rows = self.cursor_to_dict(txn) rows = self.cursor_to_dict(txn)