Add WHERE clause support to index creation

This commit is contained in:
Erik Johnston 2016-09-12 16:55:01 +01:00
parent 502c901e11
commit c94de0ab60
2 changed files with 16 additions and 9 deletions

View File

@ -219,7 +219,7 @@ class BackgroundUpdateStore(SQLBaseStore):
self._background_update_handlers[update_name] = update_handler self._background_update_handlers[update_name] = update_handler
def register_background_index_update(self, update_name, index_name, def register_background_index_update(self, update_name, index_name,
table, columns): table, columns, where_clause=None):
"""Helper for store classes to do a background index addition """Helper for store classes to do a background index addition
To use: To use:
@ -243,14 +243,20 @@ class BackgroundUpdateStore(SQLBaseStore):
conc = True conc = True
else: else:
conc = False conc = False
# We don't use partial indices on SQLite as it wasn't introduced
# until 3.8, and wheezy has 3.7
where_clause = None
sql = "CREATE INDEX %(conc)s %(name)s ON %(table)s (%(columns)s)" \ sql = (
% { "CREATE INDEX %(conc)s %(name)s ON %(table)s (%(columns)s)"
"conc": "CONCURRENTLY" if conc else "", " %(where_clause)s"
"name": index_name, ) % {
"table": table, "conc": "CONCURRENTLY" if conc else "",
"columns": ", ".join(columns), "name": index_name,
} "table": table,
"columns": ", ".join(columns),
"where_clause": "WHERE " + where_clause if where_clause else ""
}
def create_index_concurrently(conn): def create_index_concurrently(conn):
conn.rollback() conn.rollback()

View File

@ -36,7 +36,8 @@ class EventPushActionsStore(SQLBaseStore):
self.EPA_HIGHLIGHT_INDEX, self.EPA_HIGHLIGHT_INDEX,
index_name="event_push_actions_u_highlight", index_name="event_push_actions_u_highlight",
table="event_push_actions", table="event_push_actions",
columns=["user_id", "stream_ordering", "highlight"], columns=["user_id", "stream_ordering"],
where_clause="highlight = 1",
) )
def _set_push_actions_for_event_and_users_txn(self, txn, event, tuples): def _set_push_actions_for_event_and_users_txn(self, txn, event, tuples):