Fix #894 - index User.username field

This commit sponsored by Emily O'Leary.  Thank you!
This commit is contained in:
Jessica Tallon 2014-07-17 14:58:24 +01:00 committed by Christopher Allan Webber
parent ffbf9c8b43
commit 892eed590f
2 changed files with 16 additions and 2 deletions

View File

@ -19,7 +19,7 @@ import uuid
from sqlalchemy import (MetaData, Table, Column, Boolean, SmallInteger, from sqlalchemy import (MetaData, Table, Column, Boolean, SmallInteger,
Integer, Unicode, UnicodeText, DateTime, Integer, Unicode, UnicodeText, DateTime,
ForeignKey, Date) ForeignKey, Date, Index)
from sqlalchemy.exc import ProgrammingError from sqlalchemy.exc import ProgrammingError
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql import and_ from sqlalchemy.sql import and_
@ -789,3 +789,17 @@ def fix_privilege_user_association_table(db):
privilege_user_assoc.c.core__privilege_id.alter(name="user") privilege_user_assoc.c.core__privilege_id.alter(name="user")
db.commit() db.commit()
@RegisterMigration(22, MIGRATIONS)
def add_index_username_field(db):
"""
This indexes the User.username field which is frequently queried
for example a user logging in. This solves the issue #894
"""
metadata = MetaData(bind=db.bind)
user_table = inspect_table(metadata, "core__users")
new_index = Index("ix_core__users_uploader", user_table.c.username)
new_index.create()
db.commit()

View File

@ -57,7 +57,7 @@ class User(Base, UserMixin):
__tablename__ = "core__users" __tablename__ = "core__users"
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
username = Column(Unicode, nullable=False, unique=True) username = Column(Unicode, nullable=False, unique=True, index=True)
# Note: no db uniqueness constraint on email because it's not # Note: no db uniqueness constraint on email because it's not
# reliable (many email systems case insensitive despite against # reliable (many email systems case insensitive despite against
# the RFC) and because it would be a mess to implement at this # the RFC) and because it would be a mess to implement at this