26 if ( pkAttributes.isEmpty() )
28 return QString::number( feature.
id() );
32 QgsAttributeList::const_iterator it = pkAttributes.constBegin();
33 if ( it != pkAttributes.constEnd() )
35 pkValues.append( feature.
attribute( *it ).toString() );
44 if ( pkAttributes.isEmpty() )
47 for (
const QString &serverFid : serverFids )
49 fids.insert( serverFid.toLongLong() );
52 return featureRequest;
56 for (
const QString &serverFid : serverFids )
61 if ( expList.count() == 1 )
67 QString fullExpression;
68 for (
const QString &exp : qgis::as_const( expList ) )
70 if ( !fullExpression.isEmpty() )
72 fullExpression.append( QStringLiteral(
" OR " ) );
74 fullExpression.append( QStringLiteral(
"( " ) );
75 fullExpression.append( exp );
76 fullExpression.append( QStringLiteral(
" )" ) );
81 return featureRequest;
88 if ( pkAttributes.isEmpty() )
95 QString expressionString;
96 QStringList pkValues = serverFid.split(
pkSeparator() );
97 int pkExprSize = std::min( pkAttributes.size(), pkValues.size() );
98 for (
int i = 0; i < pkExprSize; ++i )
102 expressionString.
append( QStringLiteral(
" AND " ) );
105 QString fieldName = fields[ pkAttributes.at( i ) ].name();
109 return expressionString;
114 return QStringLiteral(
"@@" );
QSet< QgsFeatureId > QgsFeatureIds
virtual QgsAttributeList pkAttributeIndexes() const
Returns list of indexes of fields that make up the primary key.
SERVER_EXPORT QString getServerFid(const QgsFeature &feature, const QgsAttributeList &pkAttributes)
Returns the feature id based on primary keys.
Container of fields for a vector layer.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
QgsFeatureRequest & setFilterExpression(const QString &expression)
Set the filter expression.
QgsFields fields() const override=0
Returns the fields associated with this data provider.
This class wraps a request for features to a vector layer (or directly its vector data provider)...
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Appends a field. The field must have unique name, otherwise it is rejected (returns false) ...
static QString createFieldEqualityExpression(const QString &fieldName, const QVariant &value)
Create an expression allowing to evaluate if a field is equal to a value.
SERVER_EXPORT QgsFeatureRequest updateFeatureRequestFromServerFids(QgsFeatureRequest &featureRequest, const QStringList &serverFids, const QgsVectorDataProvider *provider)
Returns the feature request based on feature ids build with primary keys.
QVariant attribute(const QString &name) const
Lookup attribute value from attribute name.
QgsFeatureRequest & setFilterFids(const QgsFeatureIds &fids)
Sets feature IDs that should be fetched.
SERVER_EXPORT QString getExpressionFromServerFid(const QString &serverFid, const QgsVectorDataProvider *provider)
Returns the expression feature id based on primary keys.
QList< int > QgsAttributeList
This is the base class for vector data providers.
SERVER_EXPORT QString pkSeparator()
Returns the primary keys separator.