Skip to content

Commit ea2c16d

Browse files
committedSep 25, 2018
[processing][gdal] Dissolve field name should be optional
1 parent a3af1f9 commit ea2c16d

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed
 

‎python/plugins/processing/algs/gdal/Dissolve.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from qgis.core import (QgsProcessing,
29-
QgsProcessingException,
28+
from qgis.core import (QgsProcessingException,
3029
QgsProcessingParameterDefinition,
3130
QgsProcessingParameterFeatureSource,
3231
QgsProcessingParameterField,
@@ -61,7 +60,7 @@ def initAlgorithm(self, config=None):
6160
self.tr('Dissolve field'),
6261
None,
6362
self.INPUT,
64-
QgsProcessingParameterField.Any))
63+
QgsProcessingParameterField.Any, optional=True))
6564
self.addParameter(QgsProcessingParameterString(self.GEOMETRY,
6665
self.tr('Geometry column name'),
6766
defaultValue='geometry'))
@@ -85,7 +84,7 @@ def initAlgorithm(self, config=None):
8584
self.tr('Numeric attribute to calculate statistics on'),
8685
None,
8786
self.INPUT,
88-
QgsProcessingParameterField.Any,
87+
QgsProcessingParameterField.Numeric,
8988
optional=True))
9089
params.append(QgsProcessingParameterString(self.OPTIONS,
9190
self.tr('Additional creation options'),
@@ -160,15 +159,17 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
160159

161160
params = ','.join(tokens)
162161
if params:
163-
if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context):
164-
sql = "SELECT ST_Union({}) AS {}{}, {} FROM '{}' GROUP BY {}".format(geometry, geometry, other_fields, params, layerName, fieldName)
165-
else:
166-
sql = "SELECT ST_Union({}) AS {}, {}, {} FROM '{}' GROUP BY {}".format(geometry, geometry, fieldName, params, layerName, fieldName)
162+
params = ', ' + params
163+
164+
group_by = ''
165+
if fieldName:
166+
group_by = ' GROUP BY {}'.format(fieldName)
167+
168+
if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context):
169+
sql = "SELECT ST_Union({}) AS {}{}{} FROM '{}'{}".format(geometry, geometry, other_fields, params, layerName, group_by)
167170
else:
168-
if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context):
169-
sql = "SELECT ST_Union({}) AS {}{} FROM '{}' GROUP BY {}".format(geometry, geometry, other_fields, layerName, fieldName)
170-
else:
171-
sql = "SELECT ST_Union({}) AS {}, {} FROM '{}' GROUP BY {}".format(geometry, geometry, fieldName, layerName, fieldName)
171+
sql = "SELECT ST_Union({}) AS {}{}{} FROM '{}'{}".format(geometry, geometry, ', ' + fieldName if fieldName else '',
172+
params, layerName, group_by)
172173

173174
arguments.append(sql)
174175

‎python/plugins/processing/tests/GdalAlgorithmsTest.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,15 @@ def testDissolve(self):
621621
alg.initAlgorithm()
622622

623623
with tempfile.TemporaryDirectory() as outdir:
624+
self.assertEqual(
625+
alg.getConsoleCommands({'INPUT': source,
626+
'OUTPUT': outdir + '/check.shp'}, context, feedback),
627+
['ogr2ogr',
628+
outdir + '/check.shp ' +
629+
source + ' ' +
630+
'-dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry FROM \'polys2\'" ' +
631+
'-f "ESRI Shapefile"'])
632+
624633
self.assertEqual(
625634
alg.getConsoleCommands({'INPUT': source,
626635
'FIELD': 'my_field',
@@ -652,6 +661,27 @@ def testDissolve(self):
652661
'-dialect sqlite -sql "SELECT ST_Union(the_geom) AS the_geom, my_field FROM \'polys2\' ' +
653662
'GROUP BY my_field" -f "ESRI Shapefile"'])
654663

664+
self.assertEqual(
665+
alg.getConsoleCommands({'INPUT': source,
666+
'FIELD': 'my_field',
667+
'KEEP_ATTRIBUTES': False,
668+
'OUTPUT': outdir + '/check.shp'}, context, feedback),
669+
['ogr2ogr',
670+
outdir + '/check.shp ' +
671+
source + ' ' +
672+
'-dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, my_field FROM \'polys2\' ' +
673+
'GROUP BY my_field" -f "ESRI Shapefile"'])
674+
675+
self.assertEqual(
676+
alg.getConsoleCommands({'INPUT': source,
677+
'KEEP_ATTRIBUTES': False,
678+
'OUTPUT': outdir + '/check.shp'}, context, feedback),
679+
['ogr2ogr',
680+
outdir + '/check.shp ' +
681+
source + ' ' +
682+
'-dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry FROM \'polys2\'" ' +
683+
'-f "ESRI Shapefile"'])
684+
655685
self.assertEqual(
656686
alg.getConsoleCommands({'INPUT': source,
657687
'FIELD': 'my_field',

0 commit comments

Comments
 (0)
Please sign in to comment.