|
19 | 19 | import shutil
|
20 | 20 | from osgeo import gdal, ogr
|
21 | 21 |
|
22 |
| -from qgis.core import QgsVectorLayer, QgsFeature, QgsFeatureRequest, QgsFieldConstraints, NULL |
| 22 | +from qgis.core import QgsVectorLayer, QgsFeature, QgsFeatureRequest, QgsFieldConstraints, QgsFieldConstraints, QgsPointXY, NULL |
23 | 23 | from qgis.testing import start_app, unittest
|
24 | 24 | from qgis.PyQt.QtCore import QDate, QTime, QDateTime
|
25 | 25 |
|
@@ -147,13 +147,13 @@ def testNotNullConstraint(self):
|
147 | 147 | self.assertEqual(vl.dataProvider().fieldConstraints(-1), QgsFieldConstraints.Constraints())
|
148 | 148 | self.assertEqual(vl.dataProvider().fieldConstraints(1001), QgsFieldConstraints.Constraints())
|
149 | 149 |
|
150 |
| - self.assertFalse(vl.dataProvider().fieldConstraints(0) & QgsFieldConstraints.ConstraintNotNull) |
| 150 | + self.assertTrue(vl.dataProvider().fieldConstraints(0) & QgsFieldConstraints.ConstraintNotNull) |
151 | 151 | self.assertFalse(vl.dataProvider().fieldConstraints(1) & QgsFieldConstraints.ConstraintNotNull)
|
152 | 152 | self.assertTrue(vl.dataProvider().fieldConstraints(2) & QgsFieldConstraints.ConstraintNotNull)
|
153 | 153 |
|
154 | 154 | # test that constraints have been saved to fields correctly
|
155 | 155 | fields = vl.fields()
|
156 |
| - self.assertFalse(fields.at(0).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull) |
| 156 | + self.assertTrue(fields.at(0).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull) |
157 | 157 | self.assertFalse(fields.at(1).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull)
|
158 | 158 | self.assertTrue(fields.at(2).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull)
|
159 | 159 | self.assertEqual(fields.at(2).constraints().constraintOrigin(QgsFieldConstraints.ConstraintNotNull), QgsFieldConstraints.ConstraintOriginProvider)
|
@@ -270,6 +270,38 @@ def testSubsetStringFids(self):
|
270 | 270 | vl.reload()
|
271 | 271 | self.assertTrue(vl.fields().at(vl.fields().count() - 1).name() == "orig_ogc_fid")
|
272 | 272 |
|
| 273 | + def test_SplitFeature(self): |
| 274 | + """Test sqlite feature can be split""" |
| 275 | + tmpfile = os.path.join(self.basetestpath, 'testGeopackageSplitFeatures.sqlite') |
| 276 | + ds = ogr.GetDriverByName('SQlite').CreateDataSource(tmpfile) |
| 277 | + lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon) |
| 278 | + lyr.CreateField(ogr.FieldDefn('str_field', ogr.OFTString)) |
| 279 | + f = ogr.Feature(lyr.GetLayerDefn()) |
| 280 | + f.SetGeometry(ogr.CreateGeometryFromWkt('POLYGON ((0 0,0 1,1 1,1 0,0 0))')) |
| 281 | + lyr.CreateFeature(f) |
| 282 | + f = None |
| 283 | + ds = None |
| 284 | + |
| 285 | + layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr') |
| 286 | + |
| 287 | + # Check that pk field has unique constraint |
| 288 | + fields = layer.fields() |
| 289 | + pkfield = fields.at(0) |
| 290 | + self.assertTrue(pkfield.constraints().constraints() & QgsFieldConstraints.ConstraintUnique) |
| 291 | + |
| 292 | + self.assertTrue(layer.isValid()) |
| 293 | + self.assertTrue(layer.isSpatial()) |
| 294 | + self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0))') |
| 295 | + layer.startEditing() |
| 296 | + self.assertEqual(layer.splitFeatures([QgsPointXY(0.5, 0), QgsPointXY(0.5, 1)], 0), 0) |
| 297 | + self.assertTrue(layer.commitChanges()) |
| 298 | + self.assertEqual(layer.featureCount(), 2) |
| 299 | + |
| 300 | + layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr') |
| 301 | + self.assertEqual(layer.featureCount(), 2) |
| 302 | + self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0.5 0, 0.5 1, 1 1, 1 0, 0.5 0))') |
| 303 | + self.assertEqual([f for f in layer.getFeatures()][1].geometry().asWkt(), 'Polygon ((0.5 1, 0.5 0, 0 0, 0 1, 0.5 1))') |
| 304 | + |
273 | 305 |
|
274 | 306 | if __name__ == '__main__':
|
275 | 307 | unittest.main()
|
0 commit comments