QGIS API Documentation 3.32.0-Lima (311a8cb8a6)
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
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
18class 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"
32#include "qgsrelation.h"
33#include "qgsfeaturesink.h"
34#include "qgsfeaturesource.h"
35#include "qgsfeaturerequest.h"
37
38typedef QList<int> QgsAttributeList SIP_SKIP;
39typedef QSet<int> QgsAttributeIds SIP_SKIP;
40typedef QHash<int, QString> QgsAttrPalIndexNameHash;
41
43class QgsTransaction;
44class QgsFeedback;
47
48
58class 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(),
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 Qgis::WkbType 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
415 Q_INVOKABLE virtual QgsVectorDataProvider::Capabilities capabilities() const;
416
420 QString capabilitiesString() const;
421
428 virtual Qgis::VectorDataProviderAttributeEditCapabilities attributeEditCapabilities() const;
429
442 virtual void setEncoding( const QString &e );
443
449 QString encoding() const;
450
454 int fieldNameIndex( const QString &fieldName ) const;
455
459 QMap<QString, int> fieldNameMap() const;
460
464 virtual QgsAttributeList attributeIndexes() const;
465
469 virtual QgsAttributeList pkAttributeIndexes() const;
470
476 Q_DECL_DEPRECATED QgsAttrPalIndexNameHash palAttributeIndexNames() const SIP_DEPRECATED;
477
481 bool supportedType( const QgsField &field ) const;
482
484 {
485 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 )
486 : mTypeDesc( typeDesc )
487 , mTypeName( typeName )
488 , mType( type )
489 , mMinLen( minLen )
490 , mMaxLen( maxLen )
491 , mMinPrec( minPrec )
492 , mMaxPrec( maxPrec )
493 , mSubType( subType )
494 {}
495
496 QString mTypeDesc;
497 QString mTypeName;
498 QVariant::Type mType;
503 QVariant::Type mSubType;
504 };
505
509 QList< QgsVectorDataProvider::NativeType > nativeTypes() const;
510
515 virtual bool doesStrictFeatureTypeCheck() const { return true; }
516
518 static QStringList availableEncodings();
519
523 bool hasErrors() const;
524
528 void clearErrors();
529
533 QStringList errors() const;
534
539 virtual bool isSaveAndLoadStyleToDatabaseSupported() const;
540
545 virtual bool isDeleteStyleFromDatabaseSupported() const;
546
562 virtual QgsFeatureRenderer *createRenderer( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
563
579 virtual QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
580
581 static QVariant convertValue( QVariant::Type type, const QString &value );
582
586 virtual QgsTransaction *transaction() const;
587
591 Q_DECL_DEPRECATED virtual void forceReload() SIP_DEPRECATED { reloadData(); }
592
596 virtual QSet<QgsMapLayerDependency> dependencies() const;
597
605 virtual QList<QgsRelation> discoverRelations( const QgsVectorLayer *target, const QList<QgsVectorLayer *> &layers ) const;
606
611 virtual QVariantMap metadata() const { return QVariantMap(); }
612
618 virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
619
626 virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ) return value.toString(); }
627
635 virtual bool hasMetadata() const { return true; }
636
643 virtual void handlePostCloneOperations( QgsVectorDataProvider *source );
644
647
648 signals:
649
655 void raiseError( const QString &msg ) const;
656
657 protected:
658
663 void clearMinMaxCache();
664
668 void fillMinMaxCache() const;
669
679 void pushError( const QString &msg ) const;
680
685 QgsGeometry convertToProviderType( const QgsGeometry &geom ) const;
686
693 void setNativeTypes( const QList<QgsVectorDataProvider::NativeType> &nativeTypes );
694
700 QTextCodec *textEncoding() const;
701
702 private:
703 mutable bool mCacheMinMaxDirty = true;
704 mutable QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
705
707 QTextCodec *mEncoding = nullptr;
708
710 QgsAttributeList mAttributesToFetch;
711
713 QList< NativeType > mNativeTypes;
714
716 mutable QStringList mErrors;
717
718 std::unique_ptr< QgsVectorDataProviderTemporalCapabilities > mTemporalCapabilities;
719
720 static QStringList sEncodings;
721
725 virtual void setTransaction( QgsTransaction * /*transaction*/ ) {}
726};
727
728Q_DECLARE_OPERATORS_FOR_FLAGS( QgsVectorDataProvider::Capabilities )
729
730#endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:54
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:53
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:164
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.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:74
#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:45
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:915
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:906
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:920
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
QList< int > QgsAttributeList
Definition: qgsfield.h:27
const QgsField & field
Definition: qgsfield.h:554
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)