Skip to content

Commit 97238fd

Browse files
committed
[processing] fix SQL-based geoprocessing tools and tests
1 parent e165d45 commit 97238fd

26 files changed

+214
-311
lines changed

python/plugins/processing/algs/gdal/Buffer.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ def commandName(self):
9999
return 'ogr2ogr'
100100

101101
def getConsoleCommands(self, parameters, context, feedback):
102+
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
102103
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
103104
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
104105
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
@@ -109,6 +110,12 @@ def getConsoleCommands(self, parameters, context, feedback):
109110

110111
output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)
111112

113+
other_fields = []
114+
for f in fields:
115+
if f.name() == geometry:
116+
continue
117+
other_fields.append(f.name())
118+
112119
arguments = []
113120
arguments.append(output)
114121
arguments.append(ogrLayer)
@@ -117,9 +124,9 @@ def getConsoleCommands(self, parameters, context, feedback):
117124
arguments.append('-sql')
118125

119126
if dissolve or fieldName:
120-
sql = "SELECT ST_Union(ST_Buffer({}, {})), * FROM '{}'".format(geometry, distance, layerName)
127+
sql = "SELECT ST_Union(ST_Buffer({}, {})) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)
121128
else:
122-
sql = "SELECT ST_Buffer({}, {}), * FROM '{}'".format(geometry, distance, layerName)
129+
sql = "SELECT ST_Buffer({}, {}) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)
123130

124131
if fieldName:
125132
sql = '{} GROUP BY {}'.format(sql, fieldName)

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

+12-4
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ def commandName(self):
110110
return 'ogr2ogr'
111111

112112
def getConsoleCommands(self, parameters, context, feedback):
113+
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
113114
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
114115
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
115116
fieldName = self.parameterAsString(parameters, self.FIELD, context)
@@ -119,6 +120,13 @@ def getConsoleCommands(self, parameters, context, feedback):
119120

120121
output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)
121122

123+
other_fields = []
124+
for f in fields:
125+
if f.name() == geometry:
126+
continue
127+
128+
other_fields.append(f.name())
129+
122130
arguments = []
123131
arguments.append(output)
124132
arguments.append(ogrLayer)
@@ -140,14 +148,14 @@ def getConsoleCommands(self, parameters, context, feedback):
140148
params = ','.join(tokens)
141149
if params:
142150
if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context):
143-
sql = "SELECT ST_Union({}), *, {} FROM {} GROUP BY {}".format(geometry, params, layerName, fieldName)
151+
sql = "SELECT ST_Union({}) AS {}, {}, {} FROM {} GROUP BY {}".format(geometry, geometry, ','.join(other_fields), params, layerName, fieldName)
144152
else:
145-
sql = "SELECT ST_Union({}), {}, {} FROM {} GROUP BY {}".format(geometry, fieldName, params, layerName, fieldName)
153+
sql = "SELECT ST_Union({}) AS {}, {}, {} FROM {} GROUP BY {}".format(geometry, geometry, fieldName, params, layerName, fieldName)
146154
else:
147155
if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context):
148-
sql = "SELECT ST_Union({}), * FROM {} GROUP BY {}".format(geometry, layerName, fieldName)
156+
sql = "SELECT ST_Union({}) AS {}, {} FROM {} GROUP BY {}".format(geometry, geometry, ','.join(other_fields), layerName, fieldName)
149157
else:
150-
sql = "SELECT ST_Union({}), {} FROM {} GROUP BY {}".format(geometry, fieldName, layerName, fieldName)
158+
sql = "SELECT ST_Union({}) AS {}, {} FROM {} GROUP BY {}".format(geometry, geometry, fieldName, layerName, fieldName)
151159

152160
arguments.append(sql)
153161

python/plugins/processing/algs/gdal/OffsetCurve.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def commandName(self):
8282
return 'ogr2ogr'
8383

8484
def getConsoleCommands(self, parameters, context, feedback):
85+
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
8586
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
8687
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
8788
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
@@ -90,14 +91,20 @@ def getConsoleCommands(self, parameters, context, feedback):
9091

9192
output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)
9293

94+
other_fields = []
95+
for f in fields:
96+
if f.name() == geometry:
97+
continue
98+
other_fields.append(f.name())
99+
93100
arguments = []
94101
arguments.append(output)
95102
arguments.append(ogrLayer)
96103
arguments.append('-dialect')
97104
arguments.append('sqlite')
98105
arguments.append('-sql')
99106

100-
sql = "SELECT ST_OffsetCurve({}, {}), * FROM '{}'".format(geometry, distance, layerName)
107+
sql = "SELECT ST_OffsetCurve({}, {}) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)
101108
arguments.append(sql)
102109

103110
if options:

python/plugins/processing/algs/gdal/OneSideBuffer.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ def commandName(self):
108108
return 'ogr2ogr'
109109

110110
def getConsoleCommands(self, parameters, context, feedback):
111+
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
111112
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
112113
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
113114
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
@@ -119,6 +120,12 @@ def getConsoleCommands(self, parameters, context, feedback):
119120

120121
output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)
121122

123+
other_fields = []
124+
for f in fields:
125+
if f.name() == geometry:
126+
continue
127+
other_fields.append(f.name())
128+
122129
arguments = []
123130
arguments.append(output)
124131
arguments.append(ogrLayer)
@@ -127,9 +134,9 @@ def getConsoleCommands(self, parameters, context, feedback):
127134
arguments.append('-sql')
128135

129136
if dissolve or fieldName:
130-
sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})), * FROM '{}'".format(geometry, distance, side, layerName)
137+
sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})) AS {}, {} FROM '{}'".format(geometry, distance, side, geometry, ','.join(other_fields), layerName)
131138
else:
132-
sql = "SELECT ST_SingleSidedBuffer({}, {}, {}), * FROM '{}'".format(geometry, distance, side, layerName)
139+
sql = "SELECT ST_SingleSidedBuffer({}, {}, {}) AS {}, {} FROM '{}'".format(geometry, distance, side, geometry, ','.join(other_fields), layerName)
133140

134141
if fieldName:
135142
sql = '"{} GROUP BY {}"'.format(sql, fieldName)

python/plugins/processing/algs/gdal/PointsAlongLines.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def commandName(self):
8787
return 'ogr2ogr'
8888

8989
def getConsoleCommands(self, parameters, context, feedback):
90+
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
9091
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
9192
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
9293
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
@@ -95,14 +96,20 @@ def getConsoleCommands(self, parameters, context, feedback):
9596

9697
output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)
9798

99+
other_fields = []
100+
for f in fields:
101+
if f.name() == geometry:
102+
continue
103+
other_fields.append(f.name())
104+
98105
arguments = []
99106
arguments.append(output)
100107
arguments.append(ogrLayer)
101108
arguments.append('-dialect')
102109
arguments.append('sqlite')
103110
arguments.append('-sql')
104111

105-
sql = "SELECT ST_Line_Interpolate_Point({}, {}), * FROM '{}'".format(geometry, distance, layerName)
112+
sql = "SELECT ST_Line_Interpolate_Point({}, {}) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)
106113
arguments.append(sql)
107114

108115
if options:

python/plugins/processing/tests/testdata/expected/buffer_polys.gfs

-31
This file was deleted.

python/plugins/processing/tests/testdata/expected/gdal/buffer_lines.gfs

-16
This file was deleted.

python/plugins/processing/tests/testdata/expected/gdal/buffer_lines.gml

+2-2
Large diffs are not rendered by default.

python/plugins/processing/tests/testdata/expected/gdal/buffer_lines.xsd

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
</xs:extension>
1111
</xs:complexContent>
1212
</xs:complexType>
13-
<xs:element name="buffer_lines" type="ogr:buffer_lines_Type" substitutionGroup="gml:_Feature"/>
14-
<xs:complexType name="buffer_lines_Type">
13+
<xs:element name="SELECT" type="ogr:SELECT_Type" substitutionGroup="gml:_Feature"/>
14+
<xs:complexType name="SELECT_Type">
1515
<xs:complexContent>
1616
<xs:extension base="gml:AbstractFeatureType">
1717
<xs:sequence>
18-
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
18+
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
1919
</xs:sequence>
2020
</xs:extension>
2121
</xs:complexContent>

python/plugins/processing/tests/testdata/expected/gdal/buffer_lines_dissolve.gml

+3-3
Large diffs are not rendered by default.

python/plugins/processing/tests/testdata/expected/gdal/buffer_lines_dissolve.xsd

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
</xs:extension>
1111
</xs:complexContent>
1212
</xs:complexType>
13-
<xs:element name="buffer_lines_dissolve" type="ogr:buffer_lines_dissolve_Type" substitutionGroup="gml:_Feature"/>
14-
<xs:complexType name="buffer_lines_dissolve_Type">
13+
<xs:element name="SELECT" type="ogr:SELECT_Type" substitutionGroup="gml:_Feature"/>
14+
<xs:complexType name="SELECT_Type">
1515
<xs:complexContent>
1616
<xs:extension base="gml:AbstractFeatureType">
1717
<xs:sequence>
18-
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
18+
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
1919
</xs:sequence>
2020
</xs:extension>
2121
</xs:complexContent>

python/plugins/processing/tests/testdata/expected/gdal/buffer_polys.gfs

-32
This file was deleted.

0 commit comments

Comments
 (0)