Skip to content

Commit 2aae6e4

Browse files
committed
If transformer set on property, allow transformer to handle null values
1 parent 84dd983 commit 2aae6e4

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/core/qgsproperty.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,11 +464,13 @@ QVariant QgsProperty::value( const QgsExpressionContext& context, const QVariant
464464

465465
bool valOk = false;
466466
QVariant val = propertyValue( context, defaultValue, &valOk );
467-
if ( !valOk )
467+
if ( !d->transformer && !valOk ) // if transformer present, let it handle null values
468468
return defaultValue;
469469

470470
if ( d->transformer )
471471
{
472+
if ( !valOk )
473+
val = QVariant();
472474
val = d->transformer->transform( context, val );
473475
}
474476

tests/src/core/testqgsproperty.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,26 @@ void TestQgsProperty::sizeScaleTransformer()
807807
t2.setType( QgsSizeScaleTransformer::Exponential );
808808
t2.setExponent( 1.6 );
809809
QCOMPARE( t2.toExpression( "5+6" ), QStringLiteral( "coalesce(scale_exp(5+6, 15, 25, 150, 250, 1.6), -10)" ) );
810+
811+
// test size scale transformer inside property
812+
QgsProperty p;
813+
p.setTransformer( new QgsSizeScaleTransformer( QgsSizeScaleTransformer::Exponential,
814+
15,
815+
25,
816+
150,
817+
250,
818+
-10,
819+
99 ) );
820+
p.setStaticValue( QVariant() );
821+
bool ok = false;
822+
QCOMPARE( p.valueAsDouble( context, 100, &ok ), -10.0 );
823+
QVERIFY( ok );
824+
p.setExpressionString( QStringLiteral( "NULL" ) );
825+
QCOMPARE( p.valueAsDouble( context, 100, &ok ), -10.0 );
826+
QVERIFY( ok );
827+
p.setExpressionString( QStringLiteral( "no field" ) );
828+
QCOMPARE( p.valueAsDouble( context, 100, &ok ), -10.0 );
829+
QVERIFY( ok );
810830
}
811831

812832
void TestQgsProperty::sizeScaleTransformerFromExpression()

0 commit comments

Comments
 (0)