Skip to content

Commit afaaabf

Browse files
committed
[processing] Force regeneration of primary key for more algorithms
Fixes #21445 (cherry picked from commit ce5faa1)
1 parent d036a5f commit afaaabf

23 files changed

+38
-15
lines changed

python/plugins/processing/algs/qgis/ExtractSpecificVertices.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def processAlgorithm(self, parameters, context, feedback):
9797
wkb_type = QgsWkbTypes.addZ(wkb_type)
9898

9999
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
100-
fields, wkb_type, source.sourceCrs())
100+
fields, wkb_type, source.sourceCrs(), QgsFeatureSink.RegeneratePrimaryKey)
101101
if sink is None:
102102
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
103103

python/plugins/processing/algs/qgis/PointsInPolygon.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def processAlgorithm(self, parameters, context, feedback):
121121
field_index = fields.lookupField(field_name)
122122

123123
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
124-
fields, poly_source.wkbType(), poly_source.sourceCrs())
124+
fields, poly_source.wkbType(), poly_source.sourceCrs(), QgsFeatureSink.RegeneratePrimaryKey)
125125
if sink is None:
126126
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
127127

python/plugins/processing/algs/qgis/RandomPointsAlongLines.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def processAlgorithm(self, parameters, context, feedback):
100100
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
101101

102102
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
103-
fields, QgsWkbTypes.Point, source.sourceCrs())
103+
fields, QgsWkbTypes.Point, source.sourceCrs(), QgsFeatureSink.RegeneratePrimaryKey)
104104
if sink is None:
105105
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
106106

python/plugins/processing/algs/qgis/RandomPointsLayer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def processAlgorithm(self, parameters, context, feedback):
112112
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
113113

114114
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
115-
fields, QgsWkbTypes.Point, source.sourceCrs())
115+
fields, QgsWkbTypes.Point, source.sourceCrs(), QgsFeatureSink.RegeneratePrimaryKey)
116116
if sink is None:
117117
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
118118

python/plugins/processing/algs/qgis/RandomPointsPolygons.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def processAlgorithm(self, parameters, context, feedback):
129129
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
130130

131131
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
132-
fields, QgsWkbTypes.Point, source.sourceCrs())
132+
fields, QgsWkbTypes.Point, source.sourceCrs(), QgsFeatureSink.RegeneratePrimaryKey)
133133
if sink is None:
134134
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
135135

src/analysis/processing/qgsalgorithmarrayoffsetlines.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@ QgsFields QgsCreateArrayOffsetLinesAlgorithm::outputFields( const QgsFields &inp
177177
return output;
178178
}
179179

180+
QgsFeatureSink::SinkFlags QgsCreateArrayOffsetLinesAlgorithm::sinkFlags() const
181+
{
182+
return QgsFeatureSink::RegeneratePrimaryKey;
183+
}
184+
180185
///@endcond
181186

182187

src/analysis/processing/qgsalgorithmarrayoffsetlines.h

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class QgsCreateArrayOffsetLinesAlgorithm : public QgsProcessingFeatureBasedAlgor
5050
bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5151
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5252
QgsFields outputFields( const QgsFields &inputFields ) const override;
53+
QgsFeatureSink::SinkFlags sinkFlags() const override;
5354

5455
private:
5556

src/analysis/processing/qgsalgorithmarraytranslatedfeatures.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,11 @@ QgsFields QgsArrayTranslatedFeaturesAlgorithm::outputFields( const QgsFields &in
216216
return output;
217217
}
218218

219+
QgsFeatureSink::SinkFlags QgsArrayTranslatedFeaturesAlgorithm::sinkFlags() const
220+
{
221+
return QgsFeatureSink::RegeneratePrimaryKey;
222+
}
223+
219224
///@endcond
220225

221226

src/analysis/processing/qgsalgorithmarraytranslatedfeatures.h

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class QgsArrayTranslatedFeaturesAlgorithm : public QgsProcessingFeatureBasedAlgo
5050
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5151
QgsWkbTypes::Type outputWkbType( QgsWkbTypes::Type inputWkbType ) const override;
5252
QgsFields outputFields( const QgsFields &inputFields ) const override;
53+
QgsFeatureSink::SinkFlags sinkFlags() const override;
5354

5455
private:
5556

src/analysis/processing/qgsalgorithmexplode.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ QgsFeatureList QgsExplodeAlgorithm::processFeature( const QgsFeature &f, QgsProc
105105
}
106106
}
107107

108+
QgsFeatureSink::SinkFlags QgsExplodeAlgorithm::sinkFlags() const
109+
{
110+
return QgsFeatureSink::RegeneratePrimaryKey;
111+
}
112+
108113
std::vector<QgsGeometry> QgsExplodeAlgorithm::extractAsParts( const QgsGeometry &geometry ) const
109114
{
110115
if ( geometry.isMultipart() )

src/analysis/processing/qgsalgorithmexplode.h

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class QgsExplodeAlgorithm : public QgsProcessingFeatureBasedAlgorithm
4848
QString outputName() const override;
4949
QgsWkbTypes::Type outputWkbType( QgsWkbTypes::Type inputWkbType ) const override;
5050
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
51+
QgsFeatureSink::SinkFlags sinkFlags() const override;
5152

5253
std::vector< QgsGeometry > extractAsParts( const QgsGeometry &geometry ) const;
5354
std::vector< QgsGeometry > curveAsSingleSegments( const QgsCurve *curve, bool useCompoundCurves = false ) const;

src/analysis/processing/qgsalgorithmextractvertices.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ QVariantMap QgsExtractVerticesAlgorithm::processAlgorithm( const QVariantMap &pa
9494
outputFields.append( QgsField( QStringLiteral( "angle" ), QVariant::Double, QString(), 20, 14 ) );
9595

9696
QString dest;
97-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, outputFields, outputWkbType, featureSource->sourceCrs() ) );
97+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, outputFields, outputWkbType, featureSource->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
9898
if ( !sink )
9999
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
100100

src/analysis/processing/qgsalgorithmextractvertices.h

-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ class QgsExtractVerticesAlgorithm : public QgsProcessingAlgorithm
4646
QgsExtractVerticesAlgorithm *createInstance() const override SIP_FACTORY;
4747

4848
protected:
49-
5049
QVariantMap processAlgorithm( const QVariantMap &parameters,
5150
QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5251

src/analysis/processing/qgsalgorithmintersection.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ QVariantMap QgsIntersectionAlgorithm::processAlgorithm( const QVariantMap &param
9696
QgsProcessingUtils::indicesToFields( fieldIndicesB, sourceB->fields() ) );
9797

9898
QString dest;
99-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, outputFields, geomType, sourceA->sourceCrs() ) );
99+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, outputFields, geomType, sourceA->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
100100
if ( !sink )
101101
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
102102

src/analysis/processing/qgsalgorithmjoinwithlines.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ QVariantMap QgsJoinWithLinesAlgorithm::processAlgorithm( const QVariantMap &para
179179

180180
QString dest;
181181
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields,
182-
outType, hubSource->sourceCrs() ) );
182+
outType, hubSource->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
183183
if ( !sink )
184184
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
185185

src/analysis/processing/qgsalgorithmlineintersection.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ QVariantMap QgsLineIntersectionAlgorithm::processAlgorithm( const QVariantMap &p
140140
QgsFields outFields = QgsProcessingUtils::combineFields( outFieldsA, outFieldsB );
141141

142142
QString dest;
143-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, outFields, QgsWkbTypes::Point, sourceA->sourceCrs() ) );
143+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, outFields, QgsWkbTypes::Point, sourceA->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
144144
if ( !sink )
145145
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
146146

src/analysis/processing/qgsalgorithmmultiringconstantbuffer.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ QgsProcessingFeatureSource::Flag QgsMultiRingConstantBufferAlgorithm::sourceFlag
118118
return QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks;
119119
}
120120

121+
QgsFeatureSink::SinkFlags QgsMultiRingConstantBufferAlgorithm::sinkFlags() const
122+
{
123+
return QgsFeatureSink::RegeneratePrimaryKey;
124+
}
125+
121126
QgsFeatureList QgsMultiRingConstantBufferAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
122127
{
123128
double currentDistance = 0;

src/analysis/processing/qgsalgorithmmultiringconstantbuffer.h

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class QgsMultiRingConstantBufferAlgorithm : public QgsProcessingFeatureBasedAlgo
5050
QgsFields outputFields( const QgsFields &inputFields ) const override;
5151
QgsProcessing::SourceType outputLayerType() const override { return QgsProcessing::TypeVectorPolygon; }
5252
QgsProcessingFeatureSource::Flag sourceFlags() const override;
53+
QgsFeatureSink::SinkFlags sinkFlags() const override;
5354
QgsWkbTypes::Type outputWkbType( QgsWkbTypes::Type inputWkbType ) const override { Q_UNUSED( inputWkbType ); return QgsWkbTypes::MultiPolygon; }
5455
bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5556
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;

src/analysis/processing/qgsalgorithmshortestpathpointtolayer.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ QVariantMap QgsShortestPathPointToLayerAlgorithm::processAlgorithm( const QVaria
7373
fields.append( QgsField( QStringLiteral( "cost" ), QVariant::Double ) );
7474

7575
QString dest;
76-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, QgsWkbTypes::LineString, mNetwork->sourceCrs() ) );
76+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, QgsWkbTypes::LineString, mNetwork->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
7777
if ( !sink )
7878
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
7979

src/analysis/processing/qgsalgorithmsplitwithlines.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ QVariantMap QgsSplitWithLinesAlgorithm::processAlgorithm( const QVariantMap &par
9898

9999
QString dest;
100100
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, source->fields(),
101-
QgsWkbTypes::multiType( source->wkbType() ), source->sourceCrs() ) );
101+
QgsWkbTypes::multiType( source->wkbType() ), source->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
102102
if ( !sink )
103103
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
104104

src/analysis/processing/qgsalgorithmsymmetricaldifference.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ QVariantMap QgsSymmetricalDifferenceAlgorithm::processAlgorithm( const QVariantM
7474
QgsFields fields = QgsProcessingUtils::combineFields( sourceA->fields(), sourceB->fields() );
7575

7676
QString dest;
77-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, geomType, sourceA->sourceCrs() ) );
77+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, geomType, sourceA->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
7878
if ( !sink )
7979
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
8080

src/analysis/processing/qgsalgorithmtransect.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ QVariantMap QgsTransectAlgorithm::processAlgorithm( const QVariantMap &parameter
131131

132132
QString dest;
133133
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields,
134-
outputWkb, source->sourceCrs() ) );
134+
outputWkb, source->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
135135
if ( !sink )
136136
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
137137

src/analysis/processing/qgsalgorithmunion.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ QVariantMap QgsUnionAlgorithm::processAlgorithm( const QVariantMap &parameters,
8080
QgsFields fields = sourceB ? QgsProcessingUtils::combineFields( sourceA->fields(), sourceB->fields() ) : sourceA->fields();
8181

8282
QString dest;
83-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, geomType, sourceA->sourceCrs() ) );
83+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, fields, geomType, sourceA->sourceCrs(), QgsFeatureSink::RegeneratePrimaryKey ) );
8484
if ( !sink )
8585
throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
8686

0 commit comments

Comments
 (0)