bool QgsProperty::prepare( const QgsExpressionContext &context ) const { if ( !d->active ) return true; switch ( d->type ) { case StaticProperty: return true; case FieldBasedProperty: { d.detach(); // cache field index to avoid subsequent lookups QgsFields f = context.fields(); d->cachedFieldIdx = f.lookupField( d->fieldName ); return true; } case ExpressionBasedProperty: { d.detach(); if ( !d->expression.prepare( &context ) ) { d->expressionReferencedCols.clear(); d->expressionPrepared = false; return false; } d->expressionPrepared = true; d->expressionReferencedCols = d->expression.referencedColumns(); return true; } case InvalidProperty: return true; } return false; }