Merge "Speed up loading a change with eager loading"
This commit is contained in:
commit
f4315cbb34
@ -24,7 +24,7 @@ import six
|
||||
import sqlalchemy
|
||||
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Boolean, DateTime, Text, UniqueConstraint
|
||||
from sqlalchemy.schema import ForeignKey
|
||||
from sqlalchemy.orm import mapper, sessionmaker, relationship, scoped_session
|
||||
from sqlalchemy.orm import mapper, sessionmaker, relationship, scoped_session, joinedload
|
||||
from sqlalchemy.orm.session import Session
|
||||
from sqlalchemy.sql import exists
|
||||
from sqlalchemy.sql.expression import and_
|
||||
@ -815,9 +815,12 @@ class DatabaseSession(object):
|
||||
except sqlalchemy.orm.exc.NoResultFound:
|
||||
return self.createSyncQuery(name)
|
||||
|
||||
def getChange(self, key):
|
||||
def getChange(self, key, lazy=True):
|
||||
query = self.session().query(Change).filter_by(key=key)
|
||||
if not lazy:
|
||||
query = query.options(joinedload(Change.revisions).joinedload(Revision.files).joinedload(File.comments))
|
||||
try:
|
||||
return self.session().query(Change).filter_by(key=key).one()
|
||||
return query.one()
|
||||
except sqlalchemy.orm.exc.NoResultFound:
|
||||
return None
|
||||
|
||||
|
@ -618,7 +618,7 @@ class ChangeView(urwid.WidgetWrap):
|
||||
|
||||
def refresh(self):
|
||||
with self.app.db.getSession() as session:
|
||||
change = session.getChange(self.change_key)
|
||||
change = session.getChange(self.change_key, lazy=False)
|
||||
# When we first open the change, update its last_seen
|
||||
# time.
|
||||
if not self.marked_seen:
|
||||
|
Loading…
x
Reference in New Issue
Block a user