@@ -841,8 +841,11 @@ def testCreateSpatialIndex(self):
841
841
def testSubSetStringEditable_bug17795 (self ):
842
842
"""Test that a layer is not editable after setting a subset and it's reverted to editable after the filter is removed"""
843
843
844
+ tmpfile = os .path .join (self .basetestpath , 'testSubSetStringEditable_bug17795.gpkg' )
845
+ shutil .copy (TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg' , tmpfile )
846
+
844
847
isEditable = QgsVectorDataProvider .ChangeAttributeValues
845
- testPath = TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg |layername=bug_17795'
848
+ testPath = tmpfile + '|layername=bug_17795'
846
849
847
850
vl = QgsVectorLayer (testPath , 'subset_test' , 'ogr' )
848
851
self .assertTrue (vl .isValid ())
@@ -868,7 +871,10 @@ def testSubsetStringExtent_bug17863(self):
868
871
def _lessdigits (s ):
869
872
return re .sub (r'(\d+\.\d{3})\d+' , r'\1' , s )
870
873
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'
872
878
subSetString = '"name" = \' int\' '
873
879
subSet = '|layername=bug_17795|subset=%s' % subSetString
874
880
@@ -897,6 +903,32 @@ def _lessdigits(s):
897
903
self .assertEqual (_lessdigits (subSet_vl .extent ().toString ()), filtered_extent )
898
904
self .assertNotEqual (_lessdigits (subSet_vl .extent ().toString ()), unfiltered_extent )
899
905
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
+
900
932
901
933
if __name__ == '__main__' :
902
934
unittest .main ()
0 commit comments