QGIS API Documentation  3.15.0-Master (4fe3d2f4e6)
qgsvectordataprovider.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectordataprovider.h - DataProvider Interface for vector layers
3  --------------------------------------
4  Date : 23-Sep-2004
5  Copyright : (C) 2004 by Marco Hugentobler
6  email : [email protected]
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 QGSVECTORDATAPROVIDER_H
16 #define QGSVECTORDATAPROVIDER_H
17 
18 class QTextCodec;
19 
20 #include "qgis_core.h"
21 #include <QList>
22 #include <QSet>
23 #include <QMap>
24 #include <QHash>
25 
26 //QGIS Includes
27 #include "qgis_sip.h"
28 #include "qgsdataprovider.h"
29 #include "qgsfeature.h"
30 #include "qgsaggregatecalculator.h"
31 #include "qgsmaplayerdependency.h"
32 #include "qgsrelation.h"
33 #include "qgsfeaturesink.h"
34 #include "qgsfeaturesource.h"
35 #include "qgsfeaturerequest.h"
37 
38 typedef QList<int> QgsAttributeList SIP_SKIP;
39 typedef QSet<int> QgsAttributeIds SIP_SKIP;
40 typedef QHash<int, QString> QgsAttrPalIndexNameHash;
41 
42 class QgsFeatureIterator;
43 class QgsTransaction;
44 class QgsFeedback;
45 class QgsFeatureRenderer;
47 
48 
58 class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider, public QgsFeatureSink, public QgsFeatureSource
59 {
60  Q_OBJECT
61 
62  friend class QgsTransaction;
64 
65  public:
66 
67  // If you add to this, please also add to capabilitiesString()
68 
73  {
74  NoCapabilities = 0,
75  AddFeatures = 1,
76  DeleteFeatures = 1 << 1,
77  ChangeAttributeValues = 1 << 2,
78  AddAttributes = 1 << 3,
79  DeleteAttributes = 1 << 4,
80  CreateSpatialIndex = 1 << 6,
81  SelectAtId = 1 << 7,
82  ChangeGeometries = 1 << 8,
83  SelectEncoding = 1 << 13,
84  CreateAttributeIndex = 1 << 12,
85  SimplifyGeometries = 1 << 14,
86  SimplifyGeometriesWithTopologicalValidation = 1 << 15,
87  TransactionSupport = 1 << 16,
88  CircularGeometries = 1 << 17,
89  ChangeFeatures = 1 << 18,
90  RenameAttributes = 1 << 19,
91  FastTruncate = 1 << 20,
92  ReadLayerMetadata = 1 << 21,
93  WriteLayerMetadata = 1 << 22,
94  CancelSupport = 1 << 23,
95  CreateRenderer = 1 << 24,
96  CreateLabeling = 1 << 25,
97  };
98 
99  Q_DECLARE_FLAGS( Capabilities, Capability )
100 
101 
102  static const int EditingCapabilities = AddFeatures | DeleteFeatures |
103  ChangeAttributeValues | ChangeGeometries | AddAttributes | DeleteAttributes |
104  RenameAttributes;
105 
110  {
112  Uncounted = -2,
114  UnknownCount = -1,
115  };
116 
124  QgsVectorDataProvider( const QString &uri = QString(),
126  QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
127 
144  virtual QgsAbstractFeatureSource *featureSource() const = 0 SIP_FACTORY;
145 
149  virtual QString storageType() const;
150 
156  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override = 0;
157 
161  QgsWkbTypes::Type wkbType() const override = 0;
162 
167  long featureCount() const override = 0;
168 
174  virtual bool empty() const;
175 
187 
191  QgsFields fields() const override = 0;
192 
193  QgsCoordinateReferenceSystem sourceCrs() const override;
194  QgsRectangle sourceExtent() const override;
195  QString sourceName() const override { return QString(); }
196 
201  virtual QString dataComment() const override;
202 
211  QVariant minimumValue( int index ) const override;
212 
221  QVariant maximumValue( int index ) const override;
222 
232  virtual QStringList uniqueStringsMatching( int index, const QString &substring, int limit = -1,
233  QgsFeedback *feedback = nullptr ) const;
234 
247  virtual QVariant aggregate( QgsAggregateCalculator::Aggregate aggregate,
248  int index,
250  QgsExpressionContext *context,
251  bool &ok,
252  QgsFeatureIds *fids = nullptr ) const;
253 
260  virtual void enumValues( int index, QStringList &enumList SIP_OUT ) const { Q_UNUSED( index ) enumList.clear(); }
261 
262  bool addFeatures( QgsFeatureList &flist SIP_INOUT, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
263  QString lastError() const override;
264 
271  virtual bool deleteFeatures( const QgsFeatureIds &id );
272 
280  virtual bool truncate();
281 
288  virtual bool cancelReload();
289 
295  virtual bool addAttributes( const QList<QgsField> &attributes );
296 
304  virtual bool deleteAttributes( const QgsAttributeIds &attributes );
305 
314  virtual bool renameAttributes( const QgsFieldNameMap &renamedAttributes );
315 
324  virtual bool changeAttributeValues( const QgsChangedAttributesMap &attr_map );
325 
337  virtual bool changeFeatures( const QgsChangedAttributesMap &attr_map,
338  const QgsGeometryMap &geometry_map );
339 
351  virtual QVariant defaultValue( int fieldIndex ) const;
352 
360  virtual QString defaultValueClause( int fieldIndex ) const;
361 
368  QgsFieldConstraints::Constraints fieldConstraints( int fieldIndex ) const;
369 
377  virtual bool skipConstraintCheck( int fieldIndex, QgsFieldConstraints::Constraint constraint, const QVariant &value = QVariant() ) const;
378 
386  virtual bool changeGeometryValues( const QgsGeometryMap &geometry_map );
387 
392  virtual bool createSpatialIndex();
393 
395  virtual bool createAttributeIndex( int field );
396 
403  virtual QgsVectorDataProvider::Capabilities capabilities() const;
404 
408  QString capabilitiesString() const;
409 
422  virtual void setEncoding( const QString &e );
423 
429  QString encoding() const;
430 
434  int fieldNameIndex( const QString &fieldName ) const;
435 
439  QMap<QString, int> fieldNameMap() const;
440 
444  virtual QgsAttributeList attributeIndexes() const;
445 
449  virtual QgsAttributeList pkAttributeIndexes() const;
450 
454  virtual QgsAttrPalIndexNameHash palAttributeIndexNames() const;
455 
459  bool supportedType( const QgsField &field ) const;
460 
461  struct NativeType
462  {
463  NativeType( const QString &typeDesc, const QString &typeName, QVariant::Type type, int minLen = 0, int maxLen = 0, int minPrec = 0, int maxPrec = 0, QVariant::Type subType = QVariant::Invalid )
464  : mTypeDesc( typeDesc )
465  , mTypeName( typeName )
466  , mType( type )
467  , mMinLen( minLen )
468  , mMaxLen( maxLen )
469  , mMinPrec( minPrec )
470  , mMaxPrec( maxPrec )
471  , mSubType( subType )
472  {}
473 
474  QString mTypeDesc;
475  QString mTypeName;
476  QVariant::Type mType;
477  int mMinLen;
478  int mMaxLen;
479  int mMinPrec;
480  int mMaxPrec;
481  QVariant::Type mSubType;
482  };
483 
487  QList< QgsVectorDataProvider::NativeType > nativeTypes() const;
488 
493  virtual bool doesStrictFeatureTypeCheck() const { return true; }
494 
496  static QStringList availableEncodings();
497 
501  bool hasErrors() const;
502 
506  void clearErrors();
507 
511  QStringList errors() const;
512 
517  virtual bool isSaveAndLoadStyleToDatabaseSupported() const;
518 
523  virtual bool isDeleteStyleFromDatabaseSupported() const;
524 
540  virtual QgsFeatureRenderer *createRenderer( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
541 
557  virtual QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
558 
559  static QVariant convertValue( QVariant::Type type, const QString &value );
560 
564  virtual QgsTransaction *transaction() const;
565 
569  Q_DECL_DEPRECATED virtual void forceReload() SIP_DEPRECATED { reloadData(); }
570 
574  virtual QSet<QgsMapLayerDependency> dependencies() const;
575 
583  virtual QList<QgsRelation> discoverRelations( const QgsVectorLayer *self, const QList<QgsVectorLayer *> &layers ) const;
584 
589  virtual QVariantMap metadata() const { return QVariantMap(); }
590 
596  virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
597 
604  virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ) return value.toString(); }
605 
613  virtual bool hasMetadata() const { return true; }
614 
621  virtual void handlePostCloneOperations( QgsVectorDataProvider *source );
622 
623  QgsVectorDataProviderTemporalCapabilities *temporalCapabilities() override;
624  const QgsVectorDataProviderTemporalCapabilities *temporalCapabilities() const override SIP_SKIP;
625 
626  signals:
627 
633  void raiseError( const QString &msg ) const;
634 
635  protected:
636 
641  void clearMinMaxCache();
642 
646  void fillMinMaxCache() const;
647 
657  void pushError( const QString &msg ) const;
658 
663  QgsGeometry convertToProviderType( const QgsGeometry &geom ) const;
664 
671  void setNativeTypes( const QList<QgsVectorDataProvider::NativeType> &nativeTypes );
672 
678  QTextCodec *textEncoding() const;
679 
680  private:
681  mutable bool mCacheMinMaxDirty = true;
682  mutable QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
683 
685  QTextCodec *mEncoding = nullptr;
686 
688  QgsAttributeList mAttributesToFetch;
689 
691  QList< NativeType > mNativeTypes;
692 
694  mutable QStringList mErrors;
695 
696  std::unique_ptr< QgsVectorDataProviderTemporalCapabilities > mTemporalCapabilities;
697 
698  static QStringList sEncodings;
699 
703  virtual void setTransaction( QgsTransaction * /*transaction*/ ) {}
704 };
705 
706 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsVectorDataProvider::Capabilities )
707 
708 #endif
Wrapper for iterator of features from vector data provider or vector layer.
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:567
virtual QgsRectangle sourceExtent() const
Returns the extent of all geometries from the source.
A rectangle specified with double values.
Definition: qgsrectangle.h:41
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
virtual QgsFields fields() const =0
Returns the fields associated with features in the source.
virtual bool addFeatures(QgsFeatureList &features)
Insert a copy of the given features into the layer (but does not commit it)
FeatureAvailability
Possible return value for hasFeatures() to determine if a source is empty.
Constraint
Constraints which may be present on a field.
virtual Q_DECL_DEPRECATED void forceReload()
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:572
virtual QString dataComment() const
Returns a short comment for the data that this provider is providing access to (e.g.
virtual QgsWkbTypes::Type wkbType() const =0
Returns the geometry type for features returned by this source.
An interface for objects which accept features via addFeature(s) methods.
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.
Container of fields for a vector layer.
Definition: qgsfields.h:44
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:123
Abstract base class for spatial data provider implementations.
#define SIP_INOUT
Definition: qgis_sip.h:71
virtual QString translateMetadataValue(const QString &mdKey, const QVariant &value) const
Gets the translated metadata value.
const QgsAttributeList & attributeIndexes
Base class for feedback objects to be used for cancellation of something running in a worker thread...
Definition: qgsfeedback.h:43
virtual bool doesStrictFeatureTypeCheck() const
Returns true if the provider is strict about the type of inserted features (e.g.
QSet< int > QgsAttributeIds
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:68
virtual QString lastError() const
Returns the most recent error encountered by the sink, e.g.
virtual QVariant minimumValue(int fieldIndex) const
Returns the minimum value for an attribute column or an invalid variant in case of error...
QString sourceName() const override
Returns a friendly display name for the source.
#define SIP_SKIP
Definition: qgis_sip.h:126
const QString & typeName
NativeType(const QString &typeDesc, const QString &typeName, QVariant::Type type, int minLen=0, int maxLen=0, int minPrec=0, int maxPrec=0, QVariant::Type subType=QVariant::Invalid)
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
virtual QString translateMetadataKey(const QString &mdKey) const
Gets the translated metadata key.
Capability
enumeration with capabilities that providers might implement
This class wraps a request for features to a vector layer (or directly its vector data provider)...
virtual bool deleteFeatures(const QgsFeatureIds &fid)
Deletes a set of features from the layer (but does not commit it)
#define SIP_FACTORY
Definition: qgis_sip.h:76
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:49
virtual bool changeAttributeValues(QgsFeatureId fid, const QgsAttributeMap &newValues, const QgsAttributeMap &oldValues)
Changes values of attributes (but does not commit it).
Base class that can be used for any class that is capable of returning features.
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
QMap< int, QString > QgsFieldNameMap
Definition: qgsattributes.h:44
virtual QgsCoordinateReferenceSystem sourceCrs() const =0
Returns the coordinate reference system for features in the source.
Setting options for creating vector data providers.
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:558
An interface for objects which provide features via a getFeatures method.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
#define SIP_OUT
Definition: qgis_sip.h:58
This class represents a coordinate reference system (CRS).
Abstract base class - its implementations define different approaches to the labeling of a vector lay...
Implementation of data provider temporal properties for QgsVectorDataProviders.
virtual QVariant maximumValue(int fieldIndex) const
Returns the maximum value for an attribute column or an invalid variant in case of error...
virtual void enumValues(int index, QStringList &enumList) const
Returns the possible enum values of an attribute.
QList< int > QgsAttributeList
Definition: qgsfield.h:26
This is the base class for vector data providers.
Represents a vector layer which manages a vector based data sets.
virtual FeatureAvailability hasFeatures() const
Determines if there are any features available in the source.
QHash< int, QString > QgsAttrPalIndexNameHash
const QgsField & field
Definition: qgsfield.h:448
virtual bool hasMetadata() const
Returns true if the data source has metadata, false otherwise.
Aggregate
Available aggregates to calculate.
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const =0
Returns an iterator for the features in the source.
A bundle of parameters controlling aggregate calculation.
FeatureCountState
Enumeration of feature count states.
virtual long featureCount() const =0
Returns the number of features contained in the source, or -1 if the feature count is unknown...
virtual QVariantMap metadata() const
Gets metadata, dependent on the provider type, that will be display in the metadata tab of the layer ...