QGIS API Documentation  3.23.0-Master (eb871beae0)
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  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(),
117  QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
118 
135  virtual QgsAbstractFeatureSource *featureSource() const = 0 SIP_FACTORY;
136 
140  virtual QString storageType() const;
141 
147  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override = 0;
148 
152  QgsWkbTypes::Type wkbType() const override = 0;
153 
158  long long featureCount() const override = 0;
159 
165  virtual bool empty() const;
166 
176  virtual bool isSqlQuery() const;
177 
184  virtual Qgis::VectorLayerTypeFlags vectorLayerTypeFlags() const;
185 
196  QgsFeatureSource::FeatureAvailability hasFeatures() const override;
197 
201  QgsFields fields() const override = 0;
202 
203  QgsCoordinateReferenceSystem sourceCrs() const override;
204  QgsRectangle sourceExtent() 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 
257  virtual QVariant aggregate( QgsAggregateCalculator::Aggregate aggregate,
258  int index,
260  QgsExpressionContext *context,
261  bool &ok,
262  QgsFeatureIds *fids = nullptr ) const;
263 
270  virtual void enumValues( int index, QStringList &enumList SIP_OUT ) const { Q_UNUSED( index ) enumList.clear(); }
271 
272  bool addFeatures( QgsFeatureList &flist SIP_INOUT, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
273  QString lastError() const override;
274 
281  virtual bool deleteFeatures( const QgsFeatureIds &id );
282 
290  virtual bool truncate();
291 
298  virtual bool cancelReload();
299 
305  virtual bool addAttributes( const QList<QgsField> &attributes );
306 
314  virtual bool deleteAttributes( const QgsAttributeIds &attributes );
315 
324  virtual bool renameAttributes( const QgsFieldNameMap &renamedAttributes );
325 
334  virtual bool changeAttributeValues( const QgsChangedAttributesMap &attr_map );
335 
347  virtual bool changeFeatures( const QgsChangedAttributesMap &attr_map,
348  const QgsGeometryMap &geometry_map );
349 
361  virtual QVariant defaultValue( int fieldIndex ) const;
362 
370  virtual QString defaultValueClause( int fieldIndex ) const;
371 
378  QgsFieldConstraints::Constraints fieldConstraints( int fieldIndex ) const;
379 
387  virtual bool skipConstraintCheck( int fieldIndex, QgsFieldConstraints::Constraint constraint, const QVariant &value = QVariant() ) const;
388 
396  virtual bool changeGeometryValues( const QgsGeometryMap &geometry_map );
397 
402  virtual bool createSpatialIndex();
403 
405  virtual bool createAttributeIndex( int field );
406 
413  Q_INVOKABLE virtual QgsVectorDataProvider::Capabilities capabilities() const;
414 
418  QString capabilitiesString() const;
419 
432  virtual void setEncoding( const QString &e );
433 
439  QString encoding() const;
440 
444  int fieldNameIndex( const QString &fieldName ) const;
445 
449  QMap<QString, int> fieldNameMap() const;
450 
454  virtual QgsAttributeList attributeIndexes() const;
455 
459  virtual QgsAttributeList pkAttributeIndexes() const;
460 
464  virtual QgsAttrPalIndexNameHash palAttributeIndexNames() const;
465 
469  bool supportedType( const QgsField &field ) const;
470 
471  struct NativeType
472  {
473  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 )
474  : mTypeDesc( typeDesc )
475  , mTypeName( typeName )
476  , mType( type )
477  , mMinLen( minLen )
478  , mMaxLen( maxLen )
479  , mMinPrec( minPrec )
480  , mMaxPrec( maxPrec )
481  , mSubType( subType )
482  {}
483 
484  QString mTypeDesc;
485  QString mTypeName;
486  QVariant::Type mType;
487  int mMinLen;
488  int mMaxLen;
489  int mMinPrec;
490  int mMaxPrec;
491  QVariant::Type mSubType;
492  };
493 
497  QList< QgsVectorDataProvider::NativeType > nativeTypes() const;
498 
503  virtual bool doesStrictFeatureTypeCheck() const { return true; }
504 
506  static QStringList availableEncodings();
507 
511  bool hasErrors() const;
512 
516  void clearErrors();
517 
521  QStringList errors() const;
522 
527  virtual bool isSaveAndLoadStyleToDatabaseSupported() const;
528 
533  virtual bool isDeleteStyleFromDatabaseSupported() const;
534 
550  virtual QgsFeatureRenderer *createRenderer( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
551 
567  virtual QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
568 
569  static QVariant convertValue( QVariant::Type type, const QString &value );
570 
574  virtual QgsTransaction *transaction() const;
575 
579  Q_DECL_DEPRECATED virtual void forceReload() SIP_DEPRECATED { reloadData(); }
580 
584  virtual QSet<QgsMapLayerDependency> dependencies() const;
585 
593  virtual QList<QgsRelation> discoverRelations( const QgsVectorLayer *target, const QList<QgsVectorLayer *> &layers ) const;
594 
599  virtual QVariantMap metadata() const { return QVariantMap(); }
600 
606  virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
607 
614  virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ) return value.toString(); }
615 
623  virtual bool hasMetadata() const { return true; }
624 
631  virtual void handlePostCloneOperations( QgsVectorDataProvider *source );
632 
635 
636  signals:
637 
643  void raiseError( const QString &msg ) const;
644 
645  protected:
646 
651  void clearMinMaxCache();
652 
656  void fillMinMaxCache() const;
657 
667  void pushError( const QString &msg ) const;
668 
673  QgsGeometry convertToProviderType( const QgsGeometry &geom ) const;
674 
681  void setNativeTypes( const QList<QgsVectorDataProvider::NativeType> &nativeTypes );
682 
688  QTextCodec *textEncoding() const;
689 
690  private:
691  mutable bool mCacheMinMaxDirty = true;
692  mutable QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
693 
695  QTextCodec *mEncoding = nullptr;
696 
698  QgsAttributeList mAttributesToFetch;
699 
701  QList< NativeType > mNativeTypes;
702 
704  mutable QStringList mErrors;
705 
706  std::unique_ptr< QgsVectorDataProviderTemporalCapabilities > mTemporalCapabilities;
707 
708  static QStringList sEncodings;
709 
713  virtual void setTransaction( QgsTransaction * /*transaction*/ ) {}
714 };
715 
716 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsVectorDataProvider::Capabilities )
717 
718 #endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:64
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...
Aggregate
Available aggregates to calculate.
This class represents a coordinate reference system (CRS).
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....
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.
An interface for objects which provide features via a getFeatures method.
FeatureAvailability
Possible return value for hasFeatures() to determine if a source is empty.
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:45
Constraint
Constraints which may be present on a field.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:51
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
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.
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.
Handles storage of information regarding WKB types and their properties.
Definition: qgswkbtypes.h:42
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:79
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#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:44
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:829
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:820
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:834
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
QList< int > QgsAttributeList
Definition: qgsfield.h:26
const QgsField & field
Definition: qgsfield.h:463
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.
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)