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