mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
Gracefully handle empty existing property values when creating auxiliary
fields Fixes #46403
This commit is contained in:
parent
adacc90294
commit
304475806f
@ -244,7 +244,10 @@ int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property property, Q
|
||||
|
||||
// is there an existing property?
|
||||
const QgsProperty existingProperty = c.property( property );
|
||||
if ( existingProperty.propertyType() == QgsProperty::InvalidProperty || overwriteExisting )
|
||||
if ( existingProperty.propertyType() == QgsProperty::InvalidProperty
|
||||
|| ( existingProperty.propertyType() == QgsProperty::FieldBasedProperty && existingProperty.field().isEmpty() )
|
||||
|| ( existingProperty.propertyType() == QgsProperty::ExpressionBasedProperty && existingProperty.expressionString().isEmpty() )
|
||||
|| overwriteExisting )
|
||||
{
|
||||
const QgsProperty prop = QgsProperty::fromField( fieldName );
|
||||
c.setProperty( property, prop );
|
||||
|
@ -429,6 +429,39 @@ class TestQgsAuxiliaryStorage(unittest.TestCase):
|
||||
self.assertTrue(settings.dataDefinedProperties().property(key).isActive())
|
||||
self.assertEqual(settings.dataDefinedProperties().property(key).asExpression(), 'coalesce("auxiliary_storage_labeling_positiony",$y + 20)')
|
||||
|
||||
# with existing but invalid field name
|
||||
key = QgsPalLayerSettings.PositionY
|
||||
settings = QgsPalLayerSettings()
|
||||
settings.dataDefinedProperties().setProperty(key, QgsProperty.fromField(''))
|
||||
vl.setLabeling(QgsVectorLayerSimpleLabeling(settings))
|
||||
|
||||
# even when asked to not overwrite existing, this is an invalid property and should be overwritten
|
||||
index = QgsAuxiliaryLayer.createProperty(key, vl, False)
|
||||
p = QgsPalLayerSettings.propertyDefinitions()[key]
|
||||
afName = QgsAuxiliaryLayer.nameFromProperty(p, True)
|
||||
afIndex = vl.fields().indexOf(afName)
|
||||
self.assertEqual(index, afIndex)
|
||||
|
||||
settings = vl.labeling().settings()
|
||||
self.assertTrue(settings.dataDefinedProperties().property(key).isActive())
|
||||
self.assertEqual(settings.dataDefinedProperties().property(key).asExpression(), '"auxiliary_storage_labeling_positiony"')
|
||||
|
||||
# with existing valid field name
|
||||
key = QgsPalLayerSettings.PositionY
|
||||
settings = QgsPalLayerSettings()
|
||||
settings.dataDefinedProperties().setProperty(key, QgsProperty.fromField('asd'))
|
||||
vl.setLabeling(QgsVectorLayerSimpleLabeling(settings))
|
||||
|
||||
index = QgsAuxiliaryLayer.createProperty(key, vl, False)
|
||||
p = QgsPalLayerSettings.propertyDefinitions()[key]
|
||||
afName = QgsAuxiliaryLayer.nameFromProperty(p, True)
|
||||
afIndex = vl.fields().indexOf(afName)
|
||||
self.assertEqual(index, afIndex)
|
||||
|
||||
settings = vl.labeling().settings()
|
||||
self.assertTrue(settings.dataDefinedProperties().property(key).isActive())
|
||||
self.assertEqual(settings.dataDefinedProperties().property(key).asExpression(), 'coalesce("auxiliary_storage_labeling_positiony","asd")')
|
||||
|
||||
# with overwrite existing
|
||||
key = QgsPalLayerSettings.Show
|
||||
settings = QgsPalLayerSettings()
|
||||
|
Loading…
x
Reference in New Issue
Block a user