Rewrite Album.sum_bytes to use SQL sum in a single query.
This commit is contained in:
parent
f77ab51b14
commit
7d8b8daeba
1 changed files with 15 additions and 16 deletions
|
@ -504,24 +504,23 @@ class Album(ObjectBase, GroupableMixin):
|
||||||
self.photodb.log.debug('Committing - remove photo from album')
|
self.photodb.log.debug('Committing - remove photo from album')
|
||||||
self.photodb.commit()
|
self.photodb.commit()
|
||||||
|
|
||||||
def sum_bytes(self, recurse=True, string=False):
|
def sum_bytes(self, recurse=True):
|
||||||
if self._sum_bytes_local is None:
|
query = '''
|
||||||
#print(self, 'sumbytes cache miss local')
|
SELECT SUM(bytes) FROM photos
|
||||||
photos = (photo for photo in self.get_photos() if photo.bytes is not None)
|
WHERE photos.id IN (
|
||||||
self._sum_bytes_local = sum(photo.bytes for photo in photos)
|
SELECT photoid FROM album_photo_rel WHERE
|
||||||
total = self._sum_bytes_local
|
albumid IN {qmarks}
|
||||||
|
)
|
||||||
|
'''
|
||||||
if recurse:
|
if recurse:
|
||||||
if self._sum_bytes_recursive is None:
|
albumids = [child.id for child in self.walk_children()]
|
||||||
#print(self, 'sumbytes cache miss recursive')
|
|
||||||
child_bytes = sum(child.sum_bytes(recurse=True) for child in self.get_children())
|
|
||||||
self._sum_bytes_recursive = self._sum_bytes_local + child_bytes
|
|
||||||
total = self._sum_bytes_recursive
|
|
||||||
|
|
||||||
if string:
|
|
||||||
return bytestring.bytestring(total)
|
|
||||||
else:
|
else:
|
||||||
return total
|
albumids = [self.id]
|
||||||
|
|
||||||
|
query = query.format(qmarks='(%s)' % ','.join('?' * len(albumids)))
|
||||||
|
bindings = albumids
|
||||||
|
total = self.photodb.sql_select_one(query, bindings)[0]
|
||||||
|
return total
|
||||||
|
|
||||||
def sum_photos(self):
|
def sum_photos(self):
|
||||||
if self._sum_photos_recursive is None:
|
if self._sum_photos_recursive is None:
|
||||||
|
|
Loading…
Reference in a new issue