diff --git a/src/analysis/processing/qgsalgorithmbuffer.cpp b/src/analysis/processing/qgsalgorithmbuffer.cpp index 89b78826565d..9cb1bee15193 100644 --- a/src/analysis/processing/qgsalgorithmbuffer.cpp +++ b/src/analysis/processing/qgsalgorithmbuffer.cpp @@ -92,11 +92,6 @@ QVariantMap QgsBufferAlgorithm::processAlgorithm( const QVariantMap ¶meters, if ( !source ) throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "INPUT" ) ) ); - QString dest; - std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, source->fields(), Qgis::WkbType::MultiPolygon, source->sourceCrs() ) ); - if ( !sink ) - throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) ); - // fixed parameters const bool dissolve = parameterAsBoolean( parameters, QStringLiteral( "DISSOLVE" ), context ); const bool keepDisjointSeparate = parameterAsBoolean( parameters, QStringLiteral( "SEPARATE_DISJOINT" ), context ); @@ -106,6 +101,12 @@ QVariantMap QgsBufferAlgorithm::processAlgorithm( const QVariantMap ¶meters, const double miterLimit = parameterAsDouble( parameters, QStringLiteral( "MITER_LIMIT" ), context ); const double bufferDistance = parameterAsDouble( parameters, QStringLiteral( "DISTANCE" ), context ); const bool dynamicBuffer = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "DISTANCE" ) ); + + QString dest; + std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, source->fields(), Qgis::WkbType::MultiPolygon, source->sourceCrs(), keepDisjointSeparate ? QgsFeatureSink::RegeneratePrimaryKey : QgsFeatureSink::SinkFlags() ) ); + if ( !sink ) + throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) ); + QgsExpressionContext expressionContext = createExpressionContext( parameters, context, source.get() ); QgsProperty bufferProperty; if ( dynamicBuffer )