[db manager] Fix virtual layer uid handling

This commit is contained in:
Hugo Mercier 2016-11-22 16:09:53 +01:00
parent 289423617f
commit b7fa5400b6

View File

@ -24,7 +24,7 @@ from .connector import VLayerConnector
from qgis.PyQt.QtCore import QUrl from qgis.PyQt.QtCore import QUrl
from qgis.PyQt.QtGui import QIcon from qgis.PyQt.QtGui import QIcon
from qgis.core import QgsVectorLayer, QgsMapLayerRegistry from qgis.core import QgsVectorLayer, QgsMapLayerRegistry, QgsVirtualLayerDefinition
from ..plugin import DBPlugin, Database, Table, VectorTable, TableField from ..plugin import DBPlugin, Database, Table, VectorTable, TableField
@ -100,13 +100,14 @@ class FakeDatabase(Database):
return LSqlResultModel(self, sql, parent) return LSqlResultModel(self, sql, parent)
def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None, avoidSelectById=False, _filter=""): def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None, avoidSelectById=False, _filter=""):
q = QUrl.toPercentEncoding(sql) df = QgsVirtualLayerDefinition()
s = "?query=%s" % q df.setQuery(sql)
if uniqueCol is not None: if uniqueCol is not None:
s += "&uid=" + uniqueCol uniqueCol = uniqueCol.strip('"').replace('""', '"')
df.setUid(uniqueCol)
if geomCol is not None: if geomCol is not None:
s += "&geometry=" + geomCol df.setGeometryField(geomCol)
vl = QgsVectorLayer(s, layerName, "virtual") vl = QgsVectorLayer(df.toString(), layerName, "virtual")
if _filter: if _filter:
vl.setSubsetString(_filter) vl.setSubsetString(_filter)
return vl return vl