1717import os
1818import tempfile
1919import shutil
20- import glob
2120from osgeo import gdal , ogr
2221
23- from qgis .core import QgsVectorLayer , QgsFeature , QgsGeometry , QgsFeatureRequest
22+ from qgis .core import QgsVectorLayer , QgsFeature , QgsGeometry
2423from qgis .testing import start_app , unittest
25- from utilities import unitTestDataPath
2624
2725start_app ()
2826
@@ -57,14 +55,14 @@ def testSingleToMultiPolygonPromotion(self):
5755
5856 tmpfile = os .path .join (self .basetestpath , 'testSingleToMultiPolygonPromotion.gpkg' )
5957 ds = ogr .GetDriverByName ('GPKG' ).CreateDataSource (tmpfile )
60- lyr = ds .CreateLayer ('test' , geom_type = ogr .wkbMultiPolygon )
58+ ds .CreateLayer ('test' , geom_type = ogr .wkbMultiPolygon )
6159 ds = None
6260
6361 vl = QgsVectorLayer ('{}|layerid=0' .format (tmpfile ), 'test' , 'ogr' )
6462 f = QgsFeature ()
6563 f .setGeometry (QgsGeometry .fromWkt ('POLYGON ((0 0,0 1,1 1,0 0))' ))
6664 vl .dataProvider ().addFeatures ([f ])
67- got = [f for f in vl .getFeatures ()][0 ]
65+ got = [feat for feat in vl .getFeatures ()][0 ]
6866 got_geom = got .geometry ()
6967 reference = QgsGeometry .fromWkt ('MultiPolygon (((0 0, 0 1, 1 1, 0 0)))' )
7068 # The geometries must be binarily identical
@@ -75,15 +73,15 @@ def testCurveGeometryType(self):
7573
7674 tmpfile = os .path .join (self .basetestpath , 'testCurveGeometryType.gpkg' )
7775 ds = ogr .GetDriverByName ('GPKG' ).CreateDataSource (tmpfile )
78- lyr = ds .CreateLayer ('test' , geom_type = ogr .wkbCurvePolygon )
76+ ds .CreateLayer ('test' , geom_type = ogr .wkbCurvePolygon )
7977 ds = None
8078
8179 vl = QgsVectorLayer ('{}' .format (tmpfile ), 'test' , 'ogr' )
8280 self .assertEqual (vl .dataProvider ().subLayers (), ['0:test:0:CurvePolygon' ])
8381 f = QgsFeature ()
8482 f .setGeometry (QgsGeometry .fromWkt ('POLYGON ((0 0,0 1,1 1,0 0))' ))
8583 vl .dataProvider ().addFeatures ([f ])
86- got = [f for f in vl .getFeatures ()][0 ]
84+ got = [feat for feat in vl .getFeatures ()][0 ]
8785 got_geom = got .geometry ()
8886 reference = QgsGeometry .fromWkt ('CurvePolygon (((0 0, 0 1, 1 1, 0 0)))' )
8987 # The geometries must be binarily identical
@@ -148,13 +146,34 @@ def testBug15351_closeIter_commit_closeProvider(self):
148146
149147 @unittest .expectedFailure (int (gdal .VersionInfo ('VERSION_NUM' )) < GDAL_COMPUTE_VERSION (2 , 0 , 0 ))
150148 # We need GDAL 2.0 to issue PRAGMA journal_mode
151- def testBug15351_closeIter_commit_closeProvider (self ):
152- self .internalTestBug15351 ('closeIter_commit_closeProvider ' )
149+ def testBug15351_commit_closeProvider_closeIter (self ):
150+ self .internalTestBug15351 ('commit_closeProvider_closeIter ' )
153151
154152 @unittest .expectedFailure (int (gdal .VersionInfo ('VERSION_NUM' )) < GDAL_COMPUTE_VERSION (2 , 0 , 0 ))
155153 # We need GDAL 2.0 to issue PRAGMA journal_mode
156154 def testBug15351_commit_closeIter_closeProvider (self ):
157155 self .internalTestBug15351 ('commit_closeIter_closeProvider' )
158156
157+ def testSelectSubsetString (self ):
158+
159+ tmpfile = os .path .join (self .basetestpath , 'testSelectSubsetString.gpkg' )
160+ ds = ogr .GetDriverByName ('GPKG' ).CreateDataSource (tmpfile )
161+ lyr = ds .CreateLayer ('test' , geom_type = ogr .wkbMultiPolygon )
162+ lyr .CreateField (ogr .FieldDefn ('foo' , ogr .OFTString ))
163+ f = ogr .Feature (lyr .GetLayerDefn ())
164+ f ['foo' ] = 'bar'
165+ lyr .CreateFeature (f )
166+ f = None
167+ f = ogr .Feature (lyr .GetLayerDefn ())
168+ f ['foo' ] = 'baz'
169+ lyr .CreateFeature (f )
170+ f = None
171+ ds = None
172+
173+ vl = QgsVectorLayer ('{}|layerid=0' .format (tmpfile ), 'test' , 'ogr' )
174+ vl .setSubsetString ("SELECT fid, foo FROM test WHERE foo = 'baz'" )
175+ got = [feat for feat in vl .getFeatures ()]
176+ self .assertEqual ( len (got ), 1 )
177+
159178if __name__ == '__main__' :
160179 unittest .main ()
0 commit comments