Skip to content

Commit

Permalink
More use of implicit sharing of QgsExpression
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed Dec 18, 2015
1 parent efaae1f commit b9f0c06
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 7 deletions.
1 change: 1 addition & 0 deletions src/core/qgsexpressionfieldbuffer.cpp
Expand Up @@ -36,6 +36,7 @@ void QgsExpressionFieldBuffer::removeExpression( int index )
void QgsExpressionFieldBuffer::updateExpression( int index, const QString& exp )
{
mExpressions[index].expression = exp;
mExpressions[index].cachedExpression = QgsExpression( exp );
}

void QgsExpressionFieldBuffer::writeXml( QDomNode& layerNode, QDomDocument& document ) const
Expand Down
9 changes: 7 additions & 2 deletions src/core/qgsexpressionfieldbuffer.h
Expand Up @@ -23,6 +23,7 @@
#include <QDomNode>

#include "qgsfield.h"
#include "qgsexpression.h"

/**
* Buffers information about expression fields for a vector layer.
Expand All @@ -34,10 +35,14 @@ class CORE_EXPORT QgsExpressionFieldBuffer
public:
typedef struct ExpressionField
{
ExpressionField() {}
ExpressionField( const QString& exp, const QgsField& fld ) : expression( exp ), field( fld ) {}
ExpressionField() : cachedExpression( expression ) {}
ExpressionField( const QString& exp, const QgsField& fld ) : expression( exp ), cachedExpression( exp ), field( fld ) {}

/**
* @deprecated use cachedExpression instead
*/
QString expression;
QgsExpression cachedExpression;
QgsField field;
} ExpressionField;

Expand Down
2 changes: 1 addition & 1 deletion src/core/qgsvectorlayerfeatureiterator.cpp
Expand Up @@ -530,7 +530,7 @@ void QgsVectorLayerFeatureIterator::prepareExpressions()
|| mRequest.subsetOfAttributes().contains( i ) )
{
int oi = mSource->mFields.fieldOriginIndex( i );
QgsExpression* exp = new QgsExpression( exps[oi].expression );
QgsExpression* exp = new QgsExpression( exps[oi].cachedExpression );
exp->prepare( mExpressionContext.data() );
mExpressionFieldInfo.insert( i, exp );

Expand Down
8 changes: 4 additions & 4 deletions tests/src/python/test_qgsvectorlayer.py
Expand Up @@ -965,16 +965,16 @@ def test_ExpressionField(self):

idx = layer.addExpressionField('5', QgsField('test', QVariant.LongLong))

assert(layer.getFeatures().next()[idx] == 5)
assert(layer.pendingFields().count() == cnt + 1)
self.assertEquals(layer.getFeatures().next()[idx], 5)
self.assertEquals(layer.pendingFields().count(), cnt + 1)

layer.updateExpressionField(idx, '9')

assert(layer.getFeatures().next()[idx] == 9)
self.assertEquals(layer.getFeatures().next()[idx], 9)

layer.removeExpressionField(idx)

assert(layer.pendingFields().count() == cnt)
self.assertEquals(layer.pendingFields().count(), cnt)

def test_ExpressionFilter(self):
layer = createLayerWithOnePoint()
Expand Down

0 comments on commit b9f0c06

Please sign in to comment.