Skip to content

Commit cf53a4c

Browse files
committed
Add async model for gpkg
1 parent f5a3e60 commit cf53a4c

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

python/plugins/db_manager/db_plugins/gpkg/connector.py

+4
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ def _commit(self):
165165
self._rollback()
166166
raise DbError(e)
167167

168+
def cancel(self):
169+
if self.connection:
170+
self.connection.interrupt()
171+
168172
@classmethod
169173
def isValidDatabase(cls, path):
170174
if hasattr(gdal, 'OpenEx'):

python/plugins/db_manager/db_plugins/gpkg/data_model.py

+36-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@
2020
***************************************************************************/
2121
"""
2222

23-
from ..data_model import TableDataModel, SqlResultModel
23+
from qgis.core import QgsMessageLog
24+
25+
from ..data_model import (TableDataModel,
26+
SqlResultModel,
27+
SqlResultModelAsync,
28+
SqlResultModelTask)
29+
from ..plugin import BaseError
2430

2531

2632
class GPKGTableDataModel(TableDataModel):
@@ -47,5 +53,34 @@ def rowCount(self, index=None):
4753
return self.fetchedCount
4854

4955

56+
class GPKGSqlResultModelTask(SqlResultModelTask):
57+
58+
def __init__(self, db, sql, parent):
59+
SqlResultModelTask.__init__(self, db, sql, parent)
60+
61+
def run(self):
62+
try:
63+
self.model = GPKGSqlResultModel(self.db, self.sql, None)
64+
except BaseError as e:
65+
self.error = e
66+
QgsMessageLog.logMessage(e.msg)
67+
return False
68+
return True
69+
70+
def cancel(self):
71+
self.db.connector.cancel()
72+
SqlResultModelTask.cancel(self)
73+
74+
75+
class GPKGSqlResultModelAsync(SqlResultModelAsync):
76+
77+
def __init__(self, db, sql, parent):
78+
SqlResultModelAsync.__init__(self)
79+
80+
self.task = GPKGSqlResultModelTask(db, sql, parent)
81+
self.task.taskCompleted.connect(self.modelDone)
82+
self.task.taskTerminated.connect(self.modelDone)
83+
84+
5085
class GPKGSqlResultModel(SqlResultModel):
5186
pass

python/plugins/db_manager/db_plugins/gpkg/plugin.py

+5
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ def sqlResultModel(self, sql, parent):
132132

133133
return GPKGSqlResultModel(self, sql, parent)
134134

135+
def sqlResultModelAsync(self, sql, parent):
136+
from .data_model import GPKGSqlResultModelAsync
137+
138+
return GPKGSqlResultModelAsync(self, sql, parent)
139+
135140
def registerDatabaseActions(self, mainWindow):
136141
action = QAction(self.tr("Run &Vacuum"), self)
137142
mainWindow.registerAction(action, self.tr("&Database"), self.runVacuumActionSlot)

0 commit comments

Comments
 (0)