def testUniqueConstraint(self):
        vl = QgsVectorLayer(
            "dbname=%s table=test_constraints key='id'" % self.dbname,
            "test_constraints", "spatialite")
        self.assertTrue(vl.isValid())
        self.assertEqual(len(vl.fields()), 5)

        # test some bad field indexes
        self.assertEqual(vl.dataProvider().fieldConstraints(-1),
                         QgsFieldConstraints.Constraints())
        self.assertEqual(vl.dataProvider().fieldConstraints(1001),
                         QgsFieldConstraints.Constraints())

        self.assertTrue(vl.dataProvider().fieldConstraints(0)
                        & QgsFieldConstraints.ConstraintUnique)
        self.assertFalse(vl.dataProvider().fieldConstraints(1)
                         & QgsFieldConstraints.ConstraintUnique)
        self.assertTrue(vl.dataProvider().fieldConstraints(2)
                        & QgsFieldConstraints.ConstraintUnique)
        self.assertFalse(vl.dataProvider().fieldConstraints(3)
                         & QgsFieldConstraints.ConstraintUnique)
        self.assertTrue(vl.dataProvider().fieldConstraints(4)
                        & QgsFieldConstraints.ConstraintUnique)

        # test that constraints have been saved to fields correctly
        fields = vl.fields()
        self.assertTrue(
            fields.at(0).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertEqual(
            fields.at(0).constraints().constraintOrigin(
                QgsFieldConstraints.ConstraintUnique),
            QgsFieldConstraints.ConstraintOriginProvider)
        self.assertFalse(
            fields.at(1).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertTrue(
            fields.at(2).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertEqual(
            fields.at(2).constraints().constraintOrigin(
                QgsFieldConstraints.ConstraintUnique),
            QgsFieldConstraints.ConstraintOriginProvider)
        self.assertFalse(
            fields.at(3).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertTrue(
            fields.at(4).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertEqual(
            fields.at(4).constraints().constraintOrigin(
                QgsFieldConstraints.ConstraintUnique),
            QgsFieldConstraints.ConstraintOriginProvider)
Esempio n. 2
0
    def testUniqueConstraint(self):
        vl = QgsVectorLayer(
            '%s table="qgis_test"."constraints" sql=' % (self.dbconn),
            "constraints", "postgres")
        self.assertTrue(vl.isValid())
        self.assertEqual(len(vl.fields()), 4)

        # test some bad field indexes
        self.assertEqual(vl.dataProvider().fieldConstraints(-1),
                         QgsFieldConstraints.Constraints())
        self.assertEqual(vl.dataProvider().fieldConstraints(1001),
                         QgsFieldConstraints.Constraints())

        self.assertTrue(vl.dataProvider().fieldConstraints(0)
                        & QgsFieldConstraints.ConstraintUnique)
        self.assertTrue(vl.dataProvider().fieldConstraints(1)
                        & QgsFieldConstraints.ConstraintUnique)
        self.assertTrue(vl.dataProvider().fieldConstraints(2)
                        & QgsFieldConstraints.ConstraintUnique)
        self.assertFalse(vl.dataProvider().fieldConstraints(3)
                         & QgsFieldConstraints.ConstraintUnique)

        # test that constraints have been saved to fields correctly
        fields = vl.fields()
        self.assertTrue(
            fields.at(0).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertEqual(
            fields.at(0).constraints().constraintOrigin(
                QgsFieldConstraints.ConstraintUnique),
            QgsFieldConstraints.ConstraintOriginProvider)
        self.assertTrue(
            fields.at(1).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertEqual(
            fields.at(1).constraints().constraintOrigin(
                QgsFieldConstraints.ConstraintUnique),
            QgsFieldConstraints.ConstraintOriginProvider)
        self.assertTrue(
            fields.at(2).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
        self.assertEqual(
            fields.at(2).constraints().constraintOrigin(
                QgsFieldConstraints.ConstraintUnique),
            QgsFieldConstraints.ConstraintOriginProvider)
        self.assertFalse(
            fields.at(3).constraints().constraints()
            & QgsFieldConstraints.ConstraintUnique)
Esempio n. 3
0
    def testNotNullConstraint(self):
        """ test detection of not null constraint on OGR layer """

        tmpfile = os.path.join(self.basetestpath,
                               'testNotNullConstraint.sqlite')
        ds = ogr.GetDriverByName('SQLite').CreateDataSource(tmpfile)
        lyr = ds.CreateLayer('test',
                             geom_type=ogr.wkbPoint,
                             options=['FID=fid'])
        lyr.CreateField(ogr.FieldDefn('field1', ogr.OFTInteger))
        fld2 = ogr.FieldDefn('field2', ogr.OFTInteger)
        fld2.SetNullable(False)
        lyr.CreateField(fld2)
        ds = None

        vl = QgsVectorLayer('{}'.format(tmpfile), 'test', 'ogr')
        self.assertTrue(vl.isValid())

        # test some bad indexes
        self.assertEqual(vl.dataProvider().fieldConstraints(-1),
                         QgsFieldConstraints.Constraints())
        self.assertEqual(vl.dataProvider().fieldConstraints(1001),
                         QgsFieldConstraints.Constraints())

        self.assertTrue(vl.dataProvider().fieldConstraints(0)
                        & QgsFieldConstraints.ConstraintNotNull)
        self.assertFalse(vl.dataProvider().fieldConstraints(1)
                         & QgsFieldConstraints.ConstraintNotNull)
        self.assertTrue(vl.dataProvider().fieldConstraints(2)
                        & QgsFieldConstraints.ConstraintNotNull)

        # test that constraints have been saved to fields correctly
        fields = vl.fields()
        self.assertTrue(
            fields.at(0).constraints().constraints()
            & QgsFieldConstraints.ConstraintNotNull)
        self.assertFalse(
            fields.at(1).constraints().constraints()
            & QgsFieldConstraints.ConstraintNotNull)
        self.assertTrue(
            fields.at(2).constraints().constraints()
            & QgsFieldConstraints.ConstraintNotNull)
        self.assertEqual(
            fields.at(2).constraints().constraintOrigin(
                QgsFieldConstraints.ConstraintNotNull),
            QgsFieldConstraints.ConstraintOriginProvider)