[db_manager] Fix #14796 - Quote values depending on data type in query builder

This commit is contained in:
arnaud.morvan@camptocamp.com 2016-05-20 13:53:27 +02:00 committed by Salvatore Larosa
parent 87121d63a8
commit 8e5b28f3bb
2 changed files with 18 additions and 6 deletions

View File

@ -57,11 +57,16 @@ class BaseTableModel(QAbstractTableModel):
return len(self._header)
def data(self, index, role):
if role != Qt.DisplayRole and role != Qt.FontRole:
if role not in [Qt.DisplayRole,
Qt.EditRole,
Qt.FontRole]:
return None
val = self.getData(index.row(), index.column())
if role == Qt.EditRole:
return val
if role == Qt.FontRole: # draw NULL in italic
if val is not None:
return None

View File

@ -21,7 +21,7 @@ email : hugo dot mercier at oslandia dot com
Query builder dialog, based on the QSpatialite plugin (GPLv2+) by Romain Riviere
"""
from qgis.PyQt.QtCore import QObject, QEvent
from qgis.PyQt.QtCore import Qt, QObject, QEvent
from qgis.PyQt.QtWidgets import QDialog, QMessageBox, QTextEdit
from .ui.ui_DlgQueryBuilder import Ui_DbManagerQueryBuilderDlg as Ui_Dialog
@ -287,10 +287,17 @@ class QueryBuilderDlg(QDialog):
self.ui.values.setModel(model)
def query_item(self, index):
queryWord = index.data()
queryWord = ' "%s"' % queryWord
if queryWord != '':
self.ui.where.insertPlainText(queryWord)
value = index.data(Qt.EditRole)
if value is None:
queryWord = u'NULL'
elif isinstance(value, (int, float)):
queryWord = unicode(value)
else:
queryWord = self.db.connector.quoteString(value)
if queryWord.strip() != '':
self.ui.where.insertPlainText(u' ' + queryWord)
self.ui.where.setFocus()
def use_rtree(self):