speed up bible loading

bzr-revno: 1924
This commit is contained in:
Andreas Preikschat 2012-03-31 18:42:06 +02:00
commit 9d3093a99f

View File

@ -25,13 +25,13 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
import logging
import chardet import chardet
import logging
import os import os
import sqlite3 import sqlite3
from PyQt4 import QtCore from PyQt4 import QtCore
from sqlalchemy import Column, ForeignKey, or_, Table, types from sqlalchemy import Column, ForeignKey, or_, Table, types, func
from sqlalchemy.orm import class_mapper, mapper, relation from sqlalchemy.orm import class_mapper, mapper, relation
from sqlalchemy.orm.exc import UnmappedClassError from sqlalchemy.orm.exc import UnmappedClassError
@ -427,12 +427,10 @@ class BibleDB(QtCore.QObject, Manager):
The book object to get the chapter count for. The book object to get the chapter count for.
""" """
log.debug(u'BibleDB.get_chapter_count("%s")', book.name) log.debug(u'BibleDB.get_chapter_count("%s")', book.name)
count = self.session.query(Verse.chapter).join(Book)\ count = self.session.query(func.max(Verse.chapter)).join(Book).filter(
.filter(Book.book_reference_id==book.book_reference_id)\ Book.book_reference_id==book.book_reference_id).scalar()
.distinct().count()
if not count: if not count:
return 0 return 0
else:
return count return count
def get_verse_count(self, book_ref_id, chapter): def get_verse_count(self, book_ref_id, chapter):
@ -446,13 +444,12 @@ class BibleDB(QtCore.QObject, Manager):
The chapter to get the verse count for. The chapter to get the verse count for.
""" """
log.debug(u'BibleDB.get_verse_count("%s", "%s")', book_ref_id, chapter) log.debug(u'BibleDB.get_verse_count("%s", "%s")', book_ref_id, chapter)
count = self.session.query(Verse).join(Book)\ count = self.session.query(func.max(Verse.verse)).join(Book)\
.filter(Book.book_reference_id==book_ref_id)\ .filter(Book.book_reference_id==book_ref_id)\
.filter(Verse.chapter==chapter)\ .filter(Verse.chapter==chapter)\
.count() .scalar()
if not count: if not count:
return 0 return 0
else:
return count return count
def get_language(self, bible_name=None): def get_language(self, bible_name=None):