QGIS API Documentation  2.13.0-Master
qgsvectorlayerfeatureiterator.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectorlayerfeatureiterator.h
3  ---------------------
4  begin : Dezember 2012
5  copyright : (C) 2012 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 #ifndef QGSVECTORLAYERFEATUREITERATOR_H
16 #define QGSVECTORLAYERFEATUREITERATOR_H
17 
18 #include "qgsfeatureiterator.h"
19 
20 #include <QSet>
21 
23 
25 class QgsVectorLayer;
28 struct QgsVectorJoinInfo;
30 
32 
37 {
38  public:
41 
42  virtual QgsFeatureIterator getFeatures( const QgsFeatureRequest& request ) override;
43 
45 
46  protected:
47 
49 
51 
53 
55 
57 
59 
60  // A deep-copy is only performed, if the original maps change
61  // see here https://github.com/qgis/Quantum-GIS/pull/673
62  // for explanation
69 };
70 
71 
72 class CORE_EXPORT QgsVectorLayerFeatureIterator : public QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource>
73 {
74  public:
75  QgsVectorLayerFeatureIterator( QgsVectorLayerFeatureSource* source, bool ownSource, const QgsFeatureRequest& request );
76 
78 
80  virtual bool rewind() override;
81 
83  virtual bool close() override;
84 
85  protected:
87  virtual bool fetchFeature( QgsFeature& feature ) override;
88 
91  inline virtual bool nextFeatureFilterExpression( QgsFeature &f ) override { return fetchFeature( f ); }
92 
94  virtual bool prepareSimplification( const QgsSimplifyMethod& simplifyMethod ) override;
95 
97  void rewindEditBuffer();
99  void prepareJoins();
101  void prepareExpressions();
103  bool fetchNextAddedFeature( QgsFeature& f );
105  bool fetchNextChangedGeomFeature( QgsFeature& f );
107  bool fetchNextChangedAttributeFeature( QgsFeature& f );
109  void useAddedFeature( const QgsFeature& src, QgsFeature& f );
111  void useChangedAttributeFeature( QgsFeatureId fid, const QgsGeometry& geom, QgsFeature& f );
113  bool nextFeatureFid( QgsFeature& f );
115  void addJoinedAttributes( QgsFeature &f );
116 
126  void addVirtualAttributes( QgsFeature &f );
127 
131  void updateChangedAttributes( QgsFeature& f );
132 
136  void updateFeatureGeometry( QgsFeature& f );
137 
142  {
148  int joinField;
149 
150  void addJoinedAttributesCached( QgsFeature& f, const QVariant& joinValue ) const;
151  void addJoinedAttributesDirect( QgsFeature& f, const QVariant& joinValue ) const;
152  };
153 
158 
159  // only related to editing
163 
164  bool mFetchedFid; // when iterating by FID: indicator whether it has been fetched yet or not
165 
169 
171 
173 
174  private:
176  QgsAbstractGeometrySimplifier* mEditGeometrySimplifier;
177 
178  QScopedPointer<QgsExpressionContext> mExpressionContext;
179 
184  bool prepareOrderBy( const QList<QgsFeatureRequest::OrderByClause> &orderBys ) override;
185 
187  virtual bool providerCanSimplify( QgsSimplifyMethod::MethodType methodType ) const override;
188 };
189 
190 #endif // QGSVECTORLAYERFEATUREITERATOR_H
QgsAbstractFeatureSource * mProviderFeatureSource
Wrapper for iterator of features from vector data provider or vector layer.
QgsVectorLayerJoinBuffer * mJoinBuffer
QgsFeatureMap::ConstIterator mFetchAddedFeaturesIt
QgsGeometryMap::ConstIterator mFetchChangedGeomIt
QMap< QgsFeatureId, QgsFeature > QgsFeatureMap
Container of fields for a vector layer.
Definition: qgsfield.h:189
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:76
QMap< int, QgsExpression * > mExpressionFieldInfo
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:187
QgsVectorLayer * joinLayer
resolved pointer to the joined layer
QMap< const QgsVectorJoinInfo *, FetchJoinInfo > mFetchJoinInfo
Information about joins used in the current select() statement.
Manages joined fields for a vector layer.
int joinField
index of field (of the joined layer) must have equal value
const QgsVectorJoinInfo * joinInfo
cannonical source of information about the join
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
This class wraps a request for features to a vector layer (or directly its vector data provider)...
QgsExpressionFieldBuffer * mExpressionFieldBuffer
Base class that can be used for any class that is capable of returning features.
Partial snapshot of vector layer&#39;s state (only the members necessary for access to features) ...
QgsVectorLayerFeatureSource(QgsVectorLayer *layer)
int indexOffset
at what position the joined fields start
int targetField
index of field (of this layer) that drives the join
Buffers information about expression fields for a vector layer.
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request) override
Get an iterator for features matching the specified request.
Join information prepared for fast attribute id mapping in QgsVectorLayerJoinBuffer::updateFeatureAtt...
qint64 QgsFeatureId
Definition: qgsfeature.h:31
This class contains information about how to simplify geometries fetched from a QgsFeatureIterator.
virtual bool nextFeatureFilterExpression(QgsFeature &f) override
Overrides default method as we only need to filter features in the edit buffer while for others filte...
QgsChangedAttributesMap mChangedAttributeValues
Represents a vector layer which manages a vector based data sets.
Abstract base class for simplify geometries using a specific algorithm.
Helper template that cares of two things: 1.