Skip to content

Commit 97a2a46

Browse files
authored
Update PostGISExecuteAndLoadSQL.py
1 parent d71643f commit 97a2a46

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

python/plugins/processing/algs/qgis/PostGISExecuteAndLoadSQL.py

+20-19
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
__revision__ = '$Format:%H$'
2929

30-
from qgis.core import (Qgis, QgsProcessingException, QgsProcessingParameterString, QgsApplication, QgsVectorLayer, QgsProject, QgsProcessingParameterFeatureSink, QgsProcessing, QgsFeatureRequest, QgsFeature, QgsFeatureSink)
30+
from qgis.core import (Qgis, QgsProcessingException, QgsProcessingParameterString, QgsApplication, QgsVectorLayer, QgsProject, QgsProcessingParameterFeatureSink, QgsProcessing, QgsFeatureRequest, QgsFeature, QgsFeatureSink, QgsProcessingUtils, QgsProcessingException, QgsProcessingOutputVectorLayer, QgsProcessingContext, QgsProcessingFeedback)
3131
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3232
from processing.tools import postgis
3333

@@ -56,10 +56,9 @@ def initAlgorithm(self, config=None):
5656
'class': 'processing.gui.wrappers_postgis.ConnectionWidgetWrapper'}})
5757
self.addParameter(db_param)
5858
self.addParameter(QgsProcessingParameterString(self.SQL, self.tr('SQL query (must return unique id and geom field)'), multiLine=True))
59-
self.addParameter(QgsProcessingParameterFeatureSink(
60-
self.OUTPUT,
61-
self.tr("Output layer"),
62-
QgsProcessing.TypeVectorAnyGeometry))
59+
60+
self.addOutput(QgsProcessingOutputVectorLayer(self.OUTPUT,self.tr("Output layer"),QgsProcessing.TypeVectorAnyGeometry))
61+
6362

6463
def name(self):
6564
return 'postgisexecuteandloadsql'
@@ -69,22 +68,24 @@ def displayName(self):
6968

7069
def processAlgorithm(self, parameters, context, feedback):
7170
connection = self.parameterAsString(parameters, self.DATABASE, context)
72-
#db = postgis.GeoDB.from_name(connection)
7371
uri = postgis.uri_from_name(connection)
7472
sql = self.parameterAsString(parameters, self.SQL, context).replace('\n', ' ')
7573
QgsApplication.messageLog().logMessage(str(sql), level=Qgis.Info)
7674
uri.setDataSource("","("+sql+")", "geom", "","id")
75+
7776
vlayer = QgsVectorLayer(uri.uri(), "layername", "postgres")
78-
QgsApplication.messageLog().logMessage("Valid layer: "+str(vlayer.isValid()), level=Qgis.Info)
79-
#QgsProject.instance().addMapLayer(vlayer)
80-
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
81-
vlayer.fields(), vlayer.wkbType(), vlayer.sourceCrs())
82-
83-
features = vlayer.getFeatures(QgsFeatureRequest())
84-
for feat in features:
85-
out_feat = QgsFeature()
86-
out_feat.setGeometry(feat.geometry())
87-
out_feat.setAttributes(feat.attributes())
88-
sink.addFeature(out_feat, QgsFeatureSink.FastInsert)
89-
90-
return {self.OUTPUT: dest_id}
77+
78+
if vlayer is None:
79+
raise QgsProcessingException(self.tr("Got None instead of vector layer object."))
80+
return {}
81+
else:
82+
QgsApplication.messageLog().logMessage("Valid layer: "+str(vlayer.isValid()), level=Qgis.Info)
83+
84+
if not vlayer.isValid():
85+
raise QgsProcessingException(self.tr("This layer is invalid! Please check the PostGIS log for error messages."))
86+
return {}
87+
88+
context.temporaryLayerStore().addMapLayer(vlayer)
89+
context.addLayerToLoadOnCompletion( vlayer.id(), QgsProcessingContext.LayerDetails( 'SQL layer', context.project(), self.OUTPUT ) )
90+
91+
return { self.OUTPUT: vlayer.id() }

0 commit comments

Comments
 (0)