Skip to content

Commit 826056e

Browse files
authoredSep 19, 2018
Merge pull request #7951 from elpaso/bugfix-19802-dbmanager-saved-queries
Bugfix 19802 dbmanager saved queries
2 parents b748767 + 9473d63 commit 826056e

File tree

3 files changed

+36
-12
lines changed

3 files changed

+36
-12
lines changed
 

‎python/plugins/db_manager/dlg_sql_layer_window.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from builtins import zip
2525
from builtins import next
2626
from builtins import str
27+
from hashlib import md5
2728

2829
from qgis.PyQt.QtCore import Qt, pyqtSignal
2930
from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QStyledItemDelegate
@@ -181,6 +182,9 @@ def __init__(self, iface, layer, parent=None):
181182
if uri.selectAtIdDisabled():
182183
self.avoidSelectById.setCheckState(Qt.Checked)
183184

185+
def getQueryHash(self, name):
186+
return 'q%s' % md5(name.encode('utf8')).hexdigest()
187+
184188
def updatePresetsCombobox(self):
185189
self.presetCombo.clear()
186190

@@ -199,8 +203,8 @@ def storePreset(self):
199203
if query == "":
200204
return
201205
name = self.presetName.text()
202-
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name', name)
203-
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query', query)
206+
QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name', name)
207+
QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query', query)
204208
index = self.presetCombo.findText(name)
205209
if index == -1:
206210
self.presetCombo.addItem(name)
@@ -210,13 +214,13 @@ def storePreset(self):
210214

211215
def deletePreset(self):
212216
name = self.presetCombo.currentText()
213-
QgsProject.instance().removeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()))
217+
QgsProject.instance().removeEntry('DBManager', 'savedQueries/q' + self.getQueryHash(name))
214218
self.presetCombo.removeItem(self.presetCombo.findText(name))
215219
self.presetCombo.setCurrentIndex(-1)
216220

217221
def loadPreset(self, name):
218-
query = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query')[0]
219-
name = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name')[0]
222+
query = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query')[0]
223+
name = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name')[0]
220224
self.editSql.setText(query)
221225

222226
def clearSql(self):

‎python/plugins/db_manager/dlg_sql_window.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from builtins import zip
2525
from builtins import next
2626
from builtins import str
27+
from hashlib import md5
2728

2829
from qgis.PyQt.QtCore import Qt, pyqtSignal
2930
from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QInputDialog, QStyledItemDelegate, QTableWidgetItem
@@ -197,6 +198,9 @@ def writeQueryHistory(self, sql, affectedRows, secs):
197198

198199
self.populateQueryHistory()
199200

201+
def getQueryHash(self, name):
202+
return 'q%s' % md5(name.encode('utf8')).hexdigest()
203+
200204
def updatePresetsCombobox(self):
201205
self.presetCombo.clear()
202206

@@ -214,9 +218,9 @@ def storePreset(self):
214218
query = self._getSqlQuery()
215219
if query == "":
216220
return
217-
name = self.presetName.text()
218-
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name', name)
219-
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query', query)
221+
name = str(self.presetName.text())
222+
QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name', name)
223+
QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query', query)
220224
index = self.presetCombo.findText(name)
221225
if index == -1:
222226
self.presetCombo.addItem(name)
@@ -226,13 +230,13 @@ def storePreset(self):
226230

227231
def deletePreset(self):
228232
name = self.presetCombo.currentText()
229-
QgsProject.instance().removeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()))
233+
QgsProject.instance().removeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name))
230234
self.presetCombo.removeItem(self.presetCombo.findText(name))
231235
self.presetCombo.setCurrentIndex(-1)
232236

233237
def loadPreset(self, name):
234-
query = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query')[0]
235-
name = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name')[0]
238+
query = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query')[0]
239+
name = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name')[0]
236240
self.editSql.setText(query)
237241

238242
def loadAsLayerToggled(self, checked):

‎tests/src/python/test_qgsproject.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
QgsMapCanvas)
3333

3434
from qgis.PyQt.QtTest import QSignalSpy
35-
from qgis.PyQt.QtCore import QT_VERSION_STR, QTemporaryFile, QTemporaryDir
35+
from qgis.PyQt.QtCore import QT_VERSION_STR, QTemporaryDir
3636
import sip
3737

3838
from qgis.testing import start_app, unittest
@@ -1105,6 +1105,22 @@ def testProjectTitleWithPeriod(self):
11051105
self.assertEqual(p0.baseName(), '2.18.21')
11061106
self.assertEqual(p1.baseName(), 'qgis-3.2.0')
11071107

1108+
def testWriteEntry(self):
1109+
1110+
tmpDir = QTemporaryDir()
1111+
tmpFile = "{}/project.qgs".format(tmpDir.path())
1112+
1113+
# zip with existing file
1114+
project = QgsProject()
1115+
query = 'select * from "sample DH" where "sample DH"."Elev" > 130 and "sample DH"."Elev" < 140'
1116+
self.assertTrue(project.writeEntry('myscope', 'myentry', query))
1117+
self.assertTrue(project.write(tmpFile))
1118+
1119+
self.assertTrue(project.read(tmpFile))
1120+
q, ok = project.readEntry('myscope', 'myentry')
1121+
self.assertTrue(ok)
1122+
self.assertEqual(q, query)
1123+
11081124

11091125
if __name__ == '__main__':
11101126
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.