Skip to content

Commit d589ba7

Browse files
pblottierenyalldawson
authored andcommitted
Try to add cancel support for Oracle databases in dbmanager
1 parent b22121a commit d589ba7

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

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

+4
Original file line numberDiff line numberDiff line change
@@ -1743,3 +1743,7 @@ def getSqlDictionary(self):
17431743
def getQueryBuilderDictionary(self):
17441744
from .sql_dictionary import getQueryBuilderDictionary
17451745
return getQueryBuilderDictionary()
1746+
1747+
def cancel(self):
1748+
# how to cancel an Oracle query?
1749+
pass

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

+35-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@
2626

2727
from qgis.PyQt.QtCore import QTime
2828

29-
from ..data_model import TableDataModel, SqlResultModel, BaseTableModel
29+
from ..data_model import (TableDataModel,
30+
SqlResultModel,
31+
SqlResultModelAsync,
32+
SqlResultModelTask,
33+
BaseTableModel)
3034
from ..plugin import DbError
3135

3236

@@ -114,6 +118,36 @@ def fetchMoreData(self, row_start):
114118
self.fetchedFrom = row_start
115119

116120

121+
class ORSqlResultModelTask(SqlResultModelTask):
122+
123+
def __init__(self, db, sql, parent):
124+
super().__init__(db, sql, parent)
125+
126+
def run(self):
127+
try:
128+
self.model = ORSqlResultModel(self.db, self.sql, None)
129+
except BaseError as e:
130+
self.error = e
131+
QgsMessageLog.logMessage(e.msg)
132+
return False
133+
134+
return True
135+
136+
def cancel(self):
137+
self.db.connector.cancel()
138+
SqlResultModelTask.cancel(self)
139+
140+
141+
class ORSqlResultModelAsync(SqlResultModelAsync):
142+
143+
def __init__(self, db, sql, parent):
144+
super().__init__()
145+
146+
self.task = ORSqlResultModelTask(db, sql, parent)
147+
self.task.taskCompleted.connect(self.modelDone)
148+
self.task.taskTerminated.connect(self.modelDone)
149+
150+
117151
class ORSqlResultModel(SqlResultModel):
118152

119153
def __init__(self, db, sql, parent=None):

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

+5
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ def sqlResultModel(self, sql, parent):
192192
from .data_model import ORSqlResultModel
193193
return ORSqlResultModel(self, sql, parent)
194194

195+
def sqlResultModelAsync(self, sql, parent):
196+
from .data_model import ORSqlResultModelAsync
197+
198+
return ORSqlResultModelAsync(self, sql, parent)
199+
195200
def toSqlLayer(self, sql, geomCol, uniqueCol,
196201
layerName=u"QueryLayer", layerType=None,
197202
avoidSelectById=False, filter=""):

0 commit comments

Comments
 (0)