QGIS API Documentation 3.39.0-Master (52f98f8c831)
Loading...
Searching...
No Matches
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(),
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
478 {
479 NativeType( const QString &typeDesc, const QString &typeName, QMetaType::Type type, int minLen = 0, int maxLen = 0, int minPrec = 0, int maxPrec = 0, QMetaType::Type subType = QMetaType::Type::UnknownType )
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 Q_DECL_DEPRECATED 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::Type::Invalid )
491 : mTypeDesc( typeDesc )
492 , mTypeName( typeName )
493 , mType( QgsVariantUtils::variantTypeToMetaType( type ) )
494 , mMinLen( minLen )
495 , mMaxLen( maxLen )
496 , mMinPrec( minPrec )
497 , mMaxPrec( maxPrec )
498 , mSubType( QgsVariantUtils::variantTypeToMetaType( subType ) ) SIP_DEPRECATED
499 {}
500
501
502 QString mTypeDesc;
503 QString mTypeName;
504 QMetaType::Type mType;
509 QMetaType::Type mSubType;
510 };
511
515 QList< QgsVectorDataProvider::NativeType > nativeTypes() const;
516
521 virtual bool doesStrictFeatureTypeCheck() const { return true; }
522
524 static QStringList availableEncodings();
525
529 bool hasErrors() const;
530
534 void clearErrors();
535
539 QStringList errors() const;
540
556 virtual QgsFeatureRenderer *createRenderer( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
557
573 virtual QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
574
578 static QVariant convertValue( QMetaType::Type type, const QString &value );
579
585 Q_DECL_DEPRECATED static QVariant convertValue( QVariant::Type type, const QString &value ) SIP_DEPRECATED;
586
590 virtual QgsTransaction *transaction() const;
591
595 Q_DECL_DEPRECATED virtual void forceReload() SIP_DEPRECATED { reloadData(); }
596
600 virtual QSet<QgsMapLayerDependency> dependencies() const;
601
608 virtual QList<QgsRelation> discoverRelations( const QgsVectorLayer *target, const QList<QgsVectorLayer *> &layers ) const;
609
614 virtual QVariantMap metadata() const { return QVariantMap(); }
615
621 virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
622
629 virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ) return value.toString(); }
630
637 virtual bool hasMetadata() const { return true; }
638
645 virtual void handlePostCloneOperations( QgsVectorDataProvider *source );
646
649
650 QgsDataProviderElevationProperties *elevationProperties() override;
651 const QgsDataProviderElevationProperties *elevationProperties() const override SIP_SKIP;
652
653 signals:
654
659 void raiseError( const QString &msg ) const;
660
661 protected:
662
667 void clearMinMaxCache();
668
672 void fillMinMaxCache() const;
673
682 void pushError( const QString &msg ) const;
683
689 QgsGeometry convertToProviderType( const QgsGeometry &geom ) const;
690
696 void setNativeTypes( const QList<QgsVectorDataProvider::NativeType> &nativeTypes );
697
698#ifdef SIP_PYQT5_RUN
699
704 QTextCodec *textEncoding() const;
705#endif
706
712 static QgsGeometry convertToProviderType( const QgsGeometry &geometry, Qgis::WkbType providerGeometryType );
713
714
715 private:
716 mutable bool mCacheMinMaxDirty = true;
717 mutable QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
718
720 QTextCodec *mEncoding = nullptr;
721
723 QgsAttributeList mAttributesToFetch;
724
726 QList< NativeType > mNativeTypes;
727
729 mutable QStringList mErrors;
730
731 std::unique_ptr< QgsVectorDataProviderTemporalCapabilities > mTemporalCapabilities;
732 std::unique_ptr< QgsDataProviderElevationProperties > mElevationProperties;
733
734 static QStringList sEncodings;
735
739 virtual void setTransaction( QgsTransaction * /*transaction*/ ) {}
740};
741
743
744#endif
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
Aggregate
Available aggregates to calculate.
Definition qgis.h:4969
QFlags< VectorDataProviderAttributeEditCapability > VectorDataProviderAttributeEditCapabilities
Attribute editing capabilities which may be supported by vector data providers.
Definition qgis.h:412
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:201
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.
virtual bool addFeatures(QgsFeatureList &features, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())=0
Adds a list of features to the sink.
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:46
A geometry is the spatial representation of a feature.
A rectangle specified with double values.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
Contains utility functions for working with QVariants and QVariant types.
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 ...
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
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
QList< QgsFeature > QgsFeatureList
QSet< QgsFeatureId > QgsFeatureIds
QList< int > QgsAttributeList
Definition qgsfield.h:27
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)
QList< int > QgsAttributeList
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, QMetaType::Type type, int minLen=0, int maxLen=0, int minPrec=0, int maxPrec=0, QMetaType::Type subType=QMetaType::Type::UnknownType)
Q_DECL_DEPRECATED 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::Type::Invalid)