QGIS API Documentation 3.43.0-Master (c67cf405802)
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 : marco.hugentobler@autoform.ch
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
56class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider, public QgsFeatureSink, public QgsFeatureSource
57{
58 Q_OBJECT
59
60 friend class QgsTransaction;
62
63 public:
64
66 static const int EditingCapabilities = static_cast< int >( Qgis::VectorProviderCapability::EditingCapabilities );
67
75 QgsVectorDataProvider( const QString &uri = QString(),
78
95
99 virtual QString storageType() const;
100
106 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override = 0;
107
111 Qgis::WkbType wkbType() const override = 0;
112
117 long long featureCount() const override = 0;
118
124 virtual bool empty() const;
125
135 virtual bool isSqlQuery() const;
136
143 virtual Qgis::VectorLayerTypeFlags vectorLayerTypeFlags() const;
144
155 Qgis::FeatureAvailability hasFeatures() const override;
156
160 QgsFields fields() const override = 0;
161
163 QgsRectangle sourceExtent() const override;
164 QgsBox3D sourceExtent3D() const override;
165 QString sourceName() const override { return QString(); }
166
171 virtual QString dataComment() const override;
172
181 QVariant minimumValue( int index ) const override;
182
191 QVariant maximumValue( int index ) const override;
192
202 virtual QStringList uniqueStringsMatching( int index, const QString &substring, int limit = -1,
203 QgsFeedback *feedback = nullptr ) const;
204
216 virtual QVariant aggregate( Qgis::Aggregate aggregate,
217 int index,
219 QgsExpressionContext *context,
220 bool &ok,
221 QgsFeatureIds *fids = nullptr ) const;
222
229 virtual void enumValues( int index, QStringList &enumList SIP_OUT ) const { Q_UNUSED( index ) enumList.clear(); }
230
232 QString lastError() const override;
233
240 virtual bool deleteFeatures( const QgsFeatureIds &id );
241
248 virtual bool truncate();
249
256 virtual bool cancelReload();
257
263 virtual bool addAttributes( const QList<QgsField> &attributes );
264
272 virtual bool deleteAttributes( const QgsAttributeIds &attributes );
273
281 virtual bool renameAttributes( const QgsFieldNameMap &renamedAttributes );
282
291 virtual bool changeAttributeValues( const QgsChangedAttributesMap &attr_map );
292
304 virtual bool changeFeatures( const QgsChangedAttributesMap &attr_map,
305 const QgsGeometryMap &geometry_map );
306
318 virtual QVariant defaultValue( int fieldIndex ) const;
319
326 virtual QString defaultValueClause( int fieldIndex ) const;
327
333 QgsFieldConstraints::Constraints fieldConstraints( int fieldIndex ) const;
334
341 virtual bool skipConstraintCheck( int fieldIndex, QgsFieldConstraints::Constraint constraint, const QVariant &value = QVariant() ) const;
342
350 virtual bool changeGeometryValues( const QgsGeometryMap &geometry_map );
351
356 virtual bool createSpatialIndex();
357
359 virtual bool createAttributeIndex( int field );
360
369 Q_INVOKABLE virtual Qgis::VectorProviderCapabilities capabilities() const;
370
374 QString capabilitiesString() const;
375
382 virtual Qgis::VectorDataProviderAttributeEditCapabilities attributeEditCapabilities() const;
383
396 virtual void setEncoding( const QString &e );
397
403 QString encoding() const;
404
408 int fieldNameIndex( const QString &fieldName ) const;
409
413 QMap<QString, int> fieldNameMap() const;
414
418 virtual QgsAttributeList attributeIndexes() const;
419
423 virtual QgsAttributeList pkAttributeIndexes() const;
424
430 virtual QString geometryColumnName() const;
431
437 Q_DECL_DEPRECATED QgsAttrPalIndexNameHash palAttributeIndexNames() const SIP_DEPRECATED;
438
442 bool supportedType( const QgsField &field ) const;
443
445 {
446 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 )
447 : mTypeDesc( typeDesc )
448 , mTypeName( typeName )
449 , mType( type )
450 , mMinLen( minLen )
451 , mMaxLen( maxLen )
452 , mMinPrec( minPrec )
453 , mMaxPrec( maxPrec )
454 , mSubType( subType )
455 {}
456
457 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 )
458 : mTypeDesc( typeDesc )
459 , mTypeName( typeName )
460 , mType( QgsVariantUtils::variantTypeToMetaType( type ) )
461 , mMinLen( minLen )
462 , mMaxLen( maxLen )
463 , mMinPrec( minPrec )
464 , mMaxPrec( maxPrec )
465 , mSubType( QgsVariantUtils::variantTypeToMetaType( subType ) ) SIP_DEPRECATED
466 {}
467
468
469 QString mTypeDesc;
470 QString mTypeName;
471 QMetaType::Type mType;
476 QMetaType::Type mSubType;
477 };
478
482 QList< QgsVectorDataProvider::NativeType > nativeTypes() const;
483
488 virtual bool doesStrictFeatureTypeCheck() const { return true; }
489
491 static QStringList availableEncodings();
492
496 bool hasErrors() const;
497
501 void clearErrors();
502
506 QStringList errors() const;
507
523 virtual QgsFeatureRenderer *createRenderer( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
524
540 virtual QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
541
545 static QVariant convertValue( QMetaType::Type type, const QString &value );
546
552 Q_DECL_DEPRECATED static QVariant convertValue( QVariant::Type type, const QString &value ) SIP_DEPRECATED;
553
557 virtual QgsTransaction *transaction() const;
558
562 Q_DECL_DEPRECATED virtual void forceReload() SIP_DEPRECATED { reloadData(); }
563
567 virtual QSet<QgsMapLayerDependency> dependencies() const;
568
575 virtual QList<QgsRelation> discoverRelations( const QgsVectorLayer *target, const QList<QgsVectorLayer *> &layers ) const;
576
581 virtual QVariantMap metadata() const { return QVariantMap(); }
582
588 virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
589
596 virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const { Q_UNUSED( mdKey ) return value.toString(); }
597
604 virtual bool hasMetadata() const { return true; }
605
612 virtual void handlePostCloneOperations( QgsVectorDataProvider *source );
613
616
617 QgsDataProviderElevationProperties *elevationProperties() override;
618 const QgsDataProviderElevationProperties *elevationProperties() const override SIP_SKIP;
619
620 signals:
621
626 void raiseError( const QString &msg ) const;
627
628 protected:
629
634 void clearMinMaxCache();
635
639 void fillMinMaxCache() const;
640
649 void pushError( const QString &msg ) const;
650
656 QgsGeometry convertToProviderType( const QgsGeometry &geom ) const;
657
663 void setNativeTypes( const QList<QgsVectorDataProvider::NativeType> &nativeTypes );
664
665#ifdef SIP_PYQT5_RUN
666
671 QTextCodec *textEncoding() const;
672#endif
673
679 static QgsGeometry convertToProviderType( const QgsGeometry &geometry, Qgis::WkbType providerGeometryType );
680
681
682 private:
683 mutable bool mCacheMinMaxDirty = true;
684 mutable QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
685
687 QTextCodec *mEncoding = nullptr;
688
690 QgsAttributeList mAttributesToFetch;
691
693 QList< NativeType > mNativeTypes;
694
696 mutable QStringList mErrors;
697
698 std::unique_ptr< QgsVectorDataProviderTemporalCapabilities > mTemporalCapabilities;
699 std::unique_ptr< QgsDataProviderElevationProperties > mElevationProperties;
700
701 static QStringList sEncodings;
702
706 virtual void setTransaction( QgsTransaction * /*transaction*/ ) {}
707};
708
709#endif
@ EditingCapabilities
Bitmask of all editing capabilities.
QFlags< VectorLayerTypeFlag > VectorLayerTypeFlags
Vector layer type flags.
Definition qgis.h:395
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:450
FeatureAvailability
Possible return value for QgsFeatureSource::hasFeatures() to determine if a source is empty.
Definition qgis.h:541
QFlags< VectorProviderCapability > VectorProviderCapabilities
Vector data provider capabilities.
Definition qgis.h:500
Aggregate
Available aggregates to calculate.
Definition qgis.h:5596
QFlags< VectorDataProviderAttributeEditCapability > VectorDataProviderAttributeEditCapabilities
Attribute editing capabilities which may be supported by vector data providers.
Definition qgis.h:566
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:256
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
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....
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.
Abstract base class for all 2D vector feature renderers.
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 QgsCoordinateReferenceSystem sourceCrs() const =0
Returns the coordinate reference system for features in the source.
virtual Qgis::FeatureAvailability hasFeatures() const
Determines if there are any features available in the source.
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.
virtual QgsRectangle sourceExtent() const
Returns the extent of all geometries from the source.
virtual QgsBox3D sourceExtent3D() const
Returns the 3D extent of all geometries from the source.
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.
Allows creation of a multi-layer database-side transaction.
Contains utility functions for working with QVariants and QVariant types.
Implementation of data provider temporal properties for QgsVectorDataProviders.
Base class for vector data providers.
virtual void enumValues(int index, QStringList &enumList) const
Returns the possible enum values of an attribute.
QString sourceName() const override
Returns a friendly display name for the source.
virtual QString translateMetadataValue(const QString &mdKey, const QVariant &value) const
Gets the translated metadata value.
long long featureCount() const override=0
Number of features in the layer.
virtual bool doesStrictFeatureTypeCheck() const
Returns true if the provider is strict about the type of inserted features (e.g.
virtual QgsAbstractFeatureSource * featureSource() const =0
Returns feature source object that can be used for querying provider's data.
virtual bool hasMetadata() const
Returns true if the data source has metadata, false otherwise.
QgsFields fields() const override=0
Returns the fields associated with this data provider.
Qgis::WkbType wkbType() const override=0
Returns the geometry type which is returned by this layer.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const override=0
Query the provider for features specified in request.
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 ...
Stores queued vector layer edit operations prior to committing changes to the layer's data provider.
Represents a vector layer which manages a vector based dataset.
#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
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
QList< QgsFeature > QgsFeatureList
QSet< QgsFeatureId > QgsFeatureIds
QList< int > QgsAttributeList
Definition qgsfield.h:27
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)