diff --git a/python/plugins/grassprovider/grass_algorithm.py b/python/plugins/grassprovider/grass_algorithm.py index 4504177caf26..190d13324aa2 100644 --- a/python/plugins/grassprovider/grass_algorithm.py +++ b/python/plugins/grassprovider/grass_algorithm.py @@ -985,6 +985,10 @@ def loadVectorLayer(self, name, layer, os.path.normpath(file_path), ' layer="{}"'.format(layer_name) if layer_name else '', destFilename) + if layer.subsetString(): + escaped_subset = layer.subsetString().replace('"', '\\"') + command += f' where="{escaped_subset}"' + self.commands.append(command) def exportVectorLayerFromParameter(self, name, parameters, context, layer=None, nocats=False): diff --git a/python/plugins/grassprovider/tests/grass_algorithms_vector_test.py b/python/plugins/grassprovider/tests/grass_algorithms_vector_test.py index 5faa138301b0..d324df1e89eb 100644 --- a/python/plugins/grassprovider/tests/grass_algorithms_vector_test.py +++ b/python/plugins/grassprovider/tests/grass_algorithms_vector_test.py @@ -299,6 +299,15 @@ def get_command(alg): alg.loadVectorLayer('test_layer', vl, context, external=True) self.assertEqual(get_command(alg), 'v.external input="testdata/pol.gpkg" output="###" --overwrite -o') + # layer with filter + vl = QgsVectorLayer(source + '|layername=pol3') + self.assertTrue(vl.isValid()) + vl.setSubsetString('"field"=\'value\'') + alg.loadVectorLayer('test_layer', vl, context, external=False) + self.assertEqual(get_command(alg), 'v.in.ogr min_area=None snap=None input="testdata/pol.gpkg" layer="pol3" output="###" --overwrite -o where="\\"field\\"=\'value\'"') + alg.loadVectorLayer('test_layer', vl, context, external=True) + self.assertEqual(get_command(alg), 'v.external input="testdata/pol.gpkg" layer="pol3" output="###" --overwrite -o where="\\"field\\"=\'value\'"') + if __name__ == '__main__': nose2.main()