[dbmanager] Fix stored queries retrieve

Fixes #19802 - DB Manager saved SQL statements are saved empty
This commit is contained in:
Alessandro Pasotti 2018-09-18 18:22:58 +02:00
parent 5b7e60ac45
commit a74b6262df
2 changed files with 19 additions and 11 deletions

View File

@ -24,6 +24,7 @@ The content of this file is based on
from builtins import zip from builtins import zip
from builtins import next from builtins import next
from builtins import str from builtins import str
from hashlib import md5
from qgis.PyQt.QtCore import Qt, pyqtSignal from qgis.PyQt.QtCore import Qt, pyqtSignal
from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QStyledItemDelegate from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QStyledItemDelegate
@ -181,6 +182,9 @@ class DlgSqlLayerWindow(QWidget, Ui_Dialog):
if uri.selectAtIdDisabled(): if uri.selectAtIdDisabled():
self.avoidSelectById.setCheckState(Qt.Checked) self.avoidSelectById.setCheckState(Qt.Checked)
def getQueryHash(self, name):
return 'q%s' % md5(name.encode('utf8')).hexdigest()
def updatePresetsCombobox(self): def updatePresetsCombobox(self):
self.presetCombo.clear() self.presetCombo.clear()
@ -199,8 +203,8 @@ class DlgSqlLayerWindow(QWidget, Ui_Dialog):
if query == "": if query == "":
return return
name = self.presetName.text() name = self.presetName.text()
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name', name) QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name', name)
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query', query) QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query', query)
index = self.presetCombo.findText(name) index = self.presetCombo.findText(name)
if index == -1: if index == -1:
self.presetCombo.addItem(name) self.presetCombo.addItem(name)
@ -210,13 +214,13 @@ class DlgSqlLayerWindow(QWidget, Ui_Dialog):
def deletePreset(self): def deletePreset(self):
name = self.presetCombo.currentText() name = self.presetCombo.currentText()
QgsProject.instance().removeEntry('DBManager', 'savedQueries/q' + str(name.__hash__())) QgsProject.instance().removeEntry('DBManager', 'savedQueries/q' + self.getQueryHash(name))
self.presetCombo.removeItem(self.presetCombo.findText(name)) self.presetCombo.removeItem(self.presetCombo.findText(name))
self.presetCombo.setCurrentIndex(-1) self.presetCombo.setCurrentIndex(-1)
def loadPreset(self, name): def loadPreset(self, name):
query = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query')[0] query = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query')[0]
name = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name')[0] name = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name')[0]
self.editSql.setText(query) self.editSql.setText(query)
def clearSql(self): def clearSql(self):

View File

@ -24,6 +24,7 @@ The content of this file is based on
from builtins import zip from builtins import zip
from builtins import next from builtins import next
from builtins import str from builtins import str
from hashlib import md5
from qgis.PyQt.QtCore import Qt, pyqtSignal from qgis.PyQt.QtCore import Qt, pyqtSignal
from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QInputDialog, QStyledItemDelegate, QTableWidgetItem from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QInputDialog, QStyledItemDelegate, QTableWidgetItem
@ -197,6 +198,9 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
self.populateQueryHistory() self.populateQueryHistory()
def getQueryHash(self, name):
return 'q%s' % md5(name.encode('utf8')).hexdigest()
def updatePresetsCombobox(self): def updatePresetsCombobox(self):
self.presetCombo.clear() self.presetCombo.clear()
@ -214,9 +218,9 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
query = self._getSqlQuery() query = self._getSqlQuery()
if query == "": if query == "":
return return
name = self.presetName.text() name = str(self.presetName.text())
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name', name) QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name', name)
QgsProject.instance().writeEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query', query) QgsProject.instance().writeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query', query)
index = self.presetCombo.findText(name) index = self.presetCombo.findText(name)
if index == -1: if index == -1:
self.presetCombo.addItem(name) self.presetCombo.addItem(name)
@ -226,13 +230,13 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
def deletePreset(self): def deletePreset(self):
name = self.presetCombo.currentText() name = self.presetCombo.currentText()
QgsProject.instance().removeEntry('DBManager', 'savedQueries/q' + str(name.__hash__())) QgsProject.instance().removeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name))
self.presetCombo.removeItem(self.presetCombo.findText(name)) self.presetCombo.removeItem(self.presetCombo.findText(name))
self.presetCombo.setCurrentIndex(-1) self.presetCombo.setCurrentIndex(-1)
def loadPreset(self, name): def loadPreset(self, name):
query = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/query')[0] query = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/query')[0]
name = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + str(name.__hash__()) + '/name')[0] name = QgsProject.instance().readEntry('DBManager', 'savedQueries/' + self.getQueryHash(name) + '/name')[0]
self.editSql.setText(query) self.editSql.setText(query)
def loadAsLayerToggled(self, checked): def loadAsLayerToggled(self, checked):