Skip to content

Commit

Permalink
Merge pull request #46267 from domi4484/regressionVirtualFields
Browse files Browse the repository at this point in the history
Don't wrongly return the expression of another field
  • Loading branch information
elpaso committed Nov 29, 2021
2 parents a943045 + 013613e commit ef72cf9
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/core/vector/qgsvectorlayer.cpp
Expand Up @@ -3914,6 +3914,9 @@ void QgsVectorLayer::removeExpressionField( int index )

QString QgsVectorLayer::expressionField( int index ) const
{
if ( mFields.fieldOrigin( index ) != QgsFields::OriginExpression )
return QString();

int oi = mFields.fieldOriginIndex( index );
if ( oi < 0 || oi >= mExpressionFieldBuffer->expressions().size() )
return QString();
Expand Down
12 changes: 12 additions & 0 deletions tests/src/core/testqgsvectorlayer.cpp
Expand Up @@ -79,6 +79,7 @@ class TestQgsVectorLayer : public QObject
void testAddTopologicalPoints();
void testCopyPasteFieldConfiguration();
void testCopyPasteFieldConfiguration_data();
void testFieldExpression();
};

void TestQgsVectorLayer::initTestCase()
Expand Down Expand Up @@ -470,5 +471,16 @@ void TestQgsVectorLayer::testCopyPasteFieldConfiguration()
QCOMPARE( layer3.fieldConfigurationFlags( 0 ), categories.testFlag( QgsMapLayer::Fields ) ? QgsField::ConfigurationFlag::NotSearchable : QgsField::ConfigurationFlags() );
}

void TestQgsVectorLayer::testFieldExpression()
{
QgsVectorLayer layer1( QStringLiteral( "Point?field=name:string" ), QStringLiteral( "layer1" ), QStringLiteral( "memory" ) );
QVERIFY( layer1.isValid() );

layer1.addExpressionField( QStringLiteral( "'abc'" ), QgsField( QStringLiteral( "virtual_field" ), QVariant::String ) );

QCOMPARE( layer1.expressionField( layer1.fields().lookupField( QStringLiteral( "virtual_field" ) ) ), QStringLiteral( "'abc'" ) );
QCOMPARE( layer1.expressionField( layer1.fields().lookupField( QStringLiteral( "name" ) ) ), QString() );
}

QGSTEST_MAIN( TestQgsVectorLayer )
#include "testqgsvectorlayer.moc"

0 comments on commit ef72cf9

Please sign in to comment.