Skip to content

Commit 33bb769

Browse files
committedOct 5, 2023
Cleanup Execute SQL geometry type handling
And fix exception when "no geometry" type is selected Fixes #54833
1 parent 7b93feb commit 33bb769

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed
 

‎python/plugins/processing/algs/qgis/ExecuteSQL.py

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
__date__ = 'January 2016'
2020
__copyright__ = '(C) 2016, Hugo Mercier'
2121

22-
from qgis.core import (QgsVirtualLayerDefinition,
22+
from qgis.core import (Qgis,
23+
QgsVirtualLayerDefinition,
2324
QgsVectorLayer,
2425
QgsWkbTypes,
2526
QgsProcessingAlgorithm,
@@ -76,6 +77,16 @@ def groupId(self):
7677
def __init__(self):
7778
super().__init__()
7879

80+
self.geometry_types = [
81+
(None, self.tr('Autodetect')),
82+
(Qgis.WkbType.NoGeometry, self.tr('No geometry')),
83+
(Qgis.WkbType.Point, self.tr('Point')),
84+
(Qgis.WkbType.LineString, self.tr('LineString')),
85+
(Qgis.WkbType.Polygon, self.tr('Polygon')),
86+
(Qgis.WkbType.MultiPoint, self.tr('MultiPoint')),
87+
(Qgis.WkbType.MultiLineString, self.tr('MultiLineString')),
88+
(Qgis.WkbType.MultiPolygon, self.tr('MultiPolygon'))]
89+
7990
def flags(self):
8091
return super().flags() | QgsProcessingAlgorithm.FlagNoThreading
8192

@@ -92,17 +103,10 @@ def initAlgorithm(self, config=None):
92103
self.addParameter(QgsProcessingParameterString(name=self.INPUT_GEOMETRY_FIELD,
93104
description=self.tr('Geometry field'), optional=True))
94105

95-
self.geometryTypes = [
96-
self.tr('Autodetect'),
97-
self.tr('No geometry'),
98-
'Point',
99-
'LineString',
100-
'Polygon',
101-
'MultiPoint',
102-
'MultiLineString',
103-
'MultiPolygon']
104106
self.addParameter(QgsProcessingParameterEnum(self.INPUT_GEOMETRY_TYPE,
105-
self.tr('Geometry type'), options=self.geometryTypes, defaultValue=0))
107+
self.tr('Geometry type'),
108+
options=[t[1] for t in self.geometry_types],
109+
defaultValue=0))
106110

107111
self.addParameter(QgsProcessingParameterCrs(self.INPUT_GEOMETRY_CRS,
108112
self.tr('CRS'), optional=True))
@@ -120,7 +124,9 @@ def processAlgorithm(self, parameters, context, feedback):
120124
query = self.parameterAsString(parameters, self.INPUT_QUERY, context)
121125
uid_field = self.parameterAsString(parameters, self.INPUT_UID_FIELD, context)
122126
geometry_field = self.parameterAsString(parameters, self.INPUT_GEOMETRY_FIELD, context)
123-
geometry_type = self.parameterAsEnum(parameters, self.INPUT_GEOMETRY_TYPE, context)
127+
geometry_type = self.geometry_types[
128+
self.parameterAsEnum(parameters, self.INPUT_GEOMETRY_TYPE, context)
129+
][0]
124130
geometry_crs = self.parameterAsCrs(parameters, self.INPUT_GEOMETRY_CRS, context)
125131

126132
df = QgsVirtualLayerDefinition()
@@ -150,13 +156,13 @@ def processAlgorithm(self, parameters, context, feedback):
150156
if uid_field:
151157
df.setUid(uid_field)
152158

153-
if geometry_type == 1: # no geometry
154-
df.setGeometryWkbType(QgsWkbTypes.NoGeometry)
159+
if geometry_type == Qgis.WkbType.NoGeometry:
160+
df.setGeometryWkbType(Qgis.WkbType.NoGeometry)
155161
else:
156162
if geometry_field:
157163
df.setGeometryField(geometry_field)
158-
if geometry_type > 1:
159-
df.setGeometryWkbType(geometry_type - 1)
164+
if geometry_type is not None:
165+
df.setGeometryWkbType(geometry_type)
160166
if geometry_crs.isValid():
161167
df.setGeometrySrid(geometry_crs.postgisSrid())
162168

@@ -167,8 +173,12 @@ def processAlgorithm(self, parameters, context, feedback):
167173
if vLayer.wkbType() == QgsWkbTypes.Unknown:
168174
raise QgsProcessingException(self.tr("Cannot find geometry field"))
169175

170-
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
171-
vLayer.fields(), vLayer.wkbType() if geometry_type != 1 else 1, vLayer.crs())
176+
(sink, dest_id) = self.parameterAsSink(parameters,
177+
self.OUTPUT,
178+
context,
179+
vLayer.fields(),
180+
vLayer.wkbType(),
181+
vLayer.crs())
172182
if sink is None:
173183
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
174184

0 commit comments

Comments
 (0)
Please sign in to comment.