QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
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 
72  enum Capability SIP_ENUM_BASETYPE( IntFlag )
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  ReloadData = 1 << 26,
98  FeatureSymbology = 1 << 27,
99  };
100 
101  Q_DECLARE_FLAGS( Capabilities, Capability )
102 
103 
104  static const int EditingCapabilities = AddFeatures | DeleteFeatures |
105  ChangeAttributeValues | ChangeGeometries | AddAttributes | DeleteAttributes |
106  RenameAttributes;
107 
115  QgsVectorDataProvider( const QString &uri = QString(),
116  const QgsDataProvider::ProviderOptions &providerOptions = QgsDataProvider::ProviderOptions(),
118 
134  virtual QgsAbstractFeatureSource *featureSource() const = 0 SIP_FACTORY;
135 
139  virtual QString storageType() const;
140 
146  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override = 0;
147 
151  Qgis::WkbType wkbType() const override = 0;
152 
157  long long featureCount() const override = 0;
158 
164  virtual bool empty() const;
165 
175  virtual bool isSqlQuery() const;
176 
183  virtual Qgis::VectorLayerTypeFlags vectorLayerTypeFlags() const;
184 
195  Qgis::FeatureAvailability hasFeatures() const override;
196 
200  QgsFields fields() const override = 0;
201 
202  QgsCoordinateReferenceSystem sourceCrs() const override;
203  QgsRectangle sourceExtent() const override;
204  QgsBox3D sourceExtent3D() const override;
205  QString sourceName() const override { return QString(); }
206 
211  virtual QString dataComment() const override;
212 
221  QVariant minimumValue( int index ) const override;
222 
231  QVariant maximumValue( int index ) const override;
232 
242  virtual QStringList uniqueStringsMatching( int index, const QString &substring, int limit = -1,
243  QgsFeedback *feedback = nullptr ) const;
244 
256  virtual QVariant aggregate( Qgis::Aggregate aggregate,
257  int index,
259  QgsExpressionContext *context,
260  bool &ok,
261  QgsFeatureIds *fids = nullptr ) const;
262 
269  virtual void enumValues( int index, QStringList &enumList SIP_OUT ) const { Q_UNUSED( index ) enumList.clear(); }
270 
272  QString lastError() const override;
273 
280  virtual bool deleteFeatures( const QgsFeatureIds &id );
281 
288  virtual bool truncate();
289 
296  virtual bool cancelReload();
297 
303  virtual bool addAttributes( const QList<QgsField> &attributes );
304 
312  virtual bool deleteAttributes( const QgsAttributeIds &attributes );
313 
321  virtual bool renameAttributes( const QgsFieldNameMap &renamedAttributes );
322 
331  virtual bool changeAttributeValues( const QgsChangedAttributesMap &attr_map );
332 
344  virtual bool changeFeatures( const QgsChangedAttributesMap &attr_map,
345  const QgsGeometryMap &geometry_map );
346 
358  virtual QVariant defaultValue( int fieldIndex ) const;
359 
366  virtual QString defaultValueClause( int fieldIndex ) const;
367 
373  QgsFieldConstraints::Constraints fieldConstraints( int fieldIndex ) const;
374 
381  virtual bool skipConstraintCheck( int fieldIndex, QgsFieldConstraints::Constraint constraint, const QVariant &value = QVariant() ) const;
382 
390  virtual bool changeGeometryValues( const QgsGeometryMap &geometry_map );
391 
396  virtual bool createSpatialIndex();
397 
399  virtual bool createAttributeIndex( int field );
400 
409  Q_INVOKABLE virtual QgsVectorDataProvider::Capabilities capabilities() const;
410 
414  QString capabilitiesString() const;
415 
422  virtual Qgis::VectorDataProviderAttributeEditCapabilities attributeEditCapabilities() const;
423 
436  virtual void setEncoding( const QString &e );
437 
443  QString encoding() const;
444 
448  int fieldNameIndex( const QString &fieldName ) const;
449 
453  QMap<QString, int> fieldNameMap() const;
454 
458  virtual QgsAttributeList attributeIndexes() const;
459 
463  virtual QgsAttributeList pkAttributeIndexes() const;
464 
470  Q_DECL_DEPRECATED QgsAttrPalIndexNameHash palAttributeIndexNames() const SIP_DEPRECATED;
471 
475  bool supportedType( const QgsField &field ) const;
476 
477  struct NativeType
478  {
479  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 )
480  : mTypeDesc( typeDesc )
481  , mTypeName( typeName )
482  , mType( type )
483  , mMinLen( minLen )
484  , mMaxLen( maxLen )
485  , mMinPrec( minPrec )
486  , mMaxPrec( maxPrec )
487  , mSubType( subType )
488  {}
489 
490  QString mTypeDesc;
491  QString mTypeName;
492  QVariant::Type mType;
493  int mMinLen;
494  int mMaxLen;
495  int mMinPrec;
496  int mMaxPrec;
497  QVariant::Type mSubType;
498  };
499 
503  QList< QgsVectorDataProvider::NativeType > nativeTypes() const;
504 
509  virtual bool doesStrictFeatureTypeCheck() const { return true; }
510 
512  static QStringList availableEncodings();
513 
517  bool hasErrors() const;
518 
522  void clearErrors();
523 
527  QStringList errors() const;
528 
544  virtual QgsFeatureRenderer *createRenderer( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
545 
561  virtual QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
562 
563  static QVariant convertValue( QVariant::Type type, const QString &value );
564 
568  virtual QgsTransaction *transaction() const;
569 
573  Q_DECL_DEPRECATED virtual void forceReload() SIP_DEPRECATED { reloadData(); }
574 
578  virtual QSet<QgsMapLayerDependency> dependencies() const;
579 
586  virtual QList<QgsRelation> discoverRelations( const QgsVectorLayer *target, const QList<QgsVectorLayer *> &layers ) const;
587 
592  virtual QVariantMap metadata() const { return QVariantMap(); }
593 
599  virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
600 
607  virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ) return value.toString(); }
608 
615  virtual bool hasMetadata() const { return true; }
616 
623  virtual void handlePostCloneOperations( QgsVectorDataProvider *source );
624 
627 
628  QgsDataProviderElevationProperties *elevationProperties() override;
629  const QgsDataProviderElevationProperties *elevationProperties() const override SIP_SKIP;
630 
631  signals:
632 
637  void raiseError( const QString &msg ) const;
638 
639  protected:
640 
645  void clearMinMaxCache();
646 
650  void fillMinMaxCache() const;
651 
660  void pushError( const QString &msg ) const;
661 
667  QgsGeometry convertToProviderType( const QgsGeometry &geom ) const;
668 
674  void setNativeTypes( const QList<QgsVectorDataProvider::NativeType> &nativeTypes );
675 
676 #ifdef SIP_PYQT5_RUN
677 
682  QTextCodec *textEncoding() const;
683 #endif
684 
690  static QgsGeometry convertToProviderType( const QgsGeometry &geometry, Qgis::WkbType providerGeometryType );
691 
692 
693  private:
694  mutable bool mCacheMinMaxDirty = true;
695  mutable QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
696 
698  QTextCodec *mEncoding = nullptr;
699 
701  QgsAttributeList mAttributesToFetch;
702 
704  QList< NativeType > mNativeTypes;
705 
707  mutable QStringList mErrors;
708 
709  std::unique_ptr< QgsVectorDataProviderTemporalCapabilities > mTemporalCapabilities;
710  std::unique_ptr< QgsDataProviderElevationProperties > mElevationProperties;
711 
712  static QStringList sEncodings;
713 
717  virtual void setTransaction( QgsTransaction * /*transaction*/ ) {}
718 };
719 
721 
722 #endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:54
Aggregate
Available aggregates to calculate.
Definition: qgis.h:4681
QFlags< VectorDataProviderAttributeEditCapability > VectorDataProviderAttributeEditCapabilities
Attribute editing capabilities which may be supported by vector data providers.
Definition: qgis.h:393
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition: qgis.h:182
Base class that can be used for any class that is capable of returning features.
Abstract base class - its implementations define different approaches to the labeling of a vector lay...
A 3-dimensional box composed of x, y, z coordinates.
Definition: qgsbox3d.h:43
This class represents a coordinate reference system (CRS).
Base class for handling elevation related properties for a data provider.
Abstract base class for spatial data provider implementations.
virtual QString dataComment() const
Returns a short comment for the data that this provider is providing access to (e....
QFlags< ReadFlag > ReadFlags
virtual QgsDataProviderTemporalCapabilities * temporalCapabilities()
Returns the provider's temporal capabilities.
virtual void reloadData()
Reloads the data from the source for providers with data caches to synchronize, changes in the data s...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Wrapper for iterator of features from vector data provider or vector layer.
This class wraps a request for features to a vector layer (or directly its vector data provider).
An interface for objects which accept features via addFeature(s) methods.
virtual QString lastError() const
Returns the most recent error encountered by the sink, e.g.
QFlags< Flag > Flags
An interface for objects which provide features via a getFeatures method.
virtual QVariant minimumValue(int fieldIndex) const
Returns the minimum value for an attribute column or an invalid variant in case of error.
virtual QVariant maximumValue(int fieldIndex) const
Returns the maximum value for an attribute column or an invalid variant in case of error.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:44
Constraint
Constraints which may be present on a field.
QFlags< Constraint > Constraints
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:53
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:162
A rectangle specified with double values.
Definition: qgsrectangle.h:42
This class allows including a set of layers in a database-side transaction, provided the layer data p...
Implementation of data provider temporal properties for QgsVectorDataProviders.
This is the base class for vector data providers.
virtual void enumValues(int index, QStringList &enumList) const
Returns the possible enum values of an attribute.
Capability
enumeration with capabilities that providers might implement
virtual QString translateMetadataValue(const QString &mdKey, const QVariant &value) const
Gets the translated metadata value.
virtual bool doesStrictFeatureTypeCheck() const
Returns true if the provider is strict about the type of inserted features (e.g.
QFlags< Capability > Capabilities
virtual bool hasMetadata() const
Returns true if the data source has metadata, false otherwise.
virtual QString translateMetadataKey(const QString &mdKey) const
Gets the translated metadata key.
virtual QVariantMap metadata() const
Gets metadata, dependent on the provider type, that will be display in the metadata tab of the layer ...
virtual bool deleteFeatures(const QgsFeatureIds &fid)
Deletes a set of features from the layer (but does not commit it)
virtual bool addFeatures(QgsFeatureList &features)
Insert a copy of the given features into the layer (but does not commit it)
virtual bool changeAttributeValues(QgsFeatureId fid, const QgsAttributeMap &newValues, const QgsAttributeMap &oldValues)
Changes values of attributes (but does not commit it).
Represents a vector layer which manages a vector based data sets.
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_ENUM_BASETYPE(type)
Definition: qgis_sip.h:278
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_INOUT
Definition: qgis_sip.h:71
QMap< int, QString > QgsFieldNameMap
Definition: qgsattributes.h:45
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:912
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:903
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:917
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
QList< int > QgsAttributeList
Definition: qgsfield.h:27
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)
QSet< int > QgsAttributeIds
QHash< int, QString > QgsAttrPalIndexNameHash
const QString & typeName
const QgsAttributeList & attributeIndexes
A bundle of parameters controlling aggregate calculation.
Setting options for creating vector data providers.
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)