@@ -841,8 +841,11 @@ def testCreateSpatialIndex(self):
841841 def testSubSetStringEditable_bug17795 (self ):
842842 """Test that a layer is not editable after setting a subset and it's reverted to editable after the filter is removed"""
843843
844+ tmpfile = os .path .join (self .basetestpath , 'testSubSetStringEditable_bug17795.gpkg' )
845+ shutil .copy (TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg' , tmpfile )
846+
844847 isEditable = QgsVectorDataProvider .ChangeAttributeValues
845- testPath = TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg |layername=bug_17795'
848+ testPath = tmpfile + '|layername=bug_17795'
846849
847850 vl = QgsVectorLayer (testPath , 'subset_test' , 'ogr' )
848851 self .assertTrue (vl .isValid ())
@@ -868,7 +871,10 @@ def testSubsetStringExtent_bug17863(self):
868871 def _lessdigits (s ):
869872 return re .sub (r'(\d+\.\d{3})\d+' , r'\1' , s )
870873
871- testPath = TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg|layername=bug_17795'
874+ tmpfile = os .path .join (self .basetestpath , 'testSubsetStringExtent_bug17863.gpkg' )
875+ shutil .copy (TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg' , tmpfile )
876+
877+ testPath = tmpfile + '|layername=bug_17795'
872878 subSetString = '"name" = \' int\' '
873879 subSet = '|layername=bug_17795|subset=%s' % subSetString
874880
@@ -897,6 +903,32 @@ def _lessdigits(s):
897903 self .assertEqual (_lessdigits (subSet_vl .extent ().toString ()), filtered_extent )
898904 self .assertNotEqual (_lessdigits (subSet_vl .extent ().toString ()), unfiltered_extent )
899905
906+ def testRequestWithoutGeometryOnLayerMixedGeometry (self ):
907+ """ Test bugfix for https://issues.qgis.org/issues/19077 """
908+
909+ # Issue is more a generic one of the OGR provider, but easy to trigger with GPKG
910+
911+ tmpfile = os .path .join (self .basetestpath , 'testRequestWithoutGeometryOnLayerMixedGeometry.gpkg' )
912+ ds = ogr .GetDriverByName ('GPKG' ).CreateDataSource (tmpfile )
913+ lyr = ds .CreateLayer ('test' , geom_type = ogr .wkbUnknown , options = ['SPATIAL_INDEX=NO' ])
914+ f = ogr .Feature (lyr .GetLayerDefn ())
915+ f .SetGeometry (ogr .CreateGeometryFromWkt ('POINT(0 1)' ))
916+ lyr .CreateFeature (f )
917+ f = ogr .Feature (lyr .GetLayerDefn ())
918+ f .SetGeometry (ogr .CreateGeometryFromWkt ('LINESTRING(0 0,1 0)' ))
919+ lyr .CreateFeature (f )
920+ f = ogr .Feature (lyr .GetLayerDefn ())
921+ f .SetGeometry (ogr .CreateGeometryFromWkt ('LINESTRING(0 0,1 0)' ))
922+ lyr .CreateFeature (f )
923+ f = None
924+ ds = None
925+
926+ vl = QgsVectorLayer (u'{}' .format (tmpfile ) + "|geometrytype=Point|layername=" + "test" , 'test' , u'ogr' )
927+ self .assertTrue (vl .isValid ())
928+ request = QgsFeatureRequest ().setFlags (QgsFeatureRequest .NoGeometry )
929+ features = [f for f in vl .getFeatures (request )]
930+ self .assertEqual (len (features ), 1 )
931+
900932
901933if __name__ == '__main__' :
902934 unittest .main ()
0 commit comments