|
19 | 19 | import shutil
|
20 | 20 | import tempfile
|
21 | 21 |
|
22 |
| -from qgis.core import QgsVectorLayer, QgsPoint, QgsFeature, QgsGeometry, QgsProject, QgsMapLayerRegistry |
| 22 | +from qgis.core import QgsVectorLayer, QgsPoint, QgsFeature, QgsGeometry, QgsProject, QgsMapLayerRegistry, QgsField |
23 | 23 |
|
24 | 24 | from qgis.testing import start_app, unittest
|
25 | 25 | from utilities import unitTestDataPath
|
@@ -135,6 +135,10 @@ def setUpClass(cls):
|
135 | 135 | sql = "SELECT AddGeometryColumn('test_relation_b', 'Geometry', 4326, 'POLYGON', 'XY')"
|
136 | 136 | cur.execute(sql)
|
137 | 137 |
|
| 138 | + # tables with constraints |
| 139 | + sql = "CREATE TABLE test_constraints(id INTEGER PRIMARY KEY, num INTEGER NOT NULL, desc TEXT UNIQUE, desc2 TEXT, num2 INTEGER NOT NULL UNIQUE)" |
| 140 | + cur.execute(sql) |
| 141 | + |
138 | 142 | cur.execute("COMMIT")
|
139 | 143 | con.close()
|
140 | 144 |
|
@@ -382,6 +386,54 @@ def test_discover_relation(self):
|
382 | 386 | QgsMapLayerRegistry.instance().removeMapLayer(track.id())
|
383 | 387 | QgsMapLayerRegistry.instance().removeMapLayer(artist.id())
|
384 | 388 |
|
| 389 | + def testNotNullConstraint(self): |
| 390 | + vl = QgsVectorLayer("dbname=%s table=test_constraints key='id'" % self.dbname, "test_constraints", |
| 391 | + "spatialite") |
| 392 | + self.assertTrue(vl.isValid()) |
| 393 | + self.assertEqual(len(vl.fields()), 5) |
| 394 | + |
| 395 | + # test some bad field indexes |
| 396 | + self.assertEqual(vl.dataProvider().fieldConstraints(-1), QgsField.Constraints()) |
| 397 | + self.assertEqual(vl.dataProvider().fieldConstraints(1001), QgsField.Constraints()) |
| 398 | + |
| 399 | + self.assertTrue(vl.dataProvider().fieldConstraints(0) & QgsField.ConstraintNotNull) |
| 400 | + self.assertTrue(vl.dataProvider().fieldConstraints(1) & QgsField.ConstraintNotNull) |
| 401 | + self.assertFalse(vl.dataProvider().fieldConstraints(2) & QgsField.ConstraintNotNull) |
| 402 | + self.assertFalse(vl.dataProvider().fieldConstraints(3) & QgsField.ConstraintNotNull) |
| 403 | + self.assertTrue(vl.dataProvider().fieldConstraints(4) & QgsField.ConstraintNotNull) |
| 404 | + |
| 405 | + # test that constraints have been saved to fields correctly |
| 406 | + fields = vl.fields() |
| 407 | + self.assertTrue(fields.at(0).constraints() & QgsField.ConstraintNotNull) |
| 408 | + self.assertTrue(fields.at(1).constraints() & QgsField.ConstraintNotNull) |
| 409 | + self.assertFalse(fields.at(2).constraints() & QgsField.ConstraintNotNull) |
| 410 | + self.assertFalse(fields.at(3).constraints() & QgsField.ConstraintNotNull) |
| 411 | + self.assertTrue(fields.at(4).constraints() & QgsField.ConstraintNotNull) |
| 412 | + |
| 413 | + def testUniqueConstraint(self): |
| 414 | + vl = QgsVectorLayer("dbname=%s table=test_constraints key='id'" % self.dbname, "test_constraints", |
| 415 | + "spatialite") |
| 416 | + self.assertTrue(vl.isValid()) |
| 417 | + self.assertEqual(len(vl.fields()), 5) |
| 418 | + |
| 419 | + # test some bad field indexes |
| 420 | + self.assertEqual(vl.dataProvider().fieldConstraints(-1), QgsField.Constraints()) |
| 421 | + self.assertEqual(vl.dataProvider().fieldConstraints(1001), QgsField.Constraints()) |
| 422 | + |
| 423 | + self.assertTrue(vl.dataProvider().fieldConstraints(0) & QgsField.ConstraintUnique) |
| 424 | + self.assertFalse(vl.dataProvider().fieldConstraints(1) & QgsField.ConstraintUnique) |
| 425 | + self.assertTrue(vl.dataProvider().fieldConstraints(2) & QgsField.ConstraintUnique) |
| 426 | + self.assertFalse(vl.dataProvider().fieldConstraints(3) & QgsField.ConstraintUnique) |
| 427 | + self.assertTrue(vl.dataProvider().fieldConstraints(4) & QgsField.ConstraintUnique) |
| 428 | + |
| 429 | + # test that constraints have been saved to fields correctly |
| 430 | + fields = vl.fields() |
| 431 | + self.assertTrue(fields.at(0).constraints() & QgsField.ConstraintUnique) |
| 432 | + self.assertFalse(fields.at(1).constraints() & QgsField.ConstraintUnique) |
| 433 | + self.assertTrue(fields.at(2).constraints() & QgsField.ConstraintUnique) |
| 434 | + self.assertFalse(fields.at(3).constraints() & QgsField.ConstraintUnique) |
| 435 | + self.assertTrue(fields.at(4).constraints() & QgsField.ConstraintUnique) |
| 436 | + |
385 | 437 | # This test would fail. It would require turning on WAL
|
386 | 438 | def XXXXXtestLocking(self):
|
387 | 439 |
|
|
0 commit comments