Skip to content

Commit 9f018e6

Browse files
committed
Fix handling optional multiple table field parameter with no fields set
1 parent b40f409 commit 9f018e6

2 files changed

Lines changed: 24 additions & 12 deletions

File tree

‎src/core/processing/qgsprocessingparameters.cpp‎

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -672,27 +672,33 @@ QStringList QgsProcessingParameters::parameterAsFields( const QgsProcessingParam
672672

673673
QStringList resultStringList;
674674
QVariant val = parameters.value( definition->name() );
675-
if ( val.canConvert<QgsProperty>() )
676-
resultStringList << val.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() );
677-
else if ( val.type() == QVariant::List )
675+
if ( val.isValid() )
678676
{
679-
Q_FOREACH ( const QVariant &var, val.toList() )
680-
resultStringList << var.toString();
677+
if ( val.canConvert<QgsProperty>() )
678+
resultStringList << val.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() );
679+
else if ( val.type() == QVariant::List )
680+
{
681+
Q_FOREACH ( const QVariant &var, val.toList() )
682+
resultStringList << var.toString();
683+
}
684+
else
685+
resultStringList.append( val.toString().split( ';' ) );
681686
}
682-
else
683-
resultStringList.append( val.toString().split( ';' ) );
684687

685688
if ( ( resultStringList.isEmpty() || resultStringList.at( 0 ).isEmpty() ) )
686689
{
687690
resultStringList.clear();
688691
// check default
689-
if ( definition->defaultValue().type() == QVariant::List )
692+
if ( definition->defaultValue().isValid() )
690693
{
691-
Q_FOREACH ( const QVariant &var, definition->defaultValue().toList() )
692-
resultStringList << var.toString();
694+
if ( definition->defaultValue().type() == QVariant::List )
695+
{
696+
Q_FOREACH ( const QVariant &var, definition->defaultValue().toList() )
697+
resultStringList << var.toString();
698+
}
699+
else
700+
resultStringList.append( definition->defaultValue().toString().split( ';' ) );
693701
}
694-
else
695-
resultStringList.append( definition->defaultValue().toString().split( ';' ) );
696702
}
697703

698704
return resultStringList;

‎tests/src/core/testqgsprocessing.cpp‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2288,6 +2288,12 @@ void TestQgsProcessing::parameterField()
22882288
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
22892289
QCOMPARE( fields, QStringList() << "def" );
22902290

2291+
// optional, no default
2292+
def.reset( new QgsProcessingParameterTableField( "optional", QString(), QVariant(), QString(), QgsProcessingParameterTableField::Any, false, true ) );
2293+
params.insert( "optional", QVariant() );
2294+
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
2295+
QVERIFY( fields.isEmpty() );
2296+
22912297
//optional with multiples
22922298
def.reset( new QgsProcessingParameterTableField( "optional", QString(), QString( "abc;def" ), QString(), QgsProcessingParameterTableField::Any, true, true ) );
22932299
QVERIFY( def->checkValueIsAcceptable( 1 ) );

0 commit comments

Comments
 (0)