Add async model for gpkg

This commit is contained in:
Blottiere Paul 2018-01-23 13:00:04 +00:00
parent f5a3e60b4e
commit cf53a4cb14
3 changed files with 45 additions and 1 deletions

View File

@ -165,6 +165,10 @@ class GPKGDBConnector(DBConnector):
self._rollback()
raise DbError(e)
def cancel(self):
if self.connection:
self.connection.interrupt()
@classmethod
def isValidDatabase(cls, path):
if hasattr(gdal, 'OpenEx'):

View File

@ -20,7 +20,13 @@ email : brush.tyler@gmail.com
***************************************************************************/
"""
from ..data_model import TableDataModel, SqlResultModel
from qgis.core import QgsMessageLog
from ..data_model import (TableDataModel,
SqlResultModel,
SqlResultModelAsync,
SqlResultModelTask)
from ..plugin import BaseError
class GPKGTableDataModel(TableDataModel):
@ -47,5 +53,34 @@ class GPKGTableDataModel(TableDataModel):
return self.fetchedCount
class GPKGSqlResultModelTask(SqlResultModelTask):
def __init__(self, db, sql, parent):
SqlResultModelTask.__init__(self, db, sql, parent)
def run(self):
try:
self.model = GPKGSqlResultModel(self.db, self.sql, None)
except BaseError as e:
self.error = e
QgsMessageLog.logMessage(e.msg)
return False
return True
def cancel(self):
self.db.connector.cancel()
SqlResultModelTask.cancel(self)
class GPKGSqlResultModelAsync(SqlResultModelAsync):
def __init__(self, db, sql, parent):
SqlResultModelAsync.__init__(self)
self.task = GPKGSqlResultModelTask(db, sql, parent)
self.task.taskCompleted.connect(self.modelDone)
self.task.taskTerminated.connect(self.modelDone)
class GPKGSqlResultModel(SqlResultModel):
pass

View File

@ -132,6 +132,11 @@ class GPKGDatabase(Database):
return GPKGSqlResultModel(self, sql, parent)
def sqlResultModelAsync(self, sql, parent):
from .data_model import GPKGSqlResultModelAsync
return GPKGSqlResultModelAsync(self, sql, parent)
def registerDatabaseActions(self, mainWindow):
action = QAction(self.tr("Run &Vacuum"), self)
mainWindow.registerAction(action, self.tr("&Database"), self.runVacuumActionSlot)