Skip to content

Commit 0e991bf

Browse files
committed
Remove QgsProcessingUtils::uniqueValues
Use QgsFeatureSource method instead
1 parent b6fb41d commit 0e991bf

File tree

4 files changed

+22
-62
lines changed

4 files changed

+22
-62
lines changed

python/core/processing/qgsprocessingutils.sip

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,6 @@ class QgsProcessingUtils
8686
:rtype: str
8787
%End
8888

89-
static QList< QVariant > uniqueValues( QgsVectorLayer *layer, int fieldIndex, const QgsProcessingContext &context );
90-
%Docstring
91-
Returns a list of unique values contained in a single field in a ``layer``, when
92-
the settings from the supplied ``context`` are respected. E.g. if the
93-
context is set to only use selected features, then calling this will
94-
return unique values from selected features in the layer.
95-
:rtype: list of QVariant
96-
%End
97-
9889

9990
static void createFeatureSinkPython(
10091
QgsFeatureSink **sink /Out,TransferBack/,

src/core/processing/qgsprocessingutils.cpp

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -226,36 +226,6 @@ QString QgsProcessingUtils::normalizeLayerSource( const QString &source )
226226
return normalized.trimmed();
227227
}
228228

229-
230-
QList<QVariant> QgsProcessingUtils::uniqueValues( QgsVectorLayer *layer, int fieldIndex, const QgsProcessingContext &context )
231-
{
232-
if ( !layer )
233-
return QList<QVariant>();
234-
235-
if ( fieldIndex < 0 || fieldIndex >= layer->fields().count() )
236-
return QList<QVariant>();
237-
238-
bool useSelection = context.flags() & QgsProcessingContext::UseSelectionIfPresent && layer->selectedFeatureCount() > 0;
239-
if ( !useSelection )
240-
{
241-
// not using selection, so use provider optimised version
242-
QSet<QVariant> values = layer->uniqueValues( fieldIndex );
243-
return values.toList();
244-
}
245-
else
246-
{
247-
// using selection, so we have to iterate through selected features
248-
QSet<QVariant> values;
249-
QgsFeature f;
250-
QgsFeatureIterator it = layer->getSelectedFeatures( QgsFeatureRequest().setSubsetOfAttributes( QgsAttributeList() << fieldIndex ).setFlags( QgsFeatureRequest::NoGeometry ) );
251-
while ( it.nextFeature( f ) )
252-
{
253-
values.insert( f.attribute( fieldIndex ) );
254-
}
255-
return values.toList();
256-
}
257-
}
258-
259229
void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &format, QMap<QString, QVariant> &options )
260230
{
261231
QRegularExpression splitRx( "^(.*?):(.*)$" );

src/core/processing/qgsprocessingutils.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,6 @@ class CORE_EXPORT QgsProcessingUtils
9999
*/
100100
static QString normalizeLayerSource( const QString &source );
101101

102-
/**
103-
* Returns a list of unique values contained in a single field in a \a layer, when
104-
* the settings from the supplied \a context are respected. E.g. if the
105-
* context is set to only use selected features, then calling this will
106-
* return unique values from selected features in the layer.
107-
*/
108-
static QList< QVariant > uniqueValues( QgsVectorLayer *layer, int fieldIndex, const QgsProcessingContext &context );
109-
110102
/**
111103
* Creates a feature sink ready for adding features. The \a destination specifies a destination
112104
* URI for the resultant layer. It may be updated in place to reflect the actual destination

tests/src/core/testqgsprocessing.cpp

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -789,20 +789,27 @@ void TestQgsProcessing::uniqueValues()
789789
QgsProcessingContext context;
790790
context.setFlags( QgsProcessingContext::Flags( 0 ) );
791791

792+
QgsProject p;
793+
p.addMapLayer( layer );
794+
context.setProject( &p );
795+
796+
QgsProcessingParameterDefinition *def = new QgsProcessingParameterString( QStringLiteral( "string" ) );
797+
QVariantMap params;
798+
params.insert( QStringLiteral( "string" ), layer->id() );
799+
800+
std::unique_ptr< QgsFeatureSource > source( QgsProcessingParameters::parameterAsSource( def, params, context ) );
801+
792802
// some bad checks
793-
QVERIFY( QgsProcessingUtils::uniqueValues( nullptr, 0, context ).isEmpty() );
794-
QVERIFY( QgsProcessingUtils::uniqueValues( nullptr, -1, context ).isEmpty() );
795-
QVERIFY( QgsProcessingUtils::uniqueValues( nullptr, 10001, context ).isEmpty() );
796-
QVERIFY( QgsProcessingUtils::uniqueValues( layer, -1, context ).isEmpty() );
797-
QVERIFY( QgsProcessingUtils::uniqueValues( layer, 10001, context ).isEmpty() );
803+
QVERIFY( source->uniqueValues( -1 ).isEmpty() );
804+
QVERIFY( source->uniqueValues( 10001 ).isEmpty() );
798805

799806
// good checks
800-
QList< QVariant > vals = QgsProcessingUtils::uniqueValues( layer, 0, context );
807+
QSet< QVariant > vals = source->uniqueValues( 0 );
801808
QCOMPARE( vals.count(), 3 );
802809
QVERIFY( vals.contains( 1 ) );
803810
QVERIFY( vals.contains( 2 ) );
804811
QVERIFY( vals.contains( 3 ) );
805-
vals = QgsProcessingUtils::uniqueValues( layer, 1, context );
812+
vals = source->uniqueValues( 1 );
806813
QCOMPARE( vals.count(), 3 );
807814
QVERIFY( vals.contains( QString( "A" ) ) );
808815
QVERIFY( vals.contains( QString( "B" ) ) );
@@ -811,31 +818,31 @@ void TestQgsProcessing::uniqueValues()
811818
//using only selected features
812819
layer->selectByIds( QgsFeatureIds() << 1 << 2 << 4 );
813820
// but not using selection yet...
814-
vals = QgsProcessingUtils::uniqueValues( layer, 0, context );
821+
source.reset( QgsProcessingParameters::parameterAsSource( def, params, context ) );
822+
vals = source->uniqueValues( 0 );
815823
QCOMPARE( vals.count(), 3 );
816824
QVERIFY( vals.contains( 1 ) );
817825
QVERIFY( vals.contains( 2 ) );
818826
QVERIFY( vals.contains( 3 ) );
819-
vals = QgsProcessingUtils::uniqueValues( layer, 1, context );
827+
vals = source->uniqueValues( 1 );
820828
QCOMPARE( vals.count(), 3 );
821829
QVERIFY( vals.contains( QString( "A" ) ) );
822830
QVERIFY( vals.contains( QString( "B" ) ) );
823831
QVERIFY( vals.contains( QString( "C" ) ) );
824832

825833
// selection and using selection
826834
context.setFlags( QgsProcessingContext::UseSelectionIfPresent );
827-
QVERIFY( QgsProcessingUtils::uniqueValues( layer, -1, context ).isEmpty() );
828-
QVERIFY( QgsProcessingUtils::uniqueValues( layer, 10001, context ).isEmpty() );
829-
vals = QgsProcessingUtils::uniqueValues( layer, 0, context );
835+
source.reset( QgsProcessingParameters::parameterAsSource( def, params, context ) );
836+
QVERIFY( source->uniqueValues( -1 ).isEmpty() );
837+
QVERIFY( source->uniqueValues( 10001 ).isEmpty() );
838+
vals = source->uniqueValues( 0 );
830839
QCOMPARE( vals.count(), 2 );
831840
QVERIFY( vals.contains( 1 ) );
832841
QVERIFY( vals.contains( 2 ) );
833-
vals = QgsProcessingUtils::uniqueValues( layer, 1, context );
842+
vals = source->uniqueValues( 1 );
834843
QCOMPARE( vals.count(), 2 );
835844
QVERIFY( vals.contains( QString( "A" ) ) );
836845
QVERIFY( vals.contains( QString( "B" ) ) );
837-
838-
delete layer;
839846
}
840847

841848
void TestQgsProcessing::createIndex()

0 commit comments

Comments
 (0)