Skip to content

Commit

Permalink
Merge pull request #5316 from rldhont/db_manager_update_dblayer
Browse files Browse the repository at this point in the history
 [FEATURE][needs-docs][DB Manager] Be able to update every Db layer from Postgres, Spatialite and Oracle
  • Loading branch information
rldhont committed Oct 14, 2017
2 parents b91b854 + e6c64f6 commit 949d216
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
13 changes: 5 additions & 8 deletions python/plugins/db_manager/db_manager_plugin.py
Expand Up @@ -79,24 +79,21 @@ def unload(self):
self.dlg.close()

def onLayerWasAdded(self, aMapLayer):
# Be able to update every Db layer from Postgres, Spatialite and Oracle
if hasattr(aMapLayer, 'dataProvider') and aMapLayer.dataProvider().name() in ['postgres', 'spatialite', 'oracle']:
uri = QgsDataSourceUri(aMapLayer.source())
table = uri.table()
if table.startswith('(') and table.endswith(')'):
self.iface.addCustomActionForLayer(self.layerAction, aMapLayer)
self.iface.addCustomActionForLayer(self.layerAction, aMapLayer)
# virtual has QUrl source
# url = QUrl(QUrl.fromPercentEncoding(l.source()))
# url.queryItemValue('query')
# url.queryItemValue('uid')
# url.queryItemValue('geometry')

def onUpdateSqlLayer(self):
# Be able to update every Db layer from Postgres, Spatialite and Oracle
l = self.iface.activeLayer()
if l.dataProvider().name() in ['postgres', 'spatialite', 'oracle']:
table = QgsDataSourceUri(l.source()).table()
if table.startswith('(') and table.endswith(')'):
self.run()
self.dlg.runSqlLayerWindow(l)
self.run()
self.dlg.runSqlLayerWindow(l)
# virtual has QUrl source
# url = QUrl(QUrl.fromPercentEncoding(l.source()))
# url.queryItemValue('query')
Expand Down
12 changes: 9 additions & 3 deletions python/plugins/db_manager/dlg_sql_layer_window.py
Expand Up @@ -31,7 +31,7 @@
from qgis.PyQt.Qsci import QsciAPIs
from qgis.PyQt.QtXml import QDomDocument

from qgis.core import QgsProject, QgsDataSourceUri
from qgis.core import QgsProject, QgsDataSourceUri, QgsReadWriteContext
from qgis.utils import OverrideCursor

from .db_plugins import createDbPlugin
Expand Down Expand Up @@ -151,6 +151,12 @@ def __init__(self, iface, layer, parent=None):
match = re.search('^\((SELECT .+ FROM .+)\)$', sql, re.S)
if match:
sql = match.group(1)
if not sql.startswith('(') and not sql.endswith(')'):
schema = uri.schema()
if schema and schema.upper() != 'PUBLIC':
sql = 'SELECT * FROM ' + schema + '.' + sql
else
sql = 'SELECT * FROM ' + sql
self.editSql.setText(sql)
self.executeSql()

Expand Down Expand Up @@ -328,11 +334,11 @@ def updateSqlLayer(self):
XMLDocument = QDomDocument("style")
XMLMapLayers = XMLDocument.createElement("maplayers")
XMLMapLayer = XMLDocument.createElement("maplayer")
self.layer.writeLayerXML(XMLMapLayer, XMLDocument)
self.layer.writeLayerXml(XMLMapLayer, XMLDocument, QgsReadWriteContext())
XMLMapLayer.firstChildElement("datasource").firstChild().setNodeValue(layer.source())
XMLMapLayers.appendChild(XMLMapLayer)
XMLDocument.appendChild(XMLMapLayers)
self.layer.readLayerXML(XMLMapLayer)
self.layer.readLayerXml(XMLMapLayer, QgsReadWriteContext())
self.layer.reload()
self.iface.actionDraw().trigger()
self.iface.mapCanvas().refresh()
Expand Down

0 comments on commit 949d216

Please sign in to comment.