26 if ( pkAttributes.isEmpty() )
28 return QString::number( feature.
id() );
32 for (
const auto &attrIdx : std::as_const( pkAttributes ) )
34 pkValues.append( feature.
attribute( attrIdx ).toString() );
43 if ( pkAttributes.isEmpty() )
46 for (
const QString &serverFid : serverFids )
51 return featureRequest;
55 for (
const QString &serverFid : serverFids )
60 if ( expList.count() == 1 )
66 QString fullExpression;
67 for (
const QString &exp : std::as_const( expList ) )
69 if ( !fullExpression.isEmpty() )
71 fullExpression.append( QStringLiteral(
" OR " ) );
73 fullExpression.append( QStringLiteral(
"( " ) );
74 fullExpression.append( exp );
75 fullExpression.append( QStringLiteral(
" )" ) );
80 return featureRequest;
87 if ( pkAttributes.isEmpty() )
94 QString expressionString;
95 QStringList pkValues = serverFid.split(
pkSeparator() );
96 int pkExprSize = std::min( pkAttributes.size(), pkValues.size() );
97 for (
int i = 0; i < pkExprSize; ++i )
101 expressionString.append( QStringLiteral(
" AND " ) );
104 QString fieldName = fields[pkAttributes.at( i )].name();
108 return expressionString;
113 return QStringLiteral(
"@@" );
static QString createFieldEqualityExpression(const QString &fieldName, const QVariant &value, QMetaType::Type fieldType=QMetaType::Type::UnknownType)
Create an expression allowing to evaluate if a field is equal to a value.
Wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & combineFilterExpression(const QString &expression)
Modifies the existing filter expression to add an additional expression filter.
QgsFeatureRequest & setFilterFids(const QgsFeatureIds &fids)
Sets the feature IDs that should be fetched.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Q_INVOKABLE QVariant attribute(const QString &name) const
Lookup attribute value by attribute name.
Container of fields for a vector layer.
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
static QString getExpressionFromServerFid(const QString &serverFid, const QgsVectorDataProvider *provider)
Returns the expression feature id based on primary keys.
static QString pkSeparator()
Returns the primary keys separator.
static QgsFeatureRequest updateFeatureRequestFromServerFids(QgsFeatureRequest &featureRequest, const QStringList &serverFids, const QgsVectorDataProvider *provider)
Returns the feature request based on feature ids build with primary keys.
static QString getServerFid(const QgsFeature &feature, const QgsAttributeList &pkAttributes)
Returns the feature id based on primary keys.
Base class for vector data providers.
virtual QgsAttributeList pkAttributeIndexes() const
Returns list of indexes of fields that make up the primary key.
QgsFields fields() const override=0
Returns the fields associated with this data provider.
QSet< QgsFeatureId > QgsFeatureIds
#define STRING_TO_FID(str)
QList< int > QgsAttributeList