diff --git a/python/core/qgsdefaultvalue.sip b/python/core/qgsdefaultvalue.sip index 196affe9ac6..9ca357c323b 100644 --- a/python/core/qgsdefaultvalue.sip +++ b/python/core/qgsdefaultvalue.sip @@ -38,7 +38,7 @@ not set, the default value will only be used when a feature is created. %End public: - QgsDefaultValue( const QString &expression = QString(), bool applyOnUpdate = false ); + explicit QgsDefaultValue( const QString &expression = QString(), bool applyOnUpdate = false ); %Docstring Create a new default value with the given ``expression`` and ``applyOnUpdate`` flag. diff --git a/src/app/qgsattributesformproperties.cpp b/src/app/qgsattributesformproperties.cpp index 7136535eb1b..966ac250a56 100644 --- a/src/app/qgsattributesformproperties.cpp +++ b/src/app/qgsattributesformproperties.cpp @@ -242,7 +242,6 @@ void QgsAttributesFormProperties::loadAttributeTypeDialog() mAttributeTypeDialog->setConstraintExpressionEnforced( cfg.mConstraintStrength.value( QgsFieldConstraints::ConstraintExpression, QgsFieldConstraints::ConstraintStrengthHard ) == QgsFieldConstraints::ConstraintStrengthHard ); mAttributeTypeDialog->setDefaultValueExpression( mLayer->defaultValueDefinition( index ).expression() ); mAttributeTypeDialog->setApplyDefaultValueOnUpdate( mLayer->defaultValueDefinition( index ).applyOnUpdate() ); - //confustion (will be removed): das hier funktioniert nicht, es is neu, aber ich weiss nicht woher: mAttributeTypeDialog->setDefaultValueExpression( mLayer->defaultValueExpression( index ) ); mAttributeTypeDialog->setEditorWidgetConfig( cfg.mEditorWidgetConfig ); mAttributeTypeDialog->setEditorWidgetType( cfg.mEditorWidgetType ); diff --git a/src/core/qgsdefaultvalue.h b/src/core/qgsdefaultvalue.h index fcba410ca06..c7000426e27 100644 --- a/src/core/qgsdefaultvalue.h +++ b/src/core/qgsdefaultvalue.h @@ -57,7 +57,7 @@ class CORE_EXPORT QgsDefaultValue * Create a new default value with the given \a expression and \a applyOnUpdate flag. * \see QgsVectorLayer::setDefaultValueDefinition */ - QgsDefaultValue( const QString &expression = QString(), bool applyOnUpdate = false ); + explicit QgsDefaultValue( const QString &expression = QString(), bool applyOnUpdate = false ); bool operator==( const QgsDefaultValue &other ) const; /** diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index 6f500bffbc4..ca250cecb7a 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -3159,9 +3159,9 @@ void QgsVectorLayer::setDefaultValueDefinition( int index, const QgsDefaultValue QgsDefaultValue QgsVectorLayer::defaultValueDefinition( int index ) const { if ( index < 0 || index >= mFields.count() ) - return QString(); + return QgsDefaultValue(); else - return mFields.at( index ).defaultValueDefinition().expression(); + return mFields.at( index ).defaultValueDefinition(); } QSet QgsVectorLayer::uniqueValues( int index, int limit ) const diff --git a/tests/src/core/testqgsfield.cpp b/tests/src/core/testqgsfield.cpp index b5795f14ef5..2f6de8f25c8 100644 --- a/tests/src/core/testqgsfield.cpp +++ b/tests/src/core/testqgsfield.cpp @@ -135,7 +135,7 @@ void TestQgsField::gettersSetters() QCOMPARE( field.comment(), QString( "comment" ) ); field.setAlias( QStringLiteral( "alias" ) ); QCOMPARE( field.alias(), QString( "alias" ) ); - field.setDefaultValueDefinition( QStringLiteral( "1+2" ) ); + field.setDefaultValueDefinition( QgsDefaultValue( QStringLiteral( "1+2" ) ) ); QCOMPARE( field.defaultValueDefinition().expression(), QString( "1+2" ) ); QgsFieldConstraints constraints; constraints.setConstraint( QgsFieldConstraints::ConstraintNotNull, QgsFieldConstraints::ConstraintOriginProvider ); @@ -244,10 +244,10 @@ void TestQgsField::equality() QVERIFY( !( field1 == field2 ) ); QVERIFY( field1 != field2 ); field2.setAlias( QString() ); - field2.setDefaultValueDefinition( QStringLiteral( "1+2" ) ); + field2.setDefaultValueDefinition( QgsDefaultValue( QStringLiteral( "1+2" ) ) ); QVERIFY( !( field1 == field2 ) ); QVERIFY( field1 != field2 ); - field2.setDefaultValueDefinition( QString() ); + field2.setDefaultValueDefinition( QgsDefaultValue() ); constraints = field2.constraints(); constraints.removeConstraint( QgsFieldConstraints::ConstraintNotNull ); field2.setConstraints( constraints ); @@ -461,7 +461,7 @@ void TestQgsField::dataStream() original.setTypeName( QStringLiteral( "typename1" ) ); original.setComment( QStringLiteral( "comment1" ) ); original.setAlias( QStringLiteral( "alias" ) ); - original.setDefaultValueDefinition( QStringLiteral( "default" ) ); + original.setDefaultValueDefinition( QgsDefaultValue( QStringLiteral( "default" ) ) ); QgsFieldConstraints constraints; constraints.setConstraint( QgsFieldConstraints::ConstraintNotNull, QgsFieldConstraints::ConstraintOriginProvider ); constraints.setConstraint( QgsFieldConstraints::ConstraintUnique, QgsFieldConstraints::ConstraintOriginLayer ); diff --git a/tests/src/python/test_qgsvectorlayer.py b/tests/src/python/test_qgsvectorlayer.py index 568899971c6..d5a819cb290 100755 --- a/tests/src/python/test_qgsvectorlayer.py +++ b/tests/src/python/test_qgsvectorlayer.py @@ -2061,14 +2061,28 @@ class TestQgsVectorLayer(unittest.TestCase, FeatureSourceTestCase): layer.setDefaultValueDefinition(0, QgsDefaultValue("'test'")) self.assertTrue(layer.defaultValueDefinition(0)) self.assertEqual(layer.defaultValueDefinition(0).expression(), "'test'") + self.assertFalse(layer.defaultValueDefinition(0).applyOnUpdate()) self.assertFalse(layer.defaultValueDefinition(1)) + self.assertFalse(layer.defaultValueDefinition(1).applyOnUpdate()) self.assertFalse(layer.defaultValueDefinition(2)) + self.assertFalse(layer.defaultValueDefinition(2).applyOnUpdate()) self.assertEqual(layer.fields().at(0).defaultValueDefinition().expression(), "'test'") layer.setDefaultValueDefinition(1, QgsDefaultValue("2+2")) self.assertEqual(layer.defaultValueDefinition(0).expression(), "'test'") + self.assertFalse(layer.defaultValueDefinition(0).applyOnUpdate()) self.assertEqual(layer.defaultValueDefinition(1).expression(), "2+2") + self.assertFalse(layer.defaultValueDefinition(1).applyOnUpdate()) self.assertFalse(layer.defaultValueDefinition(2)) + self.assertFalse(layer.defaultValueDefinition(2).applyOnUpdate()) + self.assertEqual(layer.fields().at(0).defaultValueDefinition().expression(), "'test'") + self.assertEqual(layer.fields().at(1).defaultValueDefinition().expression(), "2+2") + + layer.setDefaultValueDefinition(1, QgsDefaultValue("2+2", True)) + self.assertEqual(layer.defaultValueDefinition(0).expression(), "'test'") + self.assertFalse(layer.defaultValueDefinition(0).applyOnUpdate()) + self.assertEqual(layer.defaultValueDefinition(1).expression(), "2+2") + self.assertTrue(layer.defaultValueDefinition(1).applyOnUpdate()) self.assertEqual(layer.fields().at(0).defaultValueDefinition().expression(), "'test'") self.assertEqual(layer.fields().at(1).defaultValueDefinition().expression(), "2+2") diff --git a/tests/testdata/polys_overlapping_with_id.dbf b/tests/testdata/polys_overlapping_with_id.dbf index fd276803f68..775d4ad0421 100644 Binary files a/tests/testdata/polys_overlapping_with_id.dbf and b/tests/testdata/polys_overlapping_with_id.dbf differ